通过docker搭建redis集群

通过 docker 搭建 redis 集群

本文介绍如何通过 docker 搭建一个3主3从的 redis 集群。

准备配置文件

在启动 redis server 时,可以指定 redis.conf 配置文件,这里分别为每个 redis 节点创建一个配置文件,放置在宿主机中,容器中的 redis server 通过存储卷访问配置文件。

  1. 创建配置文件目录
$ mkdir redis-cluster
$ cd redis-cluster
$ mkdir 8001 8002 8003 8004 8005 8006
  1. 分别在每个目录下创建配置文件。

8001/redis.conf

port 8001
cluster-enabled yes
cluster-config-file nodes-8001.conf
cluster-node-timeout 5000
appendonly yes
  • port 指定端口
  • cluster-enabled yes 启用 redis 集群
  • cluster-config-file 指定集群配置文件
  • cluster-node-timeout 设置集群连接超时时长
  • appendonly yes 设置持久化模式

其他目录下的配置文件修改端口和 cluster-config-file 的名称即可。

创建 redis 节点

  1. 拉取镜像

这里使用 redis 提供的官方镜像。

$ docker pull redis
  1. 创建容器
$ docker run --net=host --name redis-master-1 -d -v /root/redis-cluster/8001/redis.conf:/usr/local/etc/redis/redis.conf redis redis-server /usr/local/etc/redis/redis.conf

$ docker run --net=host --name redis-master-2 -d -v /root/redis-cluster/8002/redis.conf:/usr/local/etc/redis/redis.conf redis redis-server /usr/local/etc/redis/redis.conf

$ docker run --net=host --name redis-master-3 -d -v /root/redis-cluster/8003/redis.conf:/usr/local/etc/redis/redis.conf redis redis-server /usr/local/etc/redis/redis.conf

$ docker run --net=host --name redis-slave-1 -d -v /root/redis-cluster/8004/redis.conf:/usr/local/etc/redis/redis.conf redis redis-server /usr/local/etc/redis/redis.conf

$ docker run --net=host --name redis-slave-2 -d -v /root/redis-cluster/8005/redis.conf:/usr/local/etc/redis/redis.conf redis redis-server /usr/local/etc/redis/redis.conf

$ docker run --net=host --name redis-slave-3 -d -v /root/redis-cluster/8006/redis.conf:/usr/local/etc/redis/redis.conf redis redis-server /usr/local/etc/redis/redis.conf
  • --net=host 指定网络模式。这里指定为 host模式,容器不会创建自己的网络命名空间,而是直接使用宿主机的 IP 和端口。
  • --name 指定容器名称。
  • -d 让容器后台运行。
  • -v 指定存储卷。将宿主机中配置文件/root/redis-cluster/8001/redis.conf映射到容器中的/usr/local/etc/redis/redis.conf

配置集群

  1. 握手

此时6台机器之间是独立的,各自间不可见。可通过握手建立联系。

切换到宿主机,或者进入任意节点,通过 redis-cli 连接本机的 server。

$ docker exec -it redis-master-1 bash
$ redis-cli -c -p 8001
127.0.0.1:8001> CLUSTER MEET 127.0.0.1 8002
OK
127.0.0.1:8001> CLUSTER NODES
c88223ee086037ac15a91978ef34f386ae79a3cf 127.0.0.1:8001@18001 myself,master - 0 0 0 connected
19e7ea2e51e05762483793d29834b76d7467192d 127.0.0.1:8002@18002 master - 0 1575193615465 1 connected
127.0.0.1:8001> CLUSTER MEET 127.0.0.1 8003
OK
127.0.0.1:8001> CLUSTER MEET 127.0.0.1 8004
OK
127.0.0.1:8001> CLUSTER MEET 127.0.0.1 8005
OK
127.0.0.1:8001> CLUSTER MEET 127.0.0.1 8006
OK
127.0.0.1:8001> CLUSTER NODES
faa3f39dcbcdac0cf1dd979adb85ff580e49cc9d 127.0.0.1:8004@18004 master - 0 1575193645000 0 connected
c88223ee086037ac15a91978ef34f386ae79a3cf 127.0.0.1:8001@18001 myself,master - 0 1575193645000 2 connected
19e7ea2e51e05762483793d29834b76d7467192d 127.0.0.1:8002@18002 master - 0 1575193645014 1 connected
342476b919af11faf256e6ac733daea5bac6b841 127.0.0.1:8006@18006 master - 0 1575193644000 0 connected
cc2a789e42fc51345987509e7849b5509ef93c93 127.0.0.1:8003@18003 master - 0 1575193645520 3 connected
4854862a4cab132938c86b5dcaed180374c1bbca 127.0.0.1:8005@18005 master - 0 1575193644490 4 connected
  • CLUSTER NODES 查看集群的节点信息。
  • CLUSTER MEET 节点握手,让集群中的所有节点能访问到该节点。
  • -c cli 启用集群。
  1. 指定主从关系

进入容器,通过cli连接当前节点,将该节点指定为其他节点的 slave 节点。

$ redis-cli -c -p 8004
127.0.0.1:8004> cluster nodes
cc2a789e42fc51345987509e7849b5509ef93c93 127.0.0.1:8003@18003 master - 0 1575193882000 3 connected 10923-16383
342476b919af11faf256e6ac733daea5bac6b841 127.0.0.1:8006@18006 master - 0 1575193883000 5 connected
faa3f39dcbcdac0cf1dd979adb85ff580e49cc9d 127.0.0.1:8004@18004 myself,master - 0 1575193882000 0 connected
4854862a4cab132938c86b5dcaed180374c1bbca 127.0.0.1:8005@18005 master - 0 1575193882495 4 connected
19e7ea2e51e05762483793d29834b76d7467192d 127.0.0.1:8002@18002 master - 0 1575193882000 1 connected 5462-10922
c88223ee086037ac15a91978ef34f386ae79a3cf 127.0.0.1:8001@18001 master - 0 1575193882000 2 connected 0-5461
127.0.0.1:8004> CLUSTER REPLICATE c88223ee086037ac15a91978ef34f386ae79a3cf
OK
127.0.0.1:8004> cluster nodes
cc2a789e42fc51345987509e7849b5509ef93c93 127.0.0.1:8003@18003 master - 0 1575193922140 3 connected 10923-16383
342476b919af11faf256e6ac733daea5bac6b841 127.0.0.1:8006@18006 master - 0 1575193923145 5 connected
faa3f39dcbcdac0cf1dd979adb85ff580e49cc9d 127.0.0.1:8004@18004 myself,slave c88223ee086037ac15a91978ef34f386ae79a3cf 0 1575193922000 0 connected
4854862a4cab132938c86b5dcaed180374c1bbca 127.0.0.1:8005@18005 master - 0 1575193921125 4 connected
19e7ea2e51e05762483793d29834b76d7467192d 127.0.0.1:8002@18002 master - 0 1575193922046 1 connected 5462-10922
c88223ee086037ac15a91978ef34f386ae79a3cf 127.0.0.1:8001@18001 master - 0 1575193922643 2 connected 0-5461
  • CLUSTER REPLICATE + 节点 id 将当前连接的节点设置为指定节点的 slave 节点。通过 cluster nodes 可以看到,主从关系已指定成功。其他两个节点也通过相同的方式进行配置,最终集群信息为:
127.0.0.1:8006> cluster nodes
faa3f39dcbcdac0cf1dd979adb85ff580e49cc9d 127.0.0.1:8004@18004 slave c88223ee086037ac15a91978ef34f386ae79a3cf 0 1575193992698 2 connected
4854862a4cab132938c86b5dcaed180374c1bbca 127.0.0.1:8005@18005 slave 19e7ea2e51e05762483793d29834b76d7467192d 0 1575193991581 4 connected
cc2a789e42fc51345987509e7849b5509ef93c93 127.0.0.1:8003@18003 master - 0 1575193991684 3 connected 10923-16383
342476b919af11faf256e6ac733daea5bac6b841 127.0.0.1:8006@18006 myself,slave cc2a789e42fc51345987509e7849b5509ef93c93 0 1575193990000 5 connected
c88223ee086037ac15a91978ef34f386ae79a3cf 127.0.0.1:8001@18001 master - 0 1575193990671 2 connected 0-5461
19e7ea2e51e05762483793d29834b76d7467192d 127.0.0.1:8002@18002 master - 0 1575193992000 1 connected 5462-10922

参考文档:
http://bboymars.coding.me/2018/05/01/redis_cluster_inDocker/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值