基于Docker-Compose搭建Redis哨兵模式

基于Docker-Compose搭建Redis哨兵模式

一、部署环境

环境: 一台Linux虚拟机、Docker、Docker-Compose
目标: Redis哨兵模式,一主二从三哨兵
明细: Redis主节点(Redis6379)、Redis从节点1(Redis6380)、Redis从节点2(Redis6381)、Redis哨兵1(Sentinel26379)、Redis哨兵2(Sentinel26380)、Redis哨兵3(Sentinel26381)

二、编写Redis配置文件

Redis6379.conf

# redis 服务器的端口号(默认:6379)
port 6379

# 绑定的 IP 地址,如果设置为 127.0.0.1,则只能本地访问;若设置为 0.0.0.0,则监听所有接口(默认:127.0.0.1)
bind 0.0.0.0

# 设置密码,客户端连接时需要提供密码才能进行操作,如果不设置密码,可以注释掉此行(默认:无)
# requirepass foobared
requirepass bingo

# 是否以守护进程(daemon)模式运行,默认为 "no",设置为 "yes" 后 Redis 会在后台运行
daemonize no

# 设置日志级别(默认:notice)。可以是 debug、verbose、notice、warning
loglevel notice

# 设置日志文件的路径(默认:空字符串),如果不设置,日志会输出到标准输出
logfile "6379.log"

# 设置数据库数量(默认:16),Redis 使用数据库索引从 0 到 15
databases 16

# 是否启用 AOF 持久化,默认为 "no"。如果设置为 "yes",将在每个写操作执行时将其追加到文件中
appendonly no

# 设置 AOF 持久化的文件路径(默认:appendonly.aof)
appendfilename "appendonly6379.aof"

# 设置是否开启 RDB 持久化,默认为 "yes"。如果设置为 "no",禁用 RDB 持久化功能
save 900 1
save 300 10
save 60 10000

# 设置 RDB 持久化文件的名称(默认:dump.rdb)
dbfilename dump6379.rdb

仿照上面的配置复制两份,依次命名为Redis6380.conf、Redis6381.conf,将文件中涉及到的端口6379改成对应的6380和6381即可

在这里插入图片描述

三、编写哨兵配置文件

Sentinel26379.conf

# 服务器的端口号
port 26379

# 可访问的 IP 地址
bind 0.0.0.0     

# 日志文件
logfile "sentinel26379.log"

# 监控的主机(格式为 sentinel monitor 主机名 主机ip 主机端口 多少个哨兵节点都认为主节点不可达时才会进行故障转移的数量)
sentinel monitor redis6379 192.168.163.130 6379 2

# 监控的主机密码(格式为 sentinel auth-pass 主机名 主机连接密码)
sentinel auth-pass redis6379 bingo

# 指定在多少毫秒内,哨兵节点没有收到主节点的响应时,就会将主节点判定为下线状态(格式为 sentinel down-after-milliseconds 主机名 超时毫秒数)
sentinel down-after-milliseconds redis6379 5000

# 指定进行故障转移的超时时间,即在多少毫秒内完成故障转移操作(格式为 sentinel failover-timeout 主机名 主机连接密码)
sentinel failover-timeout redis6379 60000

# 这个配置项用于指定在进行故障转移时可以同时同步的从节点数量(格式为 sentinel parallel-syncs 主机名 主机连接密码)
sentinel parallel-syncs redis6379 1

复制两份,依次命名为sentinel26380.conf和sentinel26381.conf

在这里插入图片描述

四、编写Docker-Compose.yml

compose-redis.yml

version: '3.3'
services:

  redis6379: # 服务名
    image: redis:latest # 使用的镜像
    container_name: redis6379 # docker启动的容器名称
    ports:
      - '6379:6379' # 启动的端口(本机:容器)
    volumes: # 挂载卷的位置(本机:容器),自己创建好目录即可,只需修改本机的目录路径,不需要修改容器的路径
      - /mydata/redis/data:/data
      - /mydata/redis/conf/redis6379.conf:/usr/local/etc/redis/redis.conf
      - /mydata/redis/logs:/logs
    #配置文件启动命令
    command: redis-server /usr/local/etc/redis/redis.conf

  redis6380:
    image: redis:latest
    container_name: redis6380
    ports:
      - '6380:6380'
    volumes:
      - /mydata/redis/data:/data
      - /mydata/redis/conf/redis6380.conf:/usr/local/etc/redis/redis.conf
      - /mydata/redis/logs:/logs
    command: redis-server /usr/local/etc/redis/redis.conf

  redis6381:
    image: redis:latest
    container_name: redis6381
    ports:
      - '6381:6381'
    volumes:
      - /mydata/redis/data:/data
      - /mydata/redis/conf/redis6381.conf:/usr/local/etc/redis/redis.conf
      - /mydata/redis/logs:/logs
    command: redis-server /usr/local/etc/redis/redis.conf

  sentinel26379:
    image: redis:latest
    container_name: sentinel26379
    ports:
      - '26379:26379'
    volumes:
      - /mydata/redis/data:/data
      - /mydata/redis/conf/sentinel26379.conf:/usr/local/etc/redis/sentinel.conf
      - /mydata/redis/logs:/logs
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    depends_on: # 设置依赖关系,哨兵等待redis服务启动成功之后再启动
      - redis6379
      - redis6380
      - redis6381

  sentinel26380:
    image: redis:latest
    container_name: sentinel26380
    ports:
      - '26380:26380'
    volumes:
      - /mydata/redis/data:/data
      - /mydata/redis/conf/sentinel26380.conf:/usr/local/etc/redis/sentinel.conf
      - /mydata/redis/logs:/logs
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    depends_on:
      - redis6379
      - redis6380
      - redis6381

  sentinel26381:
    image: redis:latest
    container_name: sentinel26381
    ports:
      - '26381:26381'
    volumes:
      - /mydata/redis/data:/data
      - /mydata/redis/conf/sentinel26381.conf:/usr/local/etc/redis/sentinel.conf
      - /mydata/redis/logs:/logs
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    depends_on:
      - redis6379
      - redis6380
      - redis6381

五、执行yml文件,启动容器

docker-compose -f compose-redis.yml up -d

在这里插入图片描述

docker ps 查看容器状态

在这里插入图片描述

可以看到所有容器都已经成功启动了

六、查看Redis各个角色状态

info replication 查看Redis节点信息、info sentinel 查看Redis哨兵信息

先连接主节点容器redis6379,然后查看主节点信息

docker exec -it redis6379 redis-cli -a bingo

在这里插入图片描述

列出了其两个从节点信息

connected_slaves:2
slave0:ip=192.168.48.1,port=6381,state=online,offset=109274,lag=0
slave1:ip=192.168.48.1,port=6380,state=online,offset=109274,lag=1

查看从节点redis6380信息

docker exec -it redis6380 redis-cli -p 6380 -a bingo

在这里插入图片描述

可以看到当前从节点的主节点信息

role:slave
master_host:192.168.163.130
master_port:6379
master_link_status:up

进入容器sentinel26379,查看哨兵sentinel26379的信息

docker exec -it sentinel26379 redis-cli -p 26379
info sentinel

在这里插入图片描述

可以看到主节点信息、状态和Redis的配置详情(两个从节点,三个哨兵)

master0:name=redis6379,status=ok,address=192.168.163.130:6379,slaves=2,sentinels=3

七、主从复制验证

先在主节点redis6379上设置k1

在这里插入图片描述

然后在从节点redis6380和redis6381上查询

在这里插入图片描述

在这里插入图片描述

可以看到主节点上设置的k1自动同步到了从节点上

注意,Redis的从节点是不能设置值的,只能读取值

在这里插入图片描述

八、主节点故障恢复验证

先关掉主节点redis6379

docker stop redis6379

在这里插入图片描述

然后进入哨兵sentinel26379查看Redis的节点信息

在这里插入图片描述

可以看到主节点的地址已经改成了6380(注意,matser的name是redis6379是因为我们最开始在sentinel.conf文件中配置的,这个名字可以自定义)

然后我们进入redis6380查看主机信息并尝试设置值

在这里插入图片描述

现在redis6380被选举成了主节点,便可设置值了,至此,主节点故障恢复成功

小结

以上就是作者基于Docker-Compose搭建Redis哨兵模式的所有内容,如果文中有错误或者表述不清楚的地方欢迎指正和讨论,谢谢 ~

  • 19
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用docker-compose搭建Redis集群,你可以按照以下步骤进行操作: 1. 创建一个docker-compose.yml文件,并在其中定义Redis集群的服务。你可以使用以下示例作为参考: ``` version: '3' services: redis-6379: image: redis ports: - "6379:6379" volumes: - ./redis-6379:/data command: redis-server /data/redis.conf redis-6380: image: redis ports: - "6380:6379" volumes: - ./redis-6380:/data command: redis-server /data/redis.conf redis-6381: image: redis ports: - "6381:6379" volumes: - ./redis-6381:/data command: redis-server /data/redis.conf redis-6382: image: redis ports: - "6382:6379" volumes: - ./redis-6382:/data command: redis-server /data/redis.conf redis-6383: image: redis ports: - "6383:6379" volumes: - ./redis-6383:/data command: redis-server /data/redis.conf redis-6384: image: redis ports: - "6384:6379" volumes: - ./redis-6384:/data command: redis-server /data/redis.conf ``` 2. 在每个Redis服务的目录中创建一个redis.conf文件,用于配置Redis集群的参数。你可以使用以下示例作为参考: ``` port 6379 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes ``` 3. 运行docker-compose命令来启动Redis集群: ``` docker-compose up -d ``` 这将启动Redis集群的所有服务,并将它们连接在一起。 请注意,以上步骤中的示例仅适用于在本地搭建Redis集群。如果你需要在生产环境中搭建Redis集群,你可能需要进行更多的配置和安全性措施。 #### 引用[.reference_title] - *1* *2* *3* [docker(八)—docker-compose搭建redis集群](https://blog.csdn.net/xiaoqiang65/article/details/121011071)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值