Redis Cluster基于Docker的集群搭建

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis Cluster基于Docker的集群搭建相关的知识,希望对你有一定的参考价值。

参考技术A Redis Cluster 要求至少需要3个master才能组成一个集群,同时每个master至少需要有一个slave节点。各个节点之间保持TCP通信。当master发生了宕机, Redis Cluster自动会将对应的slave节点提拔为master,来重新对外提供服务。

Redis Cluster 功能 : 负载均衡,故障切换,主从复制 先说下槽,集群中每个redis实例都负责接管一部分槽,总槽数为:16384(2^14),如果有3台master,那么每台负责5461个槽(16384/3) 当redis客户端设置值时,会拿key进行CRC16算法,然后 跟16384取模,得到的就是落在哪个槽位,根据上面表格就得出在哪台节点上。槽公式如下: slot = CRC16(key) & 16383

docker-compose up -d

输入下面命令创建集群(由于我们只有6个节点,所以3主3从,每个主节点只有一个副本)

显示如下信息则表示创建集群成功

使用docker搭建redis集群

基于容器ip搭建

拉取镜像

docker  pull  redis:5.0.5

创建3个redis容器

docker create --name redis-node1 -v d/dataproject/redis/redis-cluster/node1:/data -p 6379:6379 redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-1.conf
​
docker create --name redis-node2 -v d/dataproject/redis/redis-cluster/node2:/data -p 6380:6379 redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-2.conf
​
docker create --name redis-node3 -v d/dataproject/redis/redis-cluster/node3:/data -p 6381:6379 redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-3.conf

--cluster-enabled yes 表示开启集群

--cluster-config-file filename 表示生成配置文件

使用docker inspect查看容器ip

docker inspect redis-node1
#172.17.0.2-node1
docker inspect redis-node2
#172.17.0.3-node2
docker inspect redis-node3
#172.17.0.4-node3

拿到 ip 信息后(每个人的ip信息可能不一样),接下来进入某一个容器进行组建集群:

这里以进入 node1 为例

docker exec -it redis-node1 /bin/bash

接着执行组建集群命令(请根据自己的ip信息进行拼接)

redis-cli --cluster create 172.17.0.2:6379  172.17.0.3:6379  172.17.0.4:6379 --cluster-replicas 0

基于host模式搭建

docker create --name redis-node1 --net host -v d/dataproject/redis/redis-cluster/node1:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-1.conf --port 6379
​
docker create --name redis-node2 --net host -v d/dataproject/redis/redis-cluster/node2:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-2.conf --port 6380
​
docker create --name redis-node3 --net host -v d/dataproject/redis/redis-cluster/node3:/data redis:5.0. --cluster-enabled yes --cluster-config-file nodes-node-3.conf --port 6381

跟之前创建命令不同,一是指定了 --net 网络类型为 host,二是这种情况下就不需要端口映射了,比如 -p 6379:6379,因为此时需要对外共享容器端口服务,所以只需要指定对外暴露的端口 -p 6379-p 6380

启动容器并搭建集群

启动命令

docker start redis-node1 redis-node2 redis-node3

进入某一个容器

docker exec -it redis-node1 /bin/bash
# 组建集群,192.168.29.194为当前物理机的ip地址
# 可能物理ip无法达成,可以试一试127.0.0.1
redis-cli --cluster create 127.0.0.1:6379  127.0.0.1:6380  127.0.0.1:6381 --cluster-replicas 0

参考文档:https://www.cnblogs.com/niceyoo/p/13011626.html

以上是关于Redis Cluster基于Docker的集群搭建的主要内容,如果未能解决你的问题,请参考以下文章

Redis Cluster搭建高可用Redis服务器集群

Docker实战之Redis-Cluster集群

Docker实战之Redis-Cluster集群

Docker实战之Redis-Cluster集群

在Spring Boot 上配置Redis Cluster出现的异常

使用docker搭建redis集群