基于 docker 的redis 主从+哨兵(快速部署)
很简单(字多的步骤见:http://www.cnblogs.com/vipzhou/p/8580495.html)
1、直接启动2个容器
docker network create --subnet 172.30.0.0/16 yapi_net
mkdir -p /opt/redis_01/data
mkdir -p /opt/redis_02/data
docker network inspect yapi_net
docker run --network yapi_net --ip 172.30.0.21 -d --name redis_01 --restart always -p 6380:6379 -v /opt/redis_01/data:/data docker.io/redis
docker run --network yapi_net --ip 172.30.0.22 -d --name redis_02 --restart always -p 6381:6379 -v /opt/redis_02/data:/data docker.io/redis
2、分别进去其中两个容器,进行中从配置,这里只演示一个
docker exec -it redis_6379 /bin/bash
redis-cli -h ip -a password
SLAVEOF 172.30.0.21 6379
#意思是自己属于哪个机器的从
INFO replication #查看 master_link_status:up 表示成功
3、进去一台从 配置哨兵()
cat << EOF > sentinel.conf
> sentinel monitor mymaster 172.30.0.21 6379 1 #这里填写主的信息
> EOF
redis-sentinel sentinel.conf #启动哨兵
大功告成
------------------------------------------------------------------------------------------------
在两台真机上部署
SLAVEOF
要指定真机ip和暴露端口,哨兵也要制定真机ip 和暴露端口,否则哨兵没用
哨兵作用:通过哨兵监控主redis,当主redis挂掉时,会自动切换从为主,哨兵不会退出,而是持续监控原redis主,当原redis主,重新启动后,会将它设置为redis从
----------------------------------------------------------------------------------------------------
另:也可以指定配置文件运行。
配置文件修改部分:
bind 0.0.0.0 daemonize no #关闭守护进程,在前台运行, dir /data/ masterauth password #主从认证密码,否则主从不能同步,最好主从密码一致 requirepass password #访问redis密码 appendonly yes #采用aof持久化
制作镜像
cat Dockerfile
FROM redis
ADD redis.conf /usr/local/etc/redis/redis.conf
docker build -t myredis .
docker run -d --name redis --restart always -p 6379:6379 -v /opt/redis/:/data myredis redis-server /usr/local/etc/redis/redis.conf
配置从库
配置哨兵,配置文件,只需写两行,其他启动后会自动不全配置文件
sentinel monitor mymaster 主ip 6379 1 sentinel auth-pass mymaster password
启动哨兵
当主从自动切换后,哨兵的配置的配置文件也会自动改变