1.说明
版本:6.2.7
使用3台机器进行3主3从 6节点搭建,默认3台机器已安装好docker环境,3台主机ip分别为192.168.50.9、192.168.50.18、192.168.50.245、具体分布如下:
| 机器 | 部署端口 | 假设ip |
|---|---|---|
| A机器 | 6371、6372 | 192.168.50.9 |
| B机器 | 6373、6374 | 192.168.50.18 |
| C机器 | 6375、6376 | 192.168.50.245 |
2.配置文件制作
一共需要6个配置文件,分别是redis-6371.conf、redis-6372.conf、redis-6373.conf、redis-6374.conf、redis-6375.conf、redis-6376.conf,其中redis-6371.conf的内容如下:
#bind 127.0.0.1 -::1
protected-mode yes
port 6371
tcp-backlog 511
timeout 3600
tcp-keepalive 300
# in docker this must no
daemonize no
pidfile /var/run/redis_6371.pid
loglevel notice
logfile ""
databases 16
always-show-logo no
proc-title-template "{title} {listen-addr} {server-mode}"
# save 3600 1
# save 300 100
# save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename iot_redis.rdb
rdb-del-sync-files no
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-diskless-load disabled
repl-disable-tcp-nodelay no
replica-priority 100
acllog-max-len 128
requirepass 3er4#ER$
maxclients 10000
maxmemory 4000000000
maxmemory-policy noeviction
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
lazyfree-lazy-user-del no
lazyfree-lazy-user-flush no
oom-score-adj no
oom-score-adj-values 0 200 800
disable-thp yes
appendonly yes
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
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events "Ex"
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 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
jemalloc-bg-thread yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
cluster-announce-ip 192.168.50.9
cluster-announce-port 6371
cluster-announce-bus-port 16371
masterauth 3er4#ER$
redis-6372.conf需要在redis-6371.conf的基础上将其内容中的6371全部替换为6372
redis-6373.conf、redis-6374.conf、redis-6375.conf、redis-6376.conf除了需要将端口替换,还需要将cluster-announce-ip的更改为其部署机器的ip。也可以从此处获取。
3. 构建Redis-cluster
- 启动节点
在192.168.50.9机器执行如下命令(注意:该执行目录需要在那6个配置文件的那个目录):
for port in $(seq 6371 6372); do \
mkdir -p /home/redis-cluster/${port}/conf
cp -r redis-${port}.conf /home/redis-cluster/${port}/conf/redis.conf
docker run -di --log-opt max-size=100m --log-opt max-file=3 --restart always --name redis-${port} --net host \
-v /home/redis-cluster/${port}/conf/redis.conf:/etc/redis/redis.conf \
-v /home/redis-cluster/${port}/data:/data \
redis:6.2.7 redis-server /etc/redis/redis.conf; \
done
在192.168.50.18机器执行如下命令
for port in $(seq 6373 6374); do \
mkdir -p /home/redis-cluster/${port}/conf
cp -r redis-${port}.conf /home/redis-cluster/${port}/conf/redis.conf
docker run -di --log-opt max-size=10m --log-opt max-file=3 --restart always --name redis-${port} --net host \
-v /home/redis-cluster/${port}/conf/redis.conf:/etc/redis/redis.conf \
-v /home/redis-cluster/${port}/data:/data \
redis:6.2.7 redis-server /etc/redis/redis.conf; \
done
在192.168.50.245机器执行如下命令
for port in $(seq 6375 6376); do \
mkdir -p /home/redis-cluster/${port}/conf
cp -r redis-${port}.conf /home/redis-cluster/${port}/conf/redis.conf
docker run -di --log-opt max-size=10m --log-opt max-file=3 --restart always --name redis-${port} --net host \
-v /home/redis-cluster/${port}/conf/redis.conf:/etc/redis/redis.conf \
-v /home/redis-cluster/${port}/data:/data \
redis:6.2.7 redis-server /etc/redis/redis.conf; \
done
- 构建分片集群
在192.168.50.9机器上执行如下命令,进入redis docker容器内:
docker exec -it redis-6371 bash
在容器内执行(其中的ip与端口需要调整为跟前面部署的6个节点的一致):
redis-cli -a 3er4#ER$ --cluster create 192.168.50.9:6371 192.168.50.9:6372 192.168.50.18:6373 192.168.50.18:6374 192.168.50.245:6375 192.168.50.245:6376 --cluster-replicas 1
看到如下画面,输入yes构建集群。
4. 最后说明
对于redis-cluster的扩容与缩容,都是需要人工干预的,并不能做到新节点加入后系统自动进行平衡的。