使用Docker搭建一个简单的Redis集群服务

4 篇文章 0 订阅
2 篇文章 0 订阅

Redis集群基于非Docker镜像的搭建参照Redis官网的介绍可以很容易就搭建起来。本来是想使用minikube使用K8S环境搭建一个Redis集群,但是发现购买的云服务是1核的,而minikube的搭建至少需要2核4G的配置。无奈只能退而求其次选择直接使用Docker run命令来部署一个Redis的集群了。

参照Redis的官网依次创建如下的配置文件(文件路径可以选择性改成你自己的路径,但是后面操作的相关路径也需要注意跟着改变):

/root/configcenter/redis-cluster/7003/conf/redis.conf
/root/configcenter/redis-cluster/7004/conf/redis.conf
/root/configcenter/redis-cluster/7005/conf/redis.conf
/root/configcenter/redis-cluster/7000/conf/redis.conf
/root/configcenter/redis-cluster/7001/conf/redis.conf
/root/configcenter/redis-cluster/7002/conf/redis.conf

redis.conf配置信息使用Redis官网示例的配置(注意修改每个配置文件的端口,端口依次是7000、7001、7002、7003、7004、7005):

port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

Redis的Docker镜像的使用参照:https://hub.docker.com/_/redis/ 。使用很简单,这里就不过多介绍了。

创建启动脚本,端口为7000的脚本如下:

#!/bin/sh
docker run --net host -v /root/configcenter/redis-cluster/7000/conf:/usr/local/etc/redis \
-v /root/configcenter/redis-cluster/7000/data:/data --name redis-7000 \
-d redis:6.2.1 redis-server /usr/local/etc/redis/redis.conf

其中--name参数指令指定容器的名称为redis-7000, -d参数指令要求容器后台运行。

由于需要使用我们自己配置的redis.conf配置文件,所以使用-v参数将宿主机的redis配置文件的目录挂载到Redis Docker镜像默认使用的配置文件。对应脚本中的命令为:

-v /root/configcenter/redis-cluster/7000/conf:/usr/local/etc/redis

由于Docker容器中的信息会随着容器的删除而丢失,所以需要将存入Redis中的数据放到宿主机上进行保存,防止某个Redis容器被删除而导致数据丢失。依然使用-v命令将容器中/data目录(Redis镜像运行后默认数据都是放入/data目录下)挂载到宿主机指定的目录下。

-v /root/configcenter/redis-cluster/7000/data:/data

--net host指令表示使用主机网络模式,该容器共享主机的网络名称空间。例如,运行当前的端口为7000的Redis服务后,可以直接在主机IP地址的端口7000上使用。可以使用redic-cli命令连接当前使用Redis的Docker镜像运行的服务。示例如下:

# redis-cli -h 127.0.0.1 -p 7000
127.0.0.1:7000>

端口为7001的启动脚本: 


#!/bin/sh

docker run --net host -v /root/configcenter/redis-cluster/7001/conf:/usr/local/etc/redis \
-v /root/configcenter/redis-cluster/7001/data:/data --name redis-7001 \
-d redis:6.2.1 redis-server /usr/local/etc/redis/redis.conf

端口为7002的启动脚本: 


#!/bin/sh

docker run --net host -v /root/configcenter/redis-cluster/7002/conf:/usr/local/etc/redis \
-v /root/configcenter/redis-cluster/7002/data:/data --name redis-7002 \
-d redis:6.2.1 redis-server /usr/local/etc/redis/redis.conf

端口为7003的启动脚本:

#!/bin/sh

docker run --net host -v /root/configcenter/redis-cluster/7003/conf:/usr/local/etc/redis \
-v /root/configcenter/redis-cluster/7003/data:/data --name redis-7003 \
-d redis:6.2.1 redis-server /usr/local/etc/redis/redis.conf

端口为7004的启动脚本: 

#!/bin/sh

docker run --net host -v /root/configcenter/redis-cluster/7004/conf:/usr/local/etc/redis \
-v /root/configcenter/redis-cluster/7004/data:/data --name redis-7004 \
-d redis:6.2.1 redis-server /usr/local/etc/redis/redis.conf

端口为7005的启动脚本: 

#!/bin/sh

docker run --net host -v /root/configcenter/redis-cluster/7005/conf:/usr/local/etc/redis \
-v /root/configcenter/redis-cluster/7005/data:/data --name redis-7005 \
-d redis:6.2.1 redis-server /usr/local/etc/redis/redis.conf

脚本有共通性,其实可以提炼为一个脚本,但是为了便于理解,所以把每个脚本都分开了。

每个脚本执行后使用docker ps命令查询运行的容器信息:

# docker ps | grep redis
ec94502a9817   redis:6.2.1    "docker-entrypoint.s…"   7 days ago   Up 7 days redis-7005
b9ae38bf9d22   redis:6.2.1    "docker-entrypoint.s…"   7 days ago   Up 7 days redis-7004
c1936510934d   redis:6.2.1    "docker-entrypoint.s…"   7 days ago   Up 7 days redis-7003
f88a54ab9784   redis:6.2.1    "docker-entrypoint.s…"   7 days ago   Up 7 days redis-7002
39cd486e11f5   redis:6.2.1    "docker-entrypoint.s…"   7 days ago   Up 7 days redis-7001
ef17ef4c7b09   redis:6.2.1    "docker-entrypoint.s…"   7 days ago   Up 7 days redis-7000

使用docker exec -it container-id | container-name sh 进入某个redis容器中。例如:

docker exec -it redis-7000 sh
# 

进入容器后执行:(注意,一般建议将127.0.0.1换成对应宿主机的IP)

#redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 \
127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 \
--cluster-replicas 1

输出如下信息后即表示Redis集群安装成功:

>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 127.0.0.1:7004 to 127.0.0.1:7000
Adding replica 127.0.0.1:7005 to 127.0.0.1:7001
Adding replica 127.0.0.1:7003 to 127.0.0.1:7002
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 99a285ca06fc3ae8f2cc66a344261452a7ced386 127.0.0.1:7000
   slots:[0-5460] (5461 slots) master
M: e95a49c0f8cc68a1dac22f1da465e2f7200c2aaa 127.0.0.1:7001
   slots:[5461-10922] (5462 slots) master
M: 45b9256ae9d31f21da1968d4b0db388a9ed27597 127.0.0.1:7002
   slots:[10923-16383] (5461 slots) master
S: 747b253d4e7c6d373514e2e5893cf7378fdc2c28 127.0.0.1:7003
   replicates 45b9256ae9d31f21da1968d4b0db388a9ed27597
S: b74cd2dead6e52d6a36b25dbfd4e275fee225453 127.0.0.1:7004
   replicates 99a285ca06fc3ae8f2cc66a344261452a7ced386
S: daed1abf124a36991e68691b59a972e100c54d8e 127.0.0.1:7005
   replicates e95a49c0f8cc68a1dac22f1da465e2f7200c2aaa
Can I set the above configuration? (type 'yes' to accept): yes  ####这里需要输入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 127.0.0.1:7000)
M: 99a285ca06fc3ae8f2cc66a344261452a7ced386 127.0.0.1:7000
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: b74cd2dead6e52d6a36b25dbfd4e275fee225453 127.0.0.1:7004
   slots: (0 slots) slave
   replicates 99a285ca06fc3ae8f2cc66a344261452a7ced386
M: 45b9256ae9d31f21da1968d4b0db388a9ed27597 127.0.0.1:7002
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 747b253d4e7c6d373514e2e5893cf7378fdc2c28 127.0.0.1:7003
   slots: (0 slots) slave
   replicates 45b9256ae9d31f21da1968d4b0db388a9ed27597
S: daed1abf124a36991e68691b59a972e100c54d8e 127.0.0.1:7005
   slots: (0 slots) slave
   replicates e95a49c0f8cc68a1dac22f1da465e2f7200c2aaa
M: e95a49c0f8cc68a1dac22f1da465e2f7200c2aaa 127.0.0.1:7001
   slots:[5461-10922] (5462 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-cli连接Redis集群,查看集群信息:

# redis-cli -h 127.0.0.1 -p 7000
127.0.0.1:7000> 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:1
cluster_stats_messages_ping_sent:1117400
cluster_stats_messages_pong_sent:1116205
cluster_stats_messages_sent:2233605
cluster_stats_messages_ping_received:1116200
cluster_stats_messages_pong_received:1117398
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:2233603

至此,使用Redis的Docker镜像安装 Redis集群就完成了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值