docker-compose之redis cluster模式

  一、docker容器化的redis cluster最難搞的就是網絡問題,這邊記錄一下集羣搭建過程。

  二、dockerfile

FROM redis:5.0.14
MAINTAINER xbd
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

  三、docker-compose.yml

version: "2"
services:
  xbd-redis-1:
    build:
      context: ./
      dockerfile: ./config/Dockerfile/Dockerfile-redis
    image: xbd-redis-1
    restart: always
    container_name: xbd-redis-1
    ports:
      - 6379:6379
      - 16379:16379
    environment:
      - TZ=Asia/Shanghai
    privileged: true
    command: ['redis-server',
              '--bind 0.0.0.0',
              '--protected-mode yes',
              '--daemonize no',
              '--requirepass xbd',
              '--maxmemory 1GB',
              '--maxmemory-policy allkeys-lru',
              '--cluster-enabled yes',
              '--cluster-config-file nodes-6379.conf',
              '--cluster-node-timeout 15000',
              '--cluster-replica-validity-factor 10',
              '--cluster-migration-barrier 1',
              '--cluster-require-full-coverage yes',
              '--cluster-replica-no-failover no',
              '--cluster-announce-ip 192.168.5.14',
              '--cluster-announce-port 6379',
              '--cluster-announce-bus-port 16379']

  xbd-redis-2:
    build:
      context: ./
      dockerfile: ./config/Dockerfile/Dockerfile-redis
    image: xbd-redis-2
    restart: always
    container_name: xbd-redis-2
    ports:
      - 6380:6379
      - 16380:16379
    environment:
      - TZ=Asia/Shanghai
    privileged: true
    command: ['redis-server',
              '--bind 0.0.0.0',
              '--protected-mode yes',
              '--daemonize no',
              '--requirepass xbd',
              '--maxmemory 1GB',
              '--maxmemory-policy allkeys-lru',
              '--cluster-enabled yes',
              '--cluster-config-file nodes-6379.conf',
              '--cluster-node-timeout 15000',
              '--cluster-replica-validity-factor 10',
              '--cluster-migration-barrier 1',
              '--cluster-require-full-coverage yes',
              '--cluster-replica-no-failover no',
              '--cluster-announce-ip 192.168.5.14',
              '--cluster-announce-port 6380',
              '--cluster-announce-bus-port 16380']
  xbd-redis-3:
    build:
      context: ./
      dockerfile: ./config/Dockerfile/Dockerfile-redis
    image: xbd-redis-3
    restart: always
    container_name: xbd-redis-3
    ports:
      - 6381:6379
      - 16381:16379
    environment:
      - TZ=Asia/Shanghai
    privileged: true
    command: ['redis-server',
              '--bind 0.0.0.0',
              '--protected-mode yes',
              '--daemonize no',
              '--requirepass xbd',
              '--maxmemory 1GB',
              '--maxmemory-policy allkeys-lru',
              '--cluster-enabled yes',
              '--cluster-config-file nodes-6379.conf',
              '--cluster-node-timeout 15000',
              '--cluster-replica-validity-factor 10',
              '--cluster-migration-barrier 1',
              '--cluster-require-full-coverage yes',
              '--cluster-replica-no-failover no',
              '--cluster-announce-ip 192.168.5.14',
              '--cluster-announce-port 6381',
              '--cluster-announce-bus-port 16381']

  xbd-redis-4:
    build:
      context: ./
      dockerfile: ./config/Dockerfile/Dockerfile-redis
    image: xbd-redis-4
    restart: always
    container_name: xbd-redis-4
    ports:
      - 6382:6379
      - 16382:16379
    environment:
      - TZ=Asia/Shanghai
    privileged: true
    command: ['redis-server',
              '--bind 0.0.0.0',
              '--protected-mode yes',
              '--daemonize no',
              '--requirepass xbd',
              '--maxmemory 1GB',
              '--maxmemory-policy allkeys-lru',
              '--cluster-enabled yes',
              '--cluster-config-file nodes-6379.conf',
              '--cluster-node-timeout 15000',
              '--cluster-replica-validity-factor 10',
              '--cluster-migration-barrier 1',
              '--cluster-require-full-coverage yes',
              '--cluster-replica-no-failover no',
              '--cluster-announce-ip 192.168.5.14',
              '--cluster-announce-port 6382',
              '--cluster-announce-bus-port 16382']

  參數說明

# 綁定IP
bind 0.0.0.0
# 保護模式
protected-mode yes
# docker原因不用守護進程
daemonize no
# 認證密碼
requirepass xbd
# 最大內存,按實際要求設定
maxmemory 1GB
# 內存回收策略
maxmemory-policy allkeys-lru
# 集羣開啓
cluster-enabled yes
# 節點記錄文件,自動寫入
cluster-config-file nodes-6379.conf
# 節點超時時間
cluster-node-timeout 15000
# 故障轉移的超時時間
cluster-replica-validity-factor 10
# 最少副本數量
cluster-migration-barrier 1
# 控制集羣高可用,設置爲yes,則允許在分片不可用或者集羣路由未完全分配的情況下,其他的分片仍然提供服務
cluster-require-full-coverage yes
# # 選項設置爲yes時,會阻止replicas嘗試對其master在主故障期間進行故障轉移
# 然而,master仍然可以執行手動故障轉移,如果強制這樣做的話。
cluster-replica-no-failover no
# 真實IP,docker時使用
cluster-announce-ip 192.168.5.14
# 端口
cluster-announce-port 6379
# 內部端口
cluster-announce-bus-port 16379'

  詳細參數說明:https://www.cnblogs.com/ll409546297/p/16922764.html

  四、部署

  1)運行docker容器

docker-compose up &

  2)手動建立集羣

redis-cli -a xbd --cluster create 192.168.5.14:6379 192.168.5.14:6380 192.168.5.14:6381 192.168.5.14:6382

  集羣會出現:

  

  3)集羣查看和確認hash槽

  

 

   

 

   可以確認,集羣已經成功,並且自動分配了hash槽。

  3)測試(一定要帶-c,主要聲明集羣模式):

redis-cli -h 192.168.5.14 -p 6379 -a xbd -c

  

 

   確認自己做了節點遷移,數據存儲和查詢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章