如何使用Docker搭建Redis Cluster集群?

要搭建的集群情况说明

在一台Linux服务器上使用docker搭建一个cluster模式的redis集群。三个master节点,三个slave节点,六个节点因为在同一台服务器上,所以每个节点使用不同的端口,端口范围是6380到6385。

redis cluster集群具有如下几个特点:

  • 去中心化,采用多主多从模式。所有节点彼此互联(PING-PONG机制),内部使用二进制协议传输。
  • 客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
  • 每一个分区都是由一个主节点和多个从节点组成,分片和分片之间平行。
  • 每一个master节点负责维护一部分槽,以及槽所映射的键值数据;集群中每个节点都有全量的槽信息,通过槽每个node都知道具体数据存储到哪个node上。

拉取redis镜像

可以选择指定版本的redis,本文为了方便演示,使用最新版本

dockerpullredis

创建使用固定的network

dockernetworkcreaterediscluster

创建redis配置文件

因为六个节点监听端口不同,所以配置文件也有区别,可以使用如下shell脚本生成对应配置文件(假如命名为createRedisConf.sh):

#!/bin/sh

forportin$(seq63806385);
do
mkdir-p~/redisCluster/node-${port}/conf
touch~/redisCluster/node-${port}/conf/redis.conf
cat<<EOF>~/redisCluster/node-${port}/conf/redis.conf
#节点端口
port${port}
#添加访问认证
requirepassluduoxin
#如果主节点开启了访问认证,从节点访问主节点需要认证
masterauthluduoxin
#保护模式,默认值yes,即开启。开启保护模式以后,需配置bindip或者设置访问密码;关闭保护模式,外部网络可以直接访问
protected-modeno
#bind0.0.0.0

#是否以守护线程的方式启动(后台启动),默认no
daemonizeno
#是否开启AOF持久化模式,默认no
appendonlyyes
#是否开启集群模式,默认no
cluster-enabledyes
#集群节点信息文件
cluster-config-filenodes.conf
#群节点连接超时时间
cluster-node-timeout5000
#集群节点IP,我使用的服务的ip为172.16.3.110,替换为自己的服务器的即可
cluster-announce-ip172.16.3.110
#集群节点映射端口
cluster-announce-port${port}
#集群节点总线端口
cluster-announce-bus-port1${port}
EOF
done

创建此文件后,先赋予执行权限,然后执行生成配置文件

$chmod755 ./createRedisConf.sh
$sh ./createRedisConf.sh

创建出六个Redis节点

可以使用如下shell脚本快速创建出来(createRedis.sh)。

#!/bin/sh

##首次创建并运行redis容器
if [ "$1"="create" ]; then
forportin$(seq63806385);
do
dockerrun-di--restartalways--nameredis-${port} --netrediscluster-p${port}:${port} -p1${port}:1${port} -v~/redisCluster/node-${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf-v~/redisCluster/node-${port}/data:/dataredisredis-server/usr/local/etc/redis/redis.conf
done
fi

##停止redis容器
if [ "$1"="stop" ]; then
forportin$(seq63806385);
do
dockerstopredis-${port}
done
fi

##启动已有的redis容器
if [ "$1"="start" ]; then
forportin$(seq63806385);
do
dockerstartredis-${port}
done
fi

##删除redis容器
if [ "$1"="rm" ]; then
forportin$(seq63806385);
do
dockerrmredis-${port}
done
fi

创建此文件后,先赋予执行权限,然后执行创建出redis服务

$chmod755 ./createRedis.sh
$sh ./createRedis.shcreate

创建完成后,可以使用命令 docker ps -a 查看容器。

创建cluster集群

选择一个redis容器,例如选择redis-6380容器,进入容器。

dockerexec-itredis-6380/bin/bash

在容器里面执行如下命令。

redis-cli-aluduoxin--clustercreate172.16.3.110:6380172.16.3.110:6381172.16.3.110:6382172.16.3.110:6383172.16.3.110:6384172.16.3.110:6385--cluster-replicas1

然后出现如下提示,输入 yes 继续。

CanIsettheaboveconfiguration? (type'yes'toaccept)

创建过程如下:

#redis-cli-aluduoxin--clustercreate172.16.3.110:6380172.16.3.110:6381172.16.3.110:6382172.16.3.110:6383172.16.3.110:6384172.16.3.110:6385--cluster-replicas1
Warning: Usingapasswordwith'-a'or'-u'optiononthecommandlineinterfacemaynotbesafe.
>>>Performinghashslotsallocationon6nodes...
Master[0] ->Slots0-5460
Master[1] ->Slots5461-10922
Master[2] ->Slots10923-16383
Addingreplica172.16.3.110:6384to172.16.3.110:6380
Addingreplica172.16.3.110:6385to172.16.3.110:6381
Addingreplica172.16.3.110:6383to172.16.3.110:6382
>>>Tryingtooptimizeslavesallocationforanti-affinity
[WARNING] Someslavesareinthesamehostastheirmaster
M: 78891932599b7497c8dd921295ba19eb0f549285172.16.3.110:6380
slots:[0-5460] (5461slots) master
M: 43c735f5e5bd1dfd7e4fa80aed467dc6e10a9081172.16.3.110:6381
slots:[5461-10922] (5462slots) master
M: 254d130ac0f88ec36be9cda27e59500e04c283cc172.16.3.110:6382
slots:[10923-16383] (5461slots) master
S: e2875613c12f0754e485e5eb56d968dd78493bae172.16.3.110:6383
replicates78891932599b7497c8dd921295ba19eb0f549285
S: a87af69f190a86455864c5ca73fabb60290abd1e172.16.3.110:6384
replicates43c735f5e5bd1dfd7e4fa80aed467dc6e10a9081
S: 846fa01cecc7fa75fc558eb8fcfb2788abb2a83d172.16.3.110:6385
replicates254d130ac0f88ec36be9cda27e59500e04c283cc
CanIsettheaboveconfiguration? (type'yes'toaccept): yes
>>>Nodesconfigurationupdated
>>>Assignadifferentconfigepochtoeachnode
>>>SendingCLUSTERMEETmessagestojointhecluster
Waitingfortheclustertojoin
.
>>>PerformingClusterCheck (usingnode172.16.3.110:6380)
M: 78891932599b7497c8dd921295ba19eb0f549285172.16.3.110:6380
slots:[0-5460] (5461slots) master
1additionalreplica(s)
M: 254d130ac0f88ec36be9cda27e59500e04c283cc172.16.3.110:6382
slots:[10923-16383] (5461slots) master
1additionalreplica(s)
M: 43c735f5e5bd1dfd7e4fa80aed467dc6e10a9081172.16.3.110:6381
slots:[5461-10922] (5462slots) master
1additionalreplica(s)
S: a87af69f190a86455864c5ca73fabb60290abd1e172.16.3.110:6384
slots: (0slots) slave
replicates43c735f5e5bd1dfd7e4fa80aed467dc6e10a9081
S: 846fa01cecc7fa75fc558eb8fcfb2788abb2a83d172.16.3.110:6385
slots: (0slots) slave
replicates254d130ac0f88ec36be9cda27e59500e04c283cc
S: e2875613c12f0754e485e5eb56d968dd78493bae172.16.3.110:6383
slots: (0slots) slave
replicates78891932599b7497c8dd921295ba19eb0f549285
[OK] Allnodesagreeaboutslotsconfiguration.
>>>Checkforopenslots...
>>>Checkslotscoverage...
[OK] All16384slotscovered.

到这里集群就创建成功了。

检查集群状态。

redis-cli-aluduoxin--clustercheck172.16.3.110:6382

连接集群某个节点。

$redis-cli-c-aluduoxin-h172.16.3.110-p6382
//查看集群信息
172.16.3.110:6381>clusterinfo
//查看集群结点信息
172.16.3.110:6381>clusternodes
//查看集群的slot分配区间及对应的主从节点映射关系
172.16.3.110:6381>clusterslots

小结

本文主要讲了如何在一台Linux服务器上使用docker搭建一个cluster模式的redis集群,这种方式搭建的集群主要用于测试用途,不建议在生产环境使用。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/241762.html<

(0)
管理的头像管理
上一篇2025-04-24 11:55
下一篇 2025-04-24 11:57

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注