过程
拉取最新redis镜像
docker pull redis
启动3个镜像
docker run --name redis-6379 -p 6379:6379 -d redis:latest # 使用已有的镜像可以,使用网址也行如 hub.c.163.com/library/redis
docker run --name redis-6380 -p 6380:6379 -d redis:latest # -d detach 表示后台运行,一般都要加这个参数
docker run --name redis-6381 -p 6381:6379 -d redis:latest
docker ps -a
命令,查看并记录3个容器id,如结果为:
63add274507d 6379
1c9eed8fb4ae 6380
f47311784c6b 6381
inspect
命令查看6379容器内网ip:
docker inspect 63add274507d | grep IPAddress; # 如内网ip为 172.17.0.5,这里的IPAddress区分大小写
分别进入容器内部,连接redis,并查看redis信息。
docker exec -ti 63add274507d /bin/bash # 进入redis容器内
docker exec -ti 1c9eed8fb4ae /bin/bash
docker exec -ti f47311784c6b /bin/bash
redis-cli # 连接redis
info replication # 查看信息
发现未配置前,3台都是master。
在6380、6381 上执行命令配置6379为主库:
SLAVEOF 172.17.0.5 6379 # ip是6379的内网ip
SLAVEOF 172.17.0.5 6379 # ip是6379的内网ip
再次查看info replication,6379信息如下:
127.0.0.1:6379> info replication
# Replication
role:master # 是主库
connected_slaves:2 # 有2个从库
slave0:ip=172.17.0.3,port=6379,state=online,offset=2870,lag=0 # 从库1
slave1:ip=172.17.0.4,port=6379,state=online,offset=2870,lag=1 # 从库2
在6380、6381容器上信息如下:
127.0.0.1:6379> info replication
# Replication
role:slave # 是从库
master_host:172.17.0.5 # 主库地址
master_port:6379 # 主库端口
集群搭建成功。
哨兵模式
哨兵模式有什么用
监控
Sentinel会不断地检查你的主从服务是否正常。比如shutdown掉一个从库,
Sentinel就可以监控到,并打印日志。
提醒
当被监控的某个Redis服务器出现问题时,Sentinel可以通过API向管理员或者其他应用程序发送通知。
自动故障迁移
当一个主服务器不能正常工作时,Sentinel 会开始一次自动故障迁移操作,它会将失效主服务器的其中一个从服务器升级为新的主服务器,并让失效主服务器的其他从服务器改为复制新的主服务器;当客户端试图连接失效的主服务器时,集群也会向客户端返回新主服务器的地址,使得集群可以使用新主服务器代替失效服务器。
开始搭建
根据之前的操作继续,分别进入3个容器:
docker exec -ti 63add274507d /bin/bash
docker exec -ti 1c9eed8fb4ae /bin/bash
docker exec -ti f47311784c6b /bin/bash
要用vim编辑sentinel.conf,先安装所需(实在是慢):
apt-get update ;
apt-get install vim ;
cd /
进入根目录,
vim sentinel.conf
创建并编辑文件,内容为:
sentinel monitor host6379 172.17.0.5 6379 1
redis-sentinel /sentinel.conf
分别启动监控,完成。
可以kill掉一个从库,看看其他sentinel是否打印日志。