说明:当前安装部署指引只在一台宿主机服务器上启动三个(一主二从)redis容器节点和三个哨兵容器节点

1、docker搭建主从节点

#从镜像仓库拉取redis镜像(此指引拉取的是官方最新的redis镜像,根据实际情况而定,可拉取私仓自定义稳定的镜像)
docker pull redis

#切换到目录
cd /home/soft


#宿主机上创建redis配置及数据目录
mkdir -p redis/config
mkdir -p redis/data/data6379 redis/data/data6380 redis/data/data6381



#进入配置目录创建配置文件且添加配置信息
cd /home/soft/config

#创建并编辑redis6379.conf,最后wq保存退出(后文涉及到的配置文件其他需个性化配置的具体配置项根据实际情况配置)
vi redis6379.conf

port 6379



#创建并编辑redis6380.conf配置文件,最后wq保存退出(当java程序需要连接redis,从节点则需配置slave-announce-ip和slave-announce-port)
vi redis6380.conf

#节点容器端口
port 6380
#宿主机ip、master端口
replicaof 192.168.10.15 6379
#宿主机ip
slave-announce-ip 192.168.10.15
#节点宿主机端口
slave-announce-port 6380



#创建并编辑redis6381.conf配置文件,最后wq保存退出
vi redis6381.conf

port 6381
replicaof 192.168.10.15 6379
slave-announce-ip 192.168.10.15
slave-announce-port 6381



#启动master-redis节点
docker run \
-p 6379:6379 \
--name master-redis \
--restart=always /
-v /home/soft/redis/data/data6379:/data \
-v /home/soft/redis/config/redis6379.conf:/etc/redis/redis.conf \
-v /etc/localtime:/etc/localtime \
-d redis redis-server /etc/redis/redis.conf


#启动salve1-redis节点
docker run \
-p 6380:6380 \
--name salve1-redis \
--restart=always /
-v /home/soft/redis/data/data6380:/data \
-v /home/soft/redis/config/redis6380.conf:/etc/redis/redis.conf \
-v /etc/localtime:/etc/localtime \
-d redis redis-server /etc/redis/redis.conf



#启动salve2-redis节点
docker run \
-p 6381:6381 \
--name salve2-redis \
--restart=always /
-v /home/soft/redis/data/data6381:/data \
-v /home/soft/redis/config/redis6381.conf:/etc/redis/redis.conf \
-v /etc/localtime:/etc/localtime \
-d redis redis-server /etc/redis/redis.conf



#进入redis容器查看
docker exec -it master-redis redis-cli -p 6379
#查看容器节点信息
info replication

docker哨兵模式 docker redis 哨兵_java

2、docker搭建哨兵模式

#进入宿主机redis哨兵配置文件目录
cd /home/soft/redis/config

#创建并编辑哨兵模式配置文件sentinel-26379.conf、sentinel-26380.conf、sentinel-26381.conf
vi sentinel-26379.conf

port 26379
sentinel monitor mymaster 192.168.10.15 6379 2


vi sentinel-26380.conf

port 26380
sentinel monitor mymaster 192.168.10.15 6379 2


vi sentinel-26381.conf

port 26381
sentinel monitor mymaster 192.168.10.15 6379 2



#启动哨兵容器及哨兵服务sentinel-26379、sentinel-26380、sentinel-26381
docker run \
--name sentinel-26379 \
-p 26379:26379 \
-v /home/soft/redis/config/sentinel-26379.conf:/etc/redis/sentinel.conf \
-v /etc/localtime:/etc/localtime \
-d redis redis-sentinel /etc/redis/sentinel.conf


docker run \
--name sentinel-26380 \
-p 26380:26380 \
-v /home/soft/redis/config/sentinel-26380.conf:/etc/redis/sentinel.conf \
-v /etc/localtime:/etc/localtime \
-d redis redis-sentinel /etc/redis/sentinel.conf



docker run \
--name sentinel-26381 \
-p 26381:26381 \
-v /home/soft/redis/config/sentinel-26381.conf:/etc/redis/sentinel.conf \
-v /etc/localtime:/etc/localtime \
-d redis redis-sentinel /etc/redis/sentinel.conf

3、模拟master节点宕机,哨兵模式重新选举新的master节点

docker哨兵模式 docker redis 哨兵_redis_02


查看redis从节点连接日志,发现由一开始连接不上主节点到连上选出的新master节点

docker logs -f salve2-redis

docker哨兵模式 docker redis 哨兵_docker_03


查看redis主从节点关系变化,可发现如下:

#salve1-redis节点已经变为master节点,且该节点下有两个从节点

docker哨兵模式 docker redis 哨兵_java_04


#master-redis节点信息

docker哨兵模式 docker redis 哨兵_docker_05


#salve2-redis节点信息

docker哨兵模式 docker redis 哨兵_redis_06

注意:当redis的master节点down掉,当重新启动down掉的redis容器节点时,也应重启对应的sentinel容器节点,否则当重新选举的redis的master节点再次down掉,就不会进行选举了。