docker-compose搭建redis主从/哨兵

redis主从

# pwd
/opt/redis

# cat docker-compose.yaml
version: '3'
services:
  master:
    image: redis
    container_name: redis-master
    ports:
    - 6380:6379
    command: redis-server --requirepass 123456 --masterauth 123456
  slave1:
    image: redis
    container_name: redis-slave-1
    ports:
    - 6381:6379
    command: redis-server --slaveof redis-master 6379 --requirepass 123456 --masterauth 123456
  slave2:
    image: redis
    container_name: redis-slave-2
    ports:
    - 6382:6379
    command: redis-server --slaveof redis-master 6379 --requirepass 123456 --masterauth 123456
    
# docker-compose up -d
Starting redis-master  ... done
Starting redis-slave-2 ... done
Starting redis-slave-1 ... done

# docker-compose ps
    Name                   Command               State           Ports         
-------------------------------------------------------------------------------
redis-master    docker-entrypoint.sh redis ...   Up      0.0.0.0:6380->6379/tcp
redis-slave-1   docker-entrypoint.sh redis ...   Up      0.0.0.0:6381->6379/tcp
redis-slave-2   docker-entrypoint.sh redis ...   Up      0.0.0.0:6382->6379/tcp

 

redis哨兵

将搭建的Sentinel容器需要能访问到以上3个容器,故需要在形成Sentinel的Dokcer-compose 使用外置的 redis-default 网桥

创建数据卷,将redis哨兵的需要的配置文件通过数据卷持久化挂载

  • 查看docker网络(需要查看当前新增的redis主从是使用的那个网络

# docker network ls
NETWORK ID          NAME                    DRIVER              SCOPE
64630836a7f9        bridge                  bridge              local
282ef599a12f        harbor_harbor           bridge              local
c49f1c02a518        harbor_harbor-clair     bridge              local
e1f17d619ae2        host                    host                local
e557a1341187        none                    null                local
696f490bc877        redis-compose_default   bridge              local
1e6a34740c3b        redis_default           bridge              local  # 这个网络 docker inspect redis-master
  • 编写docker-compose

# pwd
/opt/redis/sentinel

# cat docker-compose.yaml
version: '3'
services:
  sentinel1:
    image: redis
    container_name: redis-sentinel-1
    ports:
    - 26379:26379
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
    - ./sentinell.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:
    - ./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:
    - ./sentinel3.conf:/usr/local/etc/redis/sentinel.conf
networks:
  default:
    external:
      name: redis_default
      
  • 配置文件

# cat sentinel1.conf 
port 26379
dir /tmp
sentinel monitor mymaster 172.26.0.4 6379 2
sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes

# cp sentinel1.conf sentinel2.conf 
# cp sentinel2.conf sentinel3.conf
  • 验证(查看redis-master容器查看主从关系

#  docker exec -it redis-master /bin/bash
root@78451b42d8d4:/data# redis-cli -h localhost
localhost:6379> auth 123456
OK
localhost:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.27.0.4,port=6379,state=online,offset=1862,lag=0
slave1:ip=172.27.0.3,port=6379,state=online,offset=1862,lag=0
master_failover_state:no-failover
master_replid:08f6e165fa55a1d3e696c5ad3fcdc0ea6c571cdf
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1862
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1862

 

posted @ 2022-02-24 11:46  衡衡酱  阅读(9)  评论(0)    收藏  举报
Live2D