docker-compose部署Redis哨兵模式集群


由於服務中根據業務不同使用了redis的多個數據庫db0-db15,redis cluster集群只有db0,其他庫不顯示,無法使用,於是選擇了Redis哨兵模式集群。

我的目錄結構:

 

 

Sentinel配置

Sentinel配置文件路徑:

/opt/redis-sentinel/sentinel

redis-sentinel-1.conf

# bind 127.0.0.1

# 哨兵的端口號
# 因為各個哨兵節點會運行在單獨的Docker容器中
# 所以無需擔心端口重復使用
# 如果需要在單機
port 26379

# 設定密碼認證
requirepass "meiyoumima2021"

# 配置哨兵的監控參數
# 格式:sentinel monitor <master-name> <ip> <redis-port> <quorum>
# master-name是為這個被監控的master起的名字
# ip是被監控的master的IP或主機名。因為Docker容器之間可以使用容器名訪問,所以這里寫master節點的容器名
# redis-port是被監控節點所監聽的端口號
# quorom設定了當幾個哨兵判定這個節點失效后,才認為這個節點真的失效了
sentinel monitor local-master 127.0.0.1 6379 2

# 連接主節點的密碼
# 格式:sentinel auth-pass <master-name> <password>
sentinel auth-pass local-master Zdww2021

# master在連續多長時間無法響應PING指令后,就會主觀判定節點下線,默認是30秒
# 格式:sentinel down-after-milliseconds <master-name> <milliseconds>

 

redis-sentinel-2.conf

# bind 127.0.0.1

# 哨兵的端口號
# 因為各個哨兵節點會運行在單獨的Docker容器中
# 所以無需擔心端口重復使用
# 如果需要在單機
port 26380

# 設定密碼認證
requirepass "meiyoumima2021"

# 配置哨兵的監控參數
# 格式:sentinel monitor <master-name> <ip> <redis-port> <quorum>
# master-name是為這個被監控的master起的名字
# ip是被監控的master的IP或主機名。因為Docker容器之間可以使用容器名訪問,所以這里寫master節點的容器名
# redis-port是被監控節點所監聽的端口號
# quorom設定了當幾個哨兵判定這個節點失效后,才認為這個節點真的失效了
sentinel monitor local-master 127.0.0.1 6379 2

# 連接主節點的密碼
# 格式:sentinel auth-pass <master-name> <password>
sentinel auth-pass local-master Zdww2021

# master在連續多長時間無法響應PING指令后,就會主觀判定節點下線,默認是30秒
# 格式:sentinel down-after-milliseconds <master-name> <milliseconds>

 

redis-sentinel-3.conf

# bind 127.0.0.1

# 哨兵的端口號
# 因為各個哨兵節點會運行在單獨的Docker容器中
# 所以無需擔心端口重復使用
# 如果需要在單機
port 26381

# 設定密碼認證
requirepass "meiyoumima2021"

# 配置哨兵的監控參數
# 格式:sentinel monitor <master-name> <ip> <redis-port> <quorum>
# master-name是為這個被監控的master起的名字
# ip是被監控的master的IP或主機名。因為Docker容器之間可以使用容器名訪問,所以這里寫master節點的容器名
# redis-port是被監控節點所監聽的端口號
# quorom設定了當幾個哨兵判定這個節點失效后,才認為這個節點真的失效了
sentinel monitor local-master 127.0.0.1 6379 2

# 連接主節點的密碼
# 格式:sentinel auth-pass <master-name> <password>
sentinel auth-pass local-master Zdww2021

# master在連續多長時間無法響應PING指令后,就會主觀判定節點下線,默認是30秒
# 格式:sentinel down-after-milliseconds <master-name> <milliseconds>

 

Redis配置

/opt/redis-sentinel/server

redis-master.conf

# bind 127.0.0.1

# 啟用保護模式
# 即在沒有使用bind指令綁定具體地址時
# 或在沒有設定密碼時
# Redis將拒絕來自外部的連接
# protected-mode yes

 # 監聽端口
 port 6379


# 啟動時不打印logo
# 這個不重要,想看logo就打開它
always-show-logo yes

# 設定密碼認證
requirepass meiyoumima2021

# 禁用KEYS命令
# 一方面 KEYS * 命令可以列出所有的鍵,會影響數據安全
# 另一方面 KEYS 命令會阻塞數據庫,在數據庫中存儲了大量數據時,該命令會消耗很長時間
# 期間對Redis的訪問也會被阻塞,而當鎖釋放的一瞬間,大量請求涌入Redis,會造成Redis直接崩潰
#rename-command KEYS ""

# 此外還應禁止 FLUSHALL 和 FLUSHDB 命令
# 這兩個命令會清空數據,並且不會失敗

redis-slave1.conf

# bind 127.0.0.1

# 啟用保護模式
# 即在沒有使用bind指令綁定具體地址時
# 或在沒有設定密碼時
# Redis將拒絕來自外部的連接
# protected-mode yes

 # 監聽端口
 port 6380


# 啟動時不打印logo
# 這個不重要,想看logo就打開它
always-show-logo no

# 設定密碼認證
requirepass meiyoumima2021

# 禁用KEYS命令
# 一方面 KEYS * 命令可以列出所有的鍵,會影響數據安全
# 另一方面 KEYS 命令會阻塞數據庫,在數據庫中存儲了大量數據時,該命令會消耗很長時間
# 期間對Redis的訪問也會被阻塞,而當鎖釋放的一瞬間,大量請求涌入Redis,會造成Redis直接崩潰
#rename-command KEYS ""

# 此外還應禁止 FLUSHALL 和 FLUSHDB 命令
# 這兩個命令會清空數據,並且不會失敗

# 配置master節點信息
# 格式:
#slaveof <masterip> <masterport>
# 此處masterip所指定的redis-server-master是運行master節點的容器名
# Docker容器間可以使用容器名代替實際的IP地址來通信
slaveof redis-server-master 6379

# 設定連接主節點所使用的密碼
masterauth meiyoumima2021

 

redis-slave2.conf

# bind 127.0.0.1

# 啟用保護模式
# 即在沒有使用bind指令綁定具體地址時
# 或在沒有設定密碼時
# Redis將拒絕來自外部的連接
# protected-mode yes

 # 監聽端口
 port 6381



# 啟動時不打印logo
# 這個不重要,想看logo就打開它
always-show-logo no

# 設定密碼認證
requirepass meiyoumima2021

# 禁用KEYS命令
# 一方面 KEYS * 命令可以列出所有的鍵,會影響數據安全
# 另一方面 KEYS 命令會阻塞數據庫,在數據庫中存儲了大量數據時,該命令會消耗很長時間
# 期間對Redis的訪問也會被阻塞,而當鎖釋放的一瞬間,大量請求涌入Redis,會造成Redis直接崩潰
#rename-command KEYS "" # 此外還應禁止 FLUSHALL 和 FLUSHDB 命令 # 這兩個命令會清空數據,並且不會失敗 # 配置master節點信息 # 格式: #slaveof <masterip> <masterport> # 此處masterip所指定的redis-server-master是運行master節點的容器名 # Docker容器間可以使用容器名代替實際的IP地址來通信 slaveof redis-server-master 6379 # 設定連接主節點所使用的密碼 masterauth meiyoumima2021

docker-compose配置

sentinel和redis-server分別用兩個docker-compose文件來管理

sentinel的docker-compose.yml文件

version: '3'

services:
  redis-sentinel-1:
    image: redis
    container_name: redis-sentinel-1
    restart: always
    # 為了規避Docker中端口映射可能帶來的問題
    # 這里選擇使用host網絡
    #network_mode: host
    ports:
      - 26379:26379
    volumes:
      - ./s1/:/usr/local/etc/redis/conf/
    # 指定時區,保證容器內時間正確
    environment:
      TZ: "Asia/Shanghai"
    # sysctls:
    #   net.core.somaxconn: '511'
    command: ["redis-sentinel", "/usr/local/etc/redis/conf/redis-sentinel-1.conf"]
  redis-sentinel-2:
    image: redis
    container_name: redis-sentinel-2
    restart: always
    #network_mode: host
    ports:
      - 26380:26380
    volumes:
      - ./s2/:/usr/local/etc/redis/conf/
    environment:
      TZ: "Asia/Shanghai"
    # sysctls:
    #   net.core.somaxconn: '511'
    command: ["redis-sentinel", "/usr/local/etc/redis/conf/redis-sentinel-2.conf"]
  redis-sentinel-3:
    image: redis
    container_name: redis-sentinel-3
    restart: always
    #network_mode: host
    ports:
      - 26381:26381
    volumes:
      - ./s3/:/usr/local/etc/redis/conf/
    environment:
      TZ: "Asia/Shanghai"
    # sysctls:
    #   net.core.somaxconn: '511'
    command: ["redis-sentinel", "/usr/local/etc/redis/conf/redis-sentinel-3.conf"]
networks:
  default:
    external:
    name:server_default

redis的docker-compose文件

version: '3'

services:
  # 主節點的容器
  redis-server-master:
    image: redis
    container_name: redis-server-master
    restart: always
    # 為了規避Docker中端口映射可能帶來的問題
    # 這里選擇使用host網絡,mac下虛擬機不支持
    #network_mode: host
    ports:
      - 6379:6379
    # 指定時區,保證容器內時間正確
    environment:
      TZ: "Asia/Shanghai"
    volumes:
      # 映射配置文件和數據目錄
      - ./redis-master.conf:/usr/local/etc/redis/redis.conf
      - ./data/redis-master:/data
    #sysctls:
    #  net.core.somaxconn: '511'
    command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
  # 從節點1的容器
  redis-server-slave-1:
    image: redis
    container_name: redis-server-slave-1
    restart: always
    #network_mode: host
    ports:
      - 6380:6380
    depends_on:
      - redis-server-master
    environment:
      TZ: "Asia/Shanghai"
    volumes:
      - ./redis-slave1.conf:/usr/local/etc/redis/redis.conf
      - ./data/redis-slave-1:/data
    command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
  # 從節點2的容器
  redis-server-slave-2:
    image: redis
    container_name: redis-server-slave-2
    restart: always
    #network_mode: host
    ports:
      - 6381:6381
    depends_on:
      - redis-server-master
    environment:
      TZ: "Asia/Shanghai"
    volumes:
      - ./redis-slave2.conf:/usr/local/etc/redis/redis.conf
      - ./data/redis-slave-2:/data
    command: ["redis-server", "/usr/local/etc/redis/redis.conf"]

哨兵模式驗證

先啟動Redis 后啟動sentinel

啟動redis

在/opt/redis-sentinel/server路徑下執行

docker-compose up 

啟動sentinel

在/opt/redis-sentinel/sentinel路徑下執行

docker-compose up

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM