redis 配置

环境信息

  • Centos 7
  • Redis 6

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.conf
bind 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