四步使用docker搭建redis集群

一、创建dockerfile文件

#基础镜像
FROM redis
#修复时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
#环境变量
ENV REDIS_PORT 8000
#暴露变量
EXPOSE $REDIS_PORT
#复制
COPY entrypoint.sh /usr/local/bin/
COPY redis.conf /usr/local/etc/
#for config rewrite
RUN chmod 777 /usr/local/etc/redis.conf
RUN chmod +x /usr/local/bin/entrypoint.sh
#入口
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
#命令
CMD ["redis-server", "/usr/local/etc/redis.conf"]

二、创建entrypoint.sh文件

#!/bin/sh
#只作用于当前进程,不作用于其创建的子进程
set -e
#$0--Shell本身的文件名 $1--第一个参数 $@--所有参数列表
# allow the container to be started with `--user`
if [ "$1" = 'redis-server' -a "$(id -u)" = '0' ]; then
    sed -i 's/REDIS_PORT/'$REDIS_PORT'/g' /usr/local/etc/redis.conf
    chown -R redis .  #改变当前文件所有者
    exec gosu redis "$0" "$@"  #gosu是sudo轻量级”替代品”
fi

exec "$@"

三、创建redis.conf文件

#端口
port REDIS_PORT
#开启集群
cluster-enabled yes
#配置文件
cluster-config-file nodes.conf
cluster-node-timeout 5000
#更新操作后进行日志记录
appendonly yes
#设置主服务的连接密码
# masterauth
#设置从服务的连接密码
# requirepass
#关闭保护模式
protected-mode no
#集群各节点IP地址,如果要对外提供访问功能,需要填写宿主机的IP,如果填写docker分配的IP(172.x.x.x),可能会导致部分集群节点在跳转时失败。
cluster-announce-ip 192.168.110.14
#集群节点映射端口
cluster-announce-port REDIS_PORT
#集群总线端口
cluster-announce-bus-port 1REDIS_PORT

四、创建docker-compose.yml文件

version: '3'

services:
 redis1:
  build: ./
  restart: always
  volumes:
   - E:/docker/redisCluster/data/redis/8001/data:/data
  environment:
   - REDIS_PORT=8001
  ports:
    - '8001:8001'       #服务端口
    - '18001:18001'   #集群端口

 redis2:
  build: ./
  restart: always
  volumes:
   - E:/docker/redisCluster/data/redis/8002/data:/data
  environment:
   - REDIS_PORT=8002
  ports:
    - '8002:8002'
    - '18002:18002'

 redis3:
  build: ./
  restart: always
  volumes:
   - E:/docker/redisCluster/data/redis/8003/data:/data
  environment:
   - REDIS_PORT=8003
  ports:
    - '8003:8003'
    - '18003:18003'

 redis4:
  build: ./
  restart: always
  volumes:
   - E:/docker/redisCluster/data/redis/8004/data:/data
  environment:
   - REDIS_PORT=8004
  ports:
    - '8004:8004'
    - '18004:18004'

 redis5:
  build: ./
  restart: always
  volumes:
   - E:/docker/redisCluster/data/redis/8005/data:/data
  environment:
   - REDIS_PORT=8005
  ports:
    - '8005:8005'
    - '18005:18005'

 redis6:
  build: ./
  restart: always
  volumes:
   - E:/docker/redisCluster/data/redis/8006/data:/data
  environment:
   - REDIS_PORT=8006
  ports:
    - '8006:8006'
    - '18006:18006'

创建镜像

docker-compose up -d

Creating rediscluster_redis6_1 ... done
Creating rediscluster_redis4_1 ... done
Creating rediscluster_redis3_1 ... done
Creating rediscluster_redis5_1 ... done
Creating rediscluster_redis1_1 ... done
Creating rediscluster_redis2_1 ... done

配置集群

E:\docker\redisCluster>docker run --rm -it inem0o/redis-trib create --replicas 1 192.168.110.14:8001 192.168.110.14:8002 192.168.110.14:8003 192.168.110.14:8004 192.168.110.14:8005 192.168.110.14:8006
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.110.14:8001
192.168.110.14:8002
192.168.110.14:8003
Adding replica 192.168.110.14:8004 to 192.168.110.14:8001
Adding replica 192.168.110.14:8005 to 192.168.110.14:8002
Adding replica 192.168.110.14:8006 to 192.168.110.14:8003
M: 0516c2c408b857c49957891dab3fc93b5cec427a 192.168.110.14:8001
   slots:0-5460 (5461 slots) master
M: fffba184e5c9755bb78e7b8b151909bc76823a64 192.168.110.14:8002
   slots:5461-10922 (5462 slots) master
M: fe501a5b9fef7324a11b5b39349baac308ca0fd6 192.168.110.14:8003
   slots:10923-16383 (5461 slots) master
S: 5e3e5a528ac14d0d86b27074a5b8a036119e2419 192.168.110.14:8004
   replicates 0516c2c408b857c49957891dab3fc93b5cec427a
S: ff9943ac10213c2e8dbfdf03cc79ffcfad26861e 192.168.110.14:8005
   replicates fffba184e5c9755bb78e7b8b151909bc76823a64
S: 380643f8d4fc3c837bf801c25e8843200b3d0ba0 192.168.110.14:8006
   replicates fe501a5b9fef7324a11b5b39349baac308ca0fd6
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 192.168.110.14:8001)
M: 0516c2c408b857c49957891dab3fc93b5cec427a 192.168.110.14:8001
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
S: ff9943ac10213c2e8dbfdf03cc79ffcfad26861e 192.168.110.14:8005@18005
   slots: (0 slots) slave
   replicates fffba184e5c9755bb78e7b8b151909bc76823a64
S: 380643f8d4fc3c837bf801c25e8843200b3d0ba0 192.168.110.14:8006@18006
   slots: (0 slots) slave
   replicates fe501a5b9fef7324a11b5b39349baac308ca0fd6
M: fffba184e5c9755bb78e7b8b151909bc76823a64 192.168.110.14:8002@18002
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: 5e3e5a528ac14d0d86b27074a5b8a036119e2419 192.168.110.14:8004@18004
   slots: (0 slots) slave
   replicates 0516c2c408b857c49957891dab3fc93b5cec427a
M: fe501a5b9fef7324a11b5b39349baac308ca0fd6 192.168.110.14:8003@18003
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

查看redis集群状态,随便登录一个redis容器

> CLUSTER INFO
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:2
cluster_stats_messages_ping_sent:2128
cluster_stats_messages_pong_sent:2093
cluster_stats_messages_meet_sent:1
cluster_stats_messages_sent:4222
cluster_stats_messages_ping_received:2093
cluster_stats_messages_pong_received:2129
cluster_stats_messages_received:4222
total_cluster_links_buffer_limit_exceeded:0

集群就创建成功了!!

注意事项:

E:\docker\redisCluster>docker run --rm -it inem0o/redis-trib create --replicas 1 192.168.110.14:8001 192.168.110.14:8002 192.168.110.14:8003 192.168.110.14:8004 192.168.110.14:8005 192.168.110.14:8006
>>> Creating cluster
[ERR] Node 192.168.110.14:8001 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.

先停止docker-compose stop 然后清除掉redis的data文件,在重复操作即可

E:\docker\redisCluster>docker run --rm -it inem0o/redis-trib create --replicas 1 192.168.110.14:8001 192.168.110.14:8002 192.168.110.14:8003 192.168.110.14:8004 192.168.110.14:8005 192.168.110.14:8006
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.110.14:8001
192.168.110.14:8002
192.168.110.14:8003
Adding replica 192.168.110.14:8004 to 192.168.110.14:8001
Adding replica 192.168.110.14:8005 to 192.168.110.14:8002
Adding replica 192.168.110.14:8006 to 192.168.110.14:8003
M: d884fd991817841fa6f591c3e2ef7cfeb307c7e5 192.168.110.14:8001
   slots:0-5460 (5461 slots) master
M: 4d523551c35426a3f2f0896f83d9eea692105919 192.168.110.14:8002
   slots:5461-10922 (5462 slots) master
M: 66169383c823b13c11a212037632490f7107ae88 192.168.110.14:8003
   slots:10923-16383 (5461 slots) master
S: aba27e2fcc85b3fe4613cfad8befe17c1a7b089c 192.168.110.14:8004
   replicates d884fd991817841fa6f591c3e2ef7cfeb307c7e5
S: 03b144f130f672a1c05b2ef8a54534f9da217b5d 192.168.110.14:8005
   replicates 4d523551c35426a3f2f0896f83d9eea692105919
S: ab2ac482e06c52a9f4c944b77d9db2157214b547 192.168.110.14:8006
   replicates 66169383c823b13c11a212037632490f7107ae88
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..
[ERR] Sorry, can't connect to node 172.21.0.4:8005@18005
[ERR] Sorry, can't connect to node 172.21.0.2:8002@18002

请检查redis容器ip是否能够互通,redis.conf下面的值是否正确

#集群各节点IP地址,如果要对外提供访问功能,需要填写宿主机的IP,如果填写docker分配的IP(172.x.x.x),可能会导致部分集群节点在跳转时失败。
cluster-announce-ip 192.168.110.14
#集群节点映射端口
cluster-announce-port REDIS_PORT
#集群总线端口
cluster-announce-bus-port 1REDIS_PORT

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
通过docker搭建Redis集群的步骤如下: 1. 创建容器:使用docker命令创建多个Redis容器,每个容器代表一个节点。例如,可以使用以下命令创建一个名为redis-node-1的节点容器: ``` docker run --name redis-node-1 -p 6381:6379 -d redis ``` 2. 进入容器:使用docker exec命令进入容器内部,例如,可以使用以下命令进入redis-node-1容器: ``` docker exec -it redis-node-1 /bin/bash ``` 3. 构建集群关系:在容器内部,使用Redis命令行工具,将新增的节点作为master节点加入原集群。例如,可以使用以下命令将节点redis-node-7加入集群: ``` redis-cli -p 6381 cluster add-node <new_node_ip:port> <existing_node_ip:port> ``` 4. 查看集群状态:使用Redis命令行工具查看集群的状态。例如,可以使用以下命令在节点redis-node-1上查看集群信息: ``` redis-cli -p 6381 cluster info ``` 通过以上步骤,你可以使用docker搭建Redis集群,并查看集群的状态。请根据实际情况进行操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [阿昌教你通过docker搭建Redis集群](https://blog.csdn.net/qq_43284469/article/details/122458602)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值