目录

  • 搭建三主三从集群
    • 数据读写存储
    • 主从容错的切换迁移
    • 主从扩容
    • 主从缩容

搭建三主三从集群

1 先启动docker
2 拉取redis镜像
3 创建6个redis容器

docker run -d --name redis-node-6381 --net host --privileged=true -v /usr/local/docker_redis/cluster_slave/redis-node-6381:/data redis:latest --cluster-enabled yes --appendonly yes --port 6381docker run -d --name redis-node-6382 --net host --privileged=true -v /usr/local/docker_redis/cluster_slave/redis-node-6382:/data redis:latest --cluster-enabled yes --appendonly yes --port 6382docker run -d --name redis-node-6383 --net host --privileged=true -v /usr/local/docker_redis/cluster_slave/redis-node-6383:/data redis:latest --cluster-enabled yes --appendonly yes --port 6383docker run -d --name redis-node-6384 --net host --privileged=true -v /usr/local/docker_redis/cluster_slave/redis-node-6384:/data redis:latest --cluster-enabled yes --appendonly yes --port 6384docker run -d --name redis-node-6385 --net host --privileged=true -v /usr/local/docker_redis/cluster_slave/redis-node-6385:/data redis:latest --cluster-enabled yes --appendonly yes --port 6385docker run -d --name redis-node-6386 --net host --privileged=true -v /usr/local/docker_redis/cluster_slave/redis-node-6386:/data redis:latest --cluster-enabled yes --appendonly yes --port 6386

执行完成以上的命令

4 ·进入容器redis-node-6381并为6台机器构建集群关系

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

5 进入之后,开始·构建主从关系

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

执行完成以上的命令
–cluster-replicas 1 表示为每个master创建一个slave节点

·一切OK的话,3主3从搞定

对应关系是

数据读写存储


我们已经搭建了三主三从的集群,一个集群里面最大有16384个槽位,现在有3个主节点,那么就会将16384分到3个主里面,每个主节点划分一段槽位;

通过以上的搭建的时候,输出的东西,我们可以看到,redis集群内部已经给你划分好了,哪些槽位是在哪个redis主节点;

我们先连接6381这个节点,里面设置一个值


发现设置不进去,一看提示,是因为根据这个key,算出来的槽位是在12706里面,但是当前的6381这个节点,redis集群只给分了0-----5460这些,所以,使用这个节点,根本存储不进去

问题:
不是搭建了集群,就可以随便连接一个,就可以存储进去嘛,会自动的找集群里面的一些节点存储东西嘛,为什么现在存储不进去呢?
回答

我们进入这个6381,是使用单机版的redis-cli进入的,我们不能使用这个,因为现在是集群,所以应该使用redis-cli -p 6381 -c

加入参数-c,优化路由

进入之后,我们重新设置值,看看能不能存进去


我们看到,已经将这个值存到6383这个节点上面了

主从容错的切换迁移


主从节点的关系如上

我们以一个为例 6381为主,6385为从;
我们先把6381停机,看看6385能不能变为主

以上是停止了6381

我们连接6382 ,查看集群的状态,可以看到

6381宕机了,6385上位成为了新的master。

那么当6381回来了,他还是主嘛?



他回来了,变成了从

主从扩容

一说到扩容,就是新增机器,现在我们想的是实现4主4从,所以还需要加两个redis,一个为主,一个为从,那么我们首先做的就是创建两个redis容器;
6387 6388 两个端口的容器

1 创建两个redis容器

docker run -d --name redis-node-6387 --net host --privileged=true -v /usr/local/docker_redis/cluster_slave/redis-node-6387:/data redis:latest --cluster-enabled yes --appendonly yes --port 6387docker run -d --name redis-node-6388 --net host --privileged=true -v /usr/local/docker_redis/cluster_slave/redis-node-6388:/data redis:latest --cluster-enabled yes --appendonly yes --port 6388


以上是以创建,我们进入6387里面

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

然后在这个里面,将新的节点,加入到集群里面,命令是:

redis-cli --cluster add-node 自己实际IP地址:6387   自己实际IP地址:63816387 就是将要作为master新增节点
6381 就是原来集群节点里面的领路人,
相当于6387拜拜6381的码头从而找到组织加入集群
redis-cli --cluster add-node 192.168.40.129:6387   192.168.40.129:6381

执行以上的命令


以上只是将6387加入到集群里面,还没有分配槽位了,刚进去的时候,6387里面的槽位还是空的;

我们进入6381的里面,执行命令,进行重新分派槽号

重新分派槽号
命令:redis-cli --cluster reshard IP地址:端口号
redis-cli --cluster reshard 192.168.40.129:6381


以上就分配完了

我们可以看到6387的槽位,是分段的,也就是说明,当前的槽位是其他节点给他的,分别给了他一点;

为什么6387是3个新的区间,以前的还是连续?
重新分配成本太高,所以前3家各自匀出来一部分,
从6381/6382/6383三个旧节点分别匀出1364个坑位给新节点6387

6387新节点已经有槽位了,现在就给他分配从节点了

命令:redis-cli --cluster add-node ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id 新主机节点IDredis-cli --cluster add-node 192.168.40.129:6388 192.168.40.129:6387 --cluster-slave --cluster-master-id cfaed9404ec032a9bd8523690a7c06c91f71a43c-------这个是6387的编号,按照自己实际情况


执行完成之后,我们看节点集群情况

主从缩容

以上经过扩容,已经成为4主4从,现在我们想要变为原来的3主3从,所以,我们要实现缩容;

我们要先删除从机,因为万一有人再写东西咋办;

使用一个命令就可以删除从节点

命令:redis-cli --cluster del-node ip:从机端口 从机6388节点IDredis-cli --cluster del-node 192.168.40.129:6388 fb4bff2dbd7e801f86bea7ffedbb412e5b70331f


查看集群状态,就可以看到没有从机的了
·将6387的槽号清空,重新分配,本例将清出来的槽号都给6381

6381   13084bfff1d5a6412df33d3372cb22b0a26a208d
6387   cfaed9404ec032a9bd8523690a7c06c91f71a43c
redis-cli --cluster reshard 192.168.40.129:6381


以上就将从机的槽位分配给了其他的主了,之后就可以删除这个空槽位的节点就可以了

命令:redis-cli --cluster del-node ip:端口 6387节点IDredis-cli --cluster del-node 192.168.40.129:6387 cfaed9404ec032a9bd8523690a7c06c91f71a43c


我们再查看集群节点


当前的集群又回到3主3从了

Docker高级篇笔记(七)在docker里面进行redis三主三从的集群案例搭建步骤相关推荐

  1. 【云原生 | Docker 高级篇】06、Docker 网络模式详解

    目录 一.Docker 平台架构图解 ​整体说明: 二.Docker 网络是什么 三.Docker 网络常用基本命令 1.查看网络 2.查看网络源数据 3.删除网络 4.案例 ​四.Docker 能干 ...

  2. ElasticSearch高级篇(数据聚和、自动补全、数据同步、分片集群)

    文章目录 1.数据聚合 1.1.聚合的种类 1.2.DSL实现聚合 1.2.1.Bucket聚合语法 1.2.2.聚合结果排序 1.2.3.限定聚合范围 1.2.4.Metric聚合语法 1.2.5. ...

  3. 《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务

    文章目录 二.高级篇(大厂进阶) 5.Docker-compose容器编排 5.1是什么 5.2能干嘛 5.3去哪下 5.4 Compose核心概念 5.5 Compose使用的三个步骤 5.6 Co ...

  4. 『高级篇』docker之DockerSwarm的集群环境搭建(28)

    原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『高级篇』docker之DockerSwarm的集群环境搭建(28) 上次了解了docker Swarm,这次一起动手操作,搭 ...

  5. 云原生时代必须具备的核心技能之Docker高级篇(Docker网络详解)

      前面给大家项目的介绍了Docker的基础内容 Docker基础篇 接下来给大家系统的介绍下Docker高级篇的内容:网络核心.Docker实战.DockerCompose.Harbor以及Swar ...

  6. 云原生时代必须具备的核心技能之Docker高级篇(Swarm)

    解决集群问题 k8s 官网地址:https://docs.docker.com/engine/swarm/ 1.Swarm介绍 ​ Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若 ...

  7. Docker高级篇-Docker容器内Redis集群配置

    Docker容器内Redis集群配置 1.三主三从集成配置 1.1.关闭防火墙.启动docker服务 1.2.新建6个docker容器实例 1.3.进入容器redis-node-1,构建主从关系 1. ...

  8. 谷粒商城--秒杀服务--高级篇笔记十二

    谷粒商城–秒杀服务–高级篇笔记十二 1.后台添加秒杀商品 未配置秒杀服务相关网关 1.1 配置网关 - id: coupon_routeuri: lb://gulimall-couponpredica ...

  9. python docker自动化_「docker实战篇」python的docker爬虫技术-移动自动化控制工具appium工具(17)...

    原创文章,欢迎转载.转载请注明:转载自 IT人故事会,谢谢! 原文链接地址: 「docker实战篇」python的docker爬虫技术-移动自动化控制工具appium工具(17) Appium是一个开 ...

最新文章

  1. docker 搭建私有仓库
  2. 有关绑定没有数据显示的问题
  3. python的flag是什么意思_网上老说的flag是什么意思
  4. linux 终端显示白底,mac终端使用Item2无法显示颜色的解决方法
  5. proteus如何添加stm32_新手入门轻松掌握 STM32 串口应用
  6. micropython stm32f429_[MicroPython]STM32F407开发板驱动OLED液晶屏
  7. 数据说话!UCloud「硬刚」腾讯云,高性能 AMD 云主机哪家强?
  8. ELK 使用小技巧(第 5 期)
  9. arduino图形编程——ardublock
  10. 一个程序通过窗体句柄控制另一个窗体
  11. Spring Boot拦截器配置拦截登陆
  12. 介绍一下ISO9000质量标准
  13. 《大象 Thinking in UML》学习笔记(三)——UML核心元素之参与者、用例
  14. 如何通俗易懂的解释什么是云服务器?
  15. strongswan源代码结构与数据结构
  16. vue 实现点击选中div后, 右下角显示对号√
  17. ym——Android从零开始(3)(常用控件+下拉框视图)(新)
  18. 技术风险防控平台:打造金融交易系统的故障免疫能力
  19. 文本生成图像这么火,你需要了解这些技术的演变
  20. 蒸汽式粉条机发展和销售乱象

热门文章

  1. 上周技术关注:敏捷开发的另一种方式--Scrum
  2. 列车运行图的编制原则是什么_列车运行图编制解读.ppt
  3. 用python给头像加圣诞帽
  4. 如何做好目标管理SMART原则PPT?
  5. 轮播组件/瀑布流/组合搜索/KindEditor插件
  6. 【微服务】在window下安装nacos以及可能遇到的问题
  7. LIVE555(1)
  8. 神奇,一个4G模块,采集又可以逻辑控制
  9. matlab求五元多次函数最值,matlab求最值(极值)
  10. 四足机器人——舵机控制