首页 > 数据库 >Docker高级篇:实战Redis集群!从3主3从变为4主4从

Docker高级篇:实战Redis集群!从3主3从变为4主4从

时间:2022-12-21 23:00:14浏览次数:74  
标签:-- Redis redis cluster 6387 集群 Docker 节点

通过前面两篇,我们学会了三主三从的Redis集群搭建及主从容错切换迁移,随着业务增加,可能会有主从扩容的,所以,本文我们来实战主从扩容

PS本系列:《Docker学习系列》教程已经发布的内容,凯哥会在文末加上。

在之前3主3从的架构,随着业务的增加,流量扛不住了。需要由3主3从变为4主4从。架构变化图如下:

Docker高级篇:实战Redis集群!从3主3从变为4主4从_redis

回顾下之前3主3从槽位分配如下:

Docker高级篇:实战Redis集群!从3主3从变为4主4从_Docker_02

那么现在变成了4主4从了。多出来的这一对主从,槽位怎么分配ne?

实战步骤



1:新建6387、6388两个节点+新建后启动+查看是否8个节点

命令

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


Docker高级篇:实战Redis集群!从3主3从变为4主4从_docker_03

通过docker ps 可以查看8个redis都成功

2:进入6387容器实例内部

命令:

docker exec -it redis-node-7 /bin/bash

3:将新增的6387节点(空槽号)作为master节点加入原集群中

将新机器加入集群的命令公式:

redis-cli -cluster add-node ip:6387 ip:6381

命令说明:

add-node:加入节点

ip:自己宿主机的实际ip

6387:将要作为master的新增节点端口

6381:就是原来集群节点的领路人。相当于是6387拜了6381的码头了。从而找到了组织加入了集群

比如我们需要将6387这台redis作为master加入集群中。

根据命令公式,替换成我们自己的宿主机ip:192.168.50.128

所以本次将6387加入集群的命令为:

redis-cli --cluster add-node 192.168.50.128:6387 192.168.50.128:6381

Docker高级篇:实战Redis集群!从3主3从变为4主4从_docker_04

new node added correctly.

4:检查集群情况第1次

使用cluster chk命令。

进入之前任意三个master容器后执行命令:

redis-cli --cluster check 192.168.50.128:6381

Docker高级篇:实战Redis集群!从3主3从变为4主4从_Docker_05

我们可以看到,6387已经作为master加入集群了。其对应的从节点是0个。

Docker高级篇:实战Redis集群!从3主3从变为4主4从_Docker_06

5:重新分配槽号

新命令,公式:

redis-cli --cluster reshard ip:端口

参数说明:

--cluster reshard :重新hash分配槽位

ip:宿主机的ip(对应本次实战凯哥宿主机的ip:192.168.50.128)

端口:集群的领路人的端口(对应本次实战凯哥宿主机的ip:6381)

实战命令:

redis-cli --cluster reshard 192.168.50.128:6381

Docker高级篇:实战Redis集群!从3主3从变为4主4从_redis_07

Docker高级篇:实战Redis集群!从3主3从变为4主4从_Docker_08

我们可以看到,询问我们打算怎么重新分配?

我们来算下:16384/4=4096.所以,我们就写4096

输入4096后,又询问了:

Docker高级篇:实战Redis集群!从3主3从变为4主4从_redis_09

这4096准备分配给node id呢?

请注意,这里只能分配给新加入的节点的id.也就是本次案例中6387对应的node节点

Docker高级篇:实战Redis集群!从3主3从变为4主4从_docker_10

接着又询问了

Docker高级篇:实战Redis集群!从3主3从变为4主4从_Docker_11

我们输入all.

因为16384/master机器数量=4096

输入yes后,所有槽位就会重新分配了。

重新分配需要等待一段时间。耐心等待。

6:检查集群情况第2次

命令:

redis-cli --cluster check 192.168.50.128:6381

Docker高级篇:实战Redis集群!从3主3从变为4主4从_Docker_12

我们可以发现了6387的槽位不是连续的。而是由三段槽位组成的。

所以,我们可以知道,新加入的master节点,是从原来所有节点都给出一些槽位,最终使得新master节点达到预设的槽位的。

为什么要这么设计呢?

为什么6387是3个新区间呢?原来三个主节点还是连续的?

因为重新分配的成本太高了。所以前3个主节点各自匀出一部分,从6381/6382/6383三个旧节点分别匀出1364个槽位给了新加入master节点6387了。

7:为主节点6387分配从节点6388

新命令:

redis-cli --cluster add-node ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id 新主机节点id

命令参数说明:

ip:宿主机的ip。对应本次案例就是:192.168.50.128

新slave端口:对应本次案例就是6388

新master端口:对应本次案例就是6387

新主机节点id:可以通过cluster check 命令查看

所以本次案例的命令为:

redis-cli --cluster add-node 192.168.50.128:6388 192.168.50.128:6387 --cluster-slave --cluster-master-id 2b0751e59cdf0ae0f74be7ab74981ab41e37e372

Docker高级篇:实战Redis集群!从3主3从变为4主4从_docker_13

8:检查集群情况第3次

redis-cli --cluster check 192.168.50.128:6381

Docker高级篇:实战Redis集群!从3主3从变为4主4从_redis_14

所以最终4主4从的架构及槽号如下图:

Docker高级篇:实战Redis集群!从3主3从变为4主4从_docker_15

结束语

如操作有问题欢迎去 我的 ​​个人博客(www.kaigejava.com)​​​留言或者  ​​ 微信公众号(凯哥Java)​​留言交流哦。


本系列教程直通车

直通车,本系列教程已发布文章,快速到达,《Docker学习系列》教程已经发布的内容如下:

​【图文教程】Windows11下安装Docker Desktop​

​【填坑】在windows系统下安装Docker Desktop后迁移镜像位置​

​【Docker学习系列】Docker学习1-docker安装​

​【Docker学习系列】Docker学习2-docker设置镜像加速器​

​【Docker学习系列】Docker学习3-docker的run命令干了什么?docker为什么比虚拟机快?​

​【Docker学习系列】Docker学习2-常用命令之启动命令和镜像命令​

​【Docker学习系列】Docker学习系列3:常用命令之容器命令​

​【Docker学习系列】Docker学习4-常用命令之重要的容器命令​

​【Docker教程系列】Docker学习5-Docker镜像理解​

​【Docker教程系列】Docker学习6-Docker镜像commit操作案例​

​【Docker学习教程系列】7-如何将本地的Docker镜像发布到阿里云​

​【Docker学习教程系列】8-如何将本地的Docker镜像发布到私服?​

​「Docker学习系列教程」9-Docker容器数据卷介绍​

​「Docker学习系列教程」10-Docker容器数据卷案例​

​Docker学习11-Docker常规方式安装软件​

​「Docker学习系列教程」基础篇小总结及高级篇预告​

​docker高级篇1-dockeran安装mysql主从复制​

​docker高级篇2-分布式存储之三种算法​

​docker高级篇第二章-分布式存储之实战案例:3主3从redis集群扩容配置​

​docker高级篇第二章-分布式存储之实战案例:主从容错切换迁移案例​



​【Docker学习教程系列汇总】笔记及遇到问题解决文章​


标签:--,Redis,redis,cluster,6387,集群,Docker,节点
From: https://blog.51cto.com/kaigejava/5957883

相关文章

  • RedisTemplate简单操作redis
    需要的依赖<!--操作redis的依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-da......
  • Docker 笔记
    title:Docker笔记.mddate:2022-12-1917:02:34tags:-Docker什么是Docker?官方介绍wehelpdevelopersanddevelopmentteamsbuildandshipapps.我们帮助开......
  • 谈谈 Redis 的过期策略
    在日常开发中,我们使用Redis存储key时通常会设置一个过期时间,但是Redis是怎么删除过期的key,而且Redis是单线程的,删除key会不会造成阻塞。要搞清楚这些,就要了解R......
  • docker-02
    一、私有仓库  dockerpull拉取,都是从hub.docker上拉取的,公司自己做的docker镜像,放在哪比较合适?dockerpush推到hub.docker,如果是公开,大家都可以下载,公司内部只希望公......
  • k8s源码分析9-检查k8s集群准入配置和其他准备工作
    本节重点总结:k8s集群检查操作新建项目kube-mutating-webhook-inject-pod,准备工作k8s集群检查操作检查k8s集群否启用了准入注册API:执行kubectlapi-versions|g......
  • 今日内容 docker-compose部署项目
    私有仓库#dockerpull拉取,都是从hub.docker上拉取的,公司自己做的docker镜像,放在哪比较合适#dockerpush推到hub.docker,如果是公开,大家都可以下载,公司内部只希......
  • 框架搭建之redis(一)
    1、redis有多种集群模式:单机,主从,哨兵,集群。2、本次搭建一个集群模式。使用redis7.0,从3.0以后开始有了集群模式,但是3.0需要使用ruby完成集群搭建,5.0以后不用ruby了。3、......
  • 将微服务项目利用Docker部署到服务器
    一、Docker基本知识写DockerFile文件创建自己的镜像volumn挂载目录容器间通信:同一network下docker-compose进行多容器部署二、部署过程(docker-hub网站里有现成容器部......
  • kubeasz 安装 K8S 集群启用 NFS 存储问题排查
    目录kubeasz安装Kubernetes集群启用NFS存储,默认情况无法安装使用问题排查集群规划安装Kubernetes集群问题复现配置文件中默认启用nfs存储安装后nfspod无法启动......
  • Docker+Jenkins+Gitee+Maven项目配置jdk、maven、gitee等拉取代码并自动构建以及遇到
    场景CentOS中使用Docker安装Jenkins:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/119911722在上面使用Docker部署起来Jenkins的基础上,怎样拉取SpringBoo......