1、新建文件夹,位置:/opt/redis09033/,所有文件及操作均在此文件夹下
2、创建docker-compose.yml文件
version: "3.1"
services:
redis1:
image: 10.0.134.175:5000/redis:5.0.9 #镜像位置
restart: always
container_name: redis1 #容器名称
environment:
- TZ=Asia/Shanghai #时区
ports:
- 7011:6379 #端口映射,宿主机7011映射到容器内redis的默认端口6379
volumes:
#创建对应数据卷,当前文件夹下的redis1.conf文件对应容器的redis.conf文件,sentinel1.conf文件对应容器内的sentinel.conf文件
- ./redis1.conf:/usr/local/redis/redis.conf
- ./sentinel1.conf:/data/sentinel.conf
command: ["redis-server","/usr/local/redis/redis.conf"]
redis2:
image: 10.0.134.175:5000/redis:5.0.9
restart: always
container_name: redis2
environment:
- TZ=Asia/Shanghai
ports:
- 7012:6379
volumes:
- ./redis2.conf:/usr/local/redis/redis.conf
- ./sentinel2.conf:/data/sentinel.conf
links: #当前容器中“master”代指redis1容器的ip
- redis1:master
command: ["redis-server","/usr/local/redis/redis.conf"]
redis3:
image: 10.0.134.175:5000/redis:5.0.9
restart: always
container_name: redis3
environment:
- TZ=Asia/Shanghai
ports:
- 7013:6379
volumes:
- ./redis3.conf:/usr/local/redis/redis.conf
- ./sentinel3.conf:/data/sentinel.conf
links:
- redis1:master
command: ["redis-server","/usr/local/redis/redis.conf"]
3、配置redis文件,搭建主从结构
redis2.conf和redis3.conf的配置文件内容:
replicaof master 6379
redis1.conf文件内容可以为空
4、哨兵的配置文件
sentinel1.conf文件,这里1是主,sentinel monitor mymaster redis1 6379 2
如果是从,需要写:sentinel monitor mymaster master 6379 2
sentinel1.conf文件内容:
# 哨兵需要后台启动
daemonize yes
# 哨兵要监视的主机 ip和端口
# 主机别名 主机ip 端口 不少于2个哨兵投票则认定主机宕机(客观下线)
sentinel monitor mymaster redis1 6379 2
#这里不写localhost,主机写服务名:redis1
# sentinel monitor mymaster master 6379 2
# 主从集群中 主机10s内不回复哨兵即被判定为宕机
sentinel down-after-milliseconds mymaster 10000
sentinel failover-timeout mymaster 10000
# 哨兵日志文件
logfile "/data/sentinel.log"
# sentinel auth-pass mymaster java2004
# port 26379
sentinel2.conf、sentinel3.conf文件内容:
# 哨兵需要后台启动
daemonize yes
sentinel monitor mymaster master 6379 2
# 主从集群中 主机10s内不回复哨兵即被判定为宕机
sentinel down-after-milliseconds mymaster 10000
sentinel failover-timeout mymaster 10000
5、在启动容器前,将配置文件的权限修改,以保证Redis可以修改配置文件信息
# 哨兵需要后台启动
chmod 777 *.conf
6、启动容器,并在3个redis容器内部启动sentinel
docker-compose up -d
docker exec -it redis1 bash
redis-sentinel sentinel.conf
exit
docker exec -it redis2 bash
redis-sentinel sentinel.conf
exit
docker exec -it redis3 bash
redis-sentinel sentinel.conf
exit
7、在宿主机中快速查看哨兵信息
docker exec -it redis1 redis-cli -p 26379 info sentinel
docker exec -it redis2 redis-cli -p 26379 info sentinel
docker exec -it redis2 redis-cli -p 26379 info sentinel
8、在redis1容器中存几个数据,因为redis1是主,其他是从,所以只有redis1可以存,其他只能取
看redis2权限,只能读,不能写
9、测试:关掉redis1,看是redis2、redis3是否会有一个变成主架构
可以看出,主已经变成了redis2,拥有了写的权限
redis3没有写权限
10、开启redis1,它还是从。交出去的权力,取不回来了。只能等redis2 宕掉,才有机会跟redis3抢一下,能否再成主。