1. 说明
这里使用的是redis的cluster集权模式,没有用哨兵模式(哨兵模式依赖哨兵节点,哨兵节点一旦挂掉就不再高可用了,因此没有采用)。
由于Redis Cluster至少需要6个节点,因此,这里咱们采用的是三主三副的模式。redis的key值通过hash计算会散列在3个主节点中,副节点跟相应主节点保持一致。
2. Redis相关配置
这里咱们用6380~6385这6个实例标识6个节点的端口,修改相关配置:
#端口号
port 6380
#默认ip为127.0.0.1,需要改为其他节点机器可以访问的ip,否则创建集群时无法访问对应的端口,无法创建集群(使用#注掉bind则任何地址都可访问)
bind 192.168.9.128
#redis后台运行
daemonize yes
#pidfile文件对应6380,6381,6382…
pidfile /var/run/redis_6380.pid
#开启集群
cluster-enabled yes
#集群的配置,配置文件首次启动自动生成6380,6381,6382…
cluster-config-file nodes_6380.conf
#请求超时,默认15秒,可自行设置
cluster-node-timeout 15000
#aof日志开启,有需要就开启,它会每次写操作都记录一条日志
appendonly yes
# 密码保持相同
requirepass 123456
创建6个文件夹,6380~6385,将redis.conf拷贝到这6个文件夹下,并修改以下配置:
#端口号
port 6380
#pidfile文件对应6380,6381,6382…
pidfile /var/run/redis_6380.pid
#集群的配置,配置文件首次启动自动生成6380,6381,6382…
cluster-config-file nodes_6380.conf
将6个节点全部启动:
./src/redis-server 6380/redis.conf &
./src/redis-server 6381/redis.conf &
./src/redis-server 6382/redis.conf &
./src/redis-server 6383/redis.conf &
./src/redis-server 6384/redis.conf &
./src/redis-server 6385/redis.conf &
3. 启动集群
进入src目录,启动集群:
./redis-cli --cluster create 172.17.104.98:6380 172.17.104.98:6381 172.17.104.98:6382 172.17.104.98:6383 172.17.104.98:6384 172.17.104.98:6385 --cluster-replicas 1
这里不要用127.0.0.1的IP,这样配置会产生springboot项目连不上的情况,springboot连上之后,会获取这个集群信息,再用这个信息去连redis。因为你应用和集群不在一台机器上,有可能导致应用连接不上。
4. 集群查看
可以使用cluster info查看集群健康状态,cluster nodes查看集群节点状态。
# 命令中 -c表示集群
[root@localhost src]# ./redis-cli -h 127.0.0.1 -c -p 6380 -a 123456
127.0.0.1:6380> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:5910
cluster_stats_messages_pong_sent:6303
cluster_stats_messages_fail_sent:12
cluster_stats_messages_sent:12225
cluster_stats_messages_ping_received:6303
cluster_stats_messages_pong_received:5903
cluster_stats_messages_fail_received:6
cluster_stats_messages_received:12212
127.0.0.1:6380> cluster nodes
6fa6f4422ff23e39ff5193ff5e53cfdce4f9d5de 172.17.104.98:6383@16383 slave a565cd8244c999e1626b6ba8b76d88bd37059e39 0 1687923362095 1 connected
196b18542407cc079d1fbd8f3d611dc476df0ba8 172.17.104.98:6381@16381 master - 0 1687923359076 2 connected 5461-10922
db7aa96d4cebdd36555216bc4880e6290f185e8b 172.17.104.98:6385@16385 slave 2619026bf36cb586563e20dde244101f7905641f 0 1687923360082 3 connected
2619026bf36cb586563e20dde244101f7905641f 172.17.104.98:6382@16382 master - 0 1687923361088 3 connected 10923-16383
db7698a106d3f09d51dcd0e80dccedc8d58a9d9f 172.17.104.98:6384@16384 slave 196b18542407cc079d1fbd8f3d611dc476df0ba8 0 1687923359000 2 connected
a565cd8244c999e1626b6ba8b76d88bd37059e39 172.17.104.98:6380@16380 myself,master - 0 1687923361000 1 connected 0-5460
127.0.0.1:6380>
5. SpringBoot连接集群
springboot中的配置,由于这里只可以配置一个password,因此需要集群的所有密码都是相同设置,否则连不上redis报错!
# spring配置
spring:
redis:
cluster:
nodes: 172.17.104.98:6380,172.17.104.98:6381,172.17.104.98:6382,172.17.104.98:6383,172.17.104.98:6384,172.17.104.98:6385
password: 123456
6. 删除集群
[root@localhost redis-6.2.4]# ls
00-RELEASENOTES 6382 6385 CONDUCT deps Makefile nodes-6381.conf nodes-6384.conf redis.conf runtest-moduleapi src utils
6380 6383 appendonly.aof CONTRIBUTING dump.rdb MANIFESTO nodes-6382.conf nodes-6385.conf runtest runtest-sentinel tests
6381 6384 BUGS COPYING INSTALL nodes-6380.conf nodes-6383.conf README.md runtest-cluster sentinel.conf TLS.md
[root@localhost redis-6.2.4]#
停掉redis所有节点,将所有的nodes-638*的文件都删除,集群将不复存在。