zoukankan      html  css  js  c++  java
  • 手动搭建redis cluster

    集群中至少应该有奇数个节点,所以至少有三个节点,每个节点至少有一个备份节点,所以下面使用6节点(主节点、备份节点由redis-cluster集群确定)

    1、安装redis节点指定端口
    解压redis压缩包,编译安装

    [root@localhost redis-3.2.0]# tar xzf redis-3.2.0.tar.gz
    [root@localhost redis-3.2.0]# cd redis-3.2.0
    [root@localhost redis-3.2.0]# make
    [root@localhost redis01]# make install PREFIX=/usr/andy/redis-cluster
    

      在redis-cluster下 修改bin文件夹为redis01,复制redis.conf配置文件
    创建目录redis-cluster并在此目录下再创建7003 7004 7005 7006 7007 7008共6个目录,在7000中创建配置文件redis.conf,内容如下:

    daemonize yes #后台启动
    port 7001 #修改端口号,从7001到7006
    cluster-enabled yes #开启cluster,去掉注释
    cluster-config-file nodes.conf #自动生成
    cluster-node-timeout 15000 #节点通信时间        
    protected-mode no
    #bind 127.0.0.1 #注释
    #是否需要每个节点都可用,集群才算可用,关闭
    cluster-require-full-coverage no

      同时把redis.conf复制到其它目录中

    2、启动集群

    可以写一个命令脚本start-all.sh

    cd redis07  
    ./redis-server redis.conf  
    cd ..  
    cd redis08  
    ./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 ..
    

      设置权限启动

    [root@localhost redis-cluster]# chmod 777 start-all.sh 
    [root@localhost redis-cluster]# ./start-all.sh 
    

      查看redis进程启动状态

    [root@localhost redis-cluster]# ps -ef|grep redis
    root 16347 1 0 10月16 ? 00:00:36 ./redis-server *:7007 [cluster]
    root 16352 1 0 10月16 ? 00:00:36 ./redis-server *:7008 [cluster]
    root 16357 1 0 10月16 ? 00:00:36 ./redis-server *:7003 [cluster]
    root 16362 1 0 10月16 ? 00:00:30 ./redis-server *:7004 [cluster]
    root 16367 1 0 10月16 ? 00:00:30 ./redis-server *:7005 [cluster]
    root 16372 1 0 10月16 ? 00:00:30 ./redis-server *:7006 [cluster]
    root 18121 17496 0 08:51 pts/0 00:00:00 grep --color=auto redis

      可以看到redis的6个节点已经启动成功
    注意:这里并没有创建集群

    查看槽信息,都没有,是因为我们还没有分配槽,稍后分配

    [root@localhost redis03]# ./redis-cli -p 7003 cluster slots
    

      查看集群信息

    [root@localhost redis03]# ./redis-cli -p 7003 cluster info

      

    [root@localhostredis03]# ./redis-cli -p 7003 cluster nodes

      

    集群之间相互握手,只要一个在集群里面的机器meet了其他机器,这个集群里的其他机器也能感知到刚刚meet的集群

    使用如下命令:

    ./redis-cli -p 7003 cluster meet 127.0.0.1 7004
    

      

    用了7000meet了7001和7002,虽然7002没有meet7001,但是他也感知了7001。继续用7000meet剩下所有的机器

    所有的机器都感知彼此的存在了,并且集群里面集群的数据增加到了6:

    [root@localhost redis03]# ./redis-cli -p 7003 cluster nodes
    b749dd28e498347e97af02e6670383e78da2029f 127.0.0.1:7007@17007 slave c88360fb8d0727f12f97809d0fc6f8170509c0e0 0 1571274103230 4 connected
    9f3a0d6bb111cd55eda750ebe66b178f322f76a6 127.0.0.1:7006@17006 master - 0 1571274105233 6 connected 0-5461
    fb91d987d128eb1bd0b75a61b185ec2cc7840aa0 127.0.0.1:7005@17005 master - 0 1571274106233 0 connected 10923-16383
    5127773661482f675b9477779f8c99b980ba2a42 127.0.0.1:7003@17003 myself,slave 9f3a0d6bb111cd55eda750ebe66b178f322f76a6 0 1571274101000 1 connected
    c88360fb8d0727f12f97809d0fc6f8170509c0e0 127.0.0.1:7004@17004 master - 0 1571274104231 2 connected 5462-10922
    5b146f75357e1adc1b7853aa816182861bf82528 127.0.0.1:7008@17008 slave fb91d987d128eb1bd0b75a61b185ec2cc7840aa0 0 1571274103000 5 connected
    

      

    设置副本

    为了保证高可用,把7006设置为7003的从节点,把7007设置为7004的从节点,把7008设置为7005的从节点。

    ./redis-cli -p 7006 cluster replicate 5127773661482f675b9477779f8c99b980ba2a42

    [root@localhost redis03]# ./redis-cli -p 7003 cluster nodes
    b749dd28e498347e97af02e6670383e78da2029f 127.0.0.1:7007@17007 slave c88360fb8d0727f12f97809d0fc6f8170509c0e0 0 1571274103230 4 connected
    9f3a0d6bb111cd55eda750ebe66b178f322f76a6 127.0.0.1:7006@17006 master - 0 1571274105233 6 connected 0-5461
    fb91d987d128eb1bd0b75a61b185ec2cc7840aa0 127.0.0.1:7005@17005 master - 0 1571274106233 0 connected 10923-16383
    5127773661482f675b9477779f8c99b980ba2a42 127.0.0.1:7003@17003 myself,slave 9f3a0d6bb111cd55eda750ebe66b178f322f76a6 0 1571274101000 1 connected
    c88360fb8d0727f12f97809d0fc6f8170509c0e0 127.0.0.1:7004@17004 master - 0 1571274104231 2 connected 5462-10922
    5b146f75357e1adc1b7853aa816182861bf82528 127.0.0.1:7008@17008 slave fb91d987d128eb1bd0b75a61b185ec2cc7840aa0 0 1571274103000 5 connected
    

      分配slots

    redis cluster一共有16383个槽,现在分配到三个

    7003的槽0~5461,7004的槽5462~10922,7005的槽10923~16383

    编写脚本

    vim addslots.sh 

    start=$1
    end=$2
    port=$3
    for slot in `seq ${start} ${end}`
    do
            echo "slot:${slot}"
            /usr/andy/redis-cluster/redis03/redis-cli -p ${port} cluster addslots ${slot}
    done
    

      记住 ` 这个不是单引号

    添加执行权限,并执行

    [root@localhost redis-cluster]# chmod 777 addslots.sh  
    

      

    ./addslots.sh 0 5461 7003
    
    ./addslots.sh 5462 10922 7004
    
    ./addslots.sh 10923 16383 7005
    

      

    验证集群

    槽已经根据集群和主从分配了

    [root@localhost redis03]# ./redis-cli -p 7003 cluster slots
    1) 1) (integer) 0
       2) (integer) 5461
       3) 1) "127.0.0.1"
          2) (integer) 7006
          3) "9f3a0d6bb111cd55eda750ebe66b178f322f76a6"
       4) 1) "127.0.0.1"
          2) (integer) 7003
          3) "5127773661482f675b9477779f8c99b980ba2a42"
    2) 1) (integer) 10923
       2) (integer) 16383
       3) 1) "127.0.0.1"
          2) (integer) 7005
          3) "fb91d987d128eb1bd0b75a61b185ec2cc7840aa0"
       4) 1) "127.0.0.1"
          2) (integer) 7008
          3) "5b146f75357e1adc1b7853aa816182861bf82528"
    3) 1) (integer) 5462
       2) (integer) 10922
       3) 1) "127.0.0.1"
          2) (integer) 7004
          3) "c88360fb8d0727f12f97809d0fc6f8170509c0e0"
       4) 1) "127.0.0.1"
          2) (integer) 7007
          3) "b749dd28e498347e97af02e6670383e78da2029f"
    

      并且集群处于可用状态

    [root@localhost redis03]# ./redis-cli -p 7003 cluster info
    cluster_state:ok
    cluster_slots_assigned:16384
    cluster_slots_ok:16384
    cluster_slots_pfail:0
    cluster_slots_fail:0
    cluster_known_nodes:6
    cluster_size:3
    cluster_current_epoch:6
    cluster_my_epoch:6
    cluster_stats_messages_ping_sent:54002
    cluster_stats_messages_pong_sent:59650
    cluster_stats_messages_sent:113652
    cluster_stats_messages_ping_received:59650
    cluster_stats_messages_pong_received:53999
    cluster_stats_messages_received:113649
    

      自此,手动搭建集群成功。关闭之后下次启动还可以是集群状态,因为信息已经持久化到dump文件里面,也就是data目录下存放的

  • 相关阅读:
    javascript线性渐变2
    javascript无缝滚动2
    javascript Object对象
    javascript无缝滚动
    javascript图片轮换2
    javascript图片轮换
    用C/C++写CGI程序
    linux shell 的 for 循环
    重磅分享:微软等数据结构+算法面试100题全部答案完整亮相
    查看linux服务器硬盘IO读写负载
  • 原文地址:https://www.cnblogs.com/liaoyanglong/p/11690230.html
Copyright © 2011-2022 走看看