1、记得启动时master要第一个启动,因为slaveof 172.17.0.2 6379,只有第一个启动的才是172.17.0.2(过期,docker run时可以指定ip)
2、对sentinel文件chmod 777
3、sentinel monitor mymaster 127.0.0.1 6379 2(注意mymaster是自定义)
4、sentinel auth-pass mymaster password
5、坑:JedisSentinelPool需要sentinel配置文件的sentinel monitor是物理ip而不是容器的ip,但sentinel在docker的bridge网络模式下,需要sentinel monitor为容器的ip,或许可以尝试其他的网络模式(172.17)
解决:将JedisSentinelPool放在tomcat容器上,该容器与sentinel和redis容器处于同一bridge即可访问
以redis_6379为例,修改的参数:
bind 0.0.0.0
protected-mode no
port 6379
daemonize no # 守护线程模式和docker run 冲突
logfile /opt/redis/redis_6379/redis_6379.log
save 3600 1
save 300 100
save 60 10000
dbfilename dump_6379.rdb
dir /opt/redis/redis_6379/
masterauth foobared # master可能成为slave连接新master需要密码
requirepass foobared
slaveof 172.18.5.11 6379 # slave节点需要,此为master的容器ip和端口
哨兵以sentinel_26379为例,修改的参数:
bind 0.0.0.0
protected-mode no
port 26379
daemonize no
logfile /opt/redis/sentinel_26379/redis-sentinel-26379.log
dir /opt/redis/sentinel_26379
sentinel monitor mymaster 172.18.5.11 6379 2 #注意此处的mymaster指定了master的名字为mymaster
sentinel auth-pass mymaster foobared
#注意不要给sentinel加密码,因为JedisSentinelPool没有合适的构造方法。
sentinel down-after-milliseconds mymaster 3000 # 当master下线多久进行master身份转移,3秒不一定合适
提前准备好redis_6379.log,因为不会自动创建
chmod 777 /opt/redis/redis_6379/redis_6379.conf /opt/redis/redis_6380/redis_6380.conf /opt/redis/redis_6381/redis_6381.conf /opt/redis/sentinel_26379/sentinel_26379.conf /opt/redis/sentinel_26380/sentinel_26380.conf /opt/redis/sentinel_26381/sentinel_26381.conf
docker run --name redis_6379 --net zoonet --ip 172.18.5.11 -p 6379:6379 -v /opt/redis/redis_6379/:/opt/redis/redis_6379/ --restart always --privileged=true -d redis redis-server /opt/redis/redis_6379/redis_6379.conf
docker run --name redis_6380 --net zoonet --ip 172.18.5.12 -p 6380:6380 -v /opt/redis/redis_6380/:/opt/redis/redis_6380/ --restart always --privileged=true -d redis redis-server /opt/redis/redis_6380/redis_6380.conf
docker run --name redis_6381 --net zoonet --ip 172.18.5.13 -p 6381:6381 -v /opt/redis/redis_6381/:/opt/redis/redis_6381/ --restart always --privileged=true -d redis redis-server /opt/redis/redis_6381/redis_6381.conf
docker run --name sentinel_26379 --net zoonet --ip 172.18.5.14 -p 26379:26379 -v /opt/redis/sentinel_26379/:/opt/redis/sentinel_26379/ --restart always --privileged=true -d redis redis-sentinel /opt/redis/sentinel_26379/sentinel_26379.conf
docker run --name sentinel_26380 --net zoonet --ip 172.18.5.15 -p 26380:26380 -v /opt/redis/sentinel_26380/:/opt/redis/sentinel_26380/ --restart always --privileged=true -d redis redis-sentinel /opt/redis/sentinel_26380/sentinel_26380.conf
docker run --name sentinel_26381 --net zoonet --ip 172.18.5.16 -p 26381:26381 -v /opt/redis/sentinel_26381/:/opt/redis/sentinel_26381/ --restart always --privileged=true -d redis redis-sentinel /opt/redis/sentinel_26381/sentinel_26381.conf
可以进入redis和sentinel容器查看主从和哨兵情况:
docker exec -it 容器id redis-cli -p 端口
info Replication(redis信息)
info sentinel(哨兵信息)