Redis实践(5)Cluster模式高可用架构

Redis
placeholder image
admin 发布于:2023-05-28 16:21:18
阅读:loading

Redis的高可用架构包含主从复制、Sentinel哨兵和Cluster机制,而在前文中大量的实践了主从模式的高可用架构下的相关实现,也讲述到了这种模式的几个劣势,所以基于主从复制架构响应的实现告一段落了,而哨兵模式的高可用方案在前几年初期学习Redis时认为太过复杂,学习难度较大,所以本批次的实践将跳过哨兵模式,直接拥抱更科学的Cluster模式,前文提出的主从架构模式劣势参考如下:

(1)所有从机的数据依赖主机节点,主节点不能宕机,否则主节点数据的写入将不可用,从节点的读取尚可,可用性较低;

(2)主节点的写入压力仍然存在,从节点为只读模式无法分担写入压力;

1.哨兵(Sentinel)模式

Redis Sentinel 的高可用性是非集群Redis的高可用,Redis Sentinel 在不使用Redis Cluster时为 Redis 提供高可用性。Redis Sentinel 还提供其他附带任务,例如监控、通知、自动故障转移并充当客户端的配置提供程序。在主从复制架构的基础上,增强了哨兵机制,可实现了自动化的故障恢复,使得Master机器的高可用更加稳定(哨兵发现主服务器挂了后,就会从slave中重新选举一个主服务器),但仍然存在的缺陷是写操作无法负载均衡,并且存储能力仍然受到单机的限制。所以,我认为我不去深度挖掘哨兵相关的高可用也是明智(可以容忍自己不去了解)的。

2.Cluster(集群)模式

Redis Cluster 是 Redis 的分布式实现,在 Redis 3.0 或更高版本中实现的,通过分片集群的方式,解决了写操作无法负载均衡,以及存储能力受到单机限制的问题,而且也具有故障迁移(主从切换)的功能,是一种了较为完善的高可用方案。从 3.0 版引入的 Redis 集群技术支持对给定的 Redis 部署进行水平扩展。使用 Redis 集群,数据被拆分到多个集群节点,每个节点都通过使用标准 TCP 端口向客户端连接开放,为应用程序提供一致且可靠的数据服务层,参考如下集群架构图:

image.png

3.Cluster搭建

一个集群的最小体现,必须至少有三个主节点,为了保证其高可用,每个主节点应该至少有一个从节点,所以至少需要启动6个节点对外提供服务,在前文中我们的主从架构使用了三台机器实现的一主二从,本次集群仍以这三台服务器为示例,每个服务器上分别启动一个主节点和一个从节点,参考服务器配置列表如下:

IP地址端口号标识

192.168.244.134

6379Master
7379Slave
192.168.244.1386379Master
7379Slave
192.168.244.139
6379Master
7379Slave

上述表格声明了3台服务器6个节点和端口,仍然是以Redis7.0.11版本进行的配置搭建,而且安装的根目录$REDIS_HOME仍然是“/app/redis/redis-stable”,在默认的redis.conf配置基础上进行改写,以下是改写的明细过程:

(1)在$REDIS_HOME下新建cluster文件夹,拷贝redis.conf原始文件为redis.cluster.master.conf和redis.cluster.slave.conf文件

(2)分别修改redis.cluster.master.conf和redis.cluster.slave.conf文件配置,与原始redis.conf相比本次修改了14处默认配置,各个配置均有不同的含义,需要掌握;

(3)在$REDIS_HOME/cluster文件夹下再新建6379(或7379)文件夹,用以存放pid、log、data等文件,创建好目录即可,即所有的文件均存放在此目录下

(4)在$REDIS_HOME/cluster文件夹下共有文件夹6379、7379,文件redis.cluster.master.conf和redis.cluster.slave.conf

(5)master与slave节点配置文件的区别几乎一致,将所有的6379修改为7379即可,即新建7379文件夹再修改配置文件即可;

image

(默认redis.conf文件与Master节点区别对比)

image

Master节点redis.conf文件与Slave节点区别对比)

(6)假设当前`pwd`为$REDIS_HOME,路径为“/app/redis/redis-stable”,在此路径项下分别启动 3 台服务器的 6 个节点,此时虽然启动6个节点,但它们是相互独立的,并不存在任何从属关系,参考启动命令如下:

# 134、138、139 三个节点均启动,共计6个节点

bin/redis-server cluster/redis.cluster.master.conf

bin/redis-server cluster/redis.cluster.slave.conf

(7)选任一个命令终端执行创建集群命令,将6个节点连接在一起,执行这条命令需要确认三台机器之间的redis实例要能相互访问,可以先简单把所有机器防火墙关掉,如果不关闭防火墙则需要打开redis服务端口和集群节点gossip通信端口16379(默认是在redis端口号上加1W下面命令里的1代表为每个创建的主服务器节点创建一个从服务器节点(这里是redis帮我们选主节点,不要我们配),用redis‐cli创建整个redis集群(redis5以前的版本集群是依靠ruby脚本redis‐trib.rb实现):

bin/redis-cli -a chendd --cluster create --cluster-replicas 1 192.168.244.134:6379 192.168.244.138:6379 192.168.244.139:6379 192.168.244.134:7379 192.168.244.138:7379 192.168.244.139:7379

上述命令中的 1 是多个节点的从属关系,共计6个节点时,设置1表示前面 3 个节点为Master,后面3个为Slave,在执行上述命令时中间会有交互需要确认是否继续,必须输入“yes”(曾经输入y后后面的一通操作等于各种白扯),该命令执行输出结果将在结束部分的下载文件中给出,参考如下图所示:

image.png

(创建集群)

image.png

(查看集群节点信息和集群状态)

4.Cluster验证

关于集群的验证,可用上面的命令查看集群节点列表和集群状态,通过cluster_state:ok来查看,本次给出3个截图分别是启动6个节点(证明服务启动成功),6个节点使用Cluster模式进行客户端连接,6个节点的数据通过客户端随意更改,对于其它服务器实时生效(这个gif图较大,在下方的下载处给出)。

6个节点启动成功.gif

(6个节点验证启动成功)

6个节点连接数据共享.gif

(6个节点连接列表)

5.命令参考

# 集群模式启动
redis/redis-server redis.cluster.master.conf
redis/redis-server redis.cluster.slave.conf
 
# 创建 redis集群
redis-cli -a chendd --cluster create --cluster-replicas 1 192.168.244.134:6379 192.168.244.138:6379 192.168.244.139:6379 192.168.244.134:7379 192.168.244.138:7379 192.168.244.139:7379
 
#验证集群
#‐a访问服务端密码,‐c表示集群模式,指定ip地址 和端口号
#连接任意一个客户端即可
redis-cli -a chendd -c -h 192.168.11.101 ‐p 6391
#进行验证:
cluster info(查看集群信息)、cluster nodes(查看节点列表)

#关闭集群则需要逐个进行关闭,使用命令:
bin/redis-cli -a chendd -c -h 192.168.244.134 -p 6379 shutdown
bin/redis-cli -a chendd -c -h 192.168.244.134 -p 7379 shutdown
bin/redis-cli -a chendd -c -h 192.168.244.138 -p 6379 shutdown
bin/redis-cli -a chendd -c -h 192.168.244.138 -p 7379 shutdown
bin/redis-cli -a chendd -c -h 192.168.244.139 -p 6379 shutdown
bin/redis-cli -a chendd -c -h 192.168.244.139 -p 7379 shutdown
# 以集群方式连接并执行命令
bin/redis-cli -c -a chendd -h 192.168.244.134 -p 6379 cluster nodes
# 集群方式连接
bin/redis-cli -a chendd -c -h 192.168.244.134 -p 7379

6.相关下载

(1)《创建cluster节点命令输出.docx》;

(2)《6个节点连接数据共享.gif》;

(3)《redis.default.conf》redis默认原始的配置文件redis.conf;

(4)《redis.cluster.master.conf》6379的Master节点参数配置文件;

(5)《redis.cluster.slave.conf》7379的Slave节点参数配置文件;

redis集群cluster多主多从.zip


 点赞


 发表评论

当前回复:作者

 评论列表


留言区