Redis集群动态增加或者删除节点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis集群动态增加或者删除节点相关的知识,希望对你有一定的参考价值。

参考技术A 首先新增需要添加的节点,这里添加7007 和 7008

修改一些配置文件信息,参考集群配置。

然后启动相应的节点

127.0.0.1:7007 是新增节点

127.0.0.1:7001 是已经新增集群节点(这里可以随便写一个已知的集群节点 ip : port )

redis-trib.rb add-node 127.0.0.1:7007 127.0.0.1:7001

添加7007到集群

redis-cli -c -p 7001 cluster nodes

增加了新的节点之后,这个新的节点可以成为主节点或者是从节点。

使用redis-trib程序,将集群中的某些哈希槽移动到新节点里面, 这个新节点就成为真正的主节点了

redis-trib.rb reshard 127.0.0.1:7001

系统返回信息会提示我们要移动多少哈希槽,这里移动200个

然后 需要指定把这些哈希槽转移到哪个节点上

当然是转移到新增的节点上

输入我们刚才新增的节点的ID

选择选择槽的方式

输入 all 表示从所有的主节点中随机转移,凑够200个哈希槽
然后再输入 yes ,redis集群就开始分配哈希槽了。

输入 done 表示把指定主节点上的槽分配给新节点.。

打印出随机选择的槽

输入yesr进行分配

查看新增主节点

分配成功

添加7008到集群中去

redis-trib.rb add-node 127.0.0.1:7008 127.0.0.1:7006

查看

添加7008成为7007的从节点

登录7008客户端

执行分配节点

cluster replicate fccadebeb5b769bd084369e5cbe391979fb53b40

fccadebeb5b769bd084369e5cbe391979fb53b40 是 7007 节点 id

查看节点配置

首先要把节点中的哈希槽转移到其他节点中,执行下面的命令

redis-trib.rb reshard 127.0.0.1:7007

提示我们要移动多少哈希槽 ?

输入数字即可

选择接受的槽节点ID?

找一个主节点接受哈希槽即可

选择数据源槽?

输入需要清除的节点ID即可

最后 输入 done

删除分配

查看节点信息

7007已经无哈希槽

最后使用删除节点删除

redis-trib.rb del-node 127.0.0.1:7007 ID ID 是7007的节点ID

查看节点信息

7007已经被成功删除

redis-trib.rb del-node 127.0.0.1:7008 ID ID 是7008的节点ID

查看节点

7008从节点已经没有了

redis5集群搭建

主库宕机,从库会被自动选举为主库master,并继承原主库的哈希槽,当master恢复,会成为现主库的从库,且同步宕机期间的数据

若集群创建出错

step1:关服务

./redis-cli -h fdv-web02.reda -p 7000 -a reda2019 shutdown

step2:删除rdb数据文件,nodes-****.conf

rm -rf dump.rdb  nodes-****.conf

 

redis-5.0.5单机版安装

Step1: 安装依赖包make,gcc

    yum -y install make gcc

step2:使用rz(lrzsz) 上传redis-5.0.5.tar.gz到/apps/applications/software目录http://download.redis.io/releases/redis-5.0.3.tar.gz

Step3:tar解包redis-5.0.5.tar.gz,删除tar包,并cd进入

tar -xf redis-5.0.5.tar.gz

rm -rf redis-5.0.5.tar.gz        //删除tar包

cd redis-5.0.5

 

Step4:编译redis

make         //编译

make install  PREFIX=/apps/applications/software/redis              //安装

mkdir /apps/applications/software/redis/{conf,log,data}

 

step5:配置/etc/security/limits.conf 文件添加

* - nofile 10032

* soft nofile 65536

* hard nofile 65536

 

step6:准备redis配置文件

cp /apps/applications/software/redis-5.0.5/redis.conf  apps/applications/software/redis/conf/redis-7000.conf

编辑redis-7000.conf

详解:(进入文件后输入/并在其后写入关键字)

pidfile /apps/applications/software/redis/data/redis-7000.pid          //pid存放路径

logfile /apps/applications/software/redis/log/redis-7000.log          //redis日志文件存放路径

port 7000                            //redis端口

bind econ-web01.reda            //主机名

dbfilename dump-7000.rdb        //redis数据文件名

dir /apps/applications/software/redis/data             //redis数据库数据文件rdb文件放置的路径

cluster-config-file /apps/applications/software/redis/data/nodes-7000.conf                   //集群信息存放文件

cluster-enabled yes        //启用集群

clster-node-timeout 5000            //节点超时时间,一直最好

protected-mode no   //关闭redis保护模式

daemonize yes               //开启守护进程模式

 

Step7:复制redir-7000.conf到redir-7001.conf

cd /apps/applications/software/redis/conf/

cp redis-7000.conf redis-7001.conf

 

Step8:redis-7001.conf配置文件的7000批量更改为7001

vim redis-7001.conf

输入:

:% s/7000/7001/g

 其他两台操作相同,但是记得修改port和bind

 

Step9:编写redis启动脚本和停服务脚本

cd /apps/applications/software/redis

 启动脚本start.sh:

#!/bin/bash

export BASH_HOME=$HOME
$BASH_HOME/software/redis/bin/redis-server $BASH_HOME/software/redis/conf/redis-7000.conf > $BASH_HOME/software/redis/log/redis-7000.log &
$BASH_HOME/software/redis/bin/redis-server $BASH_HOME/software/redis/conf/redis-7001.conf > $BASH_HOME/software/redis/log/redis-7001.log &

 

停止脚本stop.sh:

#!/bin/bash
export BASH_HOME=$HOME
$BASH_HOME/software/redis/bin/./redis-cli -h fdv-web02.reda -p 7000 -a reda2019 shutdown
$BASH_HOME/software/redis/bin/./redis-cli -h fdv-web02.reda -p 7001 -a reda2019 shutdown

 

chmod +x start_all.sh stop_all.sh   #赋予x权限,变成可执行脚本

 

1、在 redis5 之后,redis cluster 的搭建不在需要默认的ruby脚本,使用 redis-cli 命令即可完成搭建
2、创建集群的这些redis实例中都必须是空的
3、在一个 redis 的集群中默认存在 16384 个哈希槽,这 16384 个哈希槽会默认分配给集群中的主节点
4、增加一个主节点,就意味着要从原来的主节点中移动部分哈希槽给新的主节点
5、删除一个主节点,就需要把该主节点分配到的哈希槽归还给别的主节点
6、在主节点之间移动哈希槽不需要停止操作,因此对集群没多大影响
7、一个集群最好有奇数个主节点
8、集群创建过程中涉及到的命令


集群创建:./redis-cli --cluster create

                 ip:port   ip:port

                ip:port    ip:port

               ip:port     ip:port    --cluster-replicas 1   [-a 密码]                    [--cluster-replicas 1 表示每个主节点下有一个从节点]

添加一个主节点:

                   ./redis-cli --cluster  add-node  新ip:port  集群任一ip:port  
添加一个节点作为另外一个节点的从节点:
                     ./redis-cli --cluster  add-node  新ip:port  集群任一ip:port    --cluster-slave
删除一个节点 :

                        ./redis-cli --cluster del-node 集群任一ip:port   节点id

连接到集群:

               ./redis-cli -c -p 访问的端口 -h 访问的机器 -a 密码


查看集群中的节点:

   ./redis-cli -p 7000 cluster nodes

    ./redis-cli --cluster check    集群ip:端口   -a 密码

  ./redis-cli --cluster info   集群ip:端口   -a 密码


集群中的每个redis节点需要放行2个端口的访问:
   正常的客户端通讯端口,比如6379
   集群总线端口,总是 客户端通讯接口+10000,比如:16379,该端口主要是 集群总线进行故障检测、配置更新、故障转移等操作

 


如果redis集群中的某个主节点和与之相关的所有从节点都宕机了,那么redis集群将无法提供服务,因为我们不能再提供 这个master node 节点上的 哈希槽。


1.redis 集群不保证强一致性,这意味着在某些时候可能丢失某些写数据。
 |- 因为集群中从节点的复制是异步的。
 |- redis 集群在绝对需要时也支持同步写入,但是这也不能保证完全的强一致性。

2.配置redis集群的最小配置文件如下:

 

 3.cluster-config-file 这个配置中指定的 配置文件 由redis自动维护,我们自己不要随意修改。这个文件有redis集群实例在启动时生成

4.由于本地机器不够,因此可在一台电脑上进行搭建,以不同的端口进行区分。

 

redis集群配置清单

 

********************************************************

创建集群
1、集群创建命令
redis-cli --cluster create host1:port1 ... hostN:portN --cluster-replicas 一个主 的从个数
2、集群创建(3主3从-注意节点的顺序)

可以看到:16384个哈希槽平均分配给了3个主节点,从节点没有分配哈希槽。

3、向集群中设置值测试一下

-c 表示的是连接集群.
从上图可以看到,我们连接的是 7001 端口,但是设置值的时候,由于key(cluster)对应的哈希槽的值是14041,所以重定向到了 7003 端口上。

 

动态向集群中添加一个主节点并分片
           添加节点命令:redis-cli --cluster   add-node   新节点ip:新节点port   集群中以存在的节点ip:集群中已存在的节点port
           分片命令:redis-cli --cluster    reshard  需要分片的节点ip:需要分片的节点端口

 

注意:此时该节点只是作为主节点添加到了集群中,但是没有进行分片,是不可存储数据的,如果要存储数据,需要进行分片操作

 

动态向集群中添加一个从节点

/usr/local/redis/redis-5.0.3/src/redis-cli --cluster add-node 新节点ip:新节点port   集群中以存在的节点ip:集群中已存在的节点port --cluster-slave



动态删除集群中一个从节点

/usr/local/redis/redis-5.0.3/src/redis-cli --cluster del-node   集群中以存在的节点ip:集群中已存在的节点  所要删除的redis服务器id

 

动态删除集群中一个主节点
step1:归还槽

 

 

 step2:删除节点

命令: /usr/local/redis/redis-5.0.3/src/redis-cli --cluster del-node 集群中以存在的节点ip:集群中已存在的节点  所要删除的redis服务器id

 

以上是关于Redis集群动态增加或者删除节点的主要内容,如果未能解决你的问题,请参考以下文章

redis cluster集群动态伸缩--删除主从节点

实战案例:Redis集群动态缩容

Redis集群生产环境搭建,主从搭建,动态增删步骤

Redis集群生产环境搭建,主从搭建,动态增删步骤

自学总结redis第四部分(集群搭建以及增加和删除节点)

redis群集节点删除和添加