0.前言
前面我们部署了redis的哨兵模式,通过哨兵模式的功能验证可以知道redis的哨兵模式基本可以支持高可用和读写分离。不过哨兵模式是基于主从模式,而主从模式中每个redis节点存储的数据都是一样的,当redis需要存储的数据容量过大,单个节点无法满足的时候又该怎么办呢?这个时候就需要使用redis的cluster模式了,cluster模式中有多个分片,每个分片中redis节点存储的数据是不一样的,相当于横向扩容,这样就可以存储更多的数据,而每个分片又是由主从模式组成的,用来做数据冗余实现高可用。
cluster集群模式的架构示意图如下:
如上图所示,每个node里面的master都可以看作一个分片,三个node的master存储的都是不一样的数据,而三者相加就是总数据,如果单个分片的redis使用的内存是8G,那么三者相加内存就是24G。每个node又是由主从模式构成,用来做数据冗余,实现高可用。下面我们就来部署一套redis cluster模式集群,亲自测试一下它的功能。
1.资源准备
本次部署我们还是采用三台虚拟机,然后每台虚拟机部署三个redis节点(1master+2slave)组成主从模式,用来模拟上述架构图中的部署方式。
部署环境详情如下:
操作系统 | IP | 端口 | CPU | 内存 | 版本 | 节点 |
---|---|---|---|---|---|---|
Rocky9 | 192.168.159.167 | 6379 | 4核 | 8G | 7.4 | 主 |
Rocky9 | 192.168.159.167 | 6380 | 4核 | 8G | 7.4 | 从 |
Rocky9 | 192.168.159.167 | 6381 | 4核 | 8G | 7.4 | 从 |
Rocky9 | 192.168.159.168 | 6379 | 4核 | 8G | 7.4 | 主 |
Rocky9 | 192.168.159.168 | 6380 | 4核 | 8G | 7.4 | 从 |
Rocky9 | 192.168.159.168 | 6381 | 4核 | 8G | 7.4 | 从 |
Rocky9 | 192.168.159.171 | 6379 | 4核 | 8G | 7.4 | 主 |
Rocky9 | 192.168.159.171 | 6380 | 4核 | 8G | 7.4 | 从 |
Rocky9 | 192.168.159.171 | 6381 | 4核 | 8G | 7.4 | 从 |
大家可以根据自己的实际情况调整服务器资源配置,只要能够运行三个redis节点即可。
2.搭建redis cluster集群
准备好以上资源之后,就可以开始搭建redis cluster集群了。
2.1 部署单节点redis
我们需要在每台虚拟机上起三个使用不同端口的redis服务,但是在起服务之前,还是需要在三台虚拟机上分别部署redis,部署单节点的redis可以参考我之前的博客redis单节点部署操作手册 但是这里启动redis的方式会有所变化,不能在通过redis.service启动服务,执行到redis部署完成即可。
2.2 整理配置文件
在192.168.159.167的/usr/local/redis/conf目录下创建对应三个端口的redis配置文件,配置文件名称分别为6379.conf、6380.conf和6381.conf,配置文件详情分别为:
(1)6379.conf
bind 0.0.0.0
protected-mode no
port 6379
daemonize yes
pidfile "/var/run/redis_6379.pid"
logfile "/usr/local/redis/logs/6379.log"
databases 16
dir "/usr/local/redis/data/6379"
(2)6380.conf
bind 0.0.0.0
protected-mode no
port 6380
daemonize yes
pidfile "/var/run/redis_6380.pid"
logfile "/usr/local/redis/logs/6380.log"
databases 16
dir "/usr/local/redis/data/6380"
replicaof 192.168.159.167 6379
(3)6381.conf
bind 0.0.0.0
protected-mode no
port 6380
daemonize yes
pidfile "/var/run/redis_6380.pid"
logfile "/usr/local/redis/logs/6380.log"
databases 16
dir "/usr/local/redis/data/6380"
replicaof 192.168.159.167 6379
可以看到配置和之前部署主从模式基本没什么不同,只是在一台虚拟机上开了三个不一样的端口,然后6380和6381端口的节点指定6379端口为主节点。
2.3 启动redis节点
在192.168.159.167通过指定配置文件的方式启动redis的三个节点,命令如下:
cd /usr/local/redis/bin
./redis-cli ../conf/6379.conf
./redis-cli ../conf/6380.conf
./redis-cli ../conf/6381.conf
2.4 检查redis服务
(1)检查服务进程
ps -ef |grep redis
root 1922172 1 0 12:08 ? 00:00:04 ./redis-server 0.0.0.0:6380
root 1922179 1 0 12:08 ? 00:00:04 ./redis-server 0.0.0.0:6381
root 1922531 1 0 12:12 ? 00:00:03 ./redis-server 0.0.0.0:6379
可以看到三个进程均正常运行。
(2)检查主从
cd /usr/local/redis/bin
./redis-cli -p 6379
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.159.167,port=6381,state=online,offset=1344,lag=1
slave1:ip=192.168.159.167,port=6380,state=online,offset=1344,lag=0
master_failover_state:no-failover
master_replid:c5e4977d848b23860404b65a70bf2bb9257ec9e4
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1358
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1358
可以看到三个节点已经组成了主从模式。
2.5 其他节点
其他节点的操作和192.168.159.167节点操作一模一样,可以将192.168.159.167节点的配置文件拷贝到192.168.159.168和192.168.159.171上,然后修改replicaof配置项为当前虚拟机IP和6379端口,再以主从模式运行就好了,这里就不详细演示了。