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

redis哨兵模式 主节点密码 redis哨兵默认端口_redis

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

redis哨兵模式 主节点密码 redis哨兵默认端口_redis哨兵模式 主节点密码_02

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

redis哨兵模式 主节点密码 redis哨兵默认端口_redis哨兵模式 主节点密码_03

8、在redis1容器中存几个数据,因为redis1是主,其他是从,所以只有redis1可以存,其他只能取

redis哨兵模式 主节点密码 redis哨兵默认端口_配置文件_04

看redis2权限,只能读,不能写

redis哨兵模式 主节点密码 redis哨兵默认端口_redis哨兵模式 主节点密码_05


9、测试:关掉redis1,看是redis2、redis3是否会有一个变成主架构

redis哨兵模式 主节点密码 redis哨兵默认端口_redis哨兵模式 主节点密码_06

可以看出,主已经变成了redis2,拥有了写的权限

redis哨兵模式 主节点密码 redis哨兵默认端口_redis_07

redis3没有写权限

10、开启redis1,它还是从。交出去的权力,取不回来了。只能等redis2 宕掉,才有机会跟redis3抢一下,能否再成主。

redis哨兵模式 主节点密码 redis哨兵默认端口_docker_08