目录结构

先按照这个目录结构创建。
redis主从配置
redis-master主配置文件
#允许远程连接
bind 0.0.0.0
# 设置Redis实例的端口号
port 6379
# 设置Redis实例的密码
requirepass 123456
# 启用持久化
appendonly yesredis-slave1从配置文件
#允许远程连接
bind 0.0.0.0
# 设置Redis实例的端口号
port 6380
# 设置Redis实例的密码
requirepass 123456
# 启用持久化
appendonly yes
# 配置master节点信息
replicaof 192.168.3.150 6379
# 设定连接主节点所使用的密码
masterauth 123456
redis-slave2从配置文件
#允许远程连接
bind 0.0.0.0
# 设置Redis实例的端口号
port 6381
# 设置Redis实例的密码
requirepass 123456
# 启用持久化
appendonly yes
# 配置master节点信息
replicaof 192.168.3.150 6379
# 设定连接主节点所使用的密码
masterauth 123456
注意
- 端口为docker 内部容器端口,并非对外开放端口,端口一致应该也是可以的,如果想要远程连接必须得映射端口。
- masterip所指定的redis-server-master是运行master节点的容器名; 在单体服务器下docker容器间可以使用容器名或者docker容器分配的ip代替,不同服务器用实际的IP地址来通信,想要一部到位就用公网ip。
可通过下方命令查看容器分配的ip
#docker inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" 容器名/容器id哨兵sentinel配置
redis-sentinel-master #哨兵1 配置
# 设置哨兵的端口号
port 26379
# 配置哨兵的监控参数
# 格式:sentinel monitor <master-name> <ip> <redis-port> <quorum>
# master-name是为这个被监控的master起的名字
# ip是被监控的master的IP或主机名。因为Docker容器之间可以使用容器名访问,所以这里写master节点的容器名
# redis-port是被监控节点所监听的端口号
# quorom设定了当几个哨兵判定这个节点失效后,才认为这个节点真的失效了
# 配置哨兵的监控参数
sentinel monitor master 192.168.3.150 6379 2
# 设置 Sentinel 连接主服务器的密码,保持与主节点一致
sentinel auth-pass master 123456
#超过5秒主节点还没有连接上,则认为主节点已经停止
sentinel down-after-milliseconds master 5000redis-sentinel-master #哨兵2 配置
# 设置哨兵的端口号
port 26379
# 配置哨兵的监控参数
# 格式:sentinel monitor <master-name> <ip> <redis-port> <quorum>
# master-name是为这个被监控的master起的名字
# ip是被监控的master的IP或主机名。因为Docker容器之间可以使用容器名访问,所以这里写master节点的容器名
# redis-port是被监控节点所监听的端口号
# quorom设定了当几个哨兵判定这个节点失效后,才认为这个节点真的失效了
# 配置哨兵的监控参数
sentinel monitor master 192.168.3.150 6379 2
# 设置 Sentinel 连接主服务器的密码,保持与主节点一致
sentinel auth-pass master 123456
#超过5秒主节点还没有连接上,则认为主节点已经停止
sentinel down-after-milliseconds master 5000redis-sentinel-master #哨兵3 配置
# 设置哨兵的端口号
port 26379
# 配置哨兵的监控参数
# 格式:sentinel monitor <master-name> <master-ip> <redis-port> <quorum>
# master-name是为这个被监控的master起的名字
# ip是被监控的master的IP或主机名。因为Docker容器之间可以使用容器名访问,所以这里写master节点的容器名
# redis-port是被监控节点所监听的端口号
# quorom设定了当几个哨兵判定这个节点失效后,才认为这个节点真的失效了
# 配置哨兵的监控参数
sentinel monitor master 192.168.3.150 6379 2
# 设置 Sentinel 连接主服务器的密码,保持与主节点一致
sentinel auth-pass master 123456
#超过5秒主节点还没有连接上,则认为主节点已经停止
sentinel down-after-milliseconds master 5000哨兵的配置是一样的,值得注意的是:
- 端口不需要强制设定,正如上诉,端口是容器内部端口,可以一致。
- master-name 可以是自定义,但必须前后一致。
- master-ip,在单体服务器下docker容器间可以使用容器名或者docker容器分配的ip代替,不同服务器用实际的IP地址来通信,想要一部到位就用公网ip。
docker一键部署配置
version: '3'
services:
  redis-master:
    image: redis
    container_name: redis-redis-master
    command: redis-server /usr/local/etc/redis/redis.conf
    ports:
      - "6379:6379"  
    volumes:
      - ./redis-master/conf/redis.conf:/usr/local/etc/redis/redis.conf
  redis-slave1:
    image: redis
    container_name: redis-redis-slave1
    command: redis-server /usr/local/etc/redis/redis.conf
    volumes:
      - ./redis-slave1/conf/redis.conf:/usr/local/etc/redis/redis.conf
    ports:
      - "6380:6380"  
    depends_on:
      - redis-master
  redis-slave2:
    image: redis
    container_name: redis-redis-slave2
    command: redis-server /usr/local/etc/redis/redis.conf
    volumes:
      - ./redis-slave2/conf/redis.conf:/usr/local/etc/redis/redis.conf
    ports:
      - "6381:6381"  
    depends_on:
      - redis-master
  redis-sentinel-master:
    image: redis
    container_name: redis-sentinel-master
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf 
    volumes:
      - ./redis-sentinel-master/conf/sentinel.conf:/usr/local/etc/redis/sentinel.conf
    ports:
      - "26379:26379"      
    depends_on:
      - redis-master
  redis-sentinel-slave1:
    image: redis
    container_name: redis-sentinel-slave1
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    ports:
      - "26380:26379"
    volumes:
      - ./redis-sentinel-slave1/conf/sentinel.conf:/usr/local/etc/redis/sentinel.conf
    depends_on:
      - redis-slave1
  redis-sentinel-slave2:
    image: redis
    container_name: redis-sentinel-slave2
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    ports:
      - "26381:26379"
    volumes:
      - ./redis-sentinel-slave2/conf/sentinel.conf:/usr/local/etc/redis/sentinel.conf
    depends_on:
      - redis-slave2
在redis文件夹下执行
docker-compose up -d 如图所示,表示启动成功。
如图所示,表示启动成功。
运行查看主从情况:

主从切换
docker stop redis-redis-master停掉主服务。

还剩一主一从,并且已经切换至redis-redis-slave2服务上了。
主从数据复制
进入主redis服务,也就是redis-redis-slave2
docker exec -it  redis-redis-slave2 bash
redis-cli -h 127.0.0.1 -p 6381
AUTH 123456
使用redis命令。

添加数据成功,切换到从服务中查看数据。

注意从服务只可读不可写。
写在最后
在实际业务应用中,需要根据具体情况去做redis高可用,并非得一主二从三哨兵,这是可以灵活变动的。在双机热备的情况下,我感觉是可以用一主一从双热备的模式构建redis环境即可满足使用,只是多个节点多个保障罢了!















![[深度学习] 卷积神经网络“卷“在哪里?](https://img-blog.csdnimg.cn/direct/468fb6de5e9d4190868dbb2d6298fbf7.png)



