Docker下redis的主从配置
1、拉取redis镜像
[tcy@tcy1 ~]$ docker pull daocloud.io/library/redis:latest
2、启动3个redis容器服务,分别使用到6379、6380、6381端口(端口号随便取)
docker run --name redis-6379 -p 6379:6379 -d 镜像ID/library/redis
docker run --name redis-6380 -p 6380:6379 -d 镜像ID/library/redis
docker run --name redis-6381 -p 6381:6379 -d 镜像ID/library/redis
3、查看容器
[tcy@tcy1 ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a9fa77adc598 daocloud.io/library/redis "docker-entrypoint.s 2 hours ago Up 2 hours 0.0.0.0:6381->6379/tcp redis-6381
6ee2f2f007e6 daocloud.io/library/redis "docker-entrypoint.s 2 hours ago Up 2 hours 0.0.0.0:6380->6379/tcp redis-6380
ab54741166e1 daocloud.io/library/redis "docker-entrypoint.s 3 hours ago Up 3 hours
4、测试容器,成功
docker exec -it ab54741166e1 redis-cli:进入容器
[root@tcy1 tcy]# docker exec -it ab54741166e1 redis-cli
127.0.0.1:6379> set b tcy
OK
127.0.0.1:6379> get b
"tcy"
127.0.0.1:6379> quit[root@tcy1 tcy]#
5、开始redis集群配置
5.1、看容器内网的ip地址
[root@tcy1 tcy]# docker inspect a9fa77adc598
3个redis的内网ip地址为
redis-6379:172.17.0.1:6379
redis-6380:172.17.0.2:6379
redis-6381:172.17.0.3:6379
5.2、进入docker容器内部,查看当前redis角色(主还是从)
[root@tcy1 tcy]# docker exec -it ab54741166e1 /bin/bash
root@ab54741166e1:/data# redis-cli
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:0
master_replid:d43d1ae8cde6cb084220e18b926aba79e0bb2504
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6379> quit
root@ab54741166e1:/data# exit
exit
目前三个都是master状态
5.3、使用redis-cli命令修改redis-6380、redis-6381的主机为172.17.0.1:6379
[root@tcy1 tcy]# docker exec -it a9fa77adc598 /bin/bash //redis-6380
root@a9fa77adc598:/data# redis-cli
127.0.0.1:6379> SLAVEOF 172.17.0.1 6379
OK
127.0.0.1:6379> quit
root@a9fa77adc598:/data# exit
exit
[root@tcy1 tcy]# docker exec -it 6ee2f2f007e6 /bin/bash //redis-6381
root@6ee2f2f007e6:/data# redis-cli
127.0.0.1:6379> SLAVEOF 172.17.0.1 6379
OK
127.0.0.1:6379> quit
5.4、查看redis-6379是否已经拥有2个从机,connected_slaves:2,是的
[root@tcy1 tcy]# docker exec -it ab54741166e1 /bin/bash
root@ab54741166e1:/data# redis-cli
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.17.0.3,port=6379,state=online,offset=378,lag=1
slave1:ip=172.17.0.2,port=6379,state=online,offset=378,lag=0
master_replid:ce193b15cfd57f7dc3ccfbf2a4aef6156b131e6d
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:378
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:378
127.0.0.1:6379> quit
root@ab54741166e1:/data# exit
exit
5.5、配置Sentinel哨兵
进入3台redis容器内部进行配置,在容器根目录里面创建sentinel.conf文件
文件内容为:sentinel monitor mymaster 172.17.0.1 6379 1
[root@tcy1 tcy]# docker exec -it a9fa77adc598 /bin/bash
root@a9fa77adc598:/data# cd / && touch sentinel.conf
root@a9fa77adc598:/# vim /sentinel.conf
如果出现:bash: vim: command not found
解决:1、apt-get update
2、apt-get install vim
最后,启动Redis哨兵:
root@a9fa77adc598:/# redis-sentinel /sentinel.conf
便于观察,开多个窗口。
Sentinel哨兵配置完毕。
5.6、测试
关闭Mastet
[tcy@tcy1 ~]$ docker stop ab54741166e1
ab54741166e1
这时,剩余的2个从机,会自动选举产生新的主机,这里选举172.17.0.2为主机
查看172.17.0.2,变成了主机。
[root@tcy1 /]# docker exec -it 6ee2f2f007e6 /bin/bash
root@6ee2f2f007e6:/data# redis-cli
127.0.0.1:6379> info replication
然后就完毕了