当前位置: 首页 > news >正文

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

在这里插入图片描述

相关文章:

2 - 部署Redis集群架构

部署Redis集群架构 部署Redis集群部署管理主机第一步 准备ruby脚本的运行环境第二步 创建脚本第三步 查看脚本帮助信息 配置6台Redis服务器第一步 修改配置文件启用集群功能第二步 重启redis服务第三步 查看Redis-server进程状态(看到服务使用2个端口号为成功&#…...

NOIP2003提高组T1:神经网络

题目链接 [NOIP2003 提高组] 神经网络 题目背景 人工神经网络(Artificial Neural Network)是一种新兴的具有自我学习能力的计算系统,在模式识别、函数逼近及贷款风险评估等诸多领域有广泛的应用。对神经网络的研究一直是当今的热门方向&am…...

Doris数据库误删除恢复

如果不小心误删除了表,doris提供了恢复机制,但时间间隔不能超过一天,记得要迅速 首先查看当前能恢复的记录有那些 可以通过 SHOW CATALOG RECYCLE BIN 来查询当前可恢复的元信息,也可以在语句后面加 WHERE NAME XXX 来缩小查询…...

C# byte转int:大小端读取

参考:byte[]数组和int之间的转换 文章目录 Byte转为INT小端存储方式转int大端存储方式转int 大端模式和小端模式是计算机存储多字节数据时的两种方式。内存地址从小往大增长。 大端模式:最高有效(最高位)的字节存放在最小地址上&…...

安全通信网络

1.网络架构 1)应保证网络设备的业务处理能力满足业务高峰期需要。 设备CPU和内存使用率的峰值不大于设备处理能力的70%。 在有监控环境的条件下,应通过监控平台查看主要设备在业务高峰期的资源(CPU、内存等)使用 情况&#xff…...

深度学习笔记(九)——tf模型导出保存、模型加载、常用模型导出tflite、权重量化、模型部署

文中程序以Tensorflow-2.6.0为例 部分概念包含笔者个人理解,如有遗漏或错误,欢迎评论或私信指正。 本篇博客主要是工具性介绍,可能由于软件版本问题导致的部分内容无法使用。 首先介绍tflite: TensorFlow Lite 是一组工具,可帮助开…...

七Docker可视化管理工具

Docker可视化管理工具 本节介绍几款Docker可视化管理工具。 DockerUI(ui for Docker) 官方GitHub:https://github.com/kevana/ui-for-docker 项目已废弃,现在转投Portainer项目,不建议使用。 Portainer 简介:Portainer是一个…...

vue和react的差异梳理

特性VueReact响应式系统使用Object.defineProperty()或Proxy使用不可变数据流和状态提升模板系统HTML模板语法JSX(JavaScript扩展语法)组件作用域样式支持scoped样式需要CSS-in-JS库(如styled-components)状态管理Vuex&#xff08…...

(笔记总结)C/C++语言的常用库函数(持续记录,积累量变)

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…...

OceanBase集群扩缩容

​ OceanBase 数据库采用 Shared-Nothing 架构,各个节点之间完全对等,每个节点都有自己的 SQL 引擎、存储引擎、事务引擎,天然支持多租户,租户间资源、数据隔离,集群运行的最小资源单元是Unit,每个租户在每…...

html 3D 倒计时爆炸特效

下面是代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>HTML5 Canvas 3D 倒计时爆炸特效DEMO演示</title><link rel"stylesheet" href"css/style.css" media"screen&q…...

记一次垃圾笔记应用VNote安装失败过程

特色功能简介 1.全文搜索: VNote支持根据关键词搜索整个笔记本或者特定文件夹内的文档内容&#xff0c;非常适合快速找到信息。 2.标签管理: 你可以给笔记添加标签&#xff0c;从而更好地组织和检索你的笔记内容。 3.自定义主题和样式: 进入设置&#xff0c;VNote允许你选…...

记一次 stackoverflowerror 线上排查过程

一.线上 stackOverFlowError xxx日,突然收到线上日志关键字频繁告警 classCastException.从字面上的报警来看,仅仅是类型转换异常,查看细则发现其实是 stackOverFlowError.很多同学面试的时候总会被问到有没有遇到过线上stackOverFlowError?有么有遇到栈溢出?具体栈溢出怎么来…...

论文写作之十个问题

前言 最近进入瓶颈&#xff1f; 改论文&#xff0c;改到有些抑郁了 总是不对&#xff0c;总是被打回 好的写作&#xff0c;让人一看就清楚明白非常重要 郁闷时候看看大佬们怎么说的 沈向洋、华刚&#xff1a;读科研论文的三个层次、四个阶段与十个问题 十问 What is the pro…...

leetcode2171 拿出最少数目的魔法豆

题目 给定一个 正整数 数组 beans &#xff0c;其中每个整数表示一个袋子里装的魔法豆的数目。 请你从每个袋子中 拿出 一些豆子&#xff08;也可以 不拿出&#xff09;&#xff0c;使得剩下的 非空 袋子中&#xff08;即 至少还有一颗 魔法豆的袋子&#xff09;魔法豆的数目…...

测试C#调用OpenCvSharp和ViewFaceCore从摄像头中识别人脸

学习了基于OpenCvSharp获取摄像头数据&#xff0c;同时学习了基于ViewFaceCore的人脸识别用法&#xff0c;将这两者结合即是从摄像头中识别人脸。本文测试测试C#调用OpenCvSharp和ViewFaceCore从摄像头中识别人脸&#xff0c;并进行人脸红框标记。   新建Winform项目&#xf…...

测试经理面试初体验

家人们谁懂啊&#xff0c;我在海口实在难找计算机类的实习&#xff0c;就直接在BOss上海投了&#xff0c;结果一个hr直接给我弄了个测试经理的面试&#xff08;可能年底冲业绩吧&#xff09;&#xff0c;然后就在明天下午&#xff0c;我直接抱下f脚了&#xff0c;就当体验一下~…...

使用ffmpeg调整视频中音频采样率及声道

1 原始视频信息 通过ffmpeg -i命令查看视频基本信息 ffmpeg -i example2.mp4 ffmpeg version 6.1-essentials_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developersbuilt with gcc 12.2.0 (Rev10, Built by MSYS2 project)configuration: --enable-gpl --enable…...

详细分析Java中的Date类以及格式转换

目录 前言1. 基本知识2. 格式化输出3. 格式转换 前言 记录这篇文章的缘由&#xff0c;主要是涉及一个格式转换&#xff0c;对此深挖了这个类 在Java中&#xff0c;Date类是用于表示日期和时间的类。 位于java.util包中&#xff0c;是Java平台中处理日期和时间的基本类之一。…...

【计算机网络】应用层——HTTP 协议(一)

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】 本专栏旨在分享学习计算机网络的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 一、什么是 HTTP 协…...

线程和进程的区别

Java面试题 线程和进程的区别 进程是操作系统资源分配的基本单位。 线程是处理器任务调度和执行的基本单位 一个进程可以包含多个线程。进程之间的资源是相互独立&#xff0c;而同一进程下的线程之间可以共享进程中的资源。...

proxy 代理的接口报错301问题

项目系统里仅仅这个接口报错&#xff0c;反向代理错误导致。 默认情况下&#xff0c;不接受运行在HTTPS上&#xff0c;且使用了无效证书的后端服务器。如果你想要接受&#xff0c;修改配置&#xff1a;secure: false&#xff08;简单意思&#xff1a;如果本地没有进行过https相…...

mysql进阶-执行计划

目录 1. 概念 2. 使用 3. 具体相关字段含义 3.1 id 3.2 select_type 3.3 table 3.4 partition 3.5 type 3.6 possible_key 3.7 key 3.8 key_len 3.9 ref 3.10 row 3.11 filtered 3.12 extra 1. 概念 一条语句通过优化器之后&#xff0c;会生成具体的执行计划用…...

【UE5】第一次尝试项目转插件(Plugin)的时候,无法编译

VS显示100条左右的错误&#xff0c;UE热编译也不能通过。原因可能是[名字.Build.cs]文件的错误&#xff0c;缺少一些内容&#xff0c;比如说如果要写UserWidget类&#xff0c;那么就要在 ]名字.Build.cs] 中加入如下内容&#xff1a; public class beibaoxitong : ModuleRules …...

MeterSphere本地化部署实践

项目结构 搭建本地环境 安装JDK11&#xff0c;配置好JDK环境&#xff0c;系统同时支持JDK8和JDK11安装IEAD&#xff0c;配置JDK环境配置maven环境,IDEA配置(解压可以直接使用)无限重置IDEA试用期配置redis环境(解压可以直接使用) 配置kafka环境 安装mysql-5.7环境&#xff…...

巨变!如何理解中国发起的“数据要素X”计划?

作者 张群&#xff08;赛联区块链教育首席讲师&#xff0c;工信部赛迪特聘资深专家&#xff0c;CSDN认证业界专家&#xff0c;微软认证专家&#xff0c;多家企业区块链产品顾问&#xff09;关注张群&#xff0c;为您提供一站式区块链技术和方案咨询。 刘烈宏在第25届北大光华新…...

CS8370错误,这是由于使用了C# 7.3中不支持的功能

目录 背景: 第一种方法: 第二种办法: 背景: 在敲代码的时候&#xff0c;程序提示报错消息提示:CS8370错误&#xff0c;那么这是什么原因导致的&#xff0c;这是由于使用了C# 7.3中不支持的功能&#xff0c;不支持该功能&#xff0c;那就是版本太低我们就需要升级更高的版本&…...

Raspbian安装云台

Raspbian安装云台 1. 源由2. 选型3. 组装4. 调试4.1 python3-print问题4.2 python函数入参类型错误4.3 缺少mjpg-streamer可执行文件4.4 缺失编译头文件和库4.5 python库缺失4.6 图像无法显示&#xff0c;但libcamera-jpeg测试正常4.7 异常IOCTL报错4.8 Git问题 5. 效果5.1 WEB…...

蓝桥杯理历年真题 —— 数学

1. 买不到的数目 这道题目&#xff0c;考得就是一个日常数学的积累&#xff0c;如果你学过这个公式的话&#xff0c;就是一道非常简单的输出问题&#xff1b;可是如果没学过&#xff0c;就非常吃亏&#xff0c;在考场上只能暴力求解&#xff0c;或是寻找规律。这就要求我们什么…...

自然语言处理--双向匹配算法

自然语言处理作业1--双向匹配算法 一、概述 双向匹配算法是一种用于自然语言处理的算法&#xff0c;用于确定两个文本之间的相似度或匹配程度。该算法通常使用在文本对齐、翻译、语义匹配等任务中。 在双向匹配算法中&#xff0c;首先将两个文本分别进行处理&#xff0c;然后…...