Docker下使⽤搭建RedisCluster集⽅案RedisCluster集⽅案是Redis官⽅推荐的⼀种集⽅案,他没有中⼼节点。客户端与redis节点直连,不需要中间代理层,RedisCluster 集⽅案可以将数据分⽚存储。为避免其中⼀个节点宕机丢失分⽚数据,我们需要设置冗余节点。
设计架构:
准备前提:
1、Linux服务器(这⾥使⽤的centos7.x演⽰)
2、已安装Docker服务
步骤:
1、拉取redis 镜像
docker pull redis
2、创建私有⽹络
创建docker容器的私有⽹络,⽅便建⽴集使⽤,⽹段为172.15.0.0⽹络名字命名为redis_net1.(ps: 如果提醒⽹段被占⽤,请⾃⾏改为其他⽹段,如: 172.16.0.01 172.17.0.0 ...)
docker network create --subnet=172.15.0.0/16 redis_net1
创建私有⽹络后查看已创建⽹络的信息
docker network inspect redis_net1
redis_net1: 创建的私有⽹段的名称
3、在宿主机中创建⽬录
3.1 创建⽬录 /bizwork/redis-cluster
之后会在 /bizwork/redis-cluster⽬录下存放配置⽂件以及数据
mkdir -p /bizwork/redis-cluster
3.2 准备好配置⽂件
docker进入容器在/bizwork/redis-cluster⽬录下 创建⽂件pl
vim /bizwork/pl
将以下内容拷贝到pl ⽂件中,我们后续会⽤到
port ${PORT}
requirepass 1234
masterauth 1234
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes
f
cluster-node-timeout 15000
xx #你的公⽹IP或者内⽹IP
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
bind 0.0.0.0
在宿主机/bizwork/redis-cluster批量创建 8000~8005 ⽬录,⽤来作为容器映射⽬录
for port in `seq 8000 8005`; do \
mkdir -p ./${port}/conf \
&& PORT=${port} envsubst < ./pl > ./${port}/f \
&& mkdir -p ./${port}/data; \
done
批量创建容器
for port in `seq 8000 8005`; do \
docker run -d -ti -p ${port}:${port} -p 1${port}:1${port} \
-v /bizwork/redis-cluster/${port}/f:/usr/local/etc/f \
-v /bizwork/redis-cluster/${port}/data:/data \
--restart always --name redis-${port} --net redis_net1 \
--somaxconn=1024 redis \
redis-server /usr/local/etc/f;
done
查看各容器的⽹段(以下为终端输出结果):
[
{
"Name": "redis_net1",
"Id": "01cf151982fdcfa6d59a1c0cf1f82e8778ea5caf55e4ef1101501485b402a5f2",
"Created": "2020-12-31T15:17:28.223939985+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.15.0.0/16"
}
]
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"2c908a8d54f9701858f774f0532304687b88b8327cac2e6b607cdf56652e3e58": {
"Name": "redis-8002",
"EndpointID": "c3866ce9080d1c446c2861280a15b89e53fef524dcba05623bdf9bc5cec74355", "MacAddress": "02:42:ac:0f:00:04",
"IPv4Address": "172.15.0.4/16",
"IPv6Address": ""
},
"9e73858fd0c192d5be38a5ee9a79650f109f3b669bbcb0e8fb7f3f5105931f85": {
"Name": "redis-8001",
"EndpointID": "ef52a366f26a45a06e2da4b4201955308df7379631c9d5dff35691df1cb66fe0",
"MacAddress": "02:42:ac:0f:00:03",
"IPv4Address": "172.15.0.3/16",
"IPv6Address": ""
},
"aef661f9c8e16b490624b1fd4ed7883659addf7b1aacb13ef9c3b4737bb44a5c": {
"Name": "redis-8005",
"EndpointID": "c6e74a5a3de2da545d826097c44c686821c65f01164d35986629b9a1d0838cec", "MacAddress": "02:42:ac:0f:00:07",
"IPv4Address": "172.15.0.7/16",
"IPv6Address": ""
},
"c5320fc978908440ab52f05f821162c38baaebde4a72abce5e66d9827f7fc010": {
"Name": "redis-8000",
"EndpointID": "9b73ee6eb6dbd63722b0275471fde1cae2bd5907c60179fcbc25522ba0e84eb5", "MacAddress": "02:42:ac:0f:00:02",
"IPv4Address": "172.15.0.2/16",
"IPv6Address": ""
},
"c8ad19e2bd4bfe21968b0105d972ab0140707383a8e33a554c5b205df28953bd": {
"Name": "redis-8003",
"EndpointID": "4f84d1ff1cef06b267d97fd1904e11836333a7e6e51c687d849b8767dd1be7fe", "MacAddress": "02:42:ac:0f:00:05",
"IPv4Address": "172.15.0.5/16",
"IPv6Address": ""
},
"e002e46453501bdf3d7e9cd7d214db63fa981ab053cd5e5bdd10b9fb566839ac": {
"Name": "redis-8004",
"EndpointID": "cb36c1d2d8902e9d1c04599e86caf51a4d705960be7ac6e8a7b4b26a1175fbe5", "MacAddress": "02:42:ac:0f:00:06",
"IPv4Address": "172.15.0.6/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
这⾥我们可看出:
容器 redis-8000 ⽹段为 172.15.0.2
容器 redis-8001 ⽹段为 172.15.0.3
容器 redis-8002 ⽹段为 172.15.0.4
容器 redis-8003 ⽹段为 172.15.0.5
容器 redis-8004 ⽹段为 172.15.0.6
容器 redis-8005 ⽹段为 172.15.0.7
4、创建集
任意进⼊⼀个容器,我这⾥进⼊redis-8000容器来执⾏命令创建集
docker exec -it redis-8000 bash
使⽤redis-cli --cluster create命令创建集(如果设置了密码,需要输⼊密码参数)具体如下:
redis-cli -a 1234 --cluster create 172.15.0.2:8000 172.15.0.3:8001 172.15.0.4:8002 172.15.0.5:8003 172.15.0.6:8004 172.15.0.7:8005 --cluster-replicas 1
⾄此Docker下RedisCluster集模式搭建成功!!
常见问题:
基于⾃⼰搭建redis cluster踩过的坑,希望能节约⼤家时间。
1、访问出现 Redis: ERR unknown command 'CLUSTER'
项⽬配置好集后,访问报错ERR unknown command 'CLUSTER',原因是redis cluster服务器集没有搭建成功,我再次检查了⼀下,未搭建成功的原因是我的redis-8000容器的配置⽂件的cluster-config-file f 与其他容器中的cluster-config-file f相同
2、Redis⽆法使⽤其他库
Redis Cluster 集⽅案只⽀持⼀个数据库(db 0)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论