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

Redis---集群环境准备

一、redis集群环境准备

1、部署Redis集群的目的:

多台服务器一起提供数据存储服务;
实现数据的分布式存储;
可以实现服务的高可用;
可用实现数据自动备份;

2、服务器IP地址及端口:

主机名          IP地址          	  端口
redisA       192.168.4.61         6379     
redisB       192.168.4.62         6379     
redisC       192.168.4.63         6379     
redisD       192.168.4.64         6379
redisE       192.168.4.65         6379
redisF       192.168.4.66         6379
mgm68      192.168.4.68           无redisA、B、C、D、E、F安装redis服务即可

3、redisA修改监控地址和启用redis集群相关功能

[root@redisA ~]# /etc/init.d/redis_6379 stop

4、启用redis集群相关功能

[root@redisA ~]# vim /etc/redis/6379.conf
70 bind 192.168.4.61						#修改监控地址
815  cluster-enabled yes					#取消注释,启用集群功能
823  cluster-config-file nodes-6379.conf		#取消注释,存储集群信息相关文件
829  cluster-node-timeout 5000				#设置集群通信的超时时间(5000秒)
[root@redisA ~]# /etc/init.d/redis_6379 start
[root@redisA ~]# ss -ntulp | grep redis

5、连接redis服务,查看集群信息

[root@redisA ~]# redis-cli -h 192.168.4.61 -p 6379

6、做redis集群时,要保证所有的节点的数据为空,flushall(清空所有数据)

192.168.4.61:6379> keys *
192.168.4.61:6379> cluster info		#查看集群的相关信息
cluster_state:fail          			#集群状态,失败

7、redisB、C、D、E、F相同操作,只是监听的地址换成各自本机的地址

二、创建redis集群

配置管理主机
部署 ruby 脚本运行环境
创建管理集群脚本 redis-trib.rb

1、部署ruby 脚本运行环境,在mgm68上操作

# gem命令,用于安装ruby脚本连接redis服务的软件
[root@mgm68 ~]# yum -y install ruby rubygems
[root@mgm68 ~]# which gem		#查看gem命令是否存在
[root@mgm68 ~]# gem install redis-3.2.1.gem 	此软件,用于ruby脚本连接redis服务
[root@mgm68 ~]# ls redis-4.0.8/src/*.rb	#在redis源码包目录下,找到管理redis集群脚本
redis-4.0.8/src/redis-trib.rb

2、便于管理,将脚本拷贝到linux命令的默认查找路径下

[root@mgm68 ~]# echo $PATH		#查看linux命令的默认查找路径
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

3、创建目录,将管理脚本拷贝到该目录下,授予执行权限

[root@mgm68 ~]# mkdir  /root/bin
[root@mgm68 ~]# cp /root/redis-4.0.8/src/redis-trib.rb  /root/bin/
[root@mgm68 ~]# chmod +x  /root/bin/redis-trib.rb

4、Tab键,可以直接以脚本的名称直接运行,help 查看使用方法

[root@mgm68 ~]# redis-trib.rb  help

5、创建集群

#create 创建集群;
#redis集群在创建时,默认会将集群列表中的前3台服务器配置成主服务器,剩下的服务器才会被配置成从服务器;
#–replicas 1 指给每一台主服务器分配1台从服务器,需要6台服务器;
#–replicas 2 指给每一台主服务器分配2台从服务器,需要9台服务器;
#–replicas 3 指给每一台主服务器分配3台从服务器,需要12台服务器;
#最后用IP地址和端口号,指定redis集群的列表,前三台默认为主服务器

[root@mgm68 ~]# redis-trib.rb create --replicas 1  192.168.4.61:6379  192.168.4.62:6379  192.168.4.63:6379  192.168.4.64:6379  192.168.4.65:6379   192.168.4.66:6379Creating cluster
Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.4.61:6379    #主服务器
192.168.4.62:6379    #主服务器
192.168.4.63:6379    #主服务器#### 192.168.4.65 为 192.168.4.61的从服务器
Adding replica 192.168.4.65:6379 to 192.168.4.61:6379#### 192.168.4.66 为 192.168.4.62的从服务器
Adding replica 192.168.4.66:6379 to 192.168.4.62:6379#### 192.168.4.64 为 192.168.4.63的从服务器
Adding replica 192.168.4.64:6379 to 192.168.4.63:6379#### M 指的是主服务器(占用hash槽); 
#### S 指的是从服务器(不占用hash槽,从主服务器同步数据)
M: c1198049c748cd11daff4a2477bd9dcdb3358fba 192.168.4.61:6379slots:0-5460 (5461 slots) master
M: 1417e06b26368b5e465fad155ad8a5520a937402 192.168.4.62:6379slots:5461-10922 (5462 slots) master
M: 4515ec026b1fba677cc13f0d8f72d18afde8b6b8 192.168.4.63:6379slots:10923-16383 (5461 slots) master
S: eb6558d188e64bb36016390030657f0eaa34f2cb 192.168.4.64:6379replicates 4515ec026b1fba677cc13f0d8f72d18afde8b6b8
S: 8a527e4080f47e5172715ef8cba58321534a125c 192.168.4.65:6379replicates c1198049c748cd11daff4a2477bd9dcdb3358fba
S: bbe8589f4a41adfd24ccfaae3a4fe27d5b5c4b53 192.168.4.66:6379replicates 1417e06b26368b5e465fad155ad8a5520a937402###########输入 yes,确认配置
Can I set the above configuration? (type 'yes' to accept): yes>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join.....
>>> Performing Cluster Check (using node 192.168.4.61:6379)
M: c1198049c748cd11daff4a2477bd9dcdb3358fba 192.168.4.61:6379slots:0-5460 (5461 slots) master1 additional replica(s)
S: bbe8589f4a41adfd24ccfaae3a4fe27d5b5c4b53 192.168.4.66:6379slots: (0 slots) slavereplicates 1417e06b26368b5e465fad155ad8a5520a937402
S: eb6558d188e64bb36016390030657f0eaa34f2cb 192.168.4.64:6379slots: (0 slots) slavereplicates 4515ec026b1fba677cc13f0d8f72d18afde8b6b8
S: 8a527e4080f47e5172715ef8cba58321534a125c 192.168.4.65:6379slots: (0 slots) slavereplicates c1198049c748cd11daff4a2477bd9dcdb3358fba
M: 4515ec026b1fba677cc13f0d8f72d18afde8b6b8 192.168.4.63:6379slots:10923-16383 (5461 slots) master1 additional replica(s)
M: 1417e06b26368b5e465fad155ad8a5520a937402 192.168.4.62:6379slots:5461-10922 (5462 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...[OK] All 16384 slots covered.				#所有的slots(槽)分配完成

6、查看集群信息,选择查看任何节点均可,结果相同

[root@mgm68 ~]# redis-trib.rb info 192.168.4.65:6379
192.168.4.61:6379 (c1198049...) -> 0 keys | 5461 slots | 1 slaves.
192.168.4.63:6379 (4515ec02...) -> 0 keys | 5461 slots | 1 slaves.
192.168.4.62:6379 (1417e06b...) -> 0 keys | 5462 slots | 1 slaves.
主服务器地址和端口(ID值) ——> 存储变量的个数 | 占用槽的个数 | 从服务器个数

7、check 查看集群的详细信息,M 指的是主服务器(占用hash槽); S 指的是从服务器(不占用hash槽,从主服务器同步数据),最后指定主服务器的ID值

[root@mgm68 ~]# redis-trib.rb check 192.168.4.65:6379redis服务器本机上,查看集群信息,在redisA上操作
[root@redisA ~]# cat  /var/lib/redis/6379/nodes-6379.conf
[root@redisA ~]# redis-cli -h 192.168.4.61 -p 6379
192.168.4.61:6379> cluster info		#查看集群的状态信息
cluster_state:ok            #集群状态,OK
cluster_slots_assigned:16384
...
cluster_known_nodes:6        #集群中有6台服务器
cluster_size:3               #集群中有3台主服务器
...
192.168.4.61:6379> cluster nodes		#查看所有节点的信息
#节点在集群中的ID值(唯一的)    ID对应节点的IP地址,端口号及集群端口号   myself为当前访问的节点,master为主服务器,slave指从服务器  .......

8、vpc50客户端,访问集群存取数据

客户端通过-c 访问redis集群,访问任何一个节点都可以
[root@vpc50 ~]#  redis-cli -c -h 192.168.4.63 -p 6379##redis集群中存入数据,给数据分配槽编号为5798
##根据槽编号所在的位置,将数据存入到4.62主机上,切换到4.62主机中
192.168.4.63:6379> set name plj
-> Redirected to slot [5798] located at 192.168.4.62:6379
192.168.4.62:6379> keys *
1) "name"查看4.62主机的从服务器信息,到从服务器4.66本机上,验证数据是否同步
192.168.4.62:6379> info replication
# Replication
role:master               #4.62为主服务器
connected_slaves:1        #4.62的从服务器为4.66
slave0:ip=192.168.4.66,port=6379,state=online,offset=2813,lag=1##redis集群中继续存入数据,给数据分配槽编号为741
##根据槽编号所在的位置,将数据存入到4.61主机上,切换到4.61主机中
192.168.4.62:6379> set age 19
-> Redirected to slot [741] located at 192.168.4.61:6379##查看4.61主机的从服务器信息,到从服务器4.65本机上,验证数据是否同步
192.168.4.61:6379> info replication
# Replication
role:master             #4.61为主服务器
connected_slaves:1      #4.61的从服务器为4.65   
slave0:ip=192.168.4.65,port=6379,state=online,offset=3777,lag=0
.....
##查看当前库下的所有变量,可以看到数据
192.168.4.61:6379> keys *##redis集群中继续存入数据,给数据分配槽编号为8455
##根据槽编号所在的位置,将数据存入到4.62主机上,切换到4.62主机中
192.168.4.61:6379> set school tarena
-> Redirected to slot [8455] located at 192.168.4.62:6379
edis集群中继续存入数据,继续存储在4.62主机上
192.168.4.62:6379> set class nsd2020#查看4.62主机上的所有变量
192.168.4.62:6379> keys *
1) "school"
2) "class"
3) "name"

9、redis集群数据存储

#1》redis集群在部署完成后,每个 master主机 都被分配了一批不同编号的槽;
#2》存储数据时,会根据算法,为数据分配不同编号的槽;
#3》根据槽编号所在的位置,将数据存储在相应的master主机上;
#4》master主机对应的从服务器也会同步主服务器中的数据;

10、-c 客户端从集群中读取数据,在vpc50上

[root@redis ~]# redis-cli -c -h 192.168.4.63 -p 6379
192.168.4.62:6379> keys *
192.168.4.62:6379> get name		#从本机中获取name变量的值
192.168.4.62:6379> get age		#根据槽的编号741从4.61的主机上获取age变量的值
-> Redirected to slot [741] located at 192.168.4.61:6379
"19"

相关文章:

Redis---集群环境准备

一、redis集群环境准备 1、部署Redis集群的目的: 多台服务器一起提供数据存储服务; 实现数据的分布式存储; 可以实现服务的高可用; 可用实现数据自动备份; 2、服务器IP地址及端口: 主机名 IP地…...

数据结构考研版——队列的配置问题

一、正常配置下的情况 队空状态 frontrear;入队操作 出队操作 队满状态 在正常配置下元素的个数&#xff08;rear>front&#xff09; 当rear<front 综上所述用一个表达式表示&#xff1a;(rear-frontmaxSize)%maxSize 二、非正常配置下的情况1 队空状态 入队操作…...

【SOAP-WebService系列】SOAP学习笔记

目录 1、SOAP是什么&#xff1f; 2、SOAP特性 3、SOAP消息组成 4、SOAP调用 5、SOAP和HTTP 1、SOAP是什么&#xff1f; SOAP(Simple Object Access Protocol&#xff0c;即简单对象访问协议) &#xff0c;是一个轻量级协议&#xff0c;用于在分散的分布式环境中使用XML在对…...

材料科学|名词解释终版!!!

晶体&#xff1a;组成物质的原子&#xff0c;分子或离子按照一定的周期性规则排列形成的固体。 非晶体&#xff1a;原子在三维空间的不规则排列&#xff0c;长程无序&#xff0c;各向同性。 晶体结构&#xff1a;原子&#xff0c;离子&#xff0c;原子团按照空间点阵而进行的…...

永久免费内网穿透不限制速度

市面上的免费内网穿透大都有格式各样的限制&#xff0c;什么限制流量啊&#xff0c;每个月要签到打卡啊&#xff0c;还有更改域名地址等&#xff0c;只有神卓互联内网穿透是永久免费没有限制的&#xff0c;白嫖也可以。 这篇文章分享了3个方案&#xff0c;按照性能和综合指标排…...

JAVA开发运维(云基础设备监控)

在大型的商用系统中&#xff0c;经常需要监控云设备的健康状态&#xff0c;性能情况&#xff0c;流量数据等。及时发现系统问题&#xff0c;及时修复&#xff0c;以确保系统的高可用。检查云资源的工作内容主要包括基础监控、主动拨测、用户体验、APM监控、指标体系、业务分析、…...

现在备考2023年5月软考网络工程师时间够吗?

距离2023年5月软考还有1个多月的时间&#xff0c;备考网络工程师的时间是够的&#xff0c;以下是一些备考方法&#xff1a; 1.了解考试内容 在你开始学习考试之前&#xff0c;了解考试的形式和内容是很重要的。这将帮助你把注意力集中在最有可能被测试的领域。你应该复习考试…...

webp怎么转换成png,4个方法教你快速处理

webp怎么转换成png&#xff1f;目前在一些比较大的图片素材网站下载的图片都是webp格式的。我们都知道webp格式图片&#xff0c;它在正常的图片浏览器中是无法打开的。 所以说我们要把webp图片转变成png格式&#xff0c;正常来说我们常用的图片处理软件也能进行格式转换&#x…...

程序员能干多久?程序员能干到多大年龄?

程序员可以工作多少年?大多数程序员认为程序员是吃青春饭的工作。编程只能干到30岁&#xff0c;最长可达35岁。我经常听到这样的话&#xff0c;都让人倍感压力。今天&#xff0c;我们来谈谈这个老话题...... 程序员能干多久&#xff1f; 根据国外的经验来说&#xff0c;干到…...

采购系统是如何管理供应商的?

随着数字化的推进&#xff0c;企业面临着越来越多的供应商管理问题。企业采购数字化转型已经成为大势所趋&#xff0c;对于采购数字化转型而言&#xff0c;供应商管理是重要一环。 供应商准入管理 在供应商准入阶段&#xff0c;企业需要从供应商资质、财务能力、信誉能力、管理…...

Linux学习笔记(2)--一些内核接口

1&#xff09;dump_stack dump_stack()是Linux内核中的一个函数&#xff0c;用于在内核中输出当前的函数调用栈。该函数会输出当前线程&#xff08;或进程&#xff09;的函数调用栈信息&#xff0c;以及相应的调用地址和虚拟内存地址等信息&#xff0c;一般用于诊断程序运行时…...

学习风`宇博客用户权限菜单模块

文章目录 用户-角色-菜单-资源 各表关系图菜单 和 路由菜单表及分析分析 /api/admin/user/menus接口MenuServiceImpl#listUserMenus接口返回示例及分析 前端代码分析menu.jsSideBar.vue 接口权限控制资源表 及 分析分析 WebSecurityConfig权限控制整体流程先说登录UserDetailsS…...

centos7.6部署ELK集群(一)之elasticsearch7.7.0集群部署

32.3. 部署es7.7.0 32.3.1. 下载es&#xff08;各节点都做&#xff09; wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.7.0-linux-x86_64.tar.gz 32.3.2. 解压至安装目录&#xff08;各节点都做&#xff09; tar -xvf elasticsearch-7.7.0-li…...

leetcode142. 环形链表 II

给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数…...

Linux: network: dummy 类型网络接口

文章目录 参考创建一个重要的用途是在container平台的应用dpdk相关的一个用途另一个用途ChatGPT的回复参考 https://tldp.org/LDP/nag/node72.html 这里举了一个例子,说为什么需要dummy类型的接口:就是一个类local loopback的一个接口,当应用需要给另一个本地的应用发送包的…...

java记录-lambda表达式、接口应用、方法引用

基本形式 (str)->{System.out.println(str) };调用作为参数的接口实例的方法 1、用一个类实现接口&#xff0c;然后使用该类实例调用方法 2、匿名内部类 3、在 接口&#xff08;不能是抽象类&#xff09; 有且只有一个抽象方法时&#xff0c;可以使用lamda表达式来重写这个…...

AI写作机器人-ai文章生成器在线

使用AI续写生成器&#xff0c;让内容创作事半功倍&#xff01; 随着人工智能技术的不断进步和应用&#xff0c;AI续写生成器的出现为内容创作带来了全新的革命。这种技术可以让你的写作事半功倍&#xff0c;让你轻松生成高质量的文章和内容。在这篇文章中&#xff0c;我们将介绍…...

HarmonyOS原子化服务卡片整改、下架、升级失败部分原因及处理办法

随着HarmonyOS应用体系相关规则、团队的不断发展和完善&#xff0c;早期上架运营的HarmonyOS原子化服务卡片&#xff0c;很多都收到了整改、下架的通知&#xff0c;主要集中在用户协议、隐私声明、服务卡片的设计规范性等细节方面的问题&#xff1b;需要进行优化调整升级才行。…...

博客系统测试报告【可上线】

目录 1、测试概述 1.1、项目名称 1.2、测试时间 1.3、编写目的 1.4、测试范围 2、测试计划 2.1、测试用例 2.1.1、注册/登录模块 2.1.2、个人中心模块 2.1.3、找回密码模块 2.1.4、博客主列表模块 2.1.5、个人博客列表模块 2.1.6、个人草稿列表模块 2.1.7、博客详…...

shell中的for循环和if判断

一.编写脚本for1.sh,使用for循环创建20账户&#xff0c;账户名前缀由用户从键盘输入&#xff0c;账户初始密码由用户输入&#xff0c;例如: test1、test2、test3、.....、 test10 1.创建脚本for1.sh [rootserver ~]# vim for1.sh 2.编写脚本for1.sh 3.执行脚本for1.sh [roo…...

【Unity入门】16.脚本引用组件

【Unity入门】脚本引用组件 大家好&#xff0c;我是Lampard~~ 欢迎来到Unity入门系列博客&#xff0c;所学知识来自B站阿发老师~感谢 &#xff08;一&#xff09;脚本引用普通组件 &#xff08;1&#xff09;点击控制音频播放 还记得我们的车载音乐AudioSource吗&#xff1f;…...

无线蓝牙耳机哪款音质好?目前音质最好的无线蓝牙耳机推荐

现如今&#xff0c;蓝牙耳机已经是一个非常实用且常见的数码产品了&#xff0c;不少人喜欢戴着蓝牙耳机听歌&#xff0c;玩游戏。一款音质好的蓝牙耳机不止能听个响&#xff0c;还能给人极致的听觉享受。在此&#xff0c;我来给大家分享几款目前音质最好的无线蓝牙耳机&#xf…...

【云原生进阶之容器】第六章容器网络6.6.1--Cilium网络方案概述

《云原生进阶之容器》专题索引: 第一章Docker核心技术1.1节——Docker综述第一章Docker核心技术1.2节——Linux容器LXC第一章Docker核心技术1.3节——命名空间Namespace第一章Docker核心技术1.4节——chroot技术第一章Docker核心技术1.5.1节——cgroup综述...

集中式版本控制工具 —— SVN

一、简介 1️⃣ SVN 是什么&#xff1f; 代码版本管理工具他能记住每次的修改查看所有的修改记录恢复到任何历史版本恢复已经删除的文件 2️⃣ SVN 与 Git 相比有什么优势&#xff1f; 使用简单、上手快目录级权限控制&#xff0c;企业安全必备子目录 Checkout&#xff0c;…...

【Dom获取属性操作】JavaScript 全栈体系(十)

Web APIs 第四章 操作元素属性 一、操作元素常用属性 还可以通过 JS 设置/修改标签元素属性&#xff0c;比如通过 src更换 图片最常见的属性比如&#xff1a; href、title、src 等语法&#xff1a; 对象.属性 值 <!DOCTYPE html> <html lang"en">&…...

C# 中的多态和虚方法,如何实现多态和使用虚方法?

在 C# 中&#xff0c;多态&#xff08;Polymorphism&#xff09;是面向对象编程的基本特性之一&#xff0c;它允许使用不同的对象和方法来执行同一操作。C# 中实现多态的方式主要是通过虚方法和抽象类。 虚方法是一种允许子类覆盖的方法&#xff0c;它的实现是在运行时动态确定…...

R软件使用一些常见的问题

以下均是个人经验摸索的解决办法&#xff0c;使用 Rstudio 执行命令&#xff0c;如有高手能更好地解决问题&#xff0c;还望指教&#xff0c;提前感谢。 问题一&#xff1a; 有些 package 因为编辑得比较早又没有继续更新&#xff0c;所以需要用旧版本的 R 才能正常运行&#…...

为什么需要uboot?

一、先看概念 bootROM&#xff1a;一种固化在芯片内部的只读存储器&#xff08;ROM&#xff09;&#xff0c;用于启动和初始化系统。BootROM 中通常包含了一些预先编写好的代码&#xff0c;用于完成系统启动前的基本初始化和配置&#xff0c;例如初始化时钟、GPIO控制器、中断…...

Qt布局实战:实现高效、美观的GUI应用程序

Qt布局实战&#xff1a;实现高效、美观的GUI应用程序 引言 (Introduction)1.1 Qt布局简介 (Brief introduction to Qt layouts)1.2 Qt布局的优势 (Advantages of Qt layouts) 2.布局类型 (Layout Types)2.1 水平布局 (QHBoxLayout)2.1.1 创建水平布局2.1.2 向水平布局中添加部件…...

推荐几款项目管理工具,提高你的团队协作效率

如何管理团队才能使团队发挥最大的价值&#xff0c;如果团队缺少协作&#xff0c;就会因为团队的内耗和冲突导致项目无法完成&#xff0c;如何提高团队协作效率呢&#xff1f;我们可以借助团队协作类的项目管理工具。 几个常见的项目管理工具&#xff1a; 1、进度猫 进度猫是…...