使用Docker compose搭建Redis高可用哨兵集群

一、前言

本教程主要用于使用Docker compose在centos服务器中快速搭建redis哨兵集群,对redis配置相对较少,如果要对redis进行配置,只需要进行文件

二、Docker安装

Docker安装和使用教程

三、搭建Redis主从集群

  1. 创建一个文件夹(名字自取,这里使用Redis-Sentinel),其结构如下

    • 文件夹结构:

      Redis-Sentinel
      |-- master-slave  存储主从集群配置文件
      `-- sentinel   存储所有哨兵配置文件
          |-- sentinel1   存储哨兵1配置文件
          |-- sentinel2   存储哨兵2配置文件
          `-- sentinel3   存储哨兵3配置文件
      
      
    • 指令:

      mkdir -p Redis-Sentinel/master-slave Redis-Sentinel/sentinel/sentinel1 Redis-Sentinel/sentinel/sentinel2 Redis-Sentinel/sentinel/sentinel3
      
  2. 进入master-slave文件夹下:

cd master-slave
  1. 编写docker-compose.yml文件

    • 创建docker-compose.yml文件

      vim docker-compose.yml
      
    • 编辑docker-compose.yml文件

      services:
        master:
          image: redis
          container_name: redis-master
          networks:
            - redisco
          command: bash -c "redis-server --protected-mode no --slave-announce-ip 43.143.212.194 --slave-announce-port 6379"
          ports:
            - 6379:6379
        slave1:
          image: redis
          container_name: redis-slave-1
          networks:
            - redisco
          ports:
            - 6380:6379
          command:  bash -c "redis-server --protected-mode no --slaveof redis-master 6379 --slave-announce-ip 43.143.212.194 --slave-announce-port 6380"
        slave2:
          image: redis
          container_name: redis-slave-2
          networks:
            - redisco
          ports:
            - 6381:6379
          command: bash -c "redis-server --protected-mode no --slaveof redis-master 6379 --slave-announce-ip 43.143.212.194 --slave-announce-port 6381"
      
      networks:
        redisco:
      
  2. 启动Redis主从集群

    docker compose up -d
    

    在这里插入图片描述

  3. 验证主从集群启动成功

    • 查看启动容器

      docker ps
      

      在这里插入图片描述

    • 进入主Redis

      #进入主Redis的容器
      docker exec -it f0f82adc36ab /bin/bash
      
      #进入主Redis
      redis-cli
      

      在这里插入图片描述

    • 查看状态信息

      info
      

      出现以下信息说明主从Redis通信正确

      在这里插入图片描述

    • 检查主从Redis数据库情况

      • 主Redis:

        在这里插入图片描述

        主Redis可以正常写入和读取

      • 从Redis:

        在这里插入图片描述

        从Redis可以获取到刚刚在主Rdis上设置的key-value值,并且无法写入

  4. 注意:

    • 如果要修改Redis的配置,可以在command: bash -c "redis-server --protected-mode no --slaveof redis-master 6379 --slave-announce-ip 49.232.163.85 --slave-announce-port 6381"中添加,但是如果修改过多,建议在官方在conf文件中修改,再进行文件挂载(参考下面的哨兵集群搭建方式),并将上一行修改为 command: redis-server /etc/redis/redis.conf,其中最后的文件名和你挂载的文件夹中的配置文件名相同即可。

    • 关于容器间通信:

      我们可以在“启动Redis主从集群”模块中看到,在启动容器时,创建了一个名为master-slave_redisco网络。

    在这里插入图片描述

    这是因为docker compose会根据配置配置文件中的网络配置创建一个网络,就是以文件夹的名称+直接配置的网络名字。 我们在编写哨兵的compose文件时,要将哨兵Redis也添加到该网络中,不然就不在一个网段,故障转移无法切换。

四、搭建Redis哨兵集群

  1. 切换到sentinel1文件夹下

    cd ../sentinel/sentinel1
    
  2. 创建并编辑sentinel1.conf文件

    • 创建sentinel1.conf

      vim sentinel1.conf
      
    • 编辑配置文件

      • 配置文件内容,如果只是想配置,可以不看讲解内容,直接粘贴到sentinel.conf文件中即可

        protected-mode no
        
        sentinel monitor mymaster 43.143.212.194 6379 2
        
        sentinel down-after-milliseconds mymaster 5000
        
        sentinel failover-timeout mymaster 60000
        
        sentinel parallel-syncs mymaster 1
        
      • 配置文件讲解

        在Redis官网(High availability with Redis Sentinel | Docs)中其最简单的配置文件:

        protected-mode no
        
        # sentinel monitor <Redis哨兵集群名字,自取> <ip(可以是宿主机ip,也可以是容器的子网ip)> <端口(如果ip使用的是宿主机ip,端口使用容器暴露的端口;如果ip使用容器的子网ip,端口使用容器中端口即可> <哨兵投票的票数(当主redis宕机三个哨兵必须两个哨兵都投票的redis才会变为主)>
        sentinel monitor mymaster 43.143.212.194 6379 2
        
        #Sentinel判断实例进入主观下线所需的时间,毫秒单位。
        sentinel down-after-milliseconds mymaster 60000
        
        #在指定的时间内未能完成failover故障转移,则任务故障转移失败。
        sentinel failover-timeout mymaster 180000
        
        #限制在一次故障转移之后,每次向新的主节点同时发起复制操作节点个数,越大效率越慢。
        sentinel parallel-syncs mymaster 1
        

        注意:

        因为在yml没有设置每个容器的子网ip,所以如果要查看容器子网ip,可以使用指令:

         # docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container_name_or_id>
         docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-master
        
    • 复制sentinel1.conf配置文件到sentinel2sentinel3文件夹并修改名称

      cp sentinel1.conf ../sentinel2/sentinel2.conf
      cp sentinel1.conf ../sentinel3/sentinel3.conf
      
  3. 编写docker-compose.yml文件

    • 创建docker-compose.yml文件

      cd ..
      vim docker-compose.yml
      
    • 编辑docker-compose.yml文件

      services:
        sentinel1:
          image: redis
          container_name: redis-sentinel-1
          ports:
            - 26379:26379
          command: redis-sentinel /usr/local/etc/redis/sentinel1.conf
          volumes:
            - ./sentinel1:/usr/local/etc/redis/
        sentinel2:
          image: redis
          container_name: redis-sentinel-2
          ports:
          - 26380:26379
          command: redis-sentinel /usr/local/etc/redis/sentinel2.conf
          volumes:
            -  ./sentinel2:/usr/local/etc/redis/
        sentinel3:
          image: redis
          container_name: redis-sentinel-3
          ports:
            - 26381:26379
          command: redis-sentinel /usr/local/etc/redis/sentinel3.conf
          volumes:
            -  ./sentinel3:/usr/local/etc/redis/
      networks:
        default:
            name: master-slave_redisco
            external: true
      
      
  4. 启动Redis哨兵容器

    docker compose up -d
    

    在这里插入图片描述

  5. 验证Redis哨兵集群启动成功

    • 查看哨兵信息

      • 查看启动容器

        docker ps
        

        在这里插入图片描述

      • 进入主Redis

        #进入Redis哨兵的容器
        docker exec -it b5931e670b08 /bin/bash
        
        #进入Redis哨兵
        redis-cli -p 26379
        

        在这里插入图片描述

      • 查看状态信息

        info
        

        出现以下信息说明配置成功

      在这里插入图片描述

      • 故障转移测试

        我们将主Redis停掉,观察日志

        docker stop e77
        
        docker compose logs
        

        在这里插入图片描述

        出现了故障转移,说明配置成功。

  • 22
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 Docker Compose 可以快速搭建 Redis 集群,实现可用性和性能的分布式缓存。下面是搭建 Redis 集群的步骤: 1. 创建一个 redis-cluster 的文件夹,在其中创建多个文件夹,每个文件夹代表一个 Redis 节点,例如 redis6479、redis6480 等。 2. 在每个节点文件夹中创建 docker-compose.yml 文件,文件内容如下: version: '3.3' services: redis: image: redis command: redis-server --appendonly yes ports: - "6379" volumes: - ./data:/data networks: - redis-cluster networks: redis-cluster: driver: bridge 3. 在每个节点文件夹中创建 redis.conf 文件,文件内容如下: port 6379 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes 4. 在 redis-cluster 文件夹中创建 docker-compose.yml 文件,文件内容如下: version: '3.3' services: redis6479: network_mode: 'host' image: redis container_name: redis6479 restart: always logging: driver: 'json-file' options: max-size: '5g' volumes: - ./data:/data - ./redis.conf:/usr/local/etc/redis/redis.conf - ./logs:/logs command: redis-server /usr/local/etc/redis/redis.conf redis6480: network_mode: 'host' image: redis container_name: redis6480 restart: always logging: driver: 'json-file' options: max-size: '5g' volumes: - ./data:/data - ./redis.conf:/usr/local/etc/redis/redis.conf - ./logs:/logs command: redis-server /usr/local/etc/redis/redis.conf 5. 在 redis-cluster 文件夹中运行 docker-compose up 命令启动 Redis 集群。 相关问题: 1. Docker Compose 是什么? 2. Redis 集群有哪些优点? 3. 如何使用 Docker Compose 部署其他应用?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值