Docker-Compose搭建Redis高可用一主二从三哨兵集群

一丶前言

简介

        在 Redis 中,一主二从三哨兵是一种典型的架构模式,用于提高系统的高可用性和容错性。这种架构包括一个主服务器(Master)和两个从服务器(Slave),以及三个哨兵(Sentinel)实例。下面是每个组件的简要介绍:

  1. 主服务器(Master): 主服务器是整个架构的核心,负责处理写入操作和数据持久化。应用程序与主服务器进行交互,将写入操作发送到主服务器。主服务器的数据被复制到从服务器,从而实现数据冗余和容灾。
  2. 从服务器(Slave): 从服务器是主服务器的副本,通过复制主服务器的数据来实现数据的冗余和读取分担。从服务器可以处理读取请求,从而减轻主服务器的负担。如果主服务器发生故障,可以将其中一个从服务器升级为新的主服务器,从而保持系统的可用性。
  3. 哨兵(Sentinel): 哨兵是用于监控和管理 Redis 主从架构的组件。它们负责监测主服务器和从服务器的健康状况。当主服务器发生故障时,哨兵会自动选举一个从服务器作为新的主服务器,从而保证系统的高可用性。哨兵还可以进行自动故障转移,配置更新,以及处理其他与系统稳定性相关的任务。

     在一主二从三哨兵架构中,哨兵之间会进行通信,以便共同决定主服务器是否正常工作,并在需要时进行故障转移。这种架构可以有效地处理主服务器的故障,使系统能够在主服务器不可用时继续提供服务。

环境:CentOS7

虚拟机镜像下载链接icon-default.png?t=N7T8https://vault.centos.org/7.4.1708/isos/x86_64/CentOS-7-x86_64-Minimal-1708.iso

二丶安装docker环境

1.安装docker

确保linux内核为3.10以上

nuame  -r

2.安装管理工具

yum install -y yum-utils device-mapper-persistent-data lvm2

3.配置yum仓库

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

4.安装docker-ce

yum install -y docker-ce docker-ce-cli

5.启动docker

systemctl start docker

6.设置开机自启动

systemctl enable docker

7.安装docker-compose

curl -L https://github.com/docker/compose/releases/download/v2.18.1/docker-compose-linux-x86_64 -o /usr/bin/docker-compose

8.授权

cd /usr/bin/

chmod +x /usr/bin/docker-compose

9.检验安装

如果结果如下则显示安装成功

三丶搭建Redis主从 

1.创建文件夹

cd /usr/local
mkdir redis
cd redis
mkdir sentinel
cd ..

 2.创建docker-compose.yml文件

vi docker-compose.yml

3.编辑文件

ip:192.168.237.100换成自己的虚拟机ip

version: "4.1"
services:
  master:
    image: redis
    container_name: redis-master
    command: bash -c "redis-server --protected-mode no --slave-announce-ip 192.168.237.140 --slave-announce-port 6379"
    ports:
      - 6379:6379
  slave1:
    image: redis
    container_name: redis-slave-1
    ports:
      - 6380:6379
    command:  bash -c "redis-server --protected-mode no --slaveof redis-master 6379 --slave-announce-ip 192.168.237.140 --slave-announce-port 6380"
  slave2:
    image: redis
    container_name: redis-slave-2
    ports:
      - 6381:6379
    command: bash -c "redis-server --protected-mode no --slaveof redis-master 6379 --slave-announce-ip 192.168.237.140 --slave-announce-port 6381"

4.启动主从

在 docker-compose.yml同级目录下输入一下代码,运行结果如图

5.查看网络

redis-default就是docker compose自动创建一个网络,命名规则上级文件夹名+_default,记住该网络名称。

 6.检查主从服务

使用docker ps查看启动服务,则会出现以下结果

进入redis-master容器

docker exec -it redis-master /bin/bash

redis-cli

查看状态信息 ,如果显示下图信息,则表示redis-主从连接成功

info replication

 7.测试主从

 退出主容器,进入redis-slave-1,如果出现如下结果则redis主从搭建成功。

 四、搭建Redis哨兵

1.进入sentinel文件夹

 2.创建sentinel.conf文件配置文件

vi sentinel1.conf
protected-mode no
sentinel monitor mymaster 192.168.237.140 6379 2
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
  1. 保护模式设置为no
  2. 设置监控目标的信息,其中参数分别为:Master名称、IP地址、端口号、Quorum。ip地址为宿主机地址
  3. 设置哨兵认为节点不可用所需的毫秒数。
  4. 在进行故障转移时,Sentinel将等待多长时间,以便让先前领导者尽可能恢复成为可接受筋疲力尽的服从者。
  5. 当Sentinel处理故障转移时,需要同步Slave上的数据,可以设置同时同步多个Slave的数量。
  6. 更多参数请查看
    深入解读sentinel.conficon-default.png?t=N7T8https://www.python100.com/html/106717.html

copy两份相同的配置文件

cp sentinel1.conf sentinel2.conf
cp sentinel1.conf sentinel3.conf

3.编排docker-conpose文件

vi docker-compose.yml
version: "4.2"
services:
  sentinel1:
    image: redis
    container_name: redis-sentinel-1
    ports:
      - 26379:26379
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
      - /usr/local/redis/sentinel/sentinel1.conf:/usr/local/etc/redis/sentinel.conf
  sentinel2:
    image: redis
    container_name: redis-sentinel-2
    ports:
    - 26380:26379
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
      - /usr/local/redis/sentinel/sentinel2.conf:/usr/local/etc/redis/sentinel.conf
  sentinel3:
    image: redis
    container_name: redis-sentinel-3
    ports:
      - 26381:26379
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
      - /usr/local/redis/sentinel/sentinel3.conf:/usr/local/etc/redis/sentinel.conf
networks:
  default:
      name: redis_default
      external: true

配置文件解析

  1. 分别挂载三个配置文件到  /usr/local/redis/sentinel/sentinel1.conf 、sentinel2.conf 、sentinel3.conf 
  2. networks.default.name=redis_defalut为docker network ls查看的,之前所搭建的redis网络

4.启动三哨兵

 docker compose up -d

 5.查看redis搭建状态

docker ps 查看一主二从三哨兵

 进入任一哨兵节点容器,如果显示一下结果,则表示redis 一主二从三哨兵集群搭建成功

docker exec -it redis-sentinel-1 /bin/bash
redis-cli -p 26379
info Sentinel

6.故障测试

停掉master节点

docker stop redis-master

查看日志

docker compose logs -f

 查看哨兵状态,可以看到此时主节点自动更换为6381端口

 重启master节点后,可以看到会6379以从节点加入到主节点中,

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
要使用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 ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

localhost:9000

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值