zoukankan      html  css  js  c++  java
  • centos7多节点部署redis4.0.11集群

    1、服务器集群
    服务器 redis节点
    node-i(192.168.0.168) 7001,7002
    node-ii(192.168.0.169) 7003,7004
    node-iii(192.168.0.170) 7005,7006
        三个节点都关闭防火墙:

        systemctl stop iptables
        systemctl stop firewalld
        

        查看防火墙状态:

        systemctl status iptables
        systemctl status firewalld

    2、安装gcc

        redis进行源码安装,先要安装gcc,再make redis。执行以下命令安装redis:

        yum -y install gcc gcc-c++ libstdc++-devel

        

    3、安装ruby

    执行以下命令安装ruby2.5,如果ruby版本过低,无法启动redis集群。

        yum install -y centos-release-scl-rh
        yum install -y rh-ruby25
        scl enable rh-ruby25 bash

        检验并查看ruby版本:

        ruby -v

        最后执行如下命令:

        gem install redis

        

    4、配置redis节点
    (1)、node-i(192.168.0.168)

        (a).安装redis

        从redis官网https://redis.io/下载redis最新版本redis-4.0.11。或者 wget http://download.redis.io/releases/redis-4.0.11.tar.gz

        解压redis:

        tar -zxvf redis-4.0.11.tar.gz

        

        创建redis目录:

        mkdir -p /usr/local/redis-i
        mkdir -p /usr/local/redis-cluster/7001 /usr/local/redis-cluster/7002

        解压redis:

        tar -zxvf redis-4.0.11.tar.gz

        进入redis-4.0.11目录,执行make命令,将redis安装在/usr/local/redis-i目录下:

        make install PREFIX=/usr/local/redis-i

        复制redis.conf到redis集群节点目录下:

        cp redis.conf /usr/local/redis-cluster/7001
        cp redis.conf /usr/local/redis-cluster/7002

        进入/usr/local/redis-i目录,将生成的 bin目录复制到redis集群节点目录下:

        cp -r bin /usr/local/redis-cluster/7001
        cp -r bin /usr/local/redis-cluster/7002

        分别修改节点7001、7002的配置文件redis.conf,修改如下:

        7001:

    bind 192.168.0.168
    protected-mode no
    port 7001
    daemonize yes
    cluster-enabled yes
    cluster-node-timeout 15000
        7002:

    bind 192.168.0.168
    protected-mode no
    port 7002
    daemonize yes
    cluster-enabled yes
    cluster-node-timeout 15000
        (b).启动redis节点

        分别启动7001和7002节点:

        分别在/usr/local/redis-cluster/7001和/usr/local/redis-cluster/7002目录,执行如下命令: 

        ./bin/redis-server ./redis.conf

        通过ps命令查看启动的redis节点:

        ps -ef|grep redis

    (2)、node-ii(192.168.0.169)

        (a).安装redis

        创建redis目录:

        mkdir -p /usr/local/redis-ii
        mkdir -p /usr/local/redis-cluster/7003 /usr/local/redis-cluster/7004

        解压redis:

        tar -zxvf redis-4.0.11.tar.gz

        进入redis-4.0.11目录,执行make命令,将redis安装在/usr/local/redis-ii目录下:

        make install PREFIX=/usr/local/redis-ii

        复制redis.conf到redis集群节点目录下:

        cp redis.conf /usr/local/redis-cluster/7003
        cp redis.conf /usr/local/redis-cluster/7004

        进入/usr/local/redis-ii目录,将生成的 bin目录复制到redis集群节点目录下:

        cp -r bin /usr/local/redis-cluster/7003
        cp -r bin /usr/local/redis-cluster/7004

        分别修改节点7003、7004的配置文件redis.conf,修改如下:

        7003:

    bind 192.168.0.169
    protected-mode no
    port 7003
    daemonize yes
    cluster-enabled yes
    cluster-node-timeout 15000
        7004:

    bind 192.168.0.169
    protected-mode no
    port 7004
    daemonize yes
    cluster-enabled yes
    cluster-node-timeout 15000
        (b).启动redis节点

        分别启动7003和7004节点:

        分别在/usr/local/redis-cluster/7003和/usr/local/redis-cluster/7004目录,执行如下命令: 

        ./bin/redis-server ./redis.conf

        通过ps命令查看启动的redis节点:

        ps -ef|grep redis

    (3)、node-iii(192.168.0.170)

        (a).安装redis

        创建redis目录:

        mkdir -p /usr/local/redis-iii
        mkdir -p /usr/local/redis-cluster/7005 /usr/local/redis-cluster/7006

        解压redis:

        tar -zxvf redis-4.0.11.tar.gz

        进入redis-4.0.11目录,执行make命令,将redis安装在/usr/local/redis-iii目录下:

        make install PREFIX=/usr/local/redis-iii

        复制redis.conf到redis集群节点目录下:

        cp redis.conf /usr/local/redis-cluster/7005
        cp redis.conf /usr/local/redis-cluster/7006

        进入/usr/local/redis-iii目录,将生成的 bin目录复制到redis集群节点目录下:

        cp -r bin /usr/local/redis-cluster/7005
        cp -r bin /usr/local/redis-cluster/7006

        分别修改节点7005、7006的配置文件redis.conf,修改如下:

        7005:

    bind 192.168.0.170
    protected-mode no
    port 7005
    daemonize yes
    cluster-enabled yes
    cluster-node-timeout 15000
        7006:

    bind 192.168.0.170
    protected-mode no
    port 7006
    daemonize yes
    cluster-enabled yes
    cluster-node-timeout 15000
        (b).启动redis节点

        分别启动7005和7006节点:

        分别在/usr/local/redis-cluster/7005和/usr/local/redis-cluster/7006目录,执行如下命令: 

        ./bin/redis-server ./redis.conf

        通过ps命令查看启动的redis节点:

        ps -ef|grep redis

    5、启动redis集群
        以上步骤完成,6个redis节点都已经启动完成。现在启动redis集群,在任一服务器上都可以启动集群,进入最开始解压出来的redis-4.0.11目录的src子目录,执行如下命令启动redis集群:

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

    [root@localhost src]# ./redis-trib.rb create --replicas 1 192.168.0.168:7001 192.168.0.168:7002 192.168.0.169:7003 192.168.0.169:7004 192.168.0.170:7005 192.168.0.170:7006
    >>> Creating cluster
    >>> Performing hash slots allocation on 6 nodes...
    Using 3 masters:
    192.168.0.168:7001
    192.168.0.169:7003
    192.168.0.170:7005
    Adding replica 192.168.0.169:7004 to 192.168.0.168:7001
    Adding replica 192.168.0.170:7006 to 192.168.0.169:7003
    Adding replica 192.168.0.168:7002 to 192.168.0.170:7005
    M: 30e71932ee92893bcf28f7e4d3b5a7a84ad205c3 192.168.0.168:7001
    slots:0-5460 (5461 slots) master
    S: 5c0f265eb2e46e1189181b7d5d709a4f7f595cfe 192.168.0.168:7002
    replicates 8e34e11d03fa3dd22afde2a96ccbb66aeb805132
    M: 226ab6b2176950dec24945cef4d4ccab1169a79c 192.168.0.169:7003
    slots:5461-10922 (5462 slots) master
    S: ccce10f5da67155479a8c515df65323aa6adb06a 192.168.0.169:7004
    replicates 30e71932ee92893bcf28f7e4d3b5a7a84ad205c3
    M: 8e34e11d03fa3dd22afde2a96ccbb66aeb805132 192.168.0.170:7005
    slots:10923-16383 (5461 slots) master
    S: b3b520a1957142cd6c7fa1e1e8aa4cf588ea1282 192.168.0.170:7006
    replicates 226ab6b2176950dec24945cef4d4ccab1169a79c
    Can I set the above configuration? (type 'yes' to accept): yes
    >>> Nodes configuration updated
    >>> Assign a different config epoch to each node
    >>> Sending CLUSTER MEET messages to join the cluster
    Waiting for the cluster to join.......
    >>> Performing Cluster Check (using node 192.168.0.168:7001)
    M: 30e71932ee92893bcf28f7e4d3b5a7a84ad205c3 192.168.0.168:7001
    slots:0-5460 (5461 slots) master
    1 additional replica(s)
    S: ccce10f5da67155479a8c515df65323aa6adb06a 192.168.0.169:7004
    slots: (0 slots) slave
    replicates 30e71932ee92893bcf28f7e4d3b5a7a84ad205c3
    M: 8e34e11d03fa3dd22afde2a96ccbb66aeb805132 192.168.0.170:7005
    slots:10923-16383 (5461 slots) master
    1 additional replica(s)
    S: 5c0f265eb2e46e1189181b7d5d709a4f7f595cfe 192.168.0.168:7002
    slots: (0 slots) slave
    replicates 8e34e11d03fa3dd22afde2a96ccbb66aeb805132
    M: 226ab6b2176950dec24945cef4d4ccab1169a79c 192.168.0.169:7003
    slots:5461-10922 (5462 slots) master
    1 additional replica(s)
    S: b3b520a1957142cd6c7fa1e1e8aa4cf588ea1282 192.168.0.170:7006
    slots: (0 slots) slave
    replicates 226ab6b2176950dec24945cef4d4ccab1169a79c
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.

    6、验证集群
        从任一主机进入任一redis节点,如从192.168.0.168主机中进入7001节点:

        进入7001目录:

        cd /usr/local/redis-cluster/7001

        登录7001节点:

        ./bin/redis-cli -c -h 192.168.0.168 -p 7001

        写入一个数据:

        set redis cluster

        之后进入其他节点,查看redis中的数据,如登录7005节点:

        ./bin/redis-cli -c -h 192.168.0.170 -p 7005

        查看redis数据:

        get redis

    redis cluster命令

    集群(cluster)  
    cluster info       打印集群的信息
    cluster nodes   列出集群当前已知的所有节点(node),以及这些节点的相关信息   
    节点(node)  
    cluster meet <ip> <port>       将ip和port所指定的节点添加到集群当中,让它成为集群的一份子  
    cluster forget <node_id>        从集群中移除node_id指定的节点
    cluster replicate <node_id>   将当前节点设置为node_id指定的节点的从节点
    cluster saveconfig                   将节点的配置文件保存到硬盘里面
    cluster slaves <node_id>       列出该slave节点的master节点
    cluster set-config-epoch        强制设置configEpoch 
    槽(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) 
    键(key)  
    cluster keyslot <key>                                       计算键key应该被放置在哪个槽上  
    cluster countkeysinslot <slot>                         返回槽slot目前包含的键值对数量 
    cluster getkeysinslot <slot> <count>              返回count个slot槽中的键
    其它
    cluster myid       返回节点的ID
    cluster slots       返回节点负责的slot
    cluster reset      重置集群,慎用


    redis cluster配置
    cluster-enabled yes
    如果配置yes则开启集群功能,此redis实例作为集群的一个节点,否则,它是一个普通的单一的redis实例。

    cluster-config-file nodes-6379.conf
    虽然此配置的名字叫"集群配置文件",但是此配置文件不能人工编辑,它是集群节点自动维护的文件,主要用于记录集群中有哪些节点、他们的状态以及一些持久化参数等,方便在重启时恢复这些状态。通常是在收到请求之后这个文件就会被更新。
     
    cluster-node-timeout 15000
    这是集群中的节点能够失联的最大时间,超过这个时间,该节点就会被认为故障。如果主节点超过这个时间还是不可达,则用它的从节点将启动故障迁移,升级成主节点。注意,任何一个节点在这个时间之内如果还是没有连上大部分的主节点,则此节点将停止接收任何请求。一般设置为15秒即可。

    cluster-slave-validity-factor 10
    如果设置成0,则无论从节点与主节点失联多久,从节点都会尝试升级成主节点。如果设置成正数,则cluster-node-timeout乘以cluster-slave-validity-factor得到的时间,是从节点与主节点失联后,此从节点数据有效的最长时间,超过这个时间,从节点不会启动故障迁移。假设cluster-node-timeout=5,cluster-slave-validity-factor=10,则如果从节点跟主节点失联超过50秒,此从节点不能成为主节点。注意,如果此参数配置为非0,将可能出现由于某主节点失联却没有从节点能顶上的情况,从而导致集群不能正常工作,在这种情况下,只有等到原来的主节点重新回归到集群,集群才恢复运作。

    cluster-migration-barrier 1
    主节点需要的最小从节点数,只有达到这个数,主节点失败时,它从节点才会进行迁移。更详细介绍可以看本教程后面关于副本迁移到部分。

    cluster-require-full-coverage yes
    在部分key所在的节点不可用时,如果此参数设置为"yes"(默认值), 则整个集群停止接受操作;如果此参数设置为”no”,则集群依然为可达节点上的key提供读操作。

    redis cluster状态
    127.0.0.1:8001> cluster info
    cluster_state:ok             

    如果当前redis发现有failed的slots,默认为把自己cluster_state从ok个性为fail, 写入命令会失败。如果设置cluster-require-full-coverage为no,则无此限制。
    cluster_slots_assigned:16384   #已分配的槽
    cluster_slots_ok:16384              #槽的状态是ok的数目
    cluster_slots_pfail:0                    #可能失效的槽的数目
    cluster_slots_fail:0                      #已经失效的槽的数目
    cluster_known_nodes:6             #集群中节点个数
    cluster_size:3                              #集群中设置的分片个数
    cluster_current_epoch:15          #集群中的currentEpoch总是一致的,currentEpoch越高,代表节点的配置或者操作越新,集群中最大的那个node epoch
    cluster_my_epoch:12                 #当前节点的config epoch,每个主节点都不同,一直递增, 其表示某节点最后一次变成主节点或获取新slot所有权的逻辑时间.
    cluster_stats_messages_sent:270782059
    cluster_stats_messages_received:270732696


    127.0.0.1:8001> cluster nodes
    25e8c9379c3db621da6ff8152684dc95dbe2e163 192.168.64.102:8002 master - 0 1490696025496 15 connected 5461-10922
    d777a98ff16901dffca53e509b78b65dd1394ce2 192.168.64.156:8001 slave 0b1f3dd6e53ba76b8664294af2b7f492dbf914ec 0 1490696027498 12 connected
    8e082ea9fe9d4c4fcca4fbe75ba3b77512b695ef 192.168.64.108:8000 master - 0 1490696025997 14 connected 0-5460
    0b1f3dd6e53ba76b8664294af2b7f492dbf914ec 192.168.64.170:8001 myself,master - 0 0 12 connected 10923-16383
    eb8adb8c0c5715525997bdb3c2d5345e688d943f 192.168.64.101:8002 slave 25e8c9379c3db621da6ff8152684dc95dbe2e163 0 1490696027498 15 connected
    4000155a787ddab1e7f12584dabeab48a617fc46 192.168.67.54:8000 slave 8e082ea9fe9d4c4fcca4fbe75ba3b77512b695ef 0 1490696026497 14 connected
    #说明
    节点ID:例如25e8c9379c3db621da6ff8152684dc95dbe2e163
    ip:port:节点的ip地址和端口号,例如192.168.64.102:8002
    flags:节点的角色(master,slave,myself)以及状态(pfail,fail)
    如果节点是一个从节点的话,那么跟在flags之后的将是主节点的节点ID,例如192.168.64.156:8001主节点的ID就是0b1f3dd6e53ba76b8664294af2b7f492dbf914ec
    集群最近一次向节点发送ping命令之后,过了多长时间还没接到回复
    节点最近一次返回pong回复的时间
    节点的配置纪元(config epoch)
    本节点的网络连接情况
    节点目前包含的槽,例如192.168.64.102:8002目前包含的槽为5461-10922

  • 相关阅读:
    自定义能够for each的类,C#,Java,C++,C++/cli的实现方法
    答网友强护灰飞烟灭关于接口的问题
    浅谈C++的this指针
    padding与margin的区别(网上转的)
    啦啦啦 刚注册的,先水一篇~
    直接把页面的table导出到excel表中
    从FTP下载文件带进度条
    C# 从FTP上下载指定文件到本机
    “无法在证书存储区中找到清单签名证书”错误的解决方法
    网页设置不可复制
  • 原文地址:https://www.cnblogs.com/xiaohanlin/p/10045954.html
Copyright © 2011-2022 走看看