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集群动态增加或者删除节点的主要内容,如果未能解决你的问题,请参考以下文章