1. Redis Cluster高可用集1.0 准备工作1.1 节点分布1.2 配置文件1.3 启动Redis服务1.4 构建集群2. 集群检查3. 关闭集群4. 扩容4.1 帮助命令4.2 加入主节点4.2.1 开启redis服务4.2.2 加入新的节点4.2.3 其他命令5. 缩容5.1 删除从节点5.2 删除主节点
1. Redis Cluster高可用集
1.0 准备工作
一个高可用Redis最少需要6台机器。三主三从 ,Redis CLuster 是自带选举功能的不需要哨兵。
/etc/redis/redis.conf
文件确认为未修改过的文件
# 查看redis服务,先关闭 ps -ef | grep redis # 停止redis service redis-server stop # 停止哨兵redis-sentinel service redis-sentinel stop # 停止指定端口号 redis-cli -h 192.168.92.145 -p 26380 shutdown redis-cli -p 26380 shutdown # 查看redis-server状态 sudo systemctl status redis-server # 启动 service redis-server start # 停止,可以正常关闭 service redis-server stop # 重启 service redis-server restart # 查看状态 service redis-server status
1.1 节点分布
- 为了方便,这里一台机器开两个redis服务(当然也可以直接开6台进行测试)
Host | Master | Slave |
192.168.92.145 | 8001 | 8002 |
192.168.92.146 | 8001 | 8002 |
192.168.92.147 | 8001 | 8002 |
1.2 配置文件
每一台服务器配置两个启动配置文件
/etc/redis/redis8001.conf
vim /etc/redis/redis8001.conf
# 引用Redis的默认配置文件 # include /etc/redis/redis.conf # 需要注释掉bind bind 0.0.0.0 #关闭保护模式,开启的话,只有本机才可以访问redis protected-mode no #修改redis监听端口,可自定义 port 8001 # 后台启动 daemonize yes # pid存放目录 pidfile /var/run/redis/redis-server8001.pid # 设置redis日志存放路径 logfile /var/log/redis/redis-server8001.log # 当前主服务RDB文件名称 dbfilename dump8001.rdb # 修改持久化文件目录,可自定义 #dir /var/lib/redis #主从同步master的密码 # masterauth 123456 #设置redis密码 # requirepass 123456 # 日志追加模式 #appendonly no ## 启动集群模式 cluster-enabled yes # 集群节点信息文件,这里的800x最好和port对应上,redis集群自动创建、自动更新 cluster-config-file nodes-8001.conf # 集群超时时间,节点超过这个时间没反应就断定是宕机 cluster-node-timeout 15000
/etc/redis/redis8002.conf
vim /etc/redis/redis8002.conf
# 引用Redis的默认配置文件 #include /etc/redis/redis.conf # 需要注释掉bind bind 0.0.0.0 #关闭保护模式,开启的话,只有本机才可以访问redis protected-mode no #修改redis监听端口,可自定义 port 8002 # 后台启动 daemonize yes # pid存放目录 pidfile /var/run/redis/redis-server8002.pid # 设置redis日志存放路径 logfile /var/log/redis/redis-server8002.log # 当前主服务RDB文件名称 dbfilename dump8002.rdb # 修改持久化文件目录,可自定义(确定文件夹存在) #dir /var/lib/redis/node8002 #主从同步master的密码 # masterauth 123456 #设置redis密码 # requirepass 123456 # 日志追加模式 #appendonly no ## 启动集群模式 cluster-enabled yes # 集群节点信息文件,这里的800x最好和port对应上,redis集群自动创建、自动更新 cluster-config-file nodes-8002.conf # 集群超时时间,节点超过这个时间没反应就断定是宕机 cluster-node-timeout 15000
1.3 启动Redis服务
分别启动六个节点
# 启动redis redis-server /etc/redis/redis8001.conf redis-server /etc/redis/redis8002.conf
查看
ps -ef | grep redis
1.4 构建集群
- 在一个节点启动即可
# --cluster-replicas 1表示每个主节点需要1个从节点 redis-cli --cluster create 192.168.92.145:8001 192.168.92.145:8002 192.168.92.146:8001 192.168.92.146:8002 192.168.92.147:8001 192.168.92.147:8002 --cluster-replicas 1
2. 集群检查
# -a访问服务端密码,-c表示集群模式,-h指定ip地址,-p端口号 redis-cli -c -h 192.168.92.145 -p 8001 # 查看集群信息 cluster info # 查看节点列表 cluster nodes
3. 关闭集群
关闭集群需要逐个关闭,集群一旦构建好后,停机后只需每个节点重新启动便可,不需要在执行集群创建命令
redis-cli -c -h 192.168.92.145 -p 8001 shutdown
4. 扩容
4.1 帮助命令
集群帮助命令查看
redis-cli --cluster help
- create:创建一个集群环境host1:port1 … hostN:portN
- call:可以执行redis命令
- add-node:将一个节点添加到集群里,第一个参数为新节点的ip:port,第二个参数为集群中任意一个已经存在的节点的ip:port
- del-node:移除一个节点
- reshard:重新分片
- check:检查集群状态
4.2 加入主节点
4.2.1 开启redis服务
我这里在
redis01:192.168.92.145
、redis02:192.168.92.146
两台机器上开启新新的redis服务。- 新建启动文件
/etc/redis/redis8003.conf
vim /etc/redis/redis8003.conf
# 引用Redis的默认配置文件 #include /etc/redis/redis.conf # 需要注释掉bind bind 0.0.0.0 #关闭保护模式,开启的话,只有本机才可以访问redis protected-mode no #修改redis监听端口,可自定义 port 8003 # 后台启动 daemonize yes # pid存放目录 pidfile /var/run/redis/redis-server8003.pid # 设置redis日志存放路径 logfile /var/log/redis/redis-server8003.log # 当前主服务RDB文件名称 dbfilename dump8003.rdb # 修改持久化文件目录,可自定义(确定文件夹存在) #dir /var/lib/redis/node8003 #主从同步master的密码 # masterauth 123456 #设置redis密码 # requirepass 123456 # 日志追加模式 #appendonly no ## 启动集群模式 cluster-enabled yes # 集群节点信息文件,这里的800x最好和port对应上,redis集群自动创建、自动更新 cluster-config-file nodes-8003.conf # 集群超时时间,节点超过这个时间没反应就断定是宕机 cluster-node-timeout 15000
- 启动服务redis01、redis02
redis-server /etc/redis/redis8003.conf
4.2.2 加入新的节点
- 加入新节点,将redis01
192.168.92.145:8003
加入集群
# redis-cli --cluster add-node 新节点 已存在节点 redis-cli --cluster add-node 192.168.92.145:8003 192.168.92.145:8001
- 现在看下集群状态,多了一个master(刚加入的节点都直接是master)
root@redis01:~# redis-cli -c -h 192.168.92.145 -p 8001 192.168.92.145:8001> cluster nodes
- 分配槽位,加入的master不可以使用因为它没有槽位,需要rehash分配槽位
redis-cli --cluster reshard 192.168.92.145:8001
输入:all
输入:yes,开始
- 再次查看集群信息
root@redis01:~# redis-cli -c -h 192.168.92.145 -p 8001 192.168.92.145:8001> cluster nodes
- 加入从节点,,将redis02
192.168.92.146:8003
加入集群
redis-cli --cluster add-node 192.168.92.146:8003 192.168.92.145:8001
- 刚加入在集群里面是master
# 1.进入192.168.92.146:8003的客户端 redis-cli -c -h 192.168.92.146 -p 8003 # 2. 分配主节点 后面这字符串就是192.168.92.145:8003的唯一标识 cluster replicate ac4ddfd50a919e0c735f4b77354b96e24383df44
第5、6步可以合并为一步
redis-cli --cluster add-node 192.168.92.146:8003 192.168.92.145:8001 --cluster-slave --cluster-master-id ac4ddfd50a919e0c735f4b77354b96e24383df44
扩容成功💥
4.2.3 其他命令
# 还可以将空 master,转换为 slave(终端操作)。 cluster replicate <master-node-id>
5. 缩容
删除节点必须先备份数据,将数据分配非其他节点(否则会丢失数据)
5.1 删除从节点
# 后面是从节点192.168.92.146:8003的id redis-cli --cluster del-node 192.168.92.146:8003 7096ba4feee1c39561dddd4466251ec925ca99c9
5.2 删除主节点
- 删除主节点之前需要先把hash槽释放掉,主节点
192.168.92.145:8003
redis-cli --cluster reshard 192.168.92.145:8003
- 输入:yes 开始移动
- 查看集群情况,已经移动了节点hash槽
root@redis01:~# redis-cli -c -h 192.168.92.145 -p 8001 192.168.92.145:8001> cluster nodes
- 删除节点
redis-cli --cluster del-node 192.168.92.145:8003 ac4ddfd50a919e0c735f4b77354b96e24383df44
- 查看集群,节点已经删除
root@redis01:~# redis-cli -c -h 192.168.92.145 -p 8001 192.168.92.145:8001> cluster nodes
缩容成功🚀