1、什么是集群部署
Redis集群(cluster)是Redis的一种分布式运行模式,通过分片(sharding)提供数据的自动分区和管理,实现数据的高可用性和可扩展性。
在集群模式下,数据分布在多个Redis节点上,节点分为主节点和从节点。主节点负责读写请求和维护集群信息,从节点只进行复制主节点的数据和状态信息。
1.1、集群数据分片
Redis 集群的数据分片是通过哈希槽(hash slots)实现的。Redis 集群有16384个哈希槽(编号:0~16383),集群每个节点负责管理一部分哈希槽。
每个key通过CRC16校验后对16384取余映射到某个哈希槽上,通过这个值,可以找到对应的哈希槽对应的节点,直接自动跳转到这个节点进行存取操作。
以集群3个节点为例详解:
节点分布计算每个约 16384/3=5461.33,取整。
节点1哈希槽:0~5460
节点2哈希槽:5461~10922
节点3哈希槽:10923~16383
1.2、集群优点
- 集群分片数据分散到多个节点,突破了Redis单机内存大小的限制,增加存储容量
- 每个主节点都可对外提供读写服务,提高集群响应能力
- 高可用,支持主从复制和主节点自动故障转移
1.3、整体架构图
2、环境准备&部署说明
集群配置为3主3从模式,也就是每台服务器上有两个Redis节点,分别为主节点master和从节点slave。
环境说明
服务器1:192.168.242.44
服务器2:192.168.242.45
服务器3:192.168.242.46初始配置:主节点端口:6379 ,从节点端口:6380
每个节点都有6379和6380两份配置
部署步骤说明:
- 先在3个虚拟服务器上创建存放集群配置目录和存储数据目录
- 复制
redis.conf
到存放集群配置目录,命名为redis_6379.conf
- 修改
redis_6379.conf
,再复制出redis_6380.conf
并修改 - 3个虚拟服务器都配置相同的
6379
、6380
的redis.conf
- 3个虚拟服务器都以
6379
、6380
的redis.conf
启动redis服务 - 在其中一个虚拟服务器,执行命令创建3主3从集群
- 故障模拟44主节点下线,再恢复44节点服务
3 、配置Redis
分别在3个虚拟服务器上创建存放集群配置目录和存储数据目录
#存放集群配置的目录
mkdir /opt/apps/server/redis/redis-stable/cluster
#存储数据目录
mkdir /opt/apps/server/redis/cluster
以单机部署的redis.conf
复制一份到/redis-stable/cluster/
下
# 切换到集群配置的目录
cd /opt/apps/server/redis/redis-stable/cluster
# 因需要两份,配置以端口后缀命名
cp redis.conf cluster/redis_6379.conf
集群配置–通用配置:
# 允许所有的IP地址
bind * -::*
# 后台运⾏
daemonize yes
# 开启集群模式
cluster-enabled yes
# 集群节点超时时间,默认15000
cluster-node-timeout 5000
# 数据存储⽬录
dir "/opt/apps/server/redis/cluster"
# 开启AOF持久化
appendonly yes
集群配置–不需要密码【二选一】:
如果选择该配置,后面相关启动命令都不需要加-a pass
# 保护模式,默认开启,no 关闭, yes 开启,需要配置requirepass
protected-mode no
集群配置–需要密码【二选一】:
如果选择该配置,后面相关启动命令都需要加-a pass
,我选择是这个配置。
# 保护模式,默认开启,no 关闭, yes 开启,需要配置requirepass
protected-mode yes
# 保护模式是yes时,才需要设置,密码验证
requirepass 123456
# 主节点密码验证
masterauth 123456
集群配置–需要端口变化–端口6379:
如果是多台服务器,就可以同一个配置即可,相当于3主3从需要6台服务器。
# 端⼝
port 6379
# log⽇志
logfile "/opt/apps/server/redis/redis-stable/cluster/redis_6379.log"
# 集群节点配置⽂件,该文件不手工配置
cluster-config-file nodes-6379.conf
# AOF⽂件名
appendfilename "appendonly_6379.aof"
# RBD⽂件名
dbfilename "dump_6379.rdb"
redis_6379.conf
按以上配置好后,复制一份配置出来,文件命名为redis_6380.conf
# 复制文件
cp redis_6379.conf redis_6380.conf
集群配置–需要端口变化–端口6380:
其他配置按上面的配置参考不变。
# 端⼝
port 6380
# log⽇志
logfile "/opt/apps/server/redis/redis-stable/cluster/redis_6380.log"
# 集群节点配置⽂件,该文件不手工配置
cluster-config-file nodes-6380.conf
# AOF⽂件名
appendfilename "appendonly_6380.aof"
# RBD⽂件名
dbfilename "dump_6380.rdb"
配置好44节点的redis_6379.conf
、redis_6380.conf
远程拷贝到45、46节点:
如果想熟悉过程,可以按上面的配置参考操作。
scp redis_6379.conf root@192.168.242.45:/opt/apps/server/redis/redis-stable/cluster/
scp redis_6380.conf root@192.168.242.45:/opt/apps/server/redis/redis-stable/cluster/
scp redis_6379.conf root@192.168.242.46:/opt/apps/server/redis/redis-stable/cluster/
scp redis_6380.conf root@192.168.242.46:/opt/apps/server/redis/redis-stable/cluster/
远程copy需要用户自己确认并输入密码,如下:
4、启动redis 集群服务和查看状态
配置⽂件准备完成之后,启动所有redis服务,⽤cluster配置⽂件
3台服务器都需要,简便方法是设置发送键盘输入的所有会话(打开3个服务器)
# 切换到cluster配置所在目录
cd /opt/apps/server/redis/redis-stable/cluster/
# 配置⽂件准备完成之后,启动所有redis服务,⽤cluster配置⽂件
redis-server redis_6379.conf
redis-server redis_6380.conf
检查服务状态,必须是正常启动且是cluster
# 检查服务状态
ps aux|grep redis
创建3主3从集群模式,每⼀个主节点带⼀个从节点 ,在其中一个服务器上执行一次即可
# 创建3主3从集群模式,每⼀个主节点带⼀个从节点
# --cluster-replicas 后面带的数字1表示1个从节点
redis-cli -a 123456 --cluster create --cluster-replicas 1 192.168.242.44:6379 192.168.242.44:6380 192.168.242.45:6379 192.168.242.45:6380 192.168.242.46:6379 192.168.242.46:6380
查看集群相关信息,如果是保护模式都需要加授权-a pass
# 查看集群信息
redis-cli -a 123456 cluster info
# 查看单个节点信息
redis-cli -a 123456 info replication
# 查看集群节点身份信息
redis-cli -a 123456 cluster nodes
查看集群信息
查看单个节点信息
查看集群节点身份信息
5、故障模拟
下线主节点192.168.242.44:6379
,看集群节点信息
# 在主节点上执行
redis-cli -p 6379 -a 123456 shutdown
再上线节点:192.168.242.44:6379
,状态会变化为从节点
# 切换到配置目录
cd /opt/apps/server/redis/redis-stable/cluster
# 重新启动44:6379服务
redis-server redis_6379.conf
看集群节点信息对比信息
6、我的公众号
敬请关注我的公众号:大象只为你,持续更新技术知识…