[root@shaoyou ~]# docker pull redis下载redis的镜像
[root@shaoyou ~]# docker images 查看机器上所有的镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 1319b1eaa0b7 8 hours ago 104MB
启动3个容器
[root@shaoyou ~]#docker run --name redis1 -itd -p 6379:6379 redis
[root@shaoyou ~]#docker run --name redis2 -itd -p 6380:6379 redis
[root@shaoyou ~]#docker run --name redis3 -itd -p 6381:6379 redis
[root@shaoyou ~]#docker ps 查看正在使用的容器
[root@shaoyou ~]#docker inspect redis1-2-3
3个容器的内网地址为
redis1:172.17.0.5 这个做主库
redis2:172.17.0.9
redis3:172.17.0.10
进入容器
[root@shaoyou ~]# docker exec -it redis1 /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个终端各执行一条进去容器的命令
[root@shaoyou ~]# docker exec -it redis2 /bin/bash
[root@shaoyou ~]# docker exec -it redis3 /bin/bash
都进入到redis里面 #redis-cli
127.0.0.1:6379> SLAVEOF 172.17.0.5 6379 都输入这一条命令,指定主库
都进入到redis里面 #redis-cli
127.0.0.1:6379> SLAVEOF 172.17.0.5 6379 都输入这一条命令,指定主库
然后返回到redis1这个容器里面
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从了。
下面配置哨兵模式
重新进入到容器里面
[root@shaoyou ~]# docker exec -it redis1 /bin/bash
[root@shaoyou ~]# docker exec -it redis2 /bin/bash
[root@shaoyou ~]# docker exec -it redis3 /bin/bash
进入之后等输入下面的命令
root@4f036c5dec49:#pwd
data
root@4f036c5dec49:#touch sentinel.conf && touch log.txt 创建配置文件和日志
root@321e6fe13b27:/data# vim
bash: vim: command not found (会报这个错误)
root@321e6fe13b27:/data# apt-get update
root@321e6fe13b27:/data# apt-get install vim
root@321e6fe13b27:/data# vim sentinel.conf
sentinel monitor master 172.17.0.5 6379 2
sentinel down-after-milliseconds master 60000
sentinel failover-timeout master 180000
sentinel parallel-syncs master 1
daemonize no
#redis-sentinel sentinel.conf 启动哨兵模式(每个容器都需要做)
之后把主库的容器关闭
[root@shaoyou ~]# docker stop redis1 #停掉主库
进入之前的从库
[root@shaoyou ~]# docker exec -it redis2 /bin/bash
127.0.0.1:6379> info replication 查看相关信息 发现现在这个容器变成主库了 之后是(0.5做主库,现在是0.9的做主库)
#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
[root@shaoyou ~]# docker ps -a 查看全部容器 正在运行的或者停止的
把之前关掉的容器重新开启
[root@shaoyou ~]# docker start redis1
在一次执行在之前的窗口执行(之前的主库容器端口没有关)
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
发现之前的主库变成从库了。
_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:36334
发现之前的主库变成从库了。