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查看启动服务,则会出现以下结果

Docker-Compose搭建Redis高可用一主二从三哨兵集群_第1张图片

进入redis-master容器

docker exec -it redis-master /bin/bash

redis-cli

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

info replication

Docker-Compose搭建Redis高可用一主二从三哨兵集群_第2张图片

 7.测试主从

Docker-Compose搭建Redis高可用一主二从三哨兵集群_第3张图片

 退出主容器,进入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

Docker-Compose搭建Redis高可用一主二从三哨兵集群_第4张图片

 5.查看redis搭建状态

docker ps 查看一主二从三哨兵

Docker-Compose搭建Redis高可用一主二从三哨兵集群_第5张图片

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

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

Docker-Compose搭建Redis高可用一主二从三哨兵集群_第6张图片

6.故障测试

停掉master节点

docker stop redis-master

查看日志

docker compose logs -f

Docker-Compose搭建Redis高可用一主二从三哨兵集群_第7张图片

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

Docker-Compose搭建Redis高可用一主二从三哨兵集群_第8张图片

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

Docker-Compose搭建Redis高可用一主二从三哨兵集群_第9张图片

你可能感兴趣的:(Docker,docker,redis,容器)