インストールとデプロイのシリーズ(1)--DockerComposeはredis-clusterクラスターをインストールします

Redis Clusterはセンターレス構造を採用しており、各ノードはデータとクラスター状態全体を保存し、各ノードは他のすべてのノードに接続されています。Redisクラスターは、データが複数のRedisノード間で自動的にシャーディングされるRedisインストールを実行する方法を提供します。Redis Clusterは、パーティショニング中にある程度の可用性も提供します。これは、一部のノードに障害が発生したり、通信できない場合でも、効果的に操作を続行する機能です。ただし、重大な障害が発生した場合(たとえば、ほとんどのマスターが使用できない場合)、クラスターは機能を停止します。データセットを複数のノードに自動的に分割し、ノードのサブセットに障害が発生した場合やクラスターの残りの部分と通信できない場合でも実行を継続するRedisクラスターの機能。

自作のブリッジネットワーク、インストールするIPを手動で割り当てる

1.インストールを手動で作成します

ネットワークカードを手動で作成し、IPを指定して複数のコンテナーを起動してから、コンテナーを入力してコマンドを実行してクラスターを作成する必要があります。

特定のインストール手順を参照してください:www.stephen520.cn/blog/10271

2.docker-composeとスクリプトのワンクリックスタート

上記の手動インストールプロセスに基づいて、生成された構成スクリプトがいくつか作成されています。docker-composeを使用すると、指定したネットワークセグメントでネットワークカードを自動的に作成したり、複数のクラスターやその他の機能を自動的に作成したりできます。

構成ファイルテンプレートredis-cluster.tmpl。

port 6379
bind 0.0.0.0
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
cluster-announce-ip 172.19.0.1${NO}
cluster-announce-port 6379
cluster-announce-bus-port 16379

注:ここで、cluster-announce-ipは、ネットワークカードが自動的に作成されるネットワークセグメントです。$ {NO}は、主に次のスクリプトに従ってさまざまなIPを生成するためのものです。

構成ファイルスクリプトgenerate.shを生成します

6つのインスタンス構成ファイル、3つのマスター、および3つのスレーブを生成します。IPは172.19.0.11、172.19.0.12、...、172.19.0.16です。

for no in `seq 1 6`; do \
  mkdir -p redis-${no}/conf \
  && NO=${no} envsubst < redis-cluster.tmpl > redis-${no}/conf/redis.conf \
  && mkdir -p redis-${no}/data;\
done

docker-compose.yaml

注:ネットワークセグメント172.19.0.0/16はすでに存在し、作成は失敗します。

docker -composeを参照してIPを手動で指定してくださいwww.cnblogs.com/xuanmanstei…dockernetworkpruneは、不要なネットワークを削除し、ネットワークセグメントを解放します。

# 描述 Compose 文件的版本信息
version: "3.8"

# 定义服务,可以多个
services:
  redis-cluster:
    image: redis:latest
    networks:
      redis:
        ipv4_address: 172.19.0.2
    command: redis-cli --cluster create 172.19.0.11:6379 172.19.0.12:6379 172.19.0.13:6379 172.19.0.14:6379 172.19.0.15:6379 172.19.0.16:6379 --cluster-replicas 1  --cluster-yes
    depends_on:
      - redis-1
      - redis-2
      - redis-3
      - redis-4
      - redis-5
      - redis-6

  redis-1: # 服务名称
    image: redis:latest # 创建容器时所需的镜像
    container_name: redis-1 # 容器名称
    restart: "no" # 容器总是重新启动
    networks:
      redis:
        ipv4_address: 172.19.0.11
    ports:
      - "6379:6379"
      - "16379:16379"
    volumes: # 数据卷,目录挂载
      - ./etc_rc.local:/etc/rc.local
      - ./redis-1/conf/redis.conf:/etc/redis/redis.conf
      - ./redis-1/data:/data
    command: redis-server /etc/redis/redis.conf # 覆盖容器启动后默认执行的命令
  redis-2:
    image: redis:latest
    container_name: redis-2
    networks:
      redis:
        ipv4_address: 172.19.0.12
    ports:
      - "6380:6379"
      - "16380:16379"
    volumes:
      - ./etc_rc.local:/etc/rc.local
      - ./redis-2/conf/redis.conf:/etc/redis/redis.conf
      - ./redis-2/data:/data
    command: redis-server /etc/redis/redis.conf
  redis-3:
    image: redis:latest
    container_name: redis-3
    networks:
      redis:
        ipv4_address: 172.19.0.13
    ports:
      - "6381:6379"
      - "16381:16379"
    volumes:
      - ./etc_rc.local:/etc/rc.local
      - ./redis-3/conf/redis.conf:/etc/redis/redis.conf
      - ./redis-3/data:/data
    command: redis-server /etc/redis/redis.conf
  redis-4:
    image: redis:latest
    container_name: redis-4
    networks:
      redis:
        ipv4_address: 172.19.0.14
    ports:
      - "6382:6379"
      - "16382:16379"
    volumes:
      - ./etc_rc.local:/etc/rc.local
      - ./redis-4/conf/redis.conf:/etc/redis/redis.conf
      - ./redis-4/data:/data
    command: redis-server /etc/redis/redis.conf
  redis-5:
    image: redis:latest
    container_name: redis-5
    networks:
      redis:
        ipv4_address: 172.19.0.15
    ports:
      - "6383:6379"
      - "16383:16379"
    volumes:
      - ./etc_rc.local:/etc/rc.local
      - ./redis-5/conf/redis.conf:/etc/redis/redis.conf
      - ./redis-5/data:/data
    command: redis-server /etc/redis/redis.conf
  redis-6:
    image: redis:latest
    container_name: redis-6
    networks:
      redis:
        ipv4_address: 172.19.0.16
    ports:
      - "6384:6379"
      - "16384:16379"
    volumes:
      - ./etc_rc.local:/etc/rc.local
      - ./redis-6/conf/redis.conf:/etc/redis/redis.conf
      - ./redis-6/data:/data
    command: redis-server /etc/redis/redis.conf

# 自动创建网络,并手动指定IP网段
networks:
  redis:
    ipam:
      config:
        - subnet: 172.19.0.0/16

ホストモード、個別のIP、異なるポートのインストール

参考記事:

1.docker-composeおよびワンクリックスクリプト開始

上記と同様ですが、いくつかの違いがあり、生成された構成スクリプトがいくつか記述されています。

主な違いは、Dockerに付属するブリッジネットワークがここで使用され、異なるポートがクラスターの作成に使用されることです。

構成ファイルテンプレートredis-cluster.tmpl。

port 6379
bind 0.0.0.0
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
cluster-announce-ip 172.17.0.1
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}

注:ここで、cluster-announce-ipはブリッジネットワークカードのIPです。別の使用cluster-announce-port ${PORT} cluster-announce-bus-port 1${PORT}

構成ファイルスクリプトgenerate.shを生成します

6つのインスタンス構成ファイル、3つのマスター、および3つのスレーブを生成します。172.17.0.1:6379、172.17.0.1:6380、...、172.17.0.1:6384の下の異なるポートでの通信

for port in `seq 6379 6384`; do \
  mkdir -p ${port}/conf \
  && PORT=${port} envsubst < redis-cluster.tmpl > ${port}/conf/redis.conf \
  && mkdir -p ${port}/data;\
done

docker-compose.yaml

# 描述 Compose 文件的版本信息
version: "3.8"

# 定义服务,可以多个
services:
  redis-cluster:
    image: redis:latest
    command: redis-cli --cluster create 172.17.0.1:6379 172.17.0.1:6380 172.17.0.1:6381 172.17.0.1:6382 172.17.0.1:6383 172.17.0.1:6384 --cluster-replicas 1  --cluster-yes
    depends_on:
      - redis-6379
      - redis-6380
      - redis-6381
      - redis-6382
      - redis-6383
      - redis-6384
  redis-6379: # 服务名称
    image: redis:latest # 创建容器时所需的镜像
    container_name: redis-6379 # 容器名称
    restart: "no" # 容器总是重新启动
    ports:
      - "6379:6379"
      - "16379:16379"
    volumes: # 数据卷,目录挂载
      - ./etc_rc.local:/etc/rc.local
      - ./6379/conf/redis.conf:/etc/redis/redis.conf
      - ./6379/data:/data
    command: redis-server /etc/redis/redis.conf # 覆盖容器启动后默认执行的命令

  redis-6380:
    image: redis:latest
    container_name: redis-6380
    ports:
      - "6380:6379"
      - "16380:16379"
    volumes:
      - ./etc_rc.local:/etc/rc.local
      - ./6380/conf/redis.conf:/etc/redis/redis.conf
      - ./6380/data:/data
    command: redis-server /etc/redis/redis.conf

  redis-6381:
    image: redis:latest
    container_name: redis-6381
    ports:
      - "6381:6379"
      - "16381:16379"
    volumes:
      - ./etc_rc.local:/etc/rc.local
      - ./6381/conf/redis.conf:/etc/redis/redis.conf
      - ./6381/data:/data
    command: redis-server /etc/redis/redis.conf

  redis-6382:
    image: redis:latest
    container_name: redis-6382
    ports:
      - "6382:6379"
      - "16382:16379"
    volumes:
      - ./etc_rc.local:/etc/rc.local
      - ./6382/conf/redis.conf:/etc/redis/redis.conf
      - ./6382/data:/data
    command: redis-server /etc/redis/redis.conf

  redis-6383:
    image: redis:latest
    container_name: redis-6383
    ports:
      - "6383:6379"
      - "16383:16379"
    volumes:
      - ./etc_rc.local:/etc/rc.local
      - ./6383/conf/redis.conf:/etc/redis/redis.conf
      - ./6383/data:/data
    command: redis-server /etc/redis/redis.conf

  redis-6384:
    image: redis:latest
    container_name: redis-6384
    ports:
      - "6384:6379"
      - "16384:16379"
    volumes:
      - ./etc_rc.local:/etc/rc.local
      - ./6384/conf/redis.conf:/etc/redis/redis.conf
      - ./6384/data:/data
    command: redis-server /etc/redis/redis.conf

# 使用已经存在的bridge网络,或者也可以手动创建一个 替换上面的172.17.0.1
# 创建方式:docker network create redis --subnet 172.28.0.0/16
# 当然也有另一种方式,就是用docker-compose自动创建的网络,不过需要手动进入一个容器运行 cluster 创建命令
networks:
  persist:
    external:
      name: bridge

その他の参考資料

  • Dockerコンテナがホストと通信する方法www.cnblogs.com/koushr/p/14…
  • docker -composeのネットワークネットワークを使用するためのヒントzhuanlan.zhihu.com/p/382779160

おすすめ

転載: juejin.im/post/7120791867741962271