当前位置:网站首页>Docker学习 - Redis集群-3主3从-扩容-缩容搭建
Docker学习 - Redis集群-3主3从-扩容-缩容搭建
2022-07-25 12:41:00 【嗯嗯**】
演示图
// 第一步:启动六台Redis机器
docker run -d --name=redis-node-1 --net host --privileged=true -v /www/server/redis_master_slave/master_slave1/master:/data redis:latest --cluster-enabled yes --appendonly yes --port 6381
docker run -d --name=redis-node-2 --net host --privileged=true -v /www/server/redis_master_slave/master_slave2/master:/data redis:latest --cluster-enabled yes --appendonly yes --port 6382
docker run -d --name=redis-node-3 --net host --privileged=true -v /www/server/redis_master_slave/master_slave3/master:/data redis:latest --cluster-enabled yes --appendonly yes --port 6383
docker run -d --name=redis-node-4 --net host --privileged=true -v /www/server/redis_master_slave/master_slave1/slave:/data redis:latest --cluster-enabled yes --appendonly yes --port 6384
docker run -d --name=redis-node-5 --net host --privileged=true -v /www/server/redis_master_slave/master_slave2/slave:/data redis:latest --cluster-enabled yes --appendonly yes --port 6385
docker run -d --name=redis-node-6 --net host --privileged=true -v /www/server/redis_master_slave/master_slave3/slave:/data redis:latest --cluster-enabled yes --appendonly yes --port 6386
//第二步:随便进一台redis主机容器内部:为每个master创建一个slave从节点
docker exec -it redis-node-1 /bin/bash
//输入yes
redis-cli --cluster create 192.168.19.107:6381 192.168.19.107:6382 192.168.19.107:6383 192.168.19.107:6384 192.168.19.107:6385 192.168.19.107:6386 --cluster-replicas 1
//第三步:通过一台Redis主机(非从机),查看整个Redis集群状态 == 我当前进入的容器即是主机
redis-cli -p 6381
cluster info
cluster nodes
//根据上图的情况cluster nodes的信息,此时Redis系统分配的主从关系是:主6381-> 从6385、主6382-> 从6386、主6383-> 从6384
//第四步:测试reids存储:发现key1、key4设置时都发生错误,由于key1、key4的哈希值属于其他槽位,即其他的主机如主机6382、6383才可以存
//如果需要在当前主机不报错,自动将key1、key4存到其他机器,进入redis客户端使用集群模式:redis-cli -p 6381 -c
set key1 value1
set key2 value2
set key3 value3
set key4 value4
exit
//第五步:redis客户端 优化路由跳转 == 每运行一次set、注意看端口号的变化
redis-cli -c -p 6381
set key1 value1
set key2 value2
set key3 value3
set key4 value4
exit
//第六步:查看集群信息(另一个命令)cluster node 也可以看集群信息
//查看集群中所有key在各主机的分布情况,以及主从关系
redis-cli --cluster check 192.168.19.107:6381
//第七步:模拟其中一台主机宕机(我以6381主机宕机为测试),查看其想对应的从机6385是否可以自动变为主机,进行平替
exit
exit
docker stop redis-node-1
docker ps
docker exec -it redis-node-2 /bin/bash
redis-cli -c -p 6382
// 第八步:可观察到原主机6381的从机6385自动平替变为主机
cluster nodes
//第九步:重新将6381启起来,观察6381是否会变回主机,6385变为从机
exit
exit
docker start redis-node-1
docker exec -it redis-node-2 /bin/bash
redis-cli -c -p 6382
//第十步:可观察到 6385不会因为老领导回来6381就降为从机
cluster nodes
//第十一步:调整架构,将6381变为主机 6385变为从机
exit
exit
docker stop redis-node-5
//等1分钟在启起来
docker start redis-node-5
docker exec -it redis-node-2 /bin/bash
redis-cli -c -p 6382
//第十二步:可观察到 6381变为主机,6385变为从机
cluster nodes
//====================扩容开始==============================================
//第十三步:准备扩容,添加两台机器,主机6387、从机6388进入集群
exit
exit
docker run -d --name=redis-node-7 --net host --privileged=true -v /www/server/redis_master_slave/master_slave4/master:/data redis:latest --cluster-enabled yes --appendonly yes --port 6387
docker run -d --name=redis-node-8 --net host --privileged=true -v /www/server/redis_master_slave/master_slave4/slave:/data redis:latest --cluster-enabled yes --appendonly yes --port 6388
docker ps
//第十四步:进入redis-node7容器
docker exec -it redis-node-7 /bin/bash
//第十五步:添加当前redis机进入master集群
redis-cli --cluster add-node 192.168.19.107:6387 192.168.19.107:6381
//检查集群情况 == 发现新6387主机没槽位
redis-cli --cluster check 192.168.19.107:6381
//第十六步:勒令整个集群重新分配槽位,使得新主机6387也有槽位
//怎么分:16384/4=4096 填4096进去
//分给谁:6387机器的Redis定义的ID标识符:填ad03db99f539b78b0b57c37c529f9eb2f612bb18
//全机:重新新配:填all
//开始分配:yes
redis-cli --cluster reshard 192.168.19.107:6381
//第十七步:检查集群情况 == 发现新6387主机有槽位了(原先的三个槽位,每个都允了一点过来) == 且将集群系统中所有key都重新分配了
redis-cli --cluster check 192.168.19.107:6381
//第十八步:将6388指派变为6387的从机
//删除节点命令:redis-cli --cluster del-node 节点IP:节点端口号 节点标识符
redis-cli --cluster add-node 192.168.19.107:6388 192.168.19.107:6387 --cluster-slave --cluster-master-id ad03db99f539b78b0b57c37c529f9eb2f612bb18
//第十九步:检查集群情况 == 查看6387、6388是否是主从关系
redis-cli --cluster check 192.168.19.107:6381
//====================扩容结束==============================================
//====================缩容开始-先删从节点6388,槽位重新分配,在删除主节点6387,恢复成3主3从====
//第二十步:删除从节点6388
redis-cli --cluster del-node 192.168.19.107:6388 dc89a64b98290f4164e4ba1b6e8841a8b9d8d763
//第二十一步:检查集群情况 == 查看从节点6388已从集群中移除
redis-cli --cluster check 192.168.19.107:6381
//第二十二步:开始重新分配槽位
//分配的槽位个数:4096
//谁接收分配来的槽位:6381节点的ID标识符 填入:2d8bb525e25ecb239dbe059f8545eda64182e514
//谁分配出去槽位:6387节点的ID标识符 填入:ad03db99f539b78b0b57c37c529f9eb2f612bb18
//done
redis-cli --cluster reshard 192.168.19.107:6381
//第二十三步:检查集群情况 = 可见6387的key都分配出去给6381
redis-cli --cluster check 192.168.19.107:6381
//第二十四步:删除从节点6388
redis-cli --cluster del-node 192.168.19.107:6387 ad03db99f539b78b0b57c37c529f9eb2f612bb18
//第二十五步:检查集群情况 == 查看主节点6387已从集群中移除
redis-cli --cluster check 192.168.19.107:6381
//====================缩容结束==============================================
整个搭建流程
边栏推荐
- 状态(State)模式
- 【运维、实施精品】月薪10k+的技术岗位面试技巧
- 基于JEECG制作一个通用的级联字典选择控件-DictCascadeUniversal
- 请问一下,使用数据集成从postgreSQL导数据到Mysql数据库,有部分数据的字段中出现emoj
- State mode
- Experimental reproduction of image classification (reasoning only) based on caffe resnet-50 network
- Synergetic process
- 交换机链路聚合详解【华为eNSP】
- Selenium uses -- XPath and analog input and analog click collaboration
- 【问题解决】ibatis.binding.BindingException: Type interface xxDao is not known to the MapperRegistry.
猜你喜欢

A turbulent life

Mid 2022 review | latest progress of large model technology Lanzhou Technology

AtCoder Beginner Contest 261E // 按位思考 + dp

Kyligence 入选 Gartner 2022 数据管理技术成熟度曲线报告

【问题解决】ibatis.binding.BindingException: Type interface xxDao is not known to the MapperRegistry.

2022 年中回顾 | 大模型技术最新进展 澜舟科技

Azure Devops (XIV) use azure's private nuget warehouse

Microsoft azure and Analysys jointly released the report "Enterprise Cloud native platform driven digital transformation"

massCode 一款优秀的开源代码片段管理器

零基础学习CANoe Panel(13)—— 滑条(TrackBar )
随机推荐
[rust] reference and borrowing, string slice type (& STR) - rust language foundation 12
手写一个博客平台~第一天
Is the securities account opened by qiniu safe? How to open an account
Interviewer: "classmate, have you ever done a real landing project?"
Maskgae: masked graph modeling meets graph autoencoders
【问题解决】org.apache.ibatis.exceptions.PersistenceException: Error building SqlSession.1 字节的 UTF-8 序列的字
力扣 83双周赛T4 6131.不可能得到的最短骰子序列、303 周赛T4 6127.优质数对的数目
clickhouse笔记03-- Grafana 接入ClickHouse
word样式和多级列表设置技巧(二)
Perf performance debugging
Force deduction 83 biweekly T4 6131. The shortest dice sequence impossible to get, 303 weeks T4 6127. The number of high-quality pairs
软件测试面试题目:请你列举几个物品的测试方法怎么说?
The larger the convolution kernel, the stronger the performance? An interpretation of replknet model
conda常用命令:安装,更新,创建,激活,关闭,查看,卸载,删除,清理,重命名,换源,问题
使用vsftpd服务传输文件(匿名用户认证、本地用户认证、虚拟用户认证)
想要做好软件测试,可以先了解AST、SCA和渗透测试
State mode
Excuse me, using data integration to import data from PostgreSQL to MySQL database, emoj appears in some data fields
Software testing interview question: Please list the testing methods of several items?
Zero basic learning canoe panel (14) -- led control and LCD control