温州做网站定制/日本域名注册网站
Redis集群
主从复制的场景无法吗满足主机单点故障时需要引入集群配置
一般数据库要处理的读请求远大于写请求 ,针对这种情况,我们优化数据库可以采用读写分离的策略。我们可以部 署一台主服务器主要用来处理写请求,部署多台从服务器 ,处理读请求。
基本原理
哨兵选举机制,如果过半数节点发现某个异常节点,共同决定更改异常节点的状态,如果该节点是主节点,对应的备节点自动顶替为主节点。
Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器。并能在被监视的主服务器下线时自动将下线主服务器下的某个从服务器升级为新的主服务器。
配置集群所需的环境
Redis集群至少需要三个节点,因为投票容错机制要求超过半数节点认为某个节点挂了该节点才是挂了,所以2个节点无法构成集群。
要保证集群的高可用,需要每个节点都有从节点,也就是备份节点,所以Redis集群至少需要6台服务器。
学习可以采用伪分布式集群,即一台服务器虚拟运行6个redis实例,修改端口号。
分布式集群搭建:
1.在安装目录下新建目录redis_cluster,文件夹下新建文件redis7001.conf
2. vim redis7001.conf
在不同的服务器 这个可以不要
cluster-config-file nodes-7006.conf 伪集群每个节点这个文件一样所以需要加这个
引入的配置文件为安装目录下的 redis.conf 文件复制过来
cp usr/local/bin/redis.conf /usr/local/bin/redis_cluster
include /usr/local/bin/redis_cluster/redis.conf #引入配置文件
port 7001 #端口设置
pidfile "/var/run/redis_7001.pid" #存放进程ID防止启动多个进程副本
dbfilename "dump_7001.rdb" #持久化文件名称
dir "/usr/local/bin/redis_cluster" #持久化保存位置
logfile "/usr/local/bin/redis_cluster/redis_err_7001.log"
cluster-enabled yes #开启集群
cluster-config-file nodes-7001.conf #节点名称
cluster-node-timeout 15000 #节点过期时间
集群一般不设置密码
3.后台启动,查看启动是否正常
4.关闭 建议使用 shutdown 不要使用 kill杀死进程
一台虚拟机多个节点需要 -h 指定 IP
5.完整克隆第一台虚拟机五次(关机后在进行克隆)
6.启动六台虚拟机并修改 IP 与 .conf
/etc/sysconfig/network-scripts/ifcfg-ens32(这个数值看个人网卡)
/etc/sysconfig/network-scripts/ifcfg-ens+tab(自动补全)
vim /usr/local/bin/redis_cluster/redis7001.conf(文件名不用更改即可)
service network restart 修改网络配置后重启网络服务
(1)
vim /etc/sysconfig/network-scripts/ifcfg-ens32
克隆的五台虚拟机需要删掉此行 UUID
(2)
按esc通过vim 底行指令快速修改
vim /usr/local/bin/redis_cluster/redis7001.conf
cluster-node-timeout 15000 1会被修改
:%s/7001/7002/g 不会修改 15000
五台克隆的虚拟机均进行以上操作
保证:(1)不在同一个ip
(2)不在同一个端口启动
如图:
ip redis运行端口
192.168.253.16 7001
192.168.253.21 7002
192.168.253.22 7003
192.168.253.23 7004
192.168.253.24 7005
192.168.253.25 7006
7.在6个虚拟机分别启动redis
因为没有更改文件名称,可以直接去每个虚拟机粘贴执行即可
/usr/local/bin/redis-server /usr/local/bin/redis_cluster/redis7001.conf
ps -ef | grep redis 查看进程
8.创建redis集群
/usr/local/bin/redis-cli --cluster create 192.168.253.16:7001 192.168.253.21:7002 192.168.253.22:7003 192.168.253.23:7004 192.168.253.24:7005 192.168.253.25:7006 --cluster-replicas 1
cluster-replicas 1
1其实代表的是一个比例,就是主节点数/从节点数的比例。会按照命令中IP:PORT的顺序,先是3个主节点,然后是3个从节点。
分配原则尽量保证每个主数据库运行在不同的IP地址,每个从库和主库不在一个IP地址上。
这里输入 yes 如下图创建集群成功
切记 先开启服务端在连接客户端
9.使用cli连接redis集群
使用客户端链接集群 必须使用 -c 连接
/usr/local/bin/redis-cli -c -h 192.168.253.21 -p 7002
10.查看集群的节点的信息 :cluster nodes
11.检查集群的状态
/usr/local/bin/redis-cli --cluster check 192.168.253.21:7002
12.添加主节点
新建虚拟机,配置 ip 与 .conf文件,与前六台配置一样。
例如 IP 192.168.253.26 redis服务端口 7007
启动服务后
/usr/local/bin/redis-cli --cluster add-node 192.168.253.26:7007 192.168.253.21:7002
前面的IP加端口号是要添加的redis节点,后面的IP和端口号是集群中的任意一个节点。
13.配置从节点
新建虚拟机 配置 IP 与 端口
例如 IP 192.168.253.27 redis服务端口 7008
刚才添加的主节点还没有分配槽,所以无法使用
添加从节点之前需要设置从节点并启动节点
--cluster-master-id 为从节点对应主节点的id
列: 添加刚才主节点的从节点
/usr/local/bin/redis-cli --cluster add-node 192.168.253.27:7008 192.168.253.26:7007 --cluster-slave --cluster-master-id 刚才添加的主节点的id
14.重新分配slots
添加的主节点还不能使用,因为没有分配slots,
slot的概念。slot对于Redis集群而言,就是一个存放数据的地方,就是一个槽。对于每一个Master而言,会存在一个slot的范围,而Slave则没有。在Redis集群中,依然是Master可以读、写,而Slave只读
/usr/local/bin/redis-cli --cluster reshard 192.168.253.21:7002(要移动插槽的IP)
然后再执行后的输入框 输入 接收插槽的IP的id
最后输入 all 或 done
all 代表从所有有数据据节点进行迁移到目的节点,也可以选择 目标节点id回车,最后以done进行结束
done 代表结束
15.删除主节点
--cluster del-node 节点id
删除主节点需要先使用 reshard 把主节点的slots移到其他节点才可以
/usr/local/bin/redis-cli --cluster del-node 节点IP:端口 节点id(要删除节点的slots要移动到的ip的id)
16.删除从节点
--cluster del-node 集群 节点id(要删除的从节点id)
/usr/java/redis/bin/redis-cli --cluster del-node 节点ip:端口 节点id(要删除的从节点id)
17.故障检测
验证集群是否生效:
关闭一个主节点查看对应的备用节点是不是能够顶替主节点成为主节点
存/取数据的时候查看对应的端口号
(关闭主节点以后需要耐心等待一会儿 让他重新分配一下空间)
关闭的时候一定要使用shutdown命令不要使用kill命令
/usr/java/redis/bin/redis-cli -h 192.168.253.21 -p 7002 shutdown
关闭之后查看7006是否成为了主节点
7006变成了主节点 证明集群配置成功
下图为正常的
10-20秒左右查看集群状态发现 7006 已经成为主机,集群配置成功
主节点恢复后,主从关系会如何?主节点回来变成从机。
如果所有某一段插槽的主从节点都宕掉,redis服务是否还能继续?
如果某一段插槽的主从都挂掉,而cluster-require-full-coverage 为yes ,那么 ,整个集群都挂掉
如果某一段插槽的主从都挂掉,而cluster-require-full-coverage 为no ,那么,该插槽数据全都不能使用,也无法存储。
redis.conf中的参数 cluster-require-full-coverage
什么是slots
[OK] All 16384 slots covered.
一个 Redis 集群包含 16384 个插槽(hash slot), 数据库中的每个键都属于这 16384 个插槽的其中一个,
集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽, 其中 CRC16(key) 语句用于计算键 key 的 CRC16 校验和 。
name 2 [0-5460]
集群中的每个节点负责处理一部分插槽。 举个例子, 如果一个集群可以有主节点, 其中:
节点 A 负责处理 0 号至 5460 号插槽。
节点 B 负责处理 5461 号至 10922 号插槽。
节点 C 负责处理 10923 号至 16383 号插槽。
在集群中录入值
在redis-cli每次录入、查询键值,redis都会计算出该key应该送往的插槽,如果不是该客户端对应服务器的插槽,redis会报错,并告知应前往的redis实例地址和端口。
redis-cli客户端提供了 –c 参数实现自动重定向。
如 redis-cli -c –p 7000登入后,再录入、查询键值对可以自动重定向。
不在一个slot下的键值,是不能使用mget,mset等多键操作。
可以通过{}来定义组的概念,从而使key中{}内相同内容的键值对放到一个slot中去。(按组分配插槽)
Redis 集群优点
实现扩容
分摊压力
无中心配置相对简单
Redis 集群的不足
多键操作是不被支持的
多键的Redis事务是不被支持的
由于集群方案出现较晚,很多公司已经采用了其他的集群方案,而代理或者客户端分片的方案想要迁移至redis cluster,需要整体迁移而不是逐步过渡,复杂度较大。
相关文章:

Redis快速上手篇七(集群-六台虚拟机)
Redis集群 主从复制的场景无法吗满足主机单点故障时需要引入集群配置 一般数据库要处理的读请求远大于写请求 ,针对这种情况,我们优化数据库可以采用读写分离的策略。我们可以部 署一台主服务器主要用来处理写请求,部署多台从服务器 &#…...

LeetCode 301. 删除无效的括号【字符串,回溯或BFS】困难
本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…...

面试经典159题——Day25
文章目录 一、题目二、题解 一、题目 125. Valid Palindrome A phrase is a palindrome if, after converting all uppercase letters into lowercase letters and removing all non-alphanumeric characters, it reads the same forward and backward. Alphanumeric charact…...

C# OpenCvSharp DNN 部署L2CS-Net人脸朝向估计
效果 项目 代码 using OpenCvSharp; using OpenCvSharp.Dnn; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D; using System.Linq; using System.Text; using System.Windows.Forms;namespace OpenCvSharp_DNN_Demo …...

Windows环境下MosQuitto服务器搭建,安装mqtt服务端软件
1、下载、安装MosQuitto服务器 下载地址:http://mosquitto.org/files/binary/ 根据平台选择相应的代码下载。 安装完成后,安装文件夹下部分文件的功能...

web前端JS基础-----制作进度条
1,参考代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body><progress id"pro" max"100" value"0"></progress><scrip…...

Linux命令解压多个tar.gz包
命令行解压单个tar.gz包: tar zxvf package.tar.gz 命令行解压多个tar.gz包: for f in *.tar.gz; do tar zxvf "$f"; done 这个命令会循环遍历当前目录下的所有tar.gz包,然后逐个解压。 注:如果想要解压到指定的目…...

Java基于SpringBoot+Vue的网上图书商城管理系统(附源码,教程)
文章目录 1. 简介2 技术栈3 系统功能4系统设计4.1数据库设计 5系统详细设计5.1系统功能模块5.1系统功能模块5.2管理员功能模块 源码下载地址 1. 简介 本次设计任务是要设计一个网上图书商城,通过这个系统能够满足网上图书商城的管理功能。系统的主要功能包括首页、…...

Visual Studio Code的下载与安装
Visual Studio Code(简称 VS Code)是由 Microsoft 开发的免费、开源的文本编辑器,适用于多种操作系统,包括 Windows、macOS 和 Linux。它的设计目标是成为一款轻量级、高效的代码编辑工具,同时提供丰富的扩展和功能&am…...

23种设计模式在SpringCloud源码里的应用
单例模式(Singleton):Spring 中的 Bean 默认都是单例模式,保证在整个应用中只有一个实例。 工厂方法模式(Factory Method):Spring 中的 BeanFactory 和 ApplicationContext 都实现了工厂方法模…...

几个精致的Linux命令
说到Linux命令,一些基础的简单的单个命令我就不说了,咱今天来点复杂的组合命令,比较长,但觉对很酷: 打印业务服务异常日志: tail -f business-service.log | grep -i exception --color 或者 grep --…...

CoDeSys系列-3、Windows运行时软PLC主站和p-net从站IO设备组网测试
CoDeSys系列-3、Windows运行时软PLC主站和p-net从站IO设备组网测试 文章目录 CoDeSys系列-3、Windows运行时软PLC主站和p-net从站IO设备组网测试一、前言二、Windows运行时软plc配置编程1、安装Windows下的运行时扩展包(非必要)2、创建项目2.1、创建标准…...

vscode下ssh免密登录linux服务器
vscode使用ssh免密登录linux 1、安装SSH插件2、生成密钥3、linux安装ssh服务4、linux下配置公钥5、vscode远程登录 注:测试环境为window10Ubuntu1804/Ubuntu2204 1、安装SSH插件 扩展->搜索SSH->点击install进行安装,如下图所示: 2、…...

基于jquery+html开发的json格式校验工具
json简介 JSON是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族…...

【面试经典150 | 栈】最小栈
文章目录 Tag题目来源题目解读解题思路方法一:辅助栈方法二:一个栈方法三:栈中存放差值 其他语言python3 写在最后 Tag 【设计类】【栈】 题目来源 155. 最小栈 题目解读 本题是一个设计类的题目,设计一个最小栈类 MinStack() …...

Linux网络基础2 -- 应用层相关
一、协议 引例:编写一个网络版的计算器 1.1 约定方案:“序列化” 和 “反序列化” 方案一:客户端发送形如“11”的字符串,再去解析其中的数字和计算字符,并且设限(如数字和运算符之间没有空格; 运算符只…...

【Python机器学习】零基础掌握SkewedChi2Sampler内核近似特征
有没有遇到这样的困扰:即使在拥有大量数据的条件下,传统的机器学习模型表现依然不佳?这时,数据预处理和特征工程成了解决问题的关键步骤。那么,有没有一种算法能够优化特征,提升模型性能呢? 假设一个在线商城希望通过用户行为(比如点击、购买等)来预测用户是否会成为…...

Unity Meta Quest 一体机开发(三):Oculus Integration 基本原理、概念与结构+玩家角色基本配置
文章目录 📕教程说明📕输入数据📕Oculus Integration 处理手部数据的推荐流程📕VR 中交互的基本概念📕Oculus Integration 中的交互流程📕配置一个基本的玩家物体⭐OVRCameraRig⭐OVRInteraction⭐OVRHandP…...

excel 拼接字符 单元格
需要将单元格作为字符串拼接,使用 & 符号,拼接逗号,分号,冒号,横杠等,需要用英文双引号。...

HarmonyOS 快速入门TypeScript
1.什么是TypeScript,它和JavaScript,ArkTs有什么区别 ArkTS是HarmonyOS优选的主力应用开发语言。它在TypeScript(简称TS)的基础上,匹配ArkUI框架,扩展了声明式UI、状态管理等相应的能力,让开发…...

ChatGPT扩展系列之ChatExcel
文章目录 ChatGPT扩展系列之ChatExcel对某一列的文字进行处理对数据进行排序对数据进行计算微软官方又推出Excel AI插件ChatGPT扩展系列之ChatExcel 自从ChatGPT很空出世之后,很多基于ChatGPT的应用便如雨后春笋般应用而生,这些应用的底层本质就是利用了ChatGPT对自然语言的…...

AM@微元法和定积分的应用@平面图形面积@立体体积@曲线弧长
文章目录 abstract微元法平面图形的面积极坐标上图形面积曲边扇形面积 平行截面面积为已知的立体体积旋转体的体积绕 x x x轴旋转绕 y y y轴旋转另一类型旋转体积 曲线弧长参数方程表示的曲线弧长直角坐标方程表示的曲线弧长极坐标方程表示得曲线弧长小结 abstract 微元法定积…...

SparkStreaming【实例演示】
前言 1、环境准备 启动Zookeeper和Kafka集群导入依赖: <dependency><groupId>org.apache.spark</groupId><artifactId>spark-core_2.12</artifactId><version>3.2.4</version></dependency><dependency>&l…...

提高抖音小店用户黏性和商品销量的有效策略
抖音小店是抖音平台上的电商模式,用户可以在抖音上购买各类商品。要提高用户黏性和商品销量,四川不若与众帮你整理了需要注意以下几个方面。 首先,提供优质的商品和服务。在抖音小店中,用户会通过观看商品展示视频和用户评价来选…...

提高公众意识:共同防范AI诈骗
随着人工智能技术的飞速发展,AI诈骗成为了一个不容忽视的威胁,影响到我们的社交、金融和个人隐私安全。在这个数字时代,提高公众对AI诈骗的意识至关重要,以下是一些关于如何提高公众意识以防范AI诈骗的观点: 认知AI诈…...

MES的物料管理
----物料管理的定义和作用---- 物料管理在制造执行系统(MES)中扮演着至关重要的角色。通过有效的物料管理,企业可以实现生产过程的高效性、准确性和可靠性,从而提高生产效率并降低成本。 一、物料管理的定义 物料管理是指对生产过…...

正点原子嵌入式linux驱动开发——Linux 多点电容触摸屏
随着智能手机的发展,电容触摸屏也得到了飞速的发展。相比电阻触摸屏,电容触摸屏有很多的优势,比如支持多点触控、不需要按压,只需要轻轻触摸就有反应。ALIENTEK的三款RGB LCD屏幕都支持多点电容触摸,本章就以ATK7016这…...

Git基础命令实践
文章目录 简介git的安装配置git的安装git的配置 git使用的基本流程创建版本库时光机穿梭版本回退工作区和暂存区管理修改撤销修改删除文件 远程仓库添加远程库从远程库克隆 总结 简介 本文主要记录了我在学习git操作的过程,以及如何使用GitHub。建议先参考廖雪峰的…...

微信小程序设计之页面文件pages
一、新建一个项目 首先,下载微信小程序开发工具,具体下载方式可以参考文章《微信小程序开发者工具下载》。 然后,注册小程序账号,具体注册方法,可以参考文章《微信小程序个人账号申请和配置详细教程》。 在得到了测…...

VScode 自定义主题各参数解析
参考链接: vscode自定义颜色时各个参数的作用(史上最全)vscode编辑器,自己喜欢的颜色 由于 VScode 搜索高亮是在是太不起眼了,根本看不到此时选中到哪个搜索匹配了,所以对此进行了配置,具体想增加更多可配置项可参考…...