docker-compse搭建redis-cluster集群

redis集群是带状态的集群,所以必须等所有实例启动完成后再次执行命令构建集群。
开启集群的配置文件模板 redis.tmpl

port ${PORT}
requirepass root
masterauth root
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
cluster-announce-ip 10.249.2.45
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}

使用命令创建出不同实例文件夹,并替换配置文件的端口号,复制到每个文件夹中

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

执行完成后生产如下文件夹
在这里插入图片描述
编写docker-compose.yml,因为容器中ip无法固定,会产生漂移所以官方推荐使用host网络模式来使用宿主机ip。

version: '2'
services:
  redis1:
    image: redis:5.0.5
    network_mode: "host" 
    container_name: redis-7001
    restart: always
    ports:
      - 7001:7001
      - 17001:17001
    volumes:
      - /home/redis/7001/data:/data
      - /home/redis/7001/conf/redis.conf:/usr/local/etc/redis/redis.conf
    command:
      redis-server /usr/local/etc/redis/redis.conf
	  
  redis2:
    image: redis:5.0.5
    network_mode: "host" 
    container_name: redis-7002
    restart: always
    ports:
      - 7002:7002
      - 17002:17002
    volumes:
      - /home/redis/7002/data:/data
      - /home/redis/7002/conf/redis.conf:/usr/local/etc/redis/redis.conf
    command:
      redis-server /usr/local/etc/redis/redis.conf	  
	  
  redis3:
    image: redis:5.0.5
    network_mode: "host" 
    container_name: redis-7003
    restart: always
    ports:
      - 7003:7003
      - 17003:17003
    volumes:
      - /home/redis/7003/data:/data
      - /home/redis/7003/conf/redis.conf:/usr/local/etc/redis/redis.conf
    command:
      redis-server /usr/local/etc/redis/redis.conf	  	  
	  
  redis4:
    image: redis:5.0.5
    network_mode: "host" 
    container_name: redis-7004
    restart: always
    ports:
      - 7004:7004
      - 17004:17004
    volumes:
      - /home/redis/7004/data:/data
      - /home/redis/7004/conf/redis.conf:/usr/local/etc/redis/redis.conf
    command:
      redis-server /usr/local/etc/redis/redis.conf	

  redis5:
    image: redis:5.0.5
    network_mode: "host" 
    container_name: redis-7005
    restart: always
    ports:
      - 7005:7005
      - 17005:17005
    volumes:
      - /home/redis/7005/data:/data
      - /home/redis/7005/conf/redis.conf:/usr/local/etc/redis/redis.conf
    command:
      redis-server /usr/local/etc/redis/redis.conf	

  redis6:
    image: redis:5.0.5
    network_mode: "host" 
    container_name: redis-7006
    restart: always
    ports:
      - 7006:7006
      - 17006:17006
    volumes:
      - /home/redis/7006/data:/data
      - /home/redis/7006/conf/redis.conf:/usr/local/etc/redis/redis.conf
    command:
      redis-server /usr/local/etc/redis/redis.conf

启动实例

docker-compose up -d

查看日志全部启动成功

docker-compose logs

查看状态

docker-compose ps

在这里插入图片描述

创建集群

#进入容器
docker exec -it redis-7001 bash
#容器内执行
redis-cli -a root --cluster create 10.249.2.45:7001 10.249.2.45:7002 10.249.2.45:7003 10.249.2.45:7004 10.249.2.45:7005 10.249.2.45:7006 --cluster-replicas 1

执行完命令得到以下反馈

Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 10.249.2.45:7005 to 10.249.2.45:7001
Adding replica 10.249.2.45:7006 to 10.249.2.45:7002
Adding replica 10.249.2.45:7004 to 10.249.2.45:7003
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 765c445619e0180016e71fc0bff018d5fb804fb3 10.249.2.45:7001
   slots:[0-5460] (5461 slots) master
M: 9a15141a4d67f16320be24c379303937c47f987c 10.249.2.45:7002
   slots:[5461-10922] (5462 slots) master
M: cd48471e2e1b459989a832ef7ddb8990a5a257bf 10.249.2.45:7003
   slots:[10923-16383] (5461 slots) master
S: 2eba1f8f7351240e840bc1cb32ee88fb2f10dd26 10.249.2.45:7004
   replicates cd48471e2e1b459989a832ef7ddb8990a5a257bf
S: 65d5ba0934766c02af20b1fe28c42ec1cea15eab 10.249.2.45:7005
   replicates 765c445619e0180016e71fc0bff018d5fb804fb3
S: 299e39f4a88f3f7c44d043a284c6329c2d26e5f6 10.249.2.45:7006
   replicates 9a15141a4d67f16320be24c379303937c47f987c
Can I set the above configuration? (type 'yes' to accept): 

输入yes完成集群创建

Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
....
>>> Performing Cluster Check (using node 10.249.2.45:7001)
M: 765c445619e0180016e71fc0bff018d5fb804fb3 10.249.2.45:7001
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 299e39f4a88f3f7c44d043a284c6329c2d26e5f6 10.249.2.45:7006
   slots: (0 slots) slave
   replicates 9a15141a4d67f16320be24c379303937c47f987c
M: cd48471e2e1b459989a832ef7ddb8990a5a257bf 10.249.2.45:7003
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
M: 9a15141a4d67f16320be24c379303937c47f987c 10.249.2.45:7002
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: 2eba1f8f7351240e840bc1cb32ee88fb2f10dd26 10.249.2.45:7004
   slots: (0 slots) slave
   replicates cd48471e2e1b459989a832ef7ddb8990a5a257bf
S: 65d5ba0934766c02af20b1fe28c42ec1cea15eab 10.249.2.45:7005
   slots: (0 slots) slave
   replicates 765c445619e0180016e71fc0bff018d5fb804fb3
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

参考
https://www.cnblogs.com/mrhelloworld/p/docker14.html

猜你喜欢

转载自blog.csdn.net/a807719447/article/details/113972545
今日推荐