1. 程式人生 > 其它 >docker swarm搭建Redis哨兵(Sentinel)模式

docker swarm搭建Redis哨兵(Sentinel)模式

技術標籤:redisdockerredisSentinel

前言

本篇文章介紹docker swarm搭建三主三從Redis哨兵(Sentinel)模式

環境

IPHOSTNAMElabelredis portsentinel port
172.16.0.106cluster-0001master637926379
172.16.0.31cluster-0002slave1637926379
172.16.0.146cluster-0003slave2637926379

配置

master節點

建立資料夾
mkdir -pv /redis/{bin,conf,data,logs}
配置檔案
cat /redis/bin/docker-compose.yml

version: '3.4'
services:
  master:
    image: redis
    container_name: redis-master
    restart: always
    command: redis-server /etc/redis/redis.conf
    volumes:
      - /redis/data:/data
      - /redis/conf/redis-master.conf:/etc/redis/redis.conf:ro
      - /redis/logs:/var/log/redis
    ports:
    - target: 6379
      published: 6379
      protocol: tcp
      mode: host
    deploy:
      placement:
        constraints: [
node.labels.role==master] networks: - redis_cluster slave1: image: redis container_name: redis-slave-1 restart: always command: redis-server /etc/redis/redis.conf volumes: - /redis/data:/data - /redis/conf/redis-slave-1.conf:/etc/redis/redis.conf:ro - /redis/logs:/var/log/redis depends_on: - master ports: - target: 6379 published: 6379 protocol: tcp mode: host deploy: placement: constraints: [
node.labels.role==slave1] networks: - redis_cluster slave2: image: redis container_name: redis-slave-2 restart: always command: redis-server /etc/redis/redis.conf volumes: - /redis/data:/data - /redis/conf/redis-slave-2.conf:/etc/redis/redis.conf:ro - /redis/logs:/var/log/redis depends_on: - master ports: - target: 6379 published: 6379 protocol: tcp mode: host deploy: placement: constraints: [node.labels.role==slave2] networks: - redis_cluster sentinel1: image: redis container_name: redis-sentinel-1 command: redis-sentinel /usr/local/etc/redis/sentinel.conf restart: always depends_on: - master - slave1 - slave2 ports: - target: 26379 published: 26379 protocol: tcp mode: host deploy: placement: constraints: [node.labels.role==master] networks: - redis_cluster volumes: - /redis/conf/sentinel1.conf:/usr/local/etc/redis/sentinel.conf sentinel2: image: redis container_name: redis-sentinel-2 command: redis-sentinel /usr/local/etc/redis/sentinel.conf restart: always depends_on: - master - slave1 - slave2 ports: - target: 26379 published: 26379 protocol: tcp mode: host deploy: placement: constraints: [node.labels.role==slave1] networks: - redis_cluster # network_mode: "host" volumes: - /redis/conf/sentinel2.conf:/usr/local/etc/redis/sentinel.conf sentinel3: image: redis container_name: redis-sentinel-3 command: redis-sentinel /usr/local/etc/redis/sentinel.conf restart: always depends_on: - master - slave1 - slave2 # network_mode: "host" ports: - target: 26379 published: 26379 protocol: tcp mode: host deploy: placement: constraints: [node.labels.role==slave2] networks: - redis_cluster volumes: - /redis/conf/sentinel3.conf:/usr/local/etc/redis/sentinel.conf networks: redis_cluster: external: name: redis_cluster

cat /redis/bin/startup.sh

#!/bin/bash

docker stack deploy -c docker-compose.yml redis_cluster

cat /redis/bin/shutdown.sh

#!/bin/bash

docker stack rm redis_cluster

cat /redis/conf/redis-master.conf

port 6379
bind 0.0.0.0
logfile "redis-master.log"
dbfilename "dump-master.rdb"
appendfilename appendonly-master.aof
rdbcompression yes
appendonly yes
requirepass 1234
slave-announce-ip 172.16.0.106
slave-announce-port 6379
slave-read-only no

cat /redis/conf/sentinel1.conf

port 26379
dir "/tmp"
sentinel myid fa6bbe8804377177a83cc290651b4e50edc0e58f

sentinel deny-scripts-reconfig yes
#sentinel monitor mymaster 172.16.0.106 6379 2
sentinel monitor mymaster 124.70.75.112 6379 2

# Generated by CONFIG REWRITE
user default on nopass ~* [email protected]
sentinel auth-pass mymaster 1234
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0
sentinel known-replica mymaster 172.16.0.146 6379
sentinel known-replica mymaster 172.16.0.31 6379
#sentinel known-replica mymaster 121.36.93.203 6379
#sentinel known-replica mymaster 121.36.83.139 6379

sentinel known-sentinel mymaster 172.18.0.3 26379 9aeea65e6c8741bc8645dc27f596a9ec6e8e42ae
sentinel known-sentinel mymaster 172.18.0.3 26379 528ab0bbb719fe50309fac21019e0eed567b2bf4
sentinel current-epoch 0

slave1節點

建立資料夾
mkdir -pv /redis/{conf,data,logs}
配置檔案
cat /redis/conf/redis-slave-1.conf

port 6379
bind 0.0.0.0
logfile "redis-master.log"
dbfilename "dump-master.rdb"
appendfilename appendonly-master.aof
rdbcompression yes
appendonly yes
requirepass 1234
slaveof 172.16.0.106 6379
masterauth 1234
slave-announce-ip 172.16.0.31
slave-announce-port 6379
slave-read-only no

cat /redis/conf/sentinel2.conf

port 26379
dir "/tmp"
sentinel myid 528ab0bbb719fe50309fac21019e0eed567b2bf4
sentinel deny-scripts-reconfig yes
# Generated by CONFIG REWRITE
user default on nopass ~* [email protected]
#sentinel monitor mymaster 172.16.0.106 6379 2
sentinel monitor mymaster 124.70.75.112 6379 2

sentinel auth-pass mymaster 1234
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0
sentinel known-replica mymaster 172.16.0.31 6379
sentinel known-replica mymaster 172.16.0.146 6379
sentinel known-sentinel mymaster 172.18.0.4 26379 fa6bbe8804377177a83cc290651b4e50edc0e58f
sentinel known-sentinel mymaster 172.18.0.3 26379 9aeea65e6c8741bc8645dc27f596a9ec6e8e42ae
sentinel known-sentinel mymaster 172.18.0.3 26379 528ab0bbb719fe50309fac21019e0eed567b2bf4
sentinel current-epoch 0

slave2節點

建立資料夾
mkdir -pv /redis/{conf,data,logs}
配置檔案
cat /redis/conf/redis-slave-2.conf

port 6379
bind 0.0.0.0
logfile "redis-master.log"
dbfilename "dump-master.rdb"
appendfilename appendonly-master.aof
rdbcompression yes
appendonly yes
requirepass 1234
slaveof 172.16.0.106 6379
masterauth 1234
slave-announce-ip 172.16.0.146
slave-announce-port 6379
slave-read-only no

cat /redis/conf/sentinel3.conf

port 26379
dir "/tmp"
sentinel myid 9aeea65e6c8741bc8645dc27f596a9ec6e8e42ae

sentinel deny-scripts-reconfig yes
#sentinel monitor mymaster 172.16.0.106 6379 2
sentinel monitor mymaster 124.70.75.112 6379 2

# Generated by CONFIG REWRITE
user default on nopass ~* [email protected]
sentinel auth-pass mymaster 1234
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0
sentinel known-replica mymaster 172.16.0.146 6379
sentinel known-replica mymaster 172.16.0.31 6379
sentinel known-sentinel mymaster 172.18.0.4 26379 fa6bbe8804377177a83cc290651b4e50edc0e58f
sentinel known-sentinel mymaster 172.18.0.3 26379 9aeea65e6c8741bc8645dc27f596a9ec6e8e42ae
sentinel known-sentinel mymaster 172.18.0.3 26379 528ab0bbb719fe50309fac21019e0eed567b2bf4
sentinel current-epoch 0

啟動

master節點

賦予許可權

sudo chmod 777 /redis/bin/*.sh

啟動

/redis/bin/startup.sh

停止

/redis/bin/shutdown.sh

檢視redis叢集啟動結果

docker stack ps redis_cluster --no-trunc

在這裡插入圖片描述
至此,redis哨兵模式搭建完成!
手打不易,有用請點贊!