环境信息
redis Cluster 部署
下载已经编译好的 redis6-cluster 安装文件
wget https://s.csms.tech/redis6-cluster.tar tar -xf redis6-cluster.tar -C /usr/local/
|
本示例安装 3 master 3 slave 的 redis cluster,假设使用端口为 7380-7385。数据存放路径为 /data/redis/7380
,日志路径为 /data/logs/redis-cluster/7380/
,其他端口的 redis 服务配置以此类推,主要是修改对应端口。
创建服务启动需要的数据目录及日志目录
for i in 1 2 3 4 5 0 ; do mkdir -p /data/redis/738${i} ; done
for i in 1 2 3 4 5 0 ; do mkdir -p /data/logs/redis-cluster/738${i} ; done
|
7380 服务使用如下配置文件
7380.confbind 0.0.0.0 protected-mode no port 7380 tcp-backlog 511 timeout 600 tcp-keepalive 60 daemonize yes supervised no pidfile /var/run/redis_7380.pid loglevel notice logfile /data/logs/redis-cluster/7380/redis.log databases 16 always-show-logo yes save "" stop-writes-on-bgsave-error no rdbcompression yes rdbchecksum yes dbfilename dump.rdb dir /data/redis/7380 replica-serve-stale-data yes replica-read-only yes repl-diskless-sync no repl-diskless-sync-delay 5 repl-disable-tcp-nodelay no replica-priority 100 requirepass redisPassword masterauth redisPassword maxclients 30000 maxmemory-policy volatile-lru lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no appendonly no appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes aof-use-rdb-preamble yes lua-time-limit 5000 cluster-enabled yes cluster-node-timeout 5000 cluster-require-full-coverage no slowlog-log-slower-than 3000 slowlog-max-len 200 latency-monitor-threshold 0 notify-keyspace-events "" hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-size -2 list-compress-depth 0 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 hll-sparse-max-bytes 3000 stream-node-max-bytes 4096 stream-node-max-entries 100 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit replica 0 0 0 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 dynamic-hz yes aof-rewrite-incremental-fsync yes rdb-save-incremental-fsync yes
|
若要根据以上 7380 端口的服务配置文件复制出其他服务端口的配置文件,可以参考以下命令
cp 7380.conf 7381.conf sed -i 's/7380/7381/g' 7381.conf
cp 7380.conf 7382.conf sed -i 's/7380/7382/g' 7382.conf
|
分别启动服务(7380-7385)
/usr/local/redis6-cluster/src/redis-server /usr/local/redis6-cluster/7380.conf
|
创建集群 命令格式
redis-cli --cluster create host1:port1 ... hostN:portN --cluster-replicas <arg> -a 'redisPassword'
|
redis-cli
命令参数说明:
命令参数 |
说明 |
示例 |
--cluster |
redis cluster 操作 查看 cluster 操作命令的帮助信息
redis-cli --cluster help |
redis-cli --cluster create 创建集群 |
--cluster-replicas |
redis cluster 副本数比例 |
|
-a |
redis 密码 |
|
-c |
操作 redis cluster |
|
-p |
指定连接的端口 |
|
本示例使用以下命令创建集群,副本数为 1,有 6 个 redis 节点,为 3 master 3 slave
redis-cli --cluster create 172.31.0.20:7380 172.31.0.20:7381 172.31.0.20:7382 172.31.0.20:7383 172.31.0.20:7384 172.31.0.20:7385 \ --cluster-replicas 1 \ -a 'redisPassword'
|
查看新建的集群信息
$ redis-cli -c -p 7380 -a 'redisPassword' cluster nodes Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. aa4d467115b7d7c312fa28cac065d1343ee4af87 172.31.0.20:7383@17383 slave 1286b9783675913064d35edce520cfcb03d5dd61 0 1689148281218 3 connected 78e47bd8cdd7b210219b0789a14b3079ed137648 172.31.0.20:7384@17384 slave 71510816880f0d5cc2299c4ce0fecc99965f2a80 0 1689148282220 1 connected 1286b9783675913064d35edce520cfcb03d5dd61 172.31.0.20:7382@17382 master - 0 1689148281719 3 connected 10923-16383 82533c5ecf0f418e8a134ce188d175e23858fbff 172.31.0.20:7381@17381 master - 0 1689148281000 2 connected 5461-10922 71510816880f0d5cc2299c4ce0fecc99965f2a80 172.31.0.20:7380@17380 myself,master - 0 1689148281000 1 connected 0-5460 f2e45a6fef0c5e24690373166c60c36379514d63 172.31.0.20:7385@17385 slave 82533c5ecf0f418e8a134ce188d175e23858fbff 0 1689148282000 2 connected
|
redis cluster 常见管理操作
添加 master 节点
给已有的 redis cluster 添加一个新的 master 节点
redis-cli --cluster add-node new_host:new_port existing_host:existing_port --cluster-master-id node_id
|
参数说明:
new_host:new_port
- 为要新加的节点的 IP:PORT 信息
existing_host:existing_port
- 当前集群最后(新)一个主节点的 IP:PORT 信息,这个可以通过 redis-cli -c cluster nodes
中的 slot 位置查询到
--cluster-master-id
- 当前集群最后(新)一个主节点的 id,可以通过命令 redis-cli -c cluster nodes
查看
假设当前集群信息如下,观察 slot 位置,可以看到 127.0.0.1:7003@17003
是最后或者最新的节点。其 id 为 bbe8b7035bfd31c47bec7d612acc112cd2869368
$ redis-cli -c -p 7001 cluster nodes 7d388cc31df969d3e1715ce9644318bfd48317b1 127.0.0.1:7004@17004 slave 59b6597448b668a355d85dcc7a0623bc36263e5f 0 1564923261350 4 connected bbe8b7035bfd31c47bec7d612acc112cd2869368 127.0.0.1:7003@17003 master - 0 1564923263366 3 connected 10923-16383 456921ae96af71d8183101f798cf5ceda4b0381e 127.0.0.1:7005@17005 slave bbe8b7035bfd31c47bec7d612acc112cd2869368 0 1564923262000 5 connected 5612ffbb0407dbda50828b505a16b39ede51168b 127.0.0.1:7006@17006 slave 4dad696ede24995a57c5fd790faa95c72c187a22 0 1564923260000 6 connected 4dad696ede24995a57c5fd790faa95c72c187a22 127.0.0.1:7001@17001 myself,master - 0 1564923263000 1 connected 0-5460 59b6597448b668a355d85dcc7a0623bc36263e5f 127.0.0.1:7002@17002 master - 0 1564923262358 2 connected 5461-10922
|
新增节点的命令示例
redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7003 \ --cluster-master-id bbe8b7035bfd31c47bec7d612acc112cd2869368
|
再次查看集群信息
$ redis-cli -c -p 7001 cluster nodes 7d388cc31df969d3e1715ce9644318bfd48317b1 127.0.0.1:7004@17004 slave 59b6597448b668a355d85dcc7a0623bc36263e5f 0 1564923261350 4 connected bbe8b7035bfd31c47bec7d612acc112cd2869368 127.0.0.1:7003@17003 master - 0 1564923263366 3 connected 10923-16383 7020c8df9423686727783c60bd2f0e367634ba84 127.0.0.1:7007@17007 master - 0 1564923260344 0 connected 456921ae96af71d8183101f798cf5ceda4b0381e 127.0.0.1:7005@17005 slave bbe8b7035bfd31c47bec7d612acc112cd2869368 0 1564923262000 5 connected 5612ffbb0407dbda50828b505a16b39ede51168b 127.0.0.1:7006@17006 slave 4dad696ede24995a57c5fd790faa95c72c187a22 0 1564923260000 6 connected 4dad696ede24995a57c5fd790faa95c72c187a22 127.0.0.1:7001@17001 myself,master - 0 1564923263000 1 connected 0-5460 59b6597448b668a355d85dcc7a0623bc36263e5f 127.0.0.1:7002@17002 master - 0 1564923262358 2 connected 5461-10922
|
会发现 7007 端口对应的节点已经加入到集群中,是主节点,但是没有从节点,也没有分配槽数。执行以下命令给新添加的主节点分配 slots 槽数
命令格式
redis-cli --cluster reshard host:port \ --cluster-from node_id \ --cluster-to node_id \ --cluster-slots 500 --cluster-yes
|
参数说明:
host:port
- 新添加的主节点 IP 和端口,此处表示的是 127.0.0.1:7007
--cluster-from node_id
- 表示的是集群第一个主节点的节点 id,这个可以现有集群的 slots 槽数分配看出,此处表示的是 7001 端口对应的节点
--cluster-to node_id
- 表示的是集群最后一个主节点的节点 id,也就是新添加的那个主节点 id,此处表示的是 7007 端口对应的节点
--cluster-slots 500
- 表示的是给新主节点分配多少,此处 500 表示是分配从 0-499 个 slots 槽数,若不加会让手动输入
--cluster-yes
- 表示的是自动应答为 yes
,若不加上这个会让手动输入 yes
,表示同意此次分配
本示例中执行以下命令为新添加的节点分配 slot
redis-cli --cluster reshard 127.0.0.1:7007 --cluster-from 4dad696ede24995a57c5fd790faa95c72c187a22 \ --cluster-to 7020c8df9423686727783c60bd2f0e367634ba84 \ --cluster-slots 500
|
执行成功后重新查看集群信息
$ redis-cli -c -p 7001 cluster nodes 7d388cc31df969d3e1715ce9644318bfd48317b1 127.0.0.1:7004@17004 slave 59b6597448b668a355d85dcc7a0623bc36263e5f 0 1564924042000 4 connected bbe8b7035bfd31c47bec7d612acc112cd2869368 127.0.0.1:7003@17003 master - 0 1564924042157 3 connected 10923-16383 7020c8df9423686727783c60bd2f0e367634ba84 127.0.0.1:7007@17007 master - 0 1564924040140 7 connected 0-499 456921ae96af71d8183101f798cf5ceda4b0381e 127.0.0.1:7005@17005 slave bbe8b7035bfd31c47bec7d612acc112cd2869368 0 1564924040000 5 connected 5612ffbb0407dbda50828b505a16b39ede51168b 127.0.0.1:7006@17006 slave 4dad696ede24995a57c5fd790faa95c72c187a22 0 1564924041149 6 connected 4dad696ede24995a57c5fd790faa95c72c187a22 127.0.0.1:7001@17001 myself,master - 0 1564924040000 1 connected 500-5460 59b6597448b668a355d85dcc7a0623bc36263e5f 127.0.0.1:7002@17002 master - 0 1564924043166 2 connected 5461-10922
|
会看到 7007 端口对应的主节点已经有 slots 槽数了,并且是从 0 开始的
给集群中某个主节点添加一个从节点
命令格式
redis-cli --cluster add-node new_host:new_port existing_host:existing_port \ --cluster-slave \ --cluster-master-id node_id
|
参数说明:
new_host:new_port
- 表示的是要添加的那个从节点的 IP 和端口
existing_host:existing_port
- 表示的是要给哪个主节点添加从节点
--cluster-slave
- 表示的是要添加从节点,否则则是添加主节点了
--cluster-master-id node_id
- 表示要给哪个主节点添加从节点,该主节点节点 id
本示例中执行以下命令为新添加的 master 节点添加 slave 节点
redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7008 --cluster-slave \ --cluster-master-id 7020c8df9423686727783c60bd2f0e367634ba84
|
执行成功后重新查看集群信息
$ redis-cli -c -p 7001 cluster nodes 7020c8df9423686727783c60bd2f0e367634ba84 127.0.0.1:7007@17007 master - 0 1564924845000 7 connected 0-499 4dad696ede24995a57c5fd790faa95c72c187a22 127.0.0.1:7001@17001 myself,master - 0 1564924843000 1 connected 500-5460 5612ffbb0407dbda50828b505a16b39ede51168b 127.0.0.1:7006@17006 slave 4dad696ede24995a57c5fd790faa95c72c187a22 0 1564924845214 6 connected 7d388cc31df969d3e1715ce9644318bfd48317b1 127.0.0.1:7004@17004 slave 59b6597448b668a355d85dcc7a0623bc36263e5f 0 1564924843195 4 connected bbe8b7035bfd31c47bec7d612acc112cd2869368 127.0.0.1:7003@17003 master - 0 1564924844205 3 connected 10923-16383 456921ae96af71d8183101f798cf5ceda4b0381e 127.0.0.1:7005@17005 slave bbe8b7035bfd31c47bec7d612acc112cd2869368 0 1564924845000 5 connected 415db07121ba946b202bca98e15cbdffc60bc18a 127.0.0.1:7008@17008 slave 7020c8df9423686727783c60bd2f0e367634ba84 0 1564924846224 7 connected 59b6597448b668a355d85dcc7a0623bc36263e5f 127.0.0.1:7002@17002 master - 0 1564924844000 2 connected 5461-10922
|
会发现 7008 端口对应的节点已经是 7007 端口对应的从节点(slave 7020c8df9423686727783c60bd2f0e367634ba84
)
从集群中删除一个从节点
命令格式
redis-cli --cluster del-node host:port node_id
|