通过docker搭建redis主从同步并且配置哨兵模式

#docker pull redis:3.2 下载redis的镜像
#docker images 查看机器上所以的镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/redis 3.2 87856cc39862 10 months ago 76 MB
启动3个容器
#docker run --name redis-6379 -p 6379:6379 -d redis:3.2 redis-server
#docker run --name redis-6380 -p 6380:6379 -d redis:3.2 redis-server
#docker run --name redis-6381 -p 6381:6379 -d redis:3.2 redis-server
#docker ps 查看正在使用的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f7f7662d1439 redis:3.2 “docker-entrypoint…” 3 seconds ago Up 2 seconds 0.0.0.0:6381->6379/tcp redis-6381
15dc743795bf redis:3.2 “docker-entrypoint…” 3 seconds ago Up 2 seconds 0.0.0.0:6380->6379/tcp redis-6380
4f036c5dec49 redis:3.2 “docker-entrypoint…” 3 seconds ago Up 3 seconds 0.0.0.0:6379->6379/tcp redis-6379

#docker inspect 4f 这里的4f是在上面的查看正在使用的容器来的 ID 输入前面几个都行的
查看容器的ip地址

3个容器的内网地址为
redis-6379:172.17.0.2:6379 (4f036c5dec49) 这个做主库
redis-6380:172.17.0.3:6379 (15dc743795bf)
redis-6381:172.17.0.4:6379 (f7f7662d1439)

进入容器
#docker exec -it 4f /bin/bash
root@4f036c5dec49:/data# redis-cli 进入redis
127.0.0.1:6379> INFO replication
#Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

新开2个终端各执行一条进去容器的命令
#docker exec -it 15 /bin/bash
#docker exec -it f7 /bin/bash
都进入到redis里面 #redis-cli
127.0.0.1:6379> SLAVEOF 172.17.0.2 6379 都输入这一条命令,指定主库

然后返回到4f036c5dec49这个容器里面
127.0.0.1:6379>INFO replication 查看信息
#Replication
role:master
connected_slaves:2
slave0:ip=172.17.0.3,port=6379,state=online,offset=491,lag=0
slave1:ip=172.17.0.4,port=6379,state=online,offset=491,lag=0
master_repl_offset:491
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:490
到这里就配置完成1主2从了。

下面配置哨兵模式
重新进入到容器里面
#docker exec -it 4f /bin/bash
#docker exec -it 15 /bin/bash
#docker exec -it f7 /bin/bash
进入之后等输入下面的命令
#pwd
/data
#touch sentinel.conf && touch log.txt 创建配置文件和日志
#echo ‘sentinel monitor mymaster 172.17.0.2 6379 1’ > sentinel.conf
#echo ‘logfile “/data/log.txt”’ >> sentinel.conf 指定日志
#echo ‘daemonize yes’ >> sentinel.conf 后台运行

#redis-sentinel sentinel.conf 启动哨兵模式

之后把主库的容器关闭
#docker stop 4f0
进入之前的从库
#docker exec -it 15d redis-cli
127.0.0.1:6379> info replication 查看相关信息 发现现在这个容器变成主库了 之后是(0.2做主库,现在是0.3的做主库)
#Replication
role:master
connected_slaves:1
slave0:ip=172.17.0.4,port=6379,state=online,offset=13394,lag=0
master_repl_offset:13529
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:13528

#docker ps -a 查看全部容器 正在运行的或者停止的
把之前关掉的容器重新开启
#docker start 4f036
在一次执行在之前的窗口执行(之前的主库容器端口没有关)
127.0.0.1:6379> info replication
#Replication
role:master
connected_slaves:2
slave0:ip=172.17.0.4,port=6379,state=online,offset=36335,lag=0
slave1:ip=172.17.0.2,port=6379,state=online,offset=36335,lag=0
master_repl_offset:36335
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:36334
发现之前的主库变成从库了。

之后必须要每台机器上执行一次
redis-sentinel sentinel.conf
不然之后主库再一次死了,那么不会再选出新的主库了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值