2 - 部署Redis集群架构

部署Redis集群架构

  • 部署Redis集群
    • 部署管理主机
      • 第一步 准备ruby脚本的运行环境
      • 第二步 创建脚本
      • 第三步 查看脚本帮助信息
    • 配置6台Redis服务器
      • 第一步 修改配置文件启用集群功能
      • 第二步 重启redis服务
      • 第三步 查看Redis-server进程状态(看到服务使用2个端口号为成功)
    • 创建集群
      • 在管理主机mgm57执行创建集群的命令
    • 查看集群信息
  • 访问集群存取数据
    • 在客户端连接集群中的主机
  • 集群管理
    • 向集群里添加新服务器
    • 把服务器移除集群
      • 移除slave角色的主机
      • 移除master角色的主机
  • 扩展


环境:
6台集群服务器 51-56 :
安装Redis软件 初始化配置
停止Redis服务
修改服务使用的ip地址是eth0接口的地址(不需要设置密码和修改服务使用的端口号)
启动Redis服务
在这里插入图片描述

部署Redis集群

部署管理主机

第一步 准备ruby脚本的运行环境

第二步 创建脚本

第三步 查看脚本帮助信息

]# yum -y install rubygems ruby
]# gem install redis-3.2.1.gem
]# mkdir /root/bin # 创建命令检索目录
]# tar -zxvf redis-4.0.8.tar.gz
]# cp redis-4.0.8/src/redis-trib.rb /root/bin/ # 创建管理集群脚本
]# chmod +x /root/bin/redis-trib.rb
]# redis-trib.rb help # 查看命令帮助

配置6台Redis服务器

重要说明:内存里不允许有数据 不能设置连接密码(如果有要清除)

第一步 修改配置文件启用集群功能

[root@redisA ~]# vim /etc/redis/6379.conf //修改配置文件
bind 192.168.4.51        //修改ip
port 6351        //修改端口(可选配置)
cluster-enabled yes     //启用集群功能
cluster-config-file nodes-6379.conf //存储集群信息的配置文件
cluster-node-timeout 5000        //集群节点通信超时时间

第二步 重启redis服务

]# redis-cli -h 192.168.4.52 -p 6379 shutdown
]# /etc/init.d/redis_6379 start

第三步 查看Redis-server进程状态(看到服务使用2个端口号为成功)

[root@redisA ~]# netstat -utnlp  | grep redis-server
tcp  0  0 192.168.4.51:6351  0.0.0.0:*   LISTEN      21201/redis-server  
tcp  0  0 192.168.4.51:16351   0.0.0.0:*   LISTEN   21201/redis-server   

创建集群

在管理主机mgm57执行创建集群的命令

创建集群的命令格式

# --replicas 指定从服务器的台数(指定每个主服务器有几台从服务器)
# 创建集群时,会把前3台服务器配置为主服务器,剩下的其他主机全部做从服务器
]# redis-trib.rb create --replicas 数字 ip地址:端口 ip地址:端口 。。。
并给主服务器平均分配hash slots

在这里插入图片描述
在这里插入图片描述
创建集群失败了 需要删除服务器里面的集群创建信息 每台都要删除

redis-cli -h 192.168.4.51
> cluster reset

如果所有的Redis服务都启用了集群功能 内存里也没有数据 也没设置连接密码 还是创建失败 可能是物理内存不足

查看集群信息

# 查看统计信息
[ mgm57 ~]# redis-trib.rb info 192.168.4.51:6351
# 查看详细信息
[ mgm57 ~]# redis-trib.rb check 192.168.4.51:6351

在这里插入图片描述

访问集群存取数据

命令格式(连接集群中的任意一台服务器都可以查询数据和存储数据)
-c 连接集群中的主机 使用集群算法存储数据
redis-cli -c -h redis服务器的ip -p 端口号

在客户端连接集群中的主机

说明:向集群中的主机存储数据一次只能存储一个 变量 集群算法每次只有一个计算结果
在这里插入图片描述

集群管理

环境准备:创建2台新虚拟机 58 59
分别运行redis服务切启用了集群功能
192.168.4.58 主机redis服务的端口6379 服务使用的地址 192.168.4.58
192.168.4.59 主机redis服务的端口6379 服务使用的地址 192.168.4.59

向集群里添加新服务器

说明:什么情况下需要向集群里添加新主机 (添加master角色):
扩大内存空间(添加master角色服务器)
为了保证服务的可靠性(给主服务器添加多个从服务器)

  1. 添加master角色的服务器
    把58添加到集群做master服务器
1.58运行redis服务 且启用了集群功能,redis服务的端口6379 服务使用的地址192.168.4.58
2.在管理主机mgm57如下操作把host58主机添加到集群
redis-trib.rb add-node 192.168.4.58:6379 192.168.4.51:6379 (第二个是集群中任意主机)
出现 ok 成功的分配hash slots(master角色的服务器没有hash slots得不到存储数据机会)
redis-trib.rb reshard 集群中已有主机的ip:端口
第一个问题:移除多少个槽 
第二个问题:把这些槽给哪些主数据库服务器
第三个问题:提供这些槽的主机的id all(表示从当前所有主服务器一起提供4096个槽给58主机)查看集群信息(查看到新的主服务器且有hash slots为成功)
redis-trib.rb info 192.168.4.56:6379

在这里插入图片描述

  1. 添加slave角色的服务器
    说明:从角色服务器的数据是master服务器同步过来的数据 所以slave角色的服务器不需要分配hash slots 只需要把主机添加到集群做slave服务器就可以了
redis-trib.rb add-node --slave 新主机ip:端口 集群中已有的主机ip:端口
# 需求:把redis59添加到集群里 做58的slave服务器
具体操作如下:
1.在59主机运行redis服务且启用了集群功能
2.在管理主机做如下操作:把59添加到集群里 做slave服务器 会自动做从服务器最少的主服务器的从
redis-trib.rb add-node --slave 192.168.4.59:6379 192.168.4.56:6379查看集群信息(58有一个slave服务器)连接59查看数据(会自动同步)

在这里插入图片描述

把服务器移除集群

移除slave角色的主机

命令格式:redis-trib.rb del-node 集群中任意主机ip:端口 被移除主机的id
说明:slave角色的主机没有hash槽直接移除即可 主机被移除集群后 redis服务会自动停止
[root@mgm57 ~]# redis-trib.rb  info  192.168.4.51:6351
192.168.4.55:6355 (2d343a9d...) -> 3 keys | 4096 slots | 1 slaves.
192.168.4.53:6353 (9e44139c...) -> 3 keys | 4096 slots | 1 slaves.
192.168.4.52:6352 (324e05df...) -> 2 keys | 4096 slots | 1 slaves.
192.168.4.58:6358 (4fe1fa46...) -> 5 keys | 4096 slots | 0 slaves.//58主机,没有从服务器
[OK] 13 keys in 4 masters.
0.00 keys per slot on average.

移除master角色的主机

说明:master角色的服务器会占用hash 要先释放hash 在执行移除主机的命令
第一步:释放hash slots(再次执行reshard命令)
[root@mgm57 ~]# redis-trib.rb  reshard 192.168.4.53:6353
How many slots do you want to move (from 1 to 16384)?4096 //移除4096个数槽
What is the receiving node ID?  bc5c4e082a5a3391b634cf433a6486c867cfc44b //要移动给谁的id即目标主机(这里可以随机写一个master的ID)  
Source node #1: c5e0da48f335c46a2ec199faa99b830f537dd8a0
//从谁那移动即源主机(这里写4.58的ID)  
Source node #2:done           //设置完毕
...Moving slot 12282 from c5e0da48f335c46a2ec199faa99b830f537dd8a0Moving slot 12283 from c5e0da48f335c46a2ec199faa99b830f537dd8a0Moving slot 12284 from c5e0da48f335c46a2ec199faa99b830f537dd8a0Moving slot 12285 from c5e0da48f335c46a2ec199faa99b830f537dd8a0Moving slot 12286 from c5e0da48f335c46a2ec199faa99b830f537dd8a0Moving slot 12287 from c5e0da48f335c46a2ec199faa99b830f537dd8a0
Do you want to proceed with the proposed reshard plan (yes/no)?yes //提交
... 
[root@mgm57 ~]# redis-trib.rb  info  192.168.4.51:6351
192.168.4.55:6355 (2d343a9d...) -> 3 keys | 4096 slots | 1 slaves.
192.168.4.53:6353 (9e44139c...) -> 3 keys | 4096 slots | 1 slaves.
192.168.4.52:6352 (324e05df...) -> 2 keys | 4096 slots | 1 slaves.
192.168.4.58:6358 (4fe1fa46...) -> 0 keys | 0 slots    | 0 slaves. //零个槽
[OK] 13 keys in 4 masters.
0.00 keys per slot on average.
第二步:移除主机
[root@mgm57 ~]# redis-trib.rb del-node 192.168.4.53:6353 \ c5e0da48f335c46a2ec199faa99b830f537dd8a0    //删除谁+删除的id
>>> Removing node e081313ec843655d9bc5a17f3bed3de1dccb1d2b from cluster 192.168.4.51:6351
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.

扩展

平均分配当前所有主服务器的hash slots

redis-trib.rb rebalance 任意主机:端口

把移除的主机再次添加到集群里

1.清除数据 (在redis本机操作)
redis-cli -h 192.168.4.58 -p 6379
> cluster info
> cluster reset # 清空2.在管理主机执行添加命令
3.查看是否添加成功

把集群中的主机恢复为独立的数据库服务器

1.停止服务
2.注释掉配置文件中的集群功能
3.清空数据库目录
4.启动服务
/etc/init.d/redis_6379 start 
5.连接服务查看不到集群信息 也没有数据
redis-cli -h 192.168.4.53 -p 6379

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/245662.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GoZero微服务个人探究之路(九)api文件编写总结

参考来源go-zero官方文档https://go-zero.dev/docs/tutorials 前言 go-zero是目前star最多的go语言微服务框架,api 是 go-zero特殊的语言,类型文件,go-zero自带的goctl可以通过.api文件生成http服务代码 api文件内容编写 不可使用关键字 …

湿法蚀刻酸洗槽—— 应用半导体新能源光伏光电行业

PFA清洗槽又被称为防腐蚀槽、酸洗槽、溢流槽、纯水槽、浸泡槽、水箱、滴流槽,是四氟清洗桶后的升级款,是为半导体光伏光电等行业设计,一体成型,无需担心漏液。主要用于浸泡、清洗带芯片硅片电池片的花篮。 由于PFA的特点它能耐受…

【C++入门基础】

C入门基础 1. 什么是C2. C的发展史3. C关键字4. 命名空间4.1 命名空间定义4.1.1正常的命名空间定义4.1.2命名空间可以嵌套4.1.3 4.2.1 命名空间使用 5. C输入&输出6. 缺省参数6.1 示例6.2 缺省参数分类 7. 函数重载7.1 函数重载概念7.1.1 参数类型不同7.1.2 参数个数不同7.…

vue3使用vue-diff插件实现文本对比

前面介绍过vue3通过monaco-editor实现文本对比功能 但因为业务需要自定义左右两侧文本的底色及高亮颜色,考虑换一个插件:vue-diff 1、下载插件: npm i vue-diff1.2.4 2、main.js中引入并注册插件: // Diff对比 import VueDiff f…

Leetcode—剑指Offer LCR 083. 全排列【中等】

2023每日刷题&#xff08;一零二&#xff09; Leetcode—LCR 083. 全排列 实现代码 class Solution { public:vector<vector<int>> permute(vector<int>& nums) {vector<vector<int>> ans;int n nums.size();function<void(int)> d…

12个强大的 JavaScript 动画库,可帮助你提升用户体验

文章目录 12个强大的 JavaScript 动画库&#xff0c;可帮助你提升用户体验1.Anime.js2.Lottie3. Velocity4.Rough Notation5.Popmotion6. Vivus7.GSAP&#xff1a;Green Stocking Animation Platform8. Three.js9.ScrollReveal10.Barba.js11.Mo.js12.Typed.js总结 12个强大的 J…

一键拥有你的GPT4

这几天我一直在帮朋友升级ChatGPT&#xff0c;现在已经可以闭眼操作了哈哈&#x1f61d;。我原本以为大家都已经用上GPT4&#xff0c;享受着它带来的巨大帮助时&#xff0c;但结果还挺让我吃惊的&#xff0c;还是有很多人仍苦于如何进行升级。所以就想着写篇教程来教会大家如何…

HarmonyOS鸿蒙学习笔记(23)监听Wifi状态变化

监听Wifi状态变化 前言创建接收状态变化的Bean对象创建订阅者和订阅事件参考资料&#xff1a; 前言 本篇博文通过动态订阅公共事件来说明怎么使用HarmonyOS监听Wifi状态的变化。关于动态订阅公共事件的概念&#xff0c;官网有详细说明&#xff0c;再次就不在赘述。博文相关项目…

应急响应-Windows-进程排查

进程&#xff08;process&#xff09;是计算机中的程序关于某数据集合上的一次运动活动&#xff0c;是系统进行资源分配和调度的基本单位&#xff0c;是操作系统结果的基础。在早期面向进程结构中&#xff0c;进程是线程的容器。无论是在Windows系统还是Linux系统中&#xff0c…

计算机软件知识,务必进来了解一下

ps&#xff1a;本文章的图片内容来源都是来自于湖科大教书匠高老师的视频&#xff0c;声明&#xff1a;仅供自己复习 这里附上视频链接地址&#xff1a;1-4 计算机软件_哔哩哔哩_bilibili 程序是软件的重要组成部分&#xff0c;一台计算机中的全部程序和数据就构成了这台计算机…

万字图解 | 深入揭秘IP层工作原理

大家好&#xff0c;我是「云舒编程」&#xff0c;今天我们来聊聊计算机网络面试之-(网络层ip)工作原理。 文章首发于微信公众号&#xff1a;云舒编程 关注公众号获取&#xff1a; 1、大厂项目分享 2、各种技术原理分享 3、部门内推 前言 想必不少同学在面试过程中&#xff0c;…

yolov5 opencv dnn部署 github代码

yolov5 opencv dnn部署 github代码 源码地址实现推理源码中作者的yolov5s.onnx推理条件python部署(因为python比较简单就直接介绍了)c部署 参考链接 源码地址 yolov5官网还提供的dnn、tensorrt推理链接本人使用的opencv c github代码,代码作者非本人&#xff0c;也是上面作者推…

一、防御保护---信息安全概述

一、网络安全防御---信息安全概述 1.信息安全现状及挑战1.1 网络空间安全市场在中国&#xff0c;潜力无穷1.2 数字化时代威胁升级1.3 传统安全防护逐步失效1.4 安全风险能见度不足1.5 缺乏自动化防御手段1.6 网络安全监管标准愈发严苛 2.信息安全概述2.1 简介2.2 常见的网络安全…

C语言每日一题(48)回文链表

力扣 234 回文链表 题目描述 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true示例 2&#xff1…

HTML 炫酷进度条

下面是代码 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>Light Loader - CodePen</title><style> html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr…

企业能源消耗监测管理系统是否可以做好能源计量与能耗分析?

能源消耗与分析是能源科学管理的基础&#xff0c;也可促进能源管理工作的改善&#xff0c;在企业中能源管理系统的作用也愈加重要。 首先&#xff0c;能源计量是能源管理的基础&#xff0c;通过能源精准计老化&#xff0c;容易出现测量设备不准确以及其他一些人为因素原因导致…

Linux 驱动开发基础知识——编写LED驱动程序(三)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;V…

ICSpector:一款功能强大的微软开源工业PLC安全取证框架

关于ICSpector ICSpector是一款功能强大的开源工业PLC安全取证框架&#xff0c;该工具由微软的研究人员负责开发和维护&#xff0c;可以帮助广大研究人员轻松分析工业PLC元数据和项目文件。 ICSpector提供了方便的方式来扫描PLC并识别ICS环境中的可疑痕迹&#xff0c;可以用于…

微信小程序(十五)自定义导航栏

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.组件文件夹创建方法 2.自定义组件的配置方法 3.外部修改组件样式&#xff08;关闭样式隔离或传参&#xff09; 创建组件文件夹 如果是手动创建建议注意在json文件声明&#xff1a; mynav.json {//声明为组件可…

【Kafka】开发实战和Springboot集成kafka

目录 消息的发送与接收生产者消费者 SpringBoot 集成kafka服务端参数配置 消息的发送与接收 生产者 生产者主要的对象有&#xff1a; KafkaProducer &#xff0c; ProducerRecord 。 其中 KafkaProducer 是用于发送消息的类&#xff0c; ProducerRecord 类用于封装Kafka的消息…