精华内容
下载资源
问答
  • 集群搭建

    万次阅读 2017-08-12 13:34:55
    4. 集群搭建 4.1 HADOOP集群搭建 4.1.1集群简介 HADOOP集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起 HDFS集群: 负责海量数据的存储,集群中的角色主要有 NameNode / DataNode ...
    4. 集群搭建
    

    4.1 HADOOP集群搭建

    4.1.1集群简介

    HADOOP集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起

    HDFS集群:

    负责海量数据的存储,集群中的角色主要有 NameNode / DataNode

    YARN集群:

    负责海量数据运算时的资源调度,集群中的角色主要有 ResourceManager /NodeManager

    (mapreduce是什么呢?它其实是一个应用程序开发包)

     

    本集群搭建案例,以5节点为例进行搭建,角色分配如下:

    hdp-node-01    NameNode  SecondaryNameNode

    hdp-node-02    ResourceManager

    hdp-node-03 DataNode    NodeManager

    hdp-node-04 DataNode    NodeManager

    hdp-node-05 DataNode    NodeManager

    部署图如下:

     

     

    4.1.2服务器准备

    本案例使用虚拟机服务器来搭建HADOOP集群,所用软件及版本:

    ü Vmware 11.0

    ü Centos  6.5  64bit

     

    4.1.3网络环境准备

    ü 采用NAT方式联网

    ü 网关地址:192.168.33.1

    ü 3个服务器节点IP地址:192.168.33.101192.168.33.102192.168.33.103

    ü 子网掩码:255.255.255.0

    4.1.4服务器系统设置

    ü 添加HADOOP用户

    ü HADOOP用户分配sudoer权限

    ü 同步时间

    ü 设置主机名

    n hdp-node-01

    n hdp-node-02

    n hdp-node-03

    ü 配置内网域名映射:

    n 192.168.33.101          hdp-node-01

    n 192.168.33.102          hdp-node-02

    n 192.168.33.103          hdp-node-03

    ü 配置ssh免密登陆

    ü 配置防火墙

     

    4.1.5 Jdk环境安装

    ü 上传jdk安装包

    ü 规划安装目录  /home/hadoop/apps/jdk_1.7.65

    ü 解压安装包

    ü 配置环境变量 /etc/profile

     

     

    4.1.6 HADOOP安装部署

    ü 上传HADOOP安装包

    ü 规划安装目录  /home/hadoop/apps/hadoop-2.6.1

    ü 解压安装包

    ü 修改配置文件  $HADOOP_HOME/etc/hadoop/

    最简化配置如下:

    vi  hadoop-env.sh

    # The java implementation to use.

    export JAVA_HOME=/home/hadoop/apps/jdk1.7.0_51

     

    vi  core-site.xml

    <configuration>

    <property>

    <name>fs.defaultFS</name>

    <value>hdfs://hdp-node-01:9000</value>

    </property>

    <property>

    <name>hadoop.tmp.dir</name>

    <value>/home/HADOOP/apps/hadoop-2.6.1/tmp</value>

    </property>

    </configuration>

    vi  hdfs-site.xml

    <configuration>

    <property>

    <name>dfs.namenode.name.dir</name>

    <value>/home/hadoop/data/name</value>

    </property>

    <property>

    <name>dfs.datanode.data.dir</name>

    <value>/home/hadoop/data/data</value>

    </property>

     

    <property>

    <name>dfs.replication</name>

    <value>3</value>

    </property>

     

    <property>

    <name>dfs.secondary.http.address</name>

    <value>hdp-node-01:50090</value>

    </property>

    </configuration>

     

     

     

    vi  mapred-site.xml

    <configuration>

    <property>

    <name>mapreduce.framework.name</name>

    <value>yarn</value>

    </property>

    </configuration>

     

    vi  yarn-site.xml

    <configuration>

    <property>

    <name>yarn.resourcemanager.hostname</name>

    <value>hadoop01</value>

    </property>

     

    <property>

    <name>yarn.nodemanager.aux-services</name>

    <value>mapreduce_shuffle</value>

    </property>

    </configuration>

     

    vi  salves

    hdp-node-01

    hdp-node-02

    hdp-node-03

     

     

    4.1.7 启动集群

    初始化HDFS

    bin/hadoop  namenode  -format

     

    启动HDFS

    sbin/start-dfs.sh

     

    启动YARN

    sbin/start-yarn.sh

    4.1.8 测试

    1、上传文件到HDFS

    从本地上传一个文本文件到hdfs/wordcount/input目录下

    [HADOOP@hdp-node-01 ~]$ HADOOP fs -mkdir -p /wordcount/input

    [HADOOP@hdp-node-01 ~]$ HADOOP fs -put /home/HADOOP/somewords.txt  /wordcount/input

     

    2、运行一个mapreduce程序

    HADOOP安装目录下,运行一个示例mr程序

    cd $HADOOP_HOME/share/hadoop/mapreduce/

    hadoop jar mapredcue-example-2.6.1.jar wordcount /wordcount/input  /wordcount/output

     

    展开全文
  • redis5.0.0集群搭建【实战经历】

    万次阅读 2020-06-04 19:50:42
    redis集群搭建 作者:陈土锋 时间:2020年6月2日 目录 一、环境介绍... 1 1、机器准备... 1 2、关闭防护墙和selinux. 1 3、时间同步... 1 二、Redis Cluster(Redis集群)简介... 2 三、集群搭建需要的环境...

    有问题可联系本人QQ:1016401546,备注来意,否则不加

    redis集群搭建

    作者:陈土锋

    时间:2020年6月2日

    目录

    一、环境介绍... 1

    1、机器准备... 1

    2、关闭防护墙和selinux. 1

    3、时间同步... 1

    二、Redis Cluster(Redis集群)简介... 2

    三、集群搭建需要的环境... 2

    四、集群搭建... 2

    1、所有服务器安装redis单点... 2

    2、修改redis配置... 3

    3、搭建集群... 6

    五、验证集群... 7

    1、检查集群状态... 7

    2、检查主从节点... 7

    3、启动集群验证增删改查... 7

    4、验证故障转移主从切换... 8

    4.1 原来175是slave,92是master:... 8

    4.2 停了192.168.20.92的master 9

    4.3 查看切换后的节点状态... 10

    六、重建集群... 10

    1、停了所有节点... 10

    2、删除相关配置... 10

    3、启动集群各个节点... 10

    4、重新执行创建集群命令... 10

    5、注意事项... 11

    5.1 dump.rdb. 11

    5.2 appendonly.aof(数据持久化)... 11

    5.3 nodes.conf 11

    七、redis-cluster常用命令... 12

    1、查看集群:... 12

    2、节点(node)  命令... 12

    3、槽(slot命令... 12

    4、键 (key) 命令... 13

    5、说明:redis-cli --cluster help. 13

    八、可能会遇到的报错... 15

     

     

    一、环境介绍

    1、机器准备 

                      ip

    系统类型

    主从关系

    CPU/内存

    数据盘目录大小

                      192.168.20.44

    redhat 7.6

    4核16G

    100G    /data

                     192.168.20.92

    redhat 7.6

    4核16G

    100G    /data

                     192.168.20.102

    redhat 7.6

    4核16G

    100G    /data

                     192.168.20.106

    redhat 7.6

    4核16G

    100G    /data

                     192.168.20.175

    redhat 7.6

    4核16G

    100G    /data

                    192.168.20.189

    redhat 7.6

    4核16G

    100G    /data

    CPU型号:Intel(R) Xeon(R) CPU E7-4820 v2 @ 2.00GHz 

    机器分配wiki地址:

    http://cmic.tools.bigcloudsys.cn/wiki/pages/viewpage.action?pageId=46084618

    2、关闭防护墙和selinux

    所有机器执行:

    systemctl stop firewalld
    systemctl disable firewalld
    systemctl status firewalld

    临时关闭:

    setenforce 0

    永久关闭:

    vim /etc/selinux/config
    SELINUX=disabled

     

    3、时间同步

     

     

     

    二、Redis Cluster(Redis集群)简介

     

        redis是一个开源的key value存储系统,受到了广大互联网公司的青睐。redis3.0版本之前只支持单例模式,在3.0版本及以后才支持集群,我这里用的是redis3.0.0版本;

        redis集群采用P2P模式,是完全去中心化的,不存在中心节点或者代理节点;

        redis集群是没有统一的入口的,客户端(client)连接集群的时候连接集群中的任意节点(node)即可,集群内部的节点是相互通信的(PING-PONG机制),每个节点都是一个redis实例;

        为了实现集群的高可用,即判断节点是否健康(能否正常使用),redis-cluster有这么一个投票容错机制:如果集群中超过半数的节点投票认为某个节点挂了,那么这个节点就挂了(fail)。这是判断节点是否挂了的方法;

        那么如何判断集群是否挂了呢? -> 如果集群中任意一个节点挂了,而且该节点没有从节点(备份节点),那么这个集群就挂了。这是判断集群是否挂了的方法;

        那么为什么任意一个节点挂了(没有从节点)这个集群就挂了呢? -> 因为集群内置了16384个slot(哈希槽),并且把所有的物理节点映射到了这16384[0-16383]个slot上,或者说把这些slot均等的分配给了各个节点。当需要在Redis集群存放一个数据(key-value)时,redis会先对这个key进行crc16算法,然后得到一个结果。再把这个结果对16384进行求余,这个余数会对应[0-16383]其中一个槽,进而决定key-value存储到哪个节点中。所以一旦某个节点挂了,该节点对应的slot就无法使用,那么就会导致集群无法正常工作。

        综上所述,每个Redis集群理论上最多可以有16384个节点。

     

    三、集群搭建需要的环境

    2.1 Redis集群至少需要3个节点,因为投票容错机制要求超过半数节点认为某个节点挂了该节点才是挂了,所以2个节点无法构成集群。

    2.2 要保证集群的高可用,需要每个节点都有从节点,也就是备份节点,所以Redis集群至少需要6台服务器。

    2.3 redis5.0以后,安装集群不在依赖ruby环境。直接使用集群配置的命令即可搭建。

    四、集群搭建

    1、所有服务器安装redis单点

    1.获取redis资源

    cd /usr/local

      wget http://download.redis.io/releases/redis-5.0.0.tar.gz

    2.解压

      tar xzvf redis-5.0.0.tar.gz

    3.安装

      cd redis-5.0.0

      make

      cd src

      make install PREFIX=/usr/local/redis

    4.移动配置文件到安装目录下

      cd /usr/local/redis

      mkdir /usr/local/redis/etc

    grep -Ev "^#|^$" /usr/local/redis-5.0.0/redis.conf >> /usr/local/redis/etc/redis.conf

     

    5.配置redis为后台启动

    vi /usr/local/redis/etc/redis.conf

    daemonize no 改成daemonize yes

    设置密码:requirepass 123456

    允许所有机器连接:bind 0.0.0.0

    6、添加redis命令到系统中

    vim /etc/profile

    export REDIS_HOME="/usr/local/redis"

    export REDIS_BIN=${REDIS_HOME}/bin

    export PATH=${REDIS_BIN}:${PATH}

    source /etc/profile

    7.将redis加入到开机启动

      vi /etc/rc.local //在里面添加内容:/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf (意思就是开机调用这段开启redis的命令)

    8.开启redis

    redis-server /usr/local/redis/etc/redis.conf 

    或者

      /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf 

    9、停止redis

    redis-cli  -p 6379 shutdown

    /usr/local/redis/bin/redis-cli -a 123456 -p 6379 shutdown

     

    2、修改redis配置

    以192.168.20.44为例:

    vim /usr/local/redis/etc/redis.conf 

    bind 0.0.0.0
    protected-mode yes
    port 6379
    tcp-backlog 511
    timeout 0
    tcp-keepalive 300
    daemonize yes
    supervised no
    pidfile /var/run/redis_6379.pid
    #打开集群
    cluster-enabled yes
    cluster-config-file /usr/local/redis/etc/redis_node.conf
    #节点互连超时时间,毫秒为单位
    cluster-node-timeout 5000  
    #开启主从切换,50s超时主从切换。
    cluster-require-full-coverage no
    cluster-slave-validity-factor 10
    #设置密码
    requirepass 123456
    #设置主从同步密码
    masterauth 123456
    loglevel notice
    logfile "/var/log/redis.log"
    databases 16
    always-show-logo yes
    #关闭rdb
    #save 900 1
    #save 300 10
    #save 60 10000
    stop-writes-on-bgsave-error yes
    rdbcompression yes
    rdbchecksum yes
    #dbfilename dump.rdb
    dir ./
    replica-serve-stale-data yes
    replica-read-only yes
    repl-diskless-sync no
    repl-diskless-sync-delay 5
    repl-disable-tcp-nodelay no
    replica-priority 100
    lazyfree-lazy-eviction no
    lazyfree-lazy-expire no
    lazyfree-lazy-server-del no
    replica-lazy-flush no
    #开启aof模式
    appendonly yes
    appendfilename "appendonly.aof"
    appendfsync everysec
    no-appendfsync-on-rewrite no
    auto-aof-rewrite-percentage 100
    auto-aof-rewrite-min-size 64mb
    aof-load-truncated yes
    aof-use-rdb-preamble yes
    lua-time-limit 5000
    slowlog-log-slower-than 10000
    slowlog-max-len 128
    latency-monitor-threshold 0
    notify-keyspace-events ""
    hash-max-ziplist-entries 512
    hash-max-ziplist-value 64
    list-max-ziplist-size -2
    list-compress-depth 0
    set-max-intset-entries 512
    zset-max-ziplist-entries 128
    zset-max-ziplist-value 64
    hll-sparse-max-bytes 3000
    stream-node-max-bytes 4096
    stream-node-max-entries 100
    activerehashing yes
    client-output-buffer-limit normal 0 0 0
    client-output-buffer-limit replica 256mb 64mb 60
    client-output-buffer-limit pubsub 32mb 8mb 60
    hz 10
    dynamic-hz yes
    aof-rewrite-incremental-fsync yes
    rdb-save-incremental-fsync yes

     

    其他节点的配置和上面一样即可。

     

    配置文件简要解析:

     我们即将创建示例集群部署。在继续之前,让我们介绍一下Redis Cluster在redis.conf文件中引入的配置参数。有些命令的意思是显而易见的,有些命令在你阅读下面的解释后才会更加清晰。

    1、cluster-enabled <yes/no>:如果想在特定的Redis实例中启用Redis群集支持就设置为yes。 否则,实例通常作为独立实例启动。
    2、cluster-config-file <filename>:请注意,尽管有此选项的名称,但这不是用户可编辑的配置文件,而是Redis群集节点每次发生更改时自动保留群集配置(基本上为状态)的文件,以便能够 在启动时重新读取它。 该文件列出了群集中其他节点,它们的状态,持久变量等等。 由于某些消息的接收,通常会将此文件重写并刷新到磁盘上。注意:该配置文件不是redis的原始配置文件!而是集群配置文件,名字自定义,创建集群会自动创建该配置文件。
    3、cluster-node-timeout <milliseconds>:Redis群集节点可以不可用的最长时间,而不会将其视为失败。 如果主节点超过指定的时间不可达,它将由其从属设备进行故障切换。 此参数控制Redis群集中的其他重要事项。 值得注意的是,每个无法在指定时间内到达大多数主节点的节点将停止接受查询。
    4、cluster-slave-validity-factor <factor>:如果设置为0,无论主设备和从设备之间的链路保持断开连接的时间长短,从设备都将尝试故障切换主设备。 如果该值为正值,则计算最大断开时间作为节点超时值乘以此选项提供的系数,如果该节点是从节点,则在主链路断开连接的时间超过指定的超时值时,它不会尝试启动故障切换。 例如,如果节点超时设置为5秒,并且有效因子设置为10,则与主设备断开连接超过50秒的从设备将不会尝试对其主设备进行故障切换。 请注意,如果没有从服务器节点能够对其进行故障转移,则任何非零值都可能导致Redis群集在主服务器出现故障后不可用。 在这种情况下,只有原始主节点重新加入集群时,集群才会返回可用。
    5、cluster-migration-barrier <count>:主设备将保持连接的最小从设备数量,以便另一个从设备迁移到不受任何从设备覆盖的主设备。有关更多信息,请参阅本教程中有关副本迁移的相应部分。
    6、cluster-require-full-coverage <yes / no>:如果将其设置为yes,则默认情况下,如果key的空间的某个百分比未被任何节点覆盖,则集群停止接受写入。 如果该选项设置为no,则即使只处理关于keys子集的请求,群集仍将提供查询。

     

    3、搭建集群

    只需要在其中一个节点执行创建命令,我选择在192.168.20.44执行:

    redis-cli -a "123456" --cluster create 192.168.20.44:6379 192.168.20.92:6379 192.168.20.102:6379 192.168.20.106:6379 192.168.20.175:6379 192.168.20.189:6379 --cluster-replicas 1

     

    五、验证集群

    1、检查集群状态

    redis-cli    -a "123456" cluster info
    redis-cli -a "123456" cluster nodes

    可以通过node-id看出master192.168.20.92节点的redis slave是192.168.20.175。

     

    2、检查主从节点

    redis-cli    -a "123456" cluster nodes

    可以看到主节点是:
     

    51b5182464948142211fd9181db83c0c99bf3efe 192.168.20.92:6379@16379 master - 0 1591005631568 2 connected 5461-10922
    179939f264ed3b46c4764a21e4231d9b882751be 192.168.20.44:6379@16379 myself,master - 0 1591005631000 1 connected 0-5460
    e51edb0d70cd0c60a2b12be12b4b13b46263ee57 192.168.20.102:6379@16379 master - 0 1591005630967 3 connected 10923-16383

    从节点:

    43840f24c975c17d9fdcaeb3caa537d086679202 192.168.20.106:6379@16379 slave 179939f264ed3b46c4764a21e4231d9b882751be 0 1591006232546 4 connected
    f57716d5cf46782e70f653540585ee6ff79b3ce9 192.168.20.189:6379@16379 slave e51edb0d70cd0c60a2b12be12b4b13b46263ee57 0 1591006234050 6 connected
    30f45c1c4b3fdade7b32a4ca4cbd24ae20786759 192.168.20.175:6379@16379 slave 51b5182464948142211fd9181db83c0c99bf3efe 0 1591006233548 5 connected

     

    3、启动集群验证增删改查

    redis-cli    -a "123456"  -c     --必须加-c才能启动集群
    或者:
    redis-cli    -a "123456"  -c -h 192.168.20.44 -p 6379
    127.0.0.1:6379> set test 1
    -> Redirected to slot [6918] located at 192.168.20.92:6379  
    OK
    192.168.20.92:6379>
    解析:
    -> Redirected to slot [6918] located at 192.168.20.92:6379    --redis集群会根据key来重定向到其他的节点
    在其他节点get的时候会从对应的节点查出这个key值:
    192.168.20.44:6379> get test
    -> Redirected to slot [6918] located at 192.168.20.92:6379
    "1"
    测试正常删除:
    192.168.20.92:6379> del test
    (integer) 1
    192.168.20.92:6379> get test
    (nil)
    

     

    4、验证故障转移主从切换

    redis-cli    -a "123456" cluster nodes

    4.1 原来175是slave,92是master:

    黄色是nodeid

    ce6d458e136cd887cef631c062c1c66203dda396 192.168.20.175:6379@16379 slave 04fd20500fcf96f077394640e0e8554d795f6284 0 1591026117513 5 connected

    ed25d3f5aafcd0dd3ca7f76287b5dd017ecf99dd 192.168.20.44:6379@16379 myself,master - 0 1591026117000 1 connected 0-5460

    696f5d31840d9b5acdf895cd7bee3d8fde759b38 192.168.20.102:6379@16379 master - 0 1591026116000 3 connected 10923-16383

    04fd20500fcf96f077394640e0e8554d795f6284 192.168.20.92:6379@16379 master - 0 1591026116511 2 connected 5461-10922

    f28ee3463614d3c5fb37a859ac074c3384e91ab4 192.168.20.106:6379@16379 slave ed25d3f5aafcd0dd3ca7f76287b5dd017ecf99dd 0 1591026117513 4 connected

    5c71a8d35d30b495713ff9fee9d7cfd44d8157ea 192.168.20.189:6379@16379 slave 696f5d31840d9b5acdf895cd7bee3d8fde759b38 0 1591026117000 6 connected

    4.2 停了192.168.20.92的master

    看着192.168.20.175的redis日志会看到有日志输出,如果切换成功也会有日志输出:

    故障转移成功提示:

    6009:S 01 Jun 2020 23:42:17.486 # Error condition on socket for SYNC: Connection refused

    6009:S 01 Jun 2020 23:42:17.560 * Marking node 04fd20500fcf96f077394640e0e8554d795f6284 as failing (quorum reached).

    6009:S 01 Jun 2020 23:42:17.586 # Start of election delayed for 543 milliseconds (rank #0, offset 207).

    6009:S 01 Jun 2020 23:42:18.188 # Starting a failover election for epoch 7

     

    6009:S 01 Jun 2020 23:42:27.540 * Connecting to MASTER 192.168.20.92:6379

    6009:S 01 Jun 2020 23:42:27.540 * MASTER <-> REPLICA sync started

    6009:S 01 Jun 2020 23:42:27.540 # Error condition on socket for SYNC: Connection refused

    6009:S 01 Jun 2020 23:42:27.641 # Currently unable to failover: Waiting for votes, but majority still not reached.

    6009:S 01 Jun 2020 23:42:28.144 # Currently unable to failover: Failover attempt expired.

    6009:S 01 Jun 2020 23:42:28.546 * Connecting to MASTER 192.168.20.92:6379

    6009:S 01 Jun 2020 23:42:38.195 # Start of election delayed for 511 milliseconds (rank #0, offset 207).

    6009:S 01 Jun 2020 23:42:38.296 # Currently unable to failover: Waiting the delay before I can start a new failover.

    6009:S 01 Jun 2020 23:42:38.598 * MASTER <-> REPLICA sync started

    6009:S 01 Jun 2020 23:42:38.598 # Error condition on socket for SYNC: Connection refused

    6009:S 01 Jun 2020 23:42:38.799 # Starting a failover election for epoch 8.

    6009:S 01 Jun 2020 23:42:38.803 # Currently unable to failover: Waiting for votes, but majority still not reached.

    6009:S 01 Jun 2020 23:42:38.804 # Failover election won: I'm the new master.

    6009:S 01 Jun 2020 23:42:38.804 # configEpoch set to 8 after successful failover

    6009:M 01 Jun 2020 23:42:38.804 # Setting secondary replication ID to 13472b6e2c05dd941917971c5c7a11bf30e2f9f7, valid up to offset: 208. New replication ID is fcae76ac0d571744e4f4f5ef1d8b6186147c49bf

    6009:M 01 Jun 2020 23:42:38.804 * Discarding previously cached master state.

     

    4.3 查看切换后的节点状态

    再去查看redis集群状态发现,175已经是成功成为master,再重启192.168.20.92的redis,则会变成salve,92后面跟着175的nodeid,说明正在同步175的数据。

    redis-cli    -a "123456" cluster nodes

    ce6d458e136cd887cef631c062c1c66203dda396 192.168.20.175:6379@16379 master - 0 1591026308567 8 connected 5461-10922
    ed25d3f5aafcd0dd3ca7f76287b5dd017ecf99dd 192.168.20.44:6379@16379 myself,master - 0 1591026308000 1 connected 0-5460
    696f5d31840d9b5acdf895cd7bee3d8fde759b38 192.168.20.102:6379@16379 master - 0 1591026309567 3 connected 10923-16383
    04fd20500fcf96f077394640e0e8554d795f6284 192.168.20.92:6379@16379 slave ce6d458e136cd887cef631c062c1c66203dda396 0 1591026308165 8 connected
    f28ee3463614d3c5fb37a859ac074c3384e91ab4 192.168.20.106:6379@16379 slave ed25d3f5aafcd0dd3ca7f76287b5dd017ecf99dd 0 1591026309968 4 connected
    5c71a8d35d30b495713ff9fee9d7cfd44d8157ea 192.168.20.189:6379@16379 slave 696f5d31840d9b5acdf895cd7bee3d8fde759b38 0 1591026308967 6 connected

     

     

     

    六、重建集群

    1、停了所有节点

    ansible rediscluster --sudo -m shell -a ' /usr/local/redis/bin/redis-cli -a "123456" shutdown'

    2、删除相关配置

    将每个节点下aof、rdb、nodes.conf本地备份文件删除; 

     

    3、启动集群各个节点

    4、重新执行创建集群命令

    redis-cli -a "123456" --cluster create 192.168.20.44:6379 192.168.20.92:6379 192.168.20.102:6379 192.168.20.106:6379 192.168.20.175:6379 192.168.20.189:6379 --cluster-replicas 1

     

    5、注意事项

    为什么要删除aof、rdb、nodes.conf本地备份文件?

    5.1 dump.rdb

    dump.rdb是由Redis服务器自动生成的 默认情况下 每隔一段时间redis服务器程序会自动对数据库做一次遍历,把内存快照写在一个叫做“dump.rdb”的文件里,这个持久化机制叫做SNAPSHOT。有了SNAPSHOT后,如果服务器宕机,重新启动redis服务器程序时redis会自动加载dump.rdb,将数据库状态恢复到上一次做SNAPSHOT时的状态。

     

    5.2 appendonly.aof(数据持久化)

    默认情况下Redis会异步的将数据导出到磁盘上。这种模式对许多应用程序已经足够了,但是如果断电或者redis进程出问题就会导致一段时间内的更新数据丢失(取决与配置项);

    这种只增文件是可选的能够提供更好的体验的数据持久化策略。

    举个例子,如果使用默认的配置数据fsync策略,在服务器意外断电的情况下redis只会丢失一秒中内的更新数据,或者当redis进程出问题但操作系统运转正常时,redis只会丢失一个数据更新操作。

    AOF 和 RDB 持久化方式可以同时启动并且无冲突。

    如果AOF开启,启动redis时会加载aof文件,这些文件能够提供更好的保证。

     

    5.3 nodes.conf

    每个集群节点都有一个集群配置文件。它是由Redis节点自动创建和更新的。每个Redis集群节点都需要一个不同的集群配置文件。

    注:确保在同一系统中运行的实例没有重叠的集群配置文件名。集群的配置,配置文件首次启动自动生成。

     

    七、redis-cluster常用命令

    1、查看集群:

     

    CLUSTER INFO 打印集群的信息

    CLUSTER NODES 列出集群当前已知的所有节点(node),以及这些节点的相关信息。 

    redis-cli -c -p 6379 cluster nodes

    redis-cli -c -p 6379 cluster info

    redis-trib.rb  check  10.26.25.115:6379

    redis-trib.rb info 10.26.25.115:6379

    2、节点(node)  命令

    1、加入节点:将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。 

    1)CLUSTER MEET <ip> <port>

    2)redis-trib.rb add-node <ip> <port>  10.25.157.78:7022

    例如:新增节点:10.80.82.74:7029

    redis-trib.rb add-node 10.80.82.74:7029 10.25.157.78:7022

    2、移除节点:

    1)、登陆集群任意节点:执行:CLUSTER FORGET <node_id>

    2)、redis-trib.rb del-node  <ip> <port>  <node_id>

    例如

    redis-trib.rb del-node 10.80.82.74:7030 923e869b3fda8add429fb200ea00ce94bdbc84e6

    CLUSTER FORGET 923e869b3fda8add429fb200ea00ce94bdbc84e6

    3、设置主从节点:

    CLUSTER REPLICATE <node_id> 将当前节点设置为 node_id 指定的节点的从节点。 

    4、节点数据备份到硬盘:

    CLUSTER SAVECONFIG 将节点的配置文件保存到硬盘里面。 

     

    3、槽(slot命令

    CLUSTER ADDSLOTS <slot> [slot ...] 将一个或多个槽(slot)指派(assign)给当前节点。 

    CLUSTER DELSLOTS <slot> [slot ...] 移除一个或多个槽对当前节点的指派。 

    CLUSTER FLUSHSLOTS 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。 

    CLUSTER SETSLOT <slot> NODE <node_id> 将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。 

    CLUSTER SETSLOT <slot> MIGRATING <node_id> 将本节点的槽 slot 迁移到 node_id 指定的节点中。 

    CLUSTER SETSLOT <slot> IMPORTING <node_id> 从 node_id 指定的节点中导入槽 slot 到本节点。 

    CLUSTER SETSLOT <slot> STABLE 取消对槽 slot 的导入(import)或者迁移(migrate)。

     

    4、键 (key) 命令

    CLUSTER KEYSLOT <key> 计算键 key 应该被放置在哪个槽上。

    CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的键值对数量。

    CLUSTER GETKEYSINSLOT <slot> <count> 返回 count 个 slot 槽中的键。

     

    5、说明:redis-cli --cluster help

    redis-cli --cluster help
    Cluster Manager Commands:
      create         host1:port1 ... hostN:portN   #创建集群
                     --cluster-replicas <arg>      #从节点个数
      check          host:port                     #检查集群
                     --cluster-search-multiple-owners #检查是否有槽同时被分配给了多个节点
      info           host:port                     #查看集群状态
      fix            host:port                     #修复集群
                     --cluster-search-multiple-owners #修复槽的重复分配问题
      reshard        host:port                     #指定集群的任意一节点进行迁移slot,重新分slots
                     --cluster-from <arg>          #需要从哪些源节点上迁移slot,可从多个源节点完成迁移,以逗号隔开,传递的是节点的node id,还可以直接传递--from all,这样源节点就是集群的所有节点,不传递该参数的话,则会在迁移过程中提示用户输入
                     --cluster-to <arg>            #slot需要迁移的目的节点的node id,目的节点只能填写一个,不传递该参数的话,则会在迁移过程中提示用户输入
                     --cluster-slots <arg>         #需要迁移的slot数量,不传递该参数的话,则会在迁移过程中提示用户输入。
                     --cluster-yes                 #指定迁移时的确认输入
                     --cluster-timeout <arg>       #设置migrate命令的超时时间
                     --cluster-pipeline <arg>      #定义cluster getkeysinslot命令一次取出的key数量,不传的话使用默认值为10
                     --cluster-replace             #是否直接replace到目标节点
      rebalance      host:port                                      #指定集群的任意一节点进行平衡集群节点slot数量 
                     --cluster-weight <node1=w1...nodeN=wN>         #指定集群节点的权重
                     --cluster-use-empty-masters                    #设置可以让没有分配slot的主节点参与,默认不允许
                     --cluster-timeout <arg>                        #设置migrate命令的超时时间
                     --cluster-simulate                             #模拟rebalance操作,不会真正执行迁移操作
                     --cluster-pipeline <arg>                       #定义cluster getkeysinslot命令一次取出的key数量,默认值为10
                     --cluster-threshold <arg>                      #迁移的slot阈值超过threshold,执行rebalance操作
                     --cluster-replace                              #是否直接replace到目标节点
      add-node       new_host:new_port existing_host:existing_port  #添加节点,把新节点加入到指定的集群,默认添加主节点
                     --cluster-slave                                #新节点作为从节点,默认随机一个主节点
                     --cluster-master-id <arg>                      #给新节点指定主节点
      del-node       host:port node_id                              #删除给定的一个节点,成功后关闭该节点服务
      call           host:port command arg arg .. arg               #在集群的所有节点执行相关命令
      set-timeout    host:port milliseconds                         #设置cluster-node-timeout
      import         host:port                                      #将外部redis数据导入集群
                     --cluster-from <arg>                           #将指定实例的数据导入到集群
                     --cluster-copy                                 #migrate时指定copy
                     --cluster-replace                              #migrate时指定replace
      help           
    
    For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.
    
    
    

     

     

    八、可能会遇到的报错

    1、[root@yyxx-vvm-node01 ~]# redis-cli -a "123456" --cluster create 192.168.20.44:6379 192.168.20.92:6379 192.168.20.102:6379 192.168.20.106:6379 192.168.20.175:6379 192.168.20.189:6379 --cluster-replicas 1

    Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.

    Could not connect to Redis at 192.168.20.189:6379: No route to host

    原因:192.168.20.189的防火墙没关,导致端口连不上。

     

    九、出现什么情况导致集群不可用

    通常出现以下2种情况:
    1、如果cluster中任意master挂掉,且当前master没有slave,集群进入fail状态情况下。即集群的slot映射[0-16383]不完成时进入fail态。
    2、如果cluster中超过半数以上master挂掉,无论是否有slave,集群进入fail状态。

    展开全文
  • redis集群搭建(非常详细,适合新手)

    万次阅读 多人点赞 2018-10-01 16:33:03
    redis集群搭建 在开始redis集群搭建之前,我们先简单回顾一下redis单机版的搭建过程 下载redis压缩包,然后解压压缩文件; 进入到解压缩后的redis文件目录(此时可以看到Makefile文件),编译redis源文件; 把编译...

    redis集群搭建

    在开始redis集群搭建之前,我们先简单回顾一下redis单机版的搭建过程

    1. 下载redis压缩包,然后解压压缩文件;
    2. 进入到解压缩后的redis文件目录(此时可以看到Makefile文件),编译redis源文件;
    3. 把编译好的redis源文件安装到/usr/local/redis目录下,如果/local目录下没有redis目录,会自动新建redis目录;
    4. 进入/usr/local/redis/bin目录,直接./redis-server启动redis(此时为前端启动redis);
    5. 将redis启动方式改为后端启动,具体做法:把解压缩的redis文件下的redis.conf文件复制到/usr/local/redis/bin目录下,然后修改该redis.conf文件->daemonize:no 改为daemonize:yse;
    6. 在/bin目录下通过./redis-server redis.conf启动redis(此时为后台启动)。
      综上redis单机版安装启动完成。
      具体详细带图步骤请参考 -> redis入门
      请原谅我的啰嗦,ok,接着咱们回到本次话题----redis集群搭建!

    一、Redis Cluster(Redis集群)简介

    • redis是一个开源的key value存储系统,受到了广大互联网公司的青睐。redis3.0版本之前只支持单例模式,在3.0版本及以后才支持集群,我这里用的是redis3.0.0版本;
    • redis集群采用P2P模式,是完全去中心化的,不存在中心节点或者代理节点;
    • redis集群是没有统一的入口的,客户端(client)连接集群的时候连接集群中的任意节点(node)即可,集群内部的节点是相互通信的(PING-PONG机制),每个节点都是一个redis实例;
    • 为了实现集群的高可用,即判断节点是否健康(能否正常使用),redis-cluster有这么一个投票容错机制:如果集群中超过半数的节点投票认为某个节点挂了,那么这个节点就挂了(fail)。这是判断节点是否挂了的方法;
    • 那么如何判断集群是否挂了呢? -> 如果集群中任意一个节点挂了,而且该节点没有从节点(备份节点),那么这个集群就挂了。这是判断集群是否挂了的方法;
    • 那么为什么任意一个节点挂了(没有从节点)这个集群就挂了呢? -> 因为集群内置了16384个slot(哈希槽),并且把所有的物理节点映射到了这16384[0-16383]个slot上,或者说把这些slot均等的分配给了各个节点。当需要在Redis集群存放一个数据(key-value)时,redis会先对这个key进行crc16算法,然后得到一个结果。再把这个结果对16384进行求余,这个余数会对应[0-16383]其中一个槽,进而决定key-value存储到哪个节点中。所以一旦某个节点挂了,该节点对应的slot就无法使用,那么就会导致集群无法正常工作。
    • 综上所述,每个Redis集群理论上最多可以有16384个节点。

    二、集群搭建需要的环境
    2.1 Redis集群至少需要3个节点,因为投票容错机制要求超过半数节点认为某个节点挂了该节点才是挂了,所以2个节点无法构成集群。
    2.2 要保证集群的高可用,需要每个节点都有从节点,也就是备份节点,所以Redis集群至少需要6台服务器。因为我没有那么多服务器,也启动不了那么多虚拟机,所在这里搭建的是伪分布式集群,即一台服务器虚拟运行6个redis实例,修改端口号为(7001-7006),当然实际生产环境的Redis集群搭建和这里是一样的。
    2.3 安装ruby
    三、集群搭建具体步骤如下(注意要关闭防火墙)
    3.1 在usr/local目录下新建redis-cluster目录,用于存放集群节点
    新建Redis集群目录
    3.2 把redis目录下的bin目录下的所有文件复制到/usr/local/redis-cluster/redis01目录下,不用担心这里没有redis01目录,会自动创建的。操作命令如下(注意当前所在路径):

    cp -r redis/bin/ redis-cluster/redis01
    

    在这里插入图片描述
    3.3 删除redis01目录下的快照文件dump.rdb,并且修改该目录下的redis.cnf文件,具体修改两处地方:一是端口号修改为7001,二是开启集群创建模式,打开注释即可。分别如下图所示:
    删除dump.rdb文件
    删除dump.rdb文件
    修改端口号为7001,默认是6379
    在这里插入图片描述
    将cluster-enabled yes 的注释打开
    在这里插入图片描述
    3.4 将redis-cluster/redis01文件复制5份到redis-cluster目录下(redis02-redis06),创建6个redis实例,模拟Redis集群的6个节点。然后将其余5个文件下的redis.conf里面的端口号分别修改为7002-7006。分别如下图所示:
    创建redis02-06目录
    在这里插入图片描述

    分别修改redis.conf文件端口号为7002-7006
    在这里插入图片描述
    3.5 接着启动所有redis节点,由于一个一个启动太麻烦了,所以在这里创建一个批量启动redis节点的脚本文件,命令为start-all.sh,文件内容如下:

    cd redis01
    ./redis-server redis.conf
    cd ..
    cd redis02
    ./redis-server redis.conf
    cd ..
    cd redis03
    ./redis-server redis.conf
    cd ..
    cd redis04
    ./redis-server redis.conf
    cd ..
    cd redis05
    ./redis-server redis.conf
    cd ..
    cd redis06
    ./redis-server redis.conf
    cd ..
    
    

    3.6 创建好启动脚本文件之后,需要修改该脚本的权限,使之能够执行,指令如下:

    chmod +x start-all.sh
    

    在这里插入图片描述
    3.7 执行start-all.sh脚本,启动6个redis节点
    在这里插入图片描述
    3.8 ok,至此6个redis节点启动成功,接下来正式开启搭建集群,以上都是准备条件。大家不要觉得图片多看起来冗长所以觉得麻烦,其实以上步骤也就一句话的事情:创建6个redis实例(6个节点)并启动。
    要搭建集群的话,需要使用一个工具(脚本文件),这个工具在redis解压文件的源代码里。因为这个工具是一个ruby脚本文件,所以这个工具的运行需要ruby的运行环境,就相当于java语言的运行需要在jvm上。所以需要安装ruby,指令如下:

    yum install ruby
    

    然后需要把ruby相关的包安装到服务器,我这里用的是redis-3.0.0.gem,大家需要注意的是:redis的版本和ruby包的版本最好保持一致。
    将Ruby包安装到服务器:需要先下载再安装,如图
    在这里插入图片描述
    安装命令如下:

    gem install redis-3.0.0.gem
    

    在这里插入图片描述

    3.9 上一步中已经把ruby工具所需要的运行环境和ruby包安装好了,接下来需要把这个ruby脚本工具复制到usr/local/redis-cluster目录下。那么这个ruby脚本工具在哪里呢?之前提到过,在redis解压文件的源代码里,即redis/src目录下的redis-trib.rb文件。
    在这里插入图片描述
    在这里插入图片描述
    3.10 将该ruby工具(redis-trib.rb)复制到redis-cluster目录下,指令如下:

    cp redis-trib.rb /usr/local/redis-cluster
    

    然后使用该脚本文件搭建集群,指令如下:

    ./redis-trib.rb create --replicas 1 47.106.219.251:7001 47.106.219.251:7002 47.106.219.251:7003 47.106.219.251:7004 47.106.219.251:7005 47.106.219.251:7006
    

    注意:此处大家应该根据自己的服务器ip输入对应的ip地址!
    在这里插入图片描述

    中途有个地方需要手动输入yes即可
    在这里插入图片描述
    至此,Redi集群搭建成功!大家注意最后一段文字,显示了每个节点所分配的slots(哈希槽),这里总共6个节点,其中3个是从节点,所以3个主节点分别映射了0-5460、5461-10922、10933-16383solts。

    3.11 最后连接集群节点,连接任意一个即可:

    redis01/redis-cli -p 7001 -c 
    

    注意:一定要加上-c,不然节点之间是无法自动跳转的!如下图可以看到,存储的数据(key-value)是均匀分配到不同的节点的:
    在这里插入图片描述

    四、结语
    呼~~~长舒一口气…终于搭建好了Redis集群。
    整个过程其实挺简单,本篇主要正对入门级别的小伙伴,插入了很多图片,所以显得冗长,希望大家多多理解,如果不当之处,还望及时指正~

    最后,加上两条redis集群基本命令:
    1.查看当前集群信息

    cluster info
    

    2.查看集群里有多少个节点

    cluster nodes
    
    展开全文
  • 大数据_09 【zookeeper集群搭建

    万次阅读 2020-10-20 17:56:48
    大数据_08 【zookeeper集群搭建】01 linux 环境02 下载安装包 上传 解压03 修改环境变量(注意:3台zookeeper都需要修改)04 修改Zookeeper配置文件05 创建文件夹06 分发安装包到其他机器07 启动(每台机器)08 查看...

    01 linux 环境

    1. 安装前需要安装好jdk
    2. 检测集群时间是否同步
    3. 检测防火墙是否关闭
    4. 检测主机 ip映射有没有配置

    02 下载安装包 上传 解压

    tar -zxvf zookeeper-3.4.5.tar.gz

    03 修改环境变量(注意:3台zookeeper都需要修改)

    vi /etc/profile
    export ZOOKEEPER_HOME=/home/hadoop/zookeeper
    export PATH=$PATH:$ZOOKEEPER_HOME/bin
    source /etc/profile
    

    04 修改Zookeeper配置文件

    cd zookeeper/conf
    cp zoo_sample.cfg zoo.cfg
    vi zoo.cfg
    添加内容:
    dataDir=/root/apps/zookeeper/zkdata
    server.1=node01:2888:3888     ## (心跳端口、选举端口)
    server.2=node02:2888:3888
    server.3=node03:2888:3888
    

    注意 配置文件中不要有中文 这个【 ## (心跳端口、选举端口) 】 要去掉

    05 创建文件夹

    cd /home/hadoop/zookeeper/
    mkdir zkdata
    
    在data文件夹下新建myid文件,myid的文件内容为:
    cd zkdata
    echo 1 > myid 
    

    06 分发安装包到其他机器

    scp -r /root/apps root@node02:/root/
    scp -r /root/apps root@node03:/root/
    
    ##修改其他机器的配置文件
    修改myid文件
    到node02上:修改myid为:2
    到node03上:修改myid为:3
    

    07 启动(每台机器)

    zkServer.sh start
    或者编写一个脚本来批量启动所有机器:
    for host in "node01 node02 node03"
    do
       ssh $host "source/etc/profile;/root/apps/zookeeper/bin/zkServer.sh start"
    done
    

    08 查看集群状态

    jps(查看进程)
    zkServer.sh status(查看集群状态,主从信息)
    
    如果启动不成功,可以观察zookeeper.out日志,查看错误信息进行排查
    
    展开全文
  • ElasticSearch7.6集群搭建

    万次阅读 2020-03-30 16:30:42
    ElasticSearch7.6集群搭建
  • etcd集群搭建

    万次阅读 2018-03-28 11:47:21
    etcd集群搭建 下载安装 从这下载https://github.com/coreos/etcd/releases/download/v3.3.2/etcd-v3.3.2-linux-amd64.tar.gz tar xzvf etcd-v3.3.2-linux-amd64.tar.gz cd etcd-v3.3.2-linux-amd64; cp etcd* ...
  • #重置节点 kubeadm reset #删除节点,删除后 数据就从etcd中清除了(可运行kubectl的任一节点中执行) kubectl delete node node-1
  • hadoop集群搭建 修改配置文件(三台主机都要配置) master 主机配置 1)hadoop-env.sh vimhadoop-env.sh 2)core-site.xml vim core-site.xml <configuration> <!-- 指定HDFS...
  • hadoop集群搭建(超详细版)

    万次阅读 多人点赞 2018-05-03 12:09:13
    搭建集群 12.1 集群结构 三个结点:一个主节点master两个从节点 内存1GB 磁盘20GB Ip地址 主机名 Namenode Secondary namenode Datanode Resource Manager NodeManager 192.168.63.16 master Y Y N Y N 192.168.63....
  • Kubernetes集群搭建详细指南

    万次阅读 2020-09-06 16:11:03
    学习K8S已成为一个趋势,俗话说得好,纸上得来终觉浅,绝知此事要躬行。...本文参考了其它博客,总结了K8S集群搭建的完整过程,梳理了K8S集群搭建中可能踩到的坑,希望能够一步步带你实现整个集群的搭建。
  • clickhouse 简单集群搭建

    千次阅读 2020-09-29 15:37:23
    clickhouse 简单集群搭建搭建步骤总结详细搭建说明服务器列表集群搭建软件离线安装配置修改metrika.xml文件config.xml环境修改初始化脚本重启服务注意事项遇到的问题参考链接 搭建步骤总结 1.安装软件 2.环境修改 3....
  • 【Kafka】kafka集群搭建

    千次阅读 2019-12-16 22:36:00
    kafka集群搭建 1、zookeeper集群搭建 tickTime=2000 initLimit=10 syncLimit=5 dataDir=/home/ubuntu/apps/zookeeper-3.4.7/data clientPort=2181 server.1=s1:2888:3888 server.2=s2:2888:3888 server.3=s3:2888:...
  • Elasticsearch集群搭建

    千次阅读 2019-03-02 17:42:46
    集群结构 角色: 主节点,数据节点,负载均衡节点 1、主节点:保存数据信息(meta data) 元数据; 描述数据的数据,客户端通过主节点获取真正的数据位置,到数据节点...集群搭建 搭建另外两台es的服务器,配置好ik分词器 ,参...
  • YARN集群搭建

    千次阅读 2018-10-16 20:17:15
    如果你还没有搭建高可用的完全分布式集群,可以参考我的上一篇博客《HDFS高可用的完全分布式集群搭建过程》。 YARN集群规划 实验步骤 1、在node01进入hadoop的安装目录下的/opt/hadoop/hadoop-2.7.5/etc/hadoop(供...
  • 【Storm】storm集群搭建

    万次阅读 2019-12-16 22:35:59
    storm集群搭建 首先需要搭建zookeeper集群 核心配置文件 storm.zookeeper.servers: - "s1" - "s2" - "s3" nimbus.host: "s1" 其中s1、s2、s3为zookeeper集群。nimbus.host指定nimbus所在主机 启动storm集群 在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 270,880
精华内容 108,352
关键字:

集群搭建