美文网首页
CentOS搭建Redis集群

CentOS搭建Redis集群

作者: journeyIT | 来源:发表于2017-12-22 14:50 被阅读0次
    集群原理-redis-cluster架构图
    image.png
    架构细节:

    (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
    (2)节点的fail是通过集群中超过半数的节点检测失效时才生效.
    (3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
    (4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value
    Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点

    redis-cluster投票:容错
    image.png

    (1)领着投票过程是集群中所有master参与,如果半数以上master节点与master节点通信超过(cluster-node-timeout),认为当前master节点挂掉.
    (2)什么时候整个集群不可用(cluster_state:fail)?

    a:如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完成时进入fail状态. ps : redis-3.0.0.rc1加入cluster-require-full-coverage参数,默认关闭,打开集群兼容部分失败.
    b:如果集群超过半数以上master挂掉,无论是否有slave集群进入fail状态.

    ps:当集群不可用时,所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误

    1.搭建集群需要的环境

    搭建集群需要使用到官方提供的ruby脚本。

    需要安装ruby的环境。

    安装ruby

    yum install ruby
    
    yum install rubygems
    

    redis集群管理工具redis-trib.rb

    [root@bogon ~]# cd redis-3.0.0
    
    [root@bogon redis-3.0.0]# cd src
    
    [root@bogon src]# ll *.rb
    
    -rwxrwxr-x. 1 root root 48141 Apr  1 07:01 redis-trib.rb
    
    [root@bogon src]# 
    

    redis-trib.rb脚本需要的ruby包:

    需要上传到linux服务。

    安装ruby的包:


    image.png
    gem install redis-3.0.0.gem
    
    [root@bogon ~]# gem install redis-3.0.0.gem 
    
    Successfully installed redis-3.0.0
    
    1 gem installed
    
    Installing ri documentation for redis-3.0.0...
    
    Installing RDoc documentation for redis-3.0.0...
    
    

    gem下载地址http://download.csdn.net/detail/u012599988/8597787

    2.集群的搭建

    第一步:创建6个redis实例,端口号从7001~7006

    先创建个目录


    image.png image.png image.png

    dump.rdb是快照形式把状态保存,另一种是aof保存命令的。

    image.png
    第二步:修改redis的配置文件
    image.png

    1、修改端口号

    image.png

    2、打开cluster-enable前面的注释。

    image.png

    接下来复制6个节点

    说明:

    redis集群至少需要3个主节点,每个主节点有一个从节点总共6个节点

    replicas指定为1表示每个主节点有一个从节点

    image.png

    别忘了吧6个节点的端口号都改了

    第三步:把创建集群的ruby脚本复制到redis-cluster目录下。

    然后需要把Redis src目录下的 redis-trib.rb集群管理工具复制到Redis-cluster下面

    image.png
    第四步:启动6个redis实例

    写个脚本批量启动6个redis节点

    image.png

    startall的脚本内容

    image.png

    设置为可执行的文件

    image.png
    image.png

    同理可以创建个关闭集群的脚本

    image.png
    image.png
    image.png
    第五步:创建集群。
     ./redis-trib.rb create --replicas 1 192.168.188.131:7001 192.168.188.131:7002 192.168.188.131:7003 192.168.188.131:7004 192.168.188.131:7005  192.168.188.131:7006
    
     
    
    [root@bogon redis-cluster]# ./redis-trib.rb create --replicas 1 192.168.188.131:7001 192.168.188.131:7002 192.168.188.131:7003 192.168.188.131:7004 192.168.188.131:7005 192.168.188.131:7006
    >>> Creating cluster
    Connecting to node 192.168.188.131:7001: OK  
    Connecting to node 192.168.188.131:7002: OK
    Connecting to node 192.168.188.131:7003: OK
    Connecting to node 192.168.188.131:7004: OK
    Connecting to node 192.168.188.131:7005: OK
    Connecting to node 192.168.188.131:7006: OK
    >>> Performing hash slots allocation on 6 nodes... 连接6个节点成功
    Using 3 masters:                                                 7001-7003作为主节点
    192.168.188.131:7001
    192.168.188.131:7002                                    
    192.168.188.131:7003
    Adding replica 192.168.188.131:7004 to 192.168.188.131:7001                   7004作为7001的从节点
    Adding replica 192.168.188.131:7005 to 192.168.188.131:7002                   7005作为7002的从节点
    Adding replica 192.168.188.131:7006 to 192.168.188.131:7003                   7006作为7003的从节点
    M: 5a8523db7e12ca600dc82901ced06741b3010076 192.168.188.131:7001
    slots:0-5460 (5461 slots) master                  给7001主节点分配0-5460 的槽
    M: bf6f0929044db485dea9b565bb51e0c917d20a53 192.168.188.131:7002
    slots:5461-10922 (5462 slots) master    给7002主节点分配5461-10922 的槽
    M: c5e334dc4a53f655cb98fa3c3bdef8a808a693ca 192.168.188.131:7003
    slots:10923-16383 (5461 slots) master 给7003主节点分配10923-16383 的槽
    S: 2a61b87b49e5b1c84092918fa2467dd70fec115f 192.168.188.131:7004     7004,7005,7006是从节点槽和主节点的一样,从节点是备份用的
    replicates 5a8523db7e12ca600dc82901ced06741b3010076
    S: 14848b8c813766387cfd77229bd2d1ffd6ac8d65 192.168.188.131:7005
    replicates bf6f0929044db485dea9b565bb51e0c917d20a53
    S: 3192cbe437fe67bbde9062f59d5a77dabcd0d632 192.168.188.131:7006
    replicates c5e334dc4a53f655cb98fa3c3bdef8a808a693ca
    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.188.131:7001)
    M: 5a8523db7e12ca600dc82901ced06741b3010076 192.168.188.131:7001
    slots:0-5460 (5461 slots) master
    M: bf6f0929044db485dea9b565bb51e0c917d20a53 192.168.188.131:7002
    slots:5461-10922 (5462 slots) master
    M: c5e334dc4a53f655cb98fa3c3bdef8a808a693ca 192.168.188.131:7003
    slots:10923-16383 (5461 slots) master
    M: 2a61b87b49e5b1c84092918fa2467dd70fec115f 192.168.188.131:7004
    slots: (0 slots) master
    replicates 5a8523db7e12ca600dc82901ced06741b3010076
    M: 14848b8c813766387cfd77229bd2d1ffd6ac8d65 192.168.188.131:7005
    slots: (0 slots) master
    replicates bf6f0929044db485dea9b565bb51e0c917d20a53
    M: 3192cbe437fe67bbde9062f59d5a77dabcd0d632 192.168.188.131:7006
    slots: (0 slots) master
    replicates c5e334dc4a53f655cb98fa3c3bdef8a808a693ca
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.
    [root@bogon redis-cluster]#
    

    3.测试集群

    # redis01/redis-cli -h 192.168.188.131 -p 7002 -c    -h是指定ip -p指定端口 -c代表要连接集群
    

    注:连集群的时候必须加-c,否则set的时候会出现(error)MOVED的错误

    192.168.188.131:7002> 
    # redis01/redis-cli -h 192.168.188.131 -p 7002 -c
    192.168.188.131:7002> set a 100
    -> Redirected to slot [15495] located at 192.168.188.131:7003
    OK
    192.168.188.131:7003>
    

    4.图形化界面客户端

    image.png

    只支持单机版,不支持集群。可以在开发的时候连接单机版,生产环境换成集群

    相关文章

      网友评论

          本文标题:CentOS搭建Redis集群

          本文链接:https://www.haomeiwen.com/subject/tvatgxtx.html