创建集群配置
- redis版本:6.2.6
- 以6个redis,3主3从为例。
准备基础的redis配置
创建目录/opt/rediscluster,复制基础的redis.conf到此目录,并进行修改
# 关闭AOF功能
appendonly no
创建集群配置文件
创建文件:redis6379.conf,添加内容:
include /opt/rediscluster/redis.conf
pidfile "/var/run/redis_6379.pid"
port 6379
dbfilename "dump6379.rdb"
# 开启集群模式
cluster-enabled yes
# 指定节点文件名称
cluster-config-file nodes-6379.conf
# 指定节点超时时间
cluster-node-timeout 15000
复制 redis6379.conf,分别命名为:
- redis6380.conf
- redis6381.conf
- redis6389.conf
- redis6390.conf
- redis6391.conf
然后对各个文件中的数字部分进行修改,将数字修改为与文件名中的数字相同即可。
例如:redis6380.conf,修改如下:
include /opt/rediscluster/redis.conf
# 修改 6379-> 6380
pidfile "/var/run/redis_6380.pid"
# 修改 6379-> 6380
port 6380
# 修改 6379-> 6380
dbfilename "dump6380.rdb"
# 开启集群模式
cluster-enabled yes
# 指定节点文件名称
# 修改 6379-> 6380
cluster-config-file nodes-6380.conf
# 指定节点超时时间
cluster-node-timeout 15000
其他配置文件同理。
开启集群
启动6个redis-server
redis-server /opt/rediscluster/redis6379.conf
redis-server /opt/rediscluster/redis6380.conf
redis-server /opt/rediscluster/redis6381.conf
redis-server /opt/rediscluster/redis6389.conf
redis-server /opt/rediscluster/redis6390.conf
redis-server /opt/rediscluster/redis6391.conf
启动后,查看当前目录,确认已经生成指定的dump.rdb和nodes.conf文件.
批量关闭redis-server
ps -ef | grep -v grep | grep redis | awk -F' ' '{print $2}' | xargs kill -9
创建集群
进入redis安装目录的src目录下,执行:
redis-cli --cluster create --cluster-replicas 1 192.168.10.102:6379 192.168.10.102:6380 192.168.10.102:6381 192.168.10.102:6389 192.168.10.102:6390 192.168.10.102:6391
-
–cluster create: 创建集群
-
–cluster-relicas: 集群副本数。 这里是1,是1主机1从机的模式,如果设置为2(即:2台从机)会失败。因为集群中至少要有3个主机,所以设置2台从机时,至少需要9个节点才可以。
-
最后的参数中列出全部的redis主机IP地址和端口号。
执行后,系统提示:
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
# 6390做为6379的从机
Adding replica 192.168.10.102:6390 to 192.168.10.102:6379
# 6391做为6380的从机
Adding replica 192.168.10.102:6391 to 192.168.10.102:6380
# 6389做为6381的从机
Adding replica 192.168.10.102:6389 to 192.168.10.102:6381
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 0e5eb18533395661e35ac4ebd5298f364e50ad04 192.168.10.102:6379
slots:[0-5460] (5461 slots) master
M: 9eda6134015f3b415df60e813613a7cf14cdd2df 192.168.10.102:6380
slots:[5461-10922] (5462 slots) master
M: 505b4fd96d38c68befe839257622cdcec1af35ca 192.168.10.102:6381
slots:[10923-16383] (5461 slots) master
S: 7d919f337875f7bafcddd3c79a8ae1510202d39d 192.168.10.102:6389
replicates 505b4fd96d38c68befe839257622cdcec1af35ca
S: b30918baa72b2aa7e564115e738f21145234b84c 192.168.10.102:6390
replicates 0e5eb18533395661e35ac4ebd5298f364e50ad04
S: a6f714fa624e02a72374f235d5562fc022b143e2 192.168.10.102:6391
replicates 9eda6134015f3b415df60e813613a7cf14cdd2df
Can I set the above configuration? (type 'yes' to accept):
输入"yes"确认即可。
访问集群
redis-cli -c -p 6379
1: -c : 集群模式
2:-p : 集群中任意一个redis服务的端口号
登录集群后,可使用:cluster nodes 命令查看集群状态,查询结果如下:
# 6390是slave,对应的master是6379
b30918baa72b2aa7e564115e738f21145234b84c 192.168.10.102:6390@16390 slave 0e5eb18533395661e35ac4ebd5298f364e50ad04 0 1640854465249 1 connected
# 6391是slave,对应的master是6380
a6f714fa624e02a72374f235d5562fc022b143e2 192.168.10.102:6391@16391 slave 9eda6134015f3b415df60e813613a7cf14cdd2df 0 1640854465000 2 connected
# master,这是当前登录到的redis,有myself标示, 0-5460是slot编号
0e5eb18533395661e35ac4ebd5298f364e50ad04 192.168.10.102:6379@16379 myself,master - 0 1640854462000 1 connected 0-5460
# master, 5461-10922是slot编号
9eda6134015f3b415df60e813613a7cf14cdd2df 192.168.10.102:6380@16380 master - 0 1640854467291 2 connected 5461-10922
# 6389是slave,对应的master是6381
7d919f337875f7bafcddd3c79a8ae1510202d39d 192.168.10.102:6389@16389 slave 505b4fd96d38c68befe839257622cdcec1af35ca 0 1640854463201 3 connected
# master, 10923-16383是slot编号
505b4fd96d38c68befe839257622cdcec1af35ca 192.168.10.102:6381@16381 master - 0 1640854466271 3 connected 10923-16383