学习使用docker-compose搭建Redis哨兵集群

搭建的记录

  1. Redis的容器部署后,redis-server的默认安装目录为 /usr/local/bin。
  2. docker volumes 映射的文件与本地的文件共享,修改本地文件后,需要重启docker容器。
  3. redis集群内部需要网络互通,可以使用host网络,也可以使用容器名称+端口来代替ip+端口等。
  4. 容器启动时,使用redis配置文件启动,使用command,redis-server /usr/local/redis/conf/redis.conf(存储卷映射的地址文件)。
  5. 在redis的配置文件中配置外网可以访问,redis主从,都需要对外提高服务,客户端可以读取所有的主从服务器,客户端的写入,只能写入Master,由Master同步到所有的Slave。
  6. 使用redis.conf文件启动redis,由于docker-compose是单机部署多个Redis的实例,在服务器上搭建集群都是分为多个服务器,每个服务器上部署不同的实例,启动redis使用配置文件的方式,可以适用于直接在linux上搭建,改动比较小。

Redis配置文件

protected-mode设置为No,bind 0.0.0.0,外网才能访问,masterauth 密码,redis主从切换时密码认证


    bind 0.0.0.0
    protected-mode no
    port 6380
    timeout 30
    daemonize no
    save 900 1
    save 300 10
    save 60 10000
    rdbcompression yes
    dbfilename "dump.rdb"
    dir "/data"
    appendonly yes
    appendfsync everysec
    requirepass 123456li
    masterauth "123456li"

Redis哨兵配置文件

任何一个想成为 Leader 的哨兵,要满足两个条件:第一,拿到半数以上的赞成票;第二,拿到的票数同时还需要大于等于哨兵配置文件中的 quorum 值

sentinel monitor 名称 ip 端口 quorum 值,sentinel auth-pass redis Master的密码


    port 26380
    dir "/data"
    sentinel myid 60535b6a4eaaec3ee4c555c659eb4f2934e4c5dc
    sentinel deny-scripts-reconfig yes
    sentinel monitor mymaster 172.26.0.4 6381 2
    sentinel failover-timeout mymaster 10000
    sentinel auth-pass mymaster 123456li
    sentinel config-epoch mymaster 8

docker-compose.yml

搭建redis一主二从三哨兵的docker-compose.yml文件


version: '3'
services:
  master:
    image: redis
    container_name: redis-master
    ports:
      - 6380:6380
    volumes:
      - /root/redis/masterslave/master/data:/data
      - /root/redis/masterslave/master/conf:/usr/local/redis/conf
    command:
      - /bin/bash 
      - -c 
      - |
        cd /usr/local/bin
        redis-server /usr/local/redis/conf/redis.conf
  slave1:
    image: redis
    container_name: redis-slave-1
    ports:
      - 6381:6381
    volumes:
      - /root/redis/masterslave/slave1/data:/data
      - /root/redis/masterslave/slave1/conf:/usr/local/redis/conf
    command:
      - /bin/bash 
      - -c 
      - |
        cd /usr/local/bin
        redis-server /usr/local/redis/conf/redis.conf
  slave2:
    image: redis
    container_name: redis-slave-2
    ports:
      - 6382:6382
    volumes:
      - /root/redis/masterslave/slave2/data:/data
      - /root/redis/masterslave/slave2/conf:/usr/local/redis/conf
    command:
      - /bin/bash 
      - -c 
      - |
        cd /usr/local/bin
        redis-server /usr/local/redis/conf/redis.conf
  sentinel1:
    image: redis       
    container_name: redis-sentinel-1
    ports:
      - "26380:26380"
    volumes:
      - /root/redis/masterslave/master/sentinelconf:/usr/local/redis/sentinelconf
    command: redis-sentinel /usr/local/redis/sentinelconf/sentinel.conf
  sentinel2:
    image: redis                
    container_name: redis-sentinel-2
    ports:
      - "26381:26381"           
    volumes:
      - /root/redis/masterslave/slave1/sentinelconf:/usr/local/redis/sentinelconf
    command: redis-sentinel /usr/local/redis/sentinelconf/sentinel.conf
  sentinel3:
    image: redis                
    container_name: redis-sentinel-3
    ports:
      - "26382:26382"           
    volumes:
      - /root/redis/masterslave/slave2/sentinelconf:/usr/local/redis/sentinelconf
    command: redis-sentinel /usr/local/redis/sentinelconf/sentinel.conf  

posted @ 2021-02-23 14:36  往事随灬锋  阅读(348)  评论(0编辑  收藏  举报