Docker部署redis集群和哨兵模式

本文在Docker环境配置一主二从三哨兵的redis集群环境。

一、redis集群

镜像下载

下载redis镜像,我这里直接下载的是最新版本的镜像

docker pull redis

创建挂载目录和配置文件,这里参考的别人博客

mkdir -p /data/redis/conf
mkdir -p /data/redis/data
cd /data/redis/conf
vi redis.conf

mkdir -p /data/redis1/conf
mkdir -p /data/redis1/data
cd /data/redis1/conf
vi redis.conf

mkdir -p /data/redis2/conf
mkdir -p /data/redis2/data
cd /data/redis2/conf
vi redis.conf

主节点配置

master的redis.conf配置文件的内容如下

protected-mode no

port 6379

tcp-backlog 511
#redis密码 强烈建议设置复杂一些
requirepass qwe123     

timeout 0

tcp-keepalive 300

daemonize no

supervised no

pidfile /var/run/redis_6379.pid

loglevel notice

logfile ""

databases 30

always-show-logo yes

save 900 1
save 300 10
save 60 10000

stop-writes-on-bgsave-error yes

rdbcompression yes

rdbchecksum yes

dbfilename dump.rdb

dir ./

replica-serve-stale-data yes

replica-read-only yes

repl-diskless-sync no

repl-disable-tcp-nodelay no

replica-priority 100

lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no

appendonly yes

appendfilename "appendonly.aof"

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-max-len 128

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

hz 10

dynamic-hz yes

aof-rewrite-incremental-fsync yes

rdb-save-incremental-fsync yes

从节点配置

从节点的配置文件有点坑,最好是不要使用同一个端口,比如master使用了6379,slave容器使用其他端口。尽管容器是互相隔离的,但网络通信这一块,会有问题。如图:

我开始都使用了6379,映射宿主机的不同端口上,主从同步时是没有问题的,但是当主节点下线,或者重新加入节点时,哨兵节点会无法区分各个容器的。

虽然各个容器分配的ip不同,但sentinel通信时都使用了容器内部的回环地址172.17.0.1,这里可能是个bug。容器内直接使用不同端口,可以规避这个问题。

从节点配置文件,还需要加上主节点的ip端口和密码

# 指定主服务器,注意:有关slaveof的配置只是配置从服务器,主服务器不需要配置
slaveof 192.168.25.2 6379
# 主服务器密码
masterauth qwe123

ps:5.0后slaveof改为replicaof,但原来的仍可以用,查了一下是为了避免slave“奴隶”的说法,难道是遭到某些群体的投诉了(狗头)?

启动容器

docker run -p 6379:6379 \
--name redis-master \
-v /data/redis/data/:/data \
-v /data/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf

docker run -p 6380:6380 \
--name redis-slave-1 \
-v /data/redis1/data/:/data \
-v /data/redis1/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf

docker run \
-p 6381:6381 \
--name redis-slave-2 \
-v /data/redis2/data/:/data \
-v /data/redis2/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf

二、哨兵集群

首先创建在各个redis conf目录创建sentinel.conf,配置文件我是直接从官网下的

地址:redis/sentinel.conf at 7.0.12 · redis/redis · GitHub

protected-mode no

port 6479

daemonize no

pidfile /var/run/redis-sentinel.pid

logfile ""

dir /tmp

sentinel monitor mymaster 192.168.25.2 6379 2

sentinel auth-pass mymaster qwe123

sentinel down-after-milliseconds mymaster 10000

sentinel failover-timeout mymaster 20000

acllog-max-len 128

sentinel parallel-syncs mymaster 1


sentinel deny-scripts-reconfig yes

SENTINEL resolve-hostnames no

SENTINEL announce-hostnames no

SENTINEL master-reboot-down-after-period mymaster 0

sentinel monitor mymaster 192.168.25.2 6379 2

sentinel auth-pass mymaster qwe123

这两个配置,前者是配置redis主节点的ip端口,最后的2是指两个哨兵节点投票确认主节点下线或者选出新主节点。后者是主节点的密码。sentinel能从主节点获取从节点的信息。

启动集群

docker run -p 6479:6479 \
--name redis-sentinel-3 \
-v /data/redis/conf/sentinel.conf:/etc/redis/sentinel.conf \
-d redis redis-sentinel /etc/redis/sentinel.conf

docker run -p 6480:6480 \
--name redis-sentinel-2 \
-v /data/redis1/conf/sentinel.conf:/etc/redis/sentinel.conf \
-d redis redis-sentinel /etc/redis/sentinel.conf

  docker run -p 6481:6481 \
  --name redis-sentinel-1 \
  -v /data/redis2/conf/sentinel.conf:/etc/redis/sentinel.conf \
  -d redis redis-sentinel /etc/redis/sentinel.conf

需要注意的是,如果主节点下线了,重新选出了主节点,重新上线时,自己就是从节点了,所以此时redis.conf需要配置主节点的ip和密码。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值