前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker高级篇笔记(七)在docker里面进行redis三主三从的集群案例搭建步骤

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

作者头像
一写代码就开心
发布2022-05-09 10:07:55
3330
发布2022-05-09 10:07:55
举报
文章被收录于专栏:java和python

目录

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

搭建三主三从集群

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

代码语言:javascript
复制
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 6381
 
docker 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 6382
 
docker 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 6383
 
docker 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 6384
 
docker 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 6385
 
docker 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台机器构建集群关系

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
docker exec -it redis-node-6381 /bin/bash

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

代码语言:javascript
复制
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容器

代码语言:javascript
复制
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 6387

docker 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里面

代码语言:javascript
复制
docker exec -it redis-node-6387 /bin/bash

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

代码语言:javascript
复制
redis-cli --cluster add-node 自己实际IP地址:6387   自己实际IP地址:6381

6387 就是将要作为master新增节点
6381 就是原来集群节点里面的领路人,
相当于6387拜拜6381的码头从而找到组织加入集群
代码语言:javascript
复制
redis-cli --cluster add-node 192.168.40.129:6387   192.168.40.129:6381

执行以上的命令

在这里插入图片描述
在这里插入图片描述

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

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

代码语言:javascript
复制
重新分派槽号
命令:redis-cli --cluster reshard IP地址:端口号
redis-cli --cluster reshard 192.168.40.129:6381
在这里插入图片描述
在这里插入图片描述

以上就分配完了

在这里插入图片描述
在这里插入图片描述

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

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

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

代码语言:javascript
复制
命令:redis-cli --cluster add-node ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id 新主机节点ID
 
redis-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从,所以,我们要实现缩容;

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

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

代码语言:javascript
复制
命令:redis-cli --cluster del-node ip:从机端口 从机6388节点ID
 
redis-cli --cluster del-node 192.168.40.129:6388 fb4bff2dbd7e801f86bea7ffedbb412e5b70331f
在这里插入图片描述
在这里插入图片描述

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

代码语言:javascript
复制
6381   13084bfff1d5a6412df33d3372cb22b0a26a208d
6387   cfaed9404ec032a9bd8523690a7c06c91f71a43c
redis-cli --cluster reshard 192.168.40.129:6381
在这里插入图片描述
在这里插入图片描述

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

代码语言:javascript
复制
命令:redis-cli --cluster del-node ip:端口 6387节点ID
 
redis-cli --cluster del-node 192.168.40.129:6387 cfaed9404ec032a9bd8523690a7c06c91f71a43c
在这里插入图片描述
在这里插入图片描述

我们再查看集群节点

在这里插入图片描述
在这里插入图片描述

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-03-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 搭建三主三从集群
    • 数据读写存储
      • 主从容错的切换迁移
        • 主从扩容
          • 主从缩容
          相关产品与服务
          云数据库 Redis
          腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档