2 - 部署Redis集群架构

news2024/11/15 8:35:38

部署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 c5e0da48f335c46a2ec199faa99b830f537dd8a0
    Moving slot 12283 from c5e0da48f335c46a2ec199faa99b830f537dd8a0
    Moving slot 12284 from c5e0da48f335c46a2ec199faa99b830f537dd8a0
    Moving slot 12285 from c5e0da48f335c46a2ec199faa99b830f537dd8a0
    Moving slot 12286 from c5e0da48f335c46a2ec199faa99b830f537dd8a0
    Moving 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.coloradmin.cn/o/1403955.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java线程池七大参数详解和配置(面试重点)

一、corePoolSize核心线程数 二、maximunPoolSize最大线程数 三、keepAliveTime空闲线程存活时间 四、unit空闲线程存活时间的单位 五、workQueue线程工作队列 1、ArrayBlockingQueue FIFO有界阻塞队列 2、LinkedBlockingQueue FIFO无限队列 3、PriorityBlockingQueue V…

chapter5-使用网页爬虫取利器—Requests

上篇文章我们讲解了使用Python 自带的urllib模块来爬取我们的第一个页面。但是事实上,urllib在现在的互联网公司应用的并不是最多的。今天,我们就来介绍一下目前最为流行,也是最为方面的网络爬虫框架之一的Requests 。 为什么要学习Requests…

BL120AC 工业空调网关 空调协议转Modbus协议网关

随着物联网技术的迅猛发展,人们深刻认识到在智能化生产和生活中,实时、可靠、安全的数据传输至关重要。在此背景下,高性能的物联网数据传输解决方案——协议转换网关应运而生,广泛应用于工业自动化和数字化工厂应用环境中。 钡铼…

基于jQuery与Spring MVC实现用户密码异步修改的实战演示

文章目录 一、实战概述二、实战步骤(一)创建表单1、表单界面2、表单代码3、脚本代码 (二)后端控制器(三)测试代码,查看效果1、弹出更改密码表单2、演示更改密码操作 三、实战总结 一、实战概述 …

【Java-框架-SpringSecurity】单点登录(认证和授权)- 随笔

项目文件; 【1】 【2】 【3】 【4】 【5】 【6】 【7】 【8】

Redis常见类型及常用命令

目录 常见的数据类型 一、String类型 1、简介 2、常用命令 (1)新建key (2)设值取值 ​编辑 (3)批量操作 (4)递增递减 3、原子性操作 4、数据结构 二、list类型 1、list常…

【QT+QGIS跨平台编译】之五:【curl+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、curl介绍二、curl下载三、文件分析四、pro文件五、编译实践 一、curl介绍 curl(CommandLine Uniform Resource Locator)主要功能就是用不同的协议连接和沟通不同的服务器,相当封装了的socket。 libcurl支持http, https, ftp, g…

软考系分之计算机网络规划设计、综合布线、RAID和网络存储等

文章目录 1、概要2、网络的三层模型3、综合布线系统4、廉价磁盘冗余阵列(RAID)5、网络存储6、总结 1、概要 本篇重点介绍计算机网络中的网络规划设计、综合布线、RAID和网络存储。 2、网络的三层模型 三层模型分为核心层、汇聚层和接入层,接…

【工具】SageMath|Ubuntu 22 下 SageMath 极速安装 (2024年)

就一个终端就能运行的东西, 网上写教程写那么长, 稍微短点的要么是没链接只有截图、要么是链接给的不到位, 就这,不是耽误生命吗。 废话就到这里。 文章目录 链接步骤 链接 参考: Install SageMath in Ubuntu 22.04We…

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

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

R语言批量把数值变量和因子变量的互转

#我们以rms包的lung数据集为例 library(rms) data<-lung #这里有两种方法&#xff0c; #第1是知道需要转化的变量在哪几列&#xff1b; #第2知道需要转化的变量名 str(data) #假设我们想转化inst/status/sex/三个变量的类型 #图1先看看变量类型和处于第几列 str(dat…

旅游项目day14

其他模块数据初始化 搜索实现 请求一样&#xff0c;但是参数不一样&#xff0c;根据type划分。 后台需要提供一个搜索接口。 请求分发器&#xff1a; 全部搜索 目的地搜索 精确搜索、无高亮展示 攻略搜索 全文搜索、高亮显示、分页 游记搜搜 用户搜索 丝袜哥

机器学习笔记 - 基于自定义数据集 + 3D CNN进行视频分类

一、简述 这里主要介绍了基于自定义动作识别数据集训练用于视频分类的 3D 卷积神经网络 (CNN) 。3D CNN 使用三维滤波器来执行卷积。内核能够在三个方向上滑动,而在 2D CNN 中它可以在二维上滑动。 这里的模型主要基于D. Tran 等人2017年的论文“动作识别的时空卷积研究”。 …

【GitHub项目推荐--基于 Flutter 的游戏引擎】【转载】

Flame 引擎的目的是为使用 Flutter 开发的游戏会遇到的常见问题提供一套完整的解决方案。 目前 Flame 提供了以下功能&#xff1a; 游戏循环 (game loop) 组件/对象系统 (FCS) 特效与粒子效果 碰撞检测 手势和输入支持 图片、动画、精灵图 (sprite) 以及精灵图组 一些简化…

OCP NVME SSD规范解读-7.TCG安全日志要求

在OCP NVMe SSD规格中&#xff0c;TCG的相关内容涉及以下几个方面&#xff1a; 活动事件记录&#xff1a; NVMe SSD需要支持记录TCG相关的持久事件日志&#xff0c;用于追踪固态硬盘上发生的与TCG安全功能相关的关键操作或状态变化&#xff0c;如启动过程中的安全初始化、密钥…

【Python从入门到进阶】47、Scrapy Shell的了解与应用

接上篇《46、58同城Scrapy项目案例介绍》 上一篇我们学习了58同城的Scrapy项目案例&#xff0c;并结合实际再次了项目结构以及代码逻辑的用法。本篇我们来学习Scrapy的一个终端命令行工具Scrapy Shell&#xff0c;并了解它是如何帮助我们更好的调试爬虫程序的。 一、Scrapy Sh…

时间序列预测 — CNN-LSTM-Attention实现多变量负荷预测(Tensorflow):多变量滚动

专栏链接&#xff1a;https://blog.csdn.net/qq_41921826/category_12495091.html 专栏内容 ​ 所有文章提供源代码、数据集、效果可视化 ​ 文章多次上领域内容榜、每日必看榜单、全站综合热榜 ​ ​ ​ ​ ​ ​ ​ 时间序列预测存在的问题 ​ 现有的大量方法没有真正的预测未…

Qt —— 自定义飞机仪表控件(附源码)

示例效果 部署环境 本人亲测版本Vs2017+Qt5.12.4,其他版本应该也可使用。 源码1 qfi_ADI::qfi_ADI( QWidget *parent ) :QGraphicsView ( parent ),m_scene ( nullptr )

持续集成工具Jenkins的使用之安装篇(一)

Jenkins是一个基于Java开发的开源的一种持续集成工具&#xff0c;主要用于环境部署&#xff0c;监控重复性的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件项目可以进行持续集成。要想使用它&#xff0c;你就必须的先安装&#xff0c;接下来我们就介绍下J…

第一篇【传奇开心果短博文系列】Python的库OpenCV技术点案例示例:cv2常用功能和方法

传奇开心果短博文系列 短博文系列目录Python的库OpenCV技术点案例示例系列 短博文目录一、前言二、常用功能和方法示例三、归纳总结 短博文系列目录 Python的库OpenCV技术点案例示例系列 短博文目录 一、前言 cv2是Python中常用的第三方库&#xff0c;也称为OpenCV库&#…