zoukankan      html  css  js  c++  java
  • linux下redis4.0.2集群部署(利用原生命令)

    一、部署架构如下

    每台服务器准备2个节点,一主一从,主节点为另外两台其中一台的主,从节点为另外两台其中一台的从。

    二、准备6个节点配置文件

    在172.28.18.75上操作

    cd /etc/redis

    vim redis-25701.conf

    内容如下

    bind 172.28.18.75
    port 25701
    masterauth "Zaq1xsw@"
    requirepass "Zaq1xsw@"
    protected-mode yes
    daemonize yes
    dir "/etc/redis"
    pidfile "/var/run/redis_25701.pid"
    loglevel notice
    logfile "redis-25701.log"
    dbfilename "dump-25701.rdb"
    
    cluster-enabled yes
    cluster-node-timeout 15000
    cluster-config-file node-25701.conf
    cluster-require-full-coverage no

    替换端口号,并生成一个从节点配置文件

    sed 's/25701/25702/g' redis-25701.conf > redis-25702.conf

    复制这两个配置文件到172.28.18.103和172.28.18.104对应的目录下

    scp -P25601 redis-25701.conf root@172.28.18.103:/etc/redis/

    scp -P25601 redis-25702.conf root@172.28.18.103:/etc/redis/

    scp -P25601 redis-25701.conf root@172.28.18.104:/etc/redis/

    scp -P25601 redis-25702.conf root@172.28.18.104:/etc/redis/

    三、启动6个节点

    redis-server redis-25701.conf

    查看redis-25701.log

    集群模式运行

    打开node-25701.conf文件,里面有如下内容

    表示自己的nodeid,并且是一个master,发现自己,

    启动从节点:

    redis-server redis-25702.conf

    按照以上操作,启动另外两台服务器的4个节点

    启动完毕,可以使用redis-cli来查看集群信息:

    redis-cli -h 172.28.18.75 -p 25701 -a password  cluster nodes

     

    查看集群配置文件内容

    redis-cli -h 172.28.18.75 -p 25701 -a password    cluster info

    当前集群状态是失败的,分配的槽为0

    四、执行节点之间的meet操作,使相互之间可以通信感知对方

    在172.28.18.75上执行

    将25701节点和25702节点之间通信,返回OK,成功,此时我们查看25701的节点信息,已经感知到了25702节点信息

     

    同样查看25702,也感知到了25701

     

    继续执行meet操作,使172.28.18.75的25701和另外两台服务器的25701和25702通信

    redis-cli -h 172.28.18.75 -p 25701 -a password cluster meet 172.28.18.103 25701

    redis-cli -h 172.28.18.75 -p 25701 -a password cluster meet 172.28.18.103 25702

    redis-cli -h 172.28.18.75 -p 25701 -a password cluster meet 172.28.18.104 25701

    redis-cli -h 172.28.18.75 -p 25701 -a password cluster meet 172.28.18.104 25702

    此时,所有节点都感知到了对方,总共6个节点

     

    握手操作成功完成,目前配置显示所有节点都是master,所以接下来需要设置主从

    五、设置主从节点

    172.28.18.75 25701(主)--》172.28.18.103 25702(从)

    172.28.18.103 25701(主)--》172.28.18.104 25702(从)

    172.28.18.104 25701(主)--》172.28.18.75 25702(从)

    1、172.28.18.75 25701(主)--》172.28.18.103 25702(从)

    在从节点172.28.18.103上操作

    redis-cli -h 172.28.18.103 -p 25702 -a password cluster replicate 5f5939a7b9f6c1290173b7d326b076ee0736a268

     25702:从节点端口

    5f5939a7b9f6c1290173b7d326b076ee0736a268:主节点nodeid,可通过 redis-cli 的cluster nodes 来查询

    返回ok,查询cluster nodes,25702已经变成172.28.18.75 25701的从节点

    再查询172.28.18.75 25701节点信息,103的25702成为了他的从节点

     再按照以上操作设置另外两台主从

    在172.28.18.104上执行

    将104 25702变成103 25701的从节点

    在172.28.18.75上执行

    将75 25702变成104 25701的从节点

    此时,查看75 25701集群节点信息

    3主3从设置完毕

    六、为主节点分配槽slot

    3主:将16384个槽分为3份,0到5461的数据分到75 25701端口,将5462到10922的数据分到103 25701端口,10923到16383的数据分到104 25701端口

    在172.28.18.75上编写脚本

    vim add_slots.sh

    #!/bin/bash
    
    start=$1 #定义一个起始变量
    end=$2 #定义一个结束变量
    
    for slot in `seq $start $end` #利用for循环来重复执行命令,在slot中
    do 
    echo "slot:$slot"
    redis-cli -h 172.28.18.75 -p 25701 -a password cluster addslots $slot
    done

    执行脚本:

    chmod +x add_slots.sh

    ./add_slots.sh 0 5461

    完毕后,查看节点信息

    成功分配5462个槽

    在另外两台服务器也分配剩余的槽

    ./add_slots.sh 5462 10922

    ./add_slots.sh 10923 16383

    查看槽分配结果

    redis-cli -h 172.28.18.75 -p 25701 -a password cluster slots

    5461个槽分配到172.28.18.75 25701上,并且它的从节点为172.28.18.103  25702

    到此,分配槽操作完毕。

    七、测试结果

     连接172.28.18.75 25701,注意一定要加"-c"参数,否则如果数据没有分配到当前节点则不会自动连接其他集群的节点。

    redis-cli -c -h 172.28.18.75 -p 25701 -a password

     

    返回OK,并且数据被分配到了104 25701节点的槽里。并且连接也自动变为104的25701,此时get

    返回数据。集群已经正常工作。

    此时,停掉172.28.18.75 25701主节点,172.28.18.103 25702将晋升为主节点

    查看172.28.18.103 25702节点信息

    此时自己成为master,而172.28.18.75 25701则显示失败状态,此时把172.28.18.75 25701节点启动

    此时自己成为从节点,再查看172.28.18.103 25702节点信息,172.28.18.75 25701,已经成为salve。

     至此,redis原生安装集群设置完毕。

  • 相关阅读:
    mysql命令行操作 添加字段,修改字段
    编辑器phpstrom的快捷键修改
    echo json数据给ajax后, 需要加上exit,防止往下执行,带上其他数据,到时ajax失败
    多选出差同事id,拼接,去掉最后逗号
    引入的ajax中异步添加联系人
    .NET 4 实践
    使用dynamic和MEF实现轻量级的AOP组件 (3)
    使用dynamic和MEF实现轻量级的AOP组件 (2)
    使用dynamic 和MEF实现轻量级的 AOP 组件 (1)
    AOP-SheepAspect
  • 原文地址:https://www.cnblogs.com/sky-cheng/p/10685010.html
Copyright © 2011-2022 走看看