1.环境

该部分主要为实现redis搭建集群测试,环境为

在m1上装vmware Fusion ,装 centos-7, 跑docker,在docker基础上跑6个redis容器,也就是单服务器跑redis集群。

但这说来也有风险,容器挂了,从机redis可以升为主机,但是要是运行该服务器的docker或者该服务器也挂了,那集群的意义也就不大了。本次先测试在同一台虚拟机上跑6-8个redis容器

2.集群环境搭建

 6381 6382 6383 为redis主服务器

 6385 6386 6384 为redis从服务器,且1-5  、2-5、 3-4 分别为主从

docker run -d --name redis-node-1 --net host --privileged=true -v /data/redis/share/redis-node-1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381 
  
docker run -d --name redis-node-2 --net host --privileged=true -v /data/redis/share/redis-node-2:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6382 
  
docker run -d --name redis-node-3 --net host --privileged=true -v /data/redis/share/redis-node-3:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6383 
  
docker run -d --name redis-node-4 --net host --privileged=true -v /data/redis/share/redis-node-4:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6384 
  
docker run -d --name redis-node-5 --net host --privileged=true -v /data/redis/share/redis-node-5:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6385 
  
docker run -d --name redis-node-6 --net host --privileged=true -v /data/redis/share/redis-node-6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386

DOCKER是否支持集群管理 docker搭建集群有意义吗_redis

 

#依次执行
docker exec -it redis-node-1 /bin/bash

redis-cli --cluster create 172.16.48.132:6381 172.16.48.132:6382 172.16.48.132:6383 172.16.48.132:6384 172.16.48.132:6385 172.16.48.132:6386 --cluster-replicas 1

毕竟都在同一个机子上跑,ip地址都一样,172.16.48.132是虚拟机的内网地址 

3.集群测试

进入容器

DOCKER是否支持集群管理 docker搭建集群有意义吗_服务器_02

 查看节点的主从关系,因为我这是后面截的图,这个图仅供参考,主从顺序可能因为容器的启停而改变,但是左边的那一栏是正确的,三主三从

DOCKER是否支持集群管理 docker搭建集群有意义吗_redis_03

 我们以集群的方式启动,可以进行存取键和值

DOCKER是否支持集群管理 docker搭建集群有意义吗_服务器_04

 redis集群会根据不同的键选取对应的插槽(slot),如果hash 后比如落在了主6382的服务器插槽范围内,则将该键值放入该redis中,注意,从机没有插槽

加了参数 -c,会根据不同的键的落位,重定向到那个redis容器上

4.集群扩容

假如现在要新加入两台redis服务器到该集群,应该怎么做

① 这两台应该先活着吧,run redis 容器

②将一台机器加入master 行列 (add-node)

③ 加入但没有槽位,所以要重新分槽位给新加入的这台主机器 (reshard)

④把从机器加到主机器,作为从机存在

由上述的4个步骤,依次执行如下

第一步:

#主
docker run -d --name redis-node-7 --net host --privileged=true -v /data/redis/share/redis-node-7:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6387 

#从
docker run -d --name redis-node-7 --net host --privileged=true -v /data/redis/share/redis-node-7:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6388

DOCKER是否支持集群管理 docker搭建集群有意义吗_docker_05

DOCKER是否支持集群管理 docker搭建集群有意义吗_服务器_06

我们查询redis-node-2 (master)的集群情况  如下图,master变为4台,但是6287现在还是空槽

DOCKER是否支持集群管理 docker搭建集群有意义吗_服务器_07

 因为以前做过集群缩容,所以slot数量每台机子分配的可能不太一样,容易看到,6385上面的slots有8192个,那这次就从这台机子上重新分配

DOCKER是否支持集群管理 docker搭建集群有意义吗_服务器_08

 我们不是现在有4台主机吗,16384让其均分,除以4,刚好是4096,分给29c1axxxx

DOCKER是否支持集群管理 docker搭建集群有意义吗_服务器_09

后面问你是否支持这种分配,选择yes即可

结果分配如下,注意,虽然我是在6385上面reshard,但是,结果还是拥有slots的主机大家 匀一点给这个新来的,注意这个词,匀,很关键。不是我多我就给你多一点!而是大家凑一凑,给你4096 

DOCKER是否支持集群管理 docker搭建集群有意义吗_DOCKER是否支持集群管理_10

 

DOCKER是否支持集群管理 docker搭建集群有意义吗_redis_11

 

DOCKER是否支持集群管理 docker搭建集群有意义吗_DOCKER是否支持集群管理_12

 正确加入 ,至此,集群扩容完成!!!

5.集群缩容

由扩容,我们容易反推,缩容的操作,就是逆着来

①先把从机删了(del-node)

②把主机的槽位清空(reshard)

③把主机删了

④注意,上述的”删了“我们只是把它们从集群中移除出去,但它们都还活着,就像只是被开除了,并没有死,所以容器都还在,后续就看个人了,如果日后可能有扩容的需要,就关了就好。

具体如下 

DOCKER是否支持集群管理 docker搭建集群有意义吗_DOCKER是否支持集群管理_13

DOCKER是否支持集群管理 docker搭建集群有意义吗_服务器_14

 左边的主从只剩7台了,继续继续

然后重新分配插槽,这一次我不全部给某一台了,当然你全部给某一台也行,,总的4096,我们拿出2000给这个6382,剩下的2096给这个6383,(这里我感觉还是给2的整数次方个值会更好,如果1024,2048这类的数,当然,给2000也行)

DOCKER是否支持集群管理 docker搭建集群有意义吗_redis_15

DOCKER是否支持集群管理 docker搭建集群有意义吗_服务器_16

 如上图,这个我们的主机6387还有2096个插槽,反正都要被薅光的,我们再来一次,把这个6387的都给6383,这样余留下的三个主机的插槽数量都差不太多

DOCKER是否支持集群管理 docker搭建集群有意义吗_docker_17

DOCKER是否支持集群管理 docker搭建集群有意义吗_redis_18

 不错不错,这一个薅的干干净净,最后一个,把这个主机6387干掉即可

DOCKER是否支持集群管理 docker搭建集群有意义吗_DOCKER是否支持集群管理_19

 

DOCKER是否支持集群管理 docker搭建集群有意义吗_docker_20

这下大功告成 完结