过程

拉取最新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是否打印日志。