redis哨兵和集群部署手册
一、哨兵模式原理及作用
1.原理
哨兵(sentinel): 是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现 故障时,通过投票机制选择新的master并将所有slave连接到新的master。所以整个运行哨兵的集群的数量不得少于三个节点。(哨兵必须是奇数)
2.作用
(1)监控: 哨兵会不断地检测主节点和从节点是否运行正常。
(2)自动故障转移: 当主节点不能正常工作时,哨兵会开始自动故障转移操作,她会将失效主节点的其中一个从节点升级为新的主节点,并让其他从节点改为新的主节点。
(3)通知(提醒): 哨兵可以将故障转移的结果发送给客户端。
二、如何开启Redis数据库主从复制
1.实验环境
| 虚拟机版本 | VMware® Workstation 16 Pro 16.2.4 build-20089737 |
| 镜像版本 | CentOS-7-x86_64-DVD-1708.iso |
| Redis版本 | Redis-5.0.7 |
| 主服务器地址 | 192.168.254.106/24 |
| 从服务器1地址 | 192.168.254.107/24 |
| 从服务器2地址 | 192.168.254.108/24 |
2.实验要求
在主从复制的基础上通过修改配置文件完成redis哨兵和集群的配置
3.实验具体配置
systemctl stop firewalld
setenforce 0
vim /opt/redis-5.0.7/sentinel.conf
protected-mode no #17行,关闭保护模式

port 26379 #21行,Redis哨兵默认的监听端口
![]()
daemonize yes #26行,指定sentinel为后台启动
![]()
logfile "/var/log/sentinel.log" #36行,指定日志存放路径
![]()
dir "/var/lib/redis/6379" #65行,指定数据库存放路径
![]()
sentinel monitor mymaster 192.168.254.106 6379 2 #84行,修改指定该哨兵节点监控192.168.254.106:6379这个主节点,该主节点的名称是mymaster,最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移

sentinel down-after-milliseconds mymaster 30000 #113行,判定服务器down掉的时间周期,默认30000毫秒(30秒)

sentinel failover-timeout mymaster 180000 #146行,故障节点的最大超时时间为180000(180秒)
![]()
4.启动哨兵模式
先启master,再启slave
cd /opt/redis-5.0.7/
redis-sentinel sentinel.conf &
注意!先启动主服务器,再启动从服务器



5.故障模拟
查看redis-server进程号

杀死Master节点上redis-server的进程号

6.验证结果
tail -f /var/log/sentinel.log

redis-cli -p 26379 INFO Sentinel

2.Redis集群模式
1.集群的作用和数据分片
1.作用
(1)数据分区:数据分区(或称数据分片) 是集群最核心的功能。
集群将数据分散到多个节点,一方面突破了 Redis 单机内存大小的限制,存储容量大大增加;另一方面每个主节点都可以对外提供读服务和写服务,大大提高了集群的响应能力。
Redis 单机内存大小受限问题,在介绍持久化和主从复制时都有提及;例如,如果单机内存太大,bgsave 和 bgrewriteaof的 fork 操作可能导致主进程阻塞,主从环境下主机切换时可能导致从节点长时间无法提供服务,全量复制阶段主节点的复制缓冲区可能溢出。
(2)高可用:集群支持主从复制和主节点的自动故障转移(与哨兵类似) ;当任一节点发生故障时,集群仍然可以对外提供服务。
数据分片
(1)Redis集群引入了哈希槽的概念
(2)Redis集群有 16384 个哈希槽( 编号0-16383)
(3)集群的每个节点负责一部分哈希槽
(4)每个Key 通过 CRC16 校验后对16384取余来决定放置哪个哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。
<- - -以3个节点组成的集群为例- - ->
节点A 包含0到5460号哈希槽
节点B 包含5461到10922号哈希槽
节点C 包含10923到16383号哈希槽
环境准备
1.redis的集群一般需要**6个节点,3主3从**。 方便起见, 这里所有节点在3台服务器上模拟,每台主机上设置一主一备,以IP地址和端口进行区分:
(1)三个主节点端口号:6001,6002,6003
(2)对应的从节点端口号:7001,7002,7003
| 服务器类型 | 系统和IP地址 | 需要安装的组件 | 节点端口 |
| Master1 | CentOS7.4(64位) 192.168.254.106 | redis-5.0.7.tar.gz | 6001 |
| Slave 1 | CentOS7.4(64位) 192.168.254.106 | redis-5.0.7.tar.gz | 7001 |
| Master2 | CentOS7.4(64位) 192.168.254.107 | redis-5.0.7.tar.gz | 6002 |
| Slave 2 | CentOS7.4(64位) 192.168.254.107 | redis-5.0.7.tar.gz | 7002 |
| Master3 | CentOS7.4(64位) 192.168.254.108 | redis-5.0.7.tar.gz | 6003 |
| Slave 3 | CentOS7.4(64位) 192.168.254.108 | redis-5.0.7.tar.gz | 7003 |
3.创建目录复制配置文件到对应的节点上
(1)第一台主机:192.168.254.106
cd /etc/redis/
mkdir -p redis-cluster/redis6001
mkdir -p redis-cluster/redis7001
cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis6001/
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis6001/
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis7001/

(2)第二台主机:192.168.254.107
cd /etc/redis/
mkdir -p redis-cluster/redis6002
mkdir -p redis-cluster/redis7002
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis6002/
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis7002/

(3)第三台主机:192.168.254.108
cd /etc/redis/
mkdir -p redis-cluster/redis6003
mkdir -p redis-cluster/redis7003
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis6003/
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis7003/

4. 修改主配置文件,设置开启集群功能
先在Master1上配置,然后将配置文件复制到其他节点服务器
#Master1配置如下,其他5个服务器的配置文件类似,注意6个端口都要不一样。
cd /etc/redis/redis-cluster/redis6001
vim redis.conf
#bind 127.0.0.1 #69行,注释掉bind 项,默认监听所有网卡![]()
protected-mode no #88行,修改,关闭保护模式

port 6001 #92行,修改,redis监听端口
![]()
daemonize yes #136行,以独立进程启动

cluster-enabled yes #832行,取消注释,开启群集功能

cluster-config-file nodes-6379.conf #840行,取消注释,取消注释,群集名称文件设置

cluster-node-timeout 15000 #846行,取消注释群集超时时间设置
![]()
appendonly yes #699行,修改,开启AOF持久化

启动所有redis节点

启动群集
#前三台为Master,后三台为Slave,下面交互的时候需要输入yes 才可以创建。
redis-cli --cluster create 192.168.254.106:6001 192.168.254.107:6002 192.168.254.108:6003 192.168.254.106:7001 192.168.254.107:7002 192.168.254.108:7003 --cluster-replicas 1

#-replicas 1 表示每个主节点有1个从节点。
测试集群
#加-c参数,节点之间就可以互相跳转
redis-cli -h 192.168.156.10 -p 6001 -c
#查看节点的哈希槽编号范围
192.168.156.10:6001> cluster slots
192.168.156.10:6001> set hobby dance
#查看键的槽编号
192.168.156.110:6002> cluster keyslot hobby
总结
以上就是Redis高可用的两种方法,这两种方法均以Redis主从复制为基石。它们可以很好的应对web2.0纯动态网站类型的三高问题.
相关文章:
redis哨兵和集群部署手册
一、哨兵模式原理及作用 1.原理 哨兵(sentinel): 是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现 故障时,通过投票机制选择新的master并将所有slave连接到新的master。所以整个运行哨兵的集…...
ctfshow web入门 java 295 298-300
其他没啥好讲的,都是工具就通杀了 web295 漏洞地址 http://ip/S2-048/integration/saveGangster.action 这里我们可以看到他是解析了 尝试使用网上的payload %{(#dmognl.OgnlContextDEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess#dm):((#container#cont…...
SWIG包装器使用指南——(四)C#使用SWIG简介与实践
SWIG系列:http://t.csdn.cn/cIAcr 文章目录一、简介二、全局函数、变量、常量三、继承四、传递指针、引用、数组与值五、基本类型的指针与引用六、基本类型的数组七、基本类型的默认map规则八、常用的typemap方法九、代码插入十、实践10.1 如何映射Foo*&到ref F…...
HashTable, HashMap 和 ConcurrentHashMap
HashTable, HashMap 和 ConcurrentHashMap 都是 Java 集合框架中的类,用于存储和操作键值对。它们之间存在一些关键区别,如下所示: 1.同步性: HashTable:线程安全,所有的方法都是同步的(synchr…...
ToBeWritten之IoT 技战法
也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 转移发布平台通知:将不再在CSDN博客发布新文章,敬…...
基于ASP.NET开发的医院手术麻醉信息管理系统源码 项目源码
系统主要功能介绍: 门诊科室管理系统:手术快速申请、手术申请、手术审核 麻醉科管理系统:手术安排、术后处方、术后小结、PCS实施及管理记录、手术流程 手术护理系统:手术安排、安排临时手术、添加急诊手术、局麻手术护理、整体护…...
伪加密超具体破解办法,直击原理底层,细致演示!!!
前言: 由于我自己目前在misc和取证工作中,也遇到很多压缩包的问题,我个人非常喜欢做压缩包的题目,但也会遇到伪加密问题难以破解,全网ctf教程我都看完了,但是都觉得不够具体,所以我写一篇博客&…...
ChatGPT大规模封锁亚洲地区账号
我是卢松松,点点上面的头像,欢迎关注我哦! 在毫无征兆的情况下,从3月31日开始OpenAI大规模封号,而且主要集中在亚洲地区,特别是ip地址在台湾、日本、香港三地的,命中率目测40%。新注册的账号、…...
脂肪酸脂质Myristic acid PEG NHS,Myristic-acid PEG NHS ester,肉豆蔻酸PEG活性酯,具有优异疏水性
一、基础产品数据: 中文名:肉豆蔻酸PEG N-羟基琥珀酰亚胺,肉豆蔻酸PEG活性酯 英文名:Myristic acid PEG NHS,Myristic-acid PEG NHS ester,Myristic acid PEG SE 结构式(Structural)…...
MFC - CFormView类学习1
CFormView简介 MFC提供了一个名为CFormView的特殊视图类,我们称其为表单视图。表单视图是指用控件来输入和输出数据的视图,用户可以方便地在表单视图中使用控件。表单视图具有对话框和滚动视图的特性,它使程序看起来象是一个具有滚动条的对话…...
图像预处理方法
图像预处理 膨胀腐蚀概述 ⚫ 膨胀、腐蚀属于形态学的操作, 简单来说就是基于形状的一系列图像处理操作 ⚫ 膨胀腐蚀是基于高亮部分(白色)操作的, 膨胀是対高亮部分进行膨胀, 类似“领域扩张”, 腐蚀是高亮部分被腐蚀, 类似“领域被蚕食” ⚫ 膨胀腐蚀的应用和功能: 消除噪声…...
【蓝桥杯C/C++】专题六:动态规划
专题六:动态规划 目录专题六:动态规划导读什么是动态规划解决的问题解题步骤动态规划应该如何debug记忆化搜索斐波那契数题目代码题解爬楼梯题目代码题解使用最小花费爬楼梯题目代码题解不同路径题目题解dfsdp凑硬币题目题解dfsdp滑雪题目代码题解汉罗塔…...
图的定义和基本术语
图的定义和基本术语1.图的定义2.图的基本术语3.图的分类1.图的定义 图是由顶点和有穷非空集合和顶点边的集合吗,表示为G(V,E)。 G表示一个图,V是图G的顶点(数据元素)的集合,E是图G中顶点之间边的集合。在图中…...
041:cesium加载Blue Marble地图
第041个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中加载Blue Marble地图。Blue Marble是一个术语,用来描述星球漂浮在浩瀚太空中的形象。早在 1972 年,阿波罗 17 号任务的工作人员就首次捕捉到了地球的标志性卫星图像,并将其称为“Blue Marble”。从那时起,NA…...
【概念梳理】激活函数
一、引言 常用的激活函数如下: 1、Sigmoid函数 2、Tanh函数 3、ReLU函数 4、ELU函数 5、PReLU函数 6、Leaky ReLU函数 7、Maxout函数 8、Mish函数 二、激活函数的定义 多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,…...
【python】@property 和 @staticmethod
property 和 staticmethod 是 Python 中的两个装饰器,它们分别用于在类中创建属性或静态方法。它们的作用如下: property property:用于将类的一个方法作为属性访问。在 Python 中,使用“getter” 和“setter”方法来实现属性&a…...
Spring题集 - Spring AOP相关面试题总结
文章目录01. Spring AOP 的理解?02. Spring AOP 思想的代码实现03. Spring AOP 的相关术语有哪些?04. Spring AOP 基于注解的切面实现?05. Spring AOP 的通知有哪些类型?06. AOP 有哪些实现方式?07. Spring AOP 和 AspectJ AOP 有…...
分考场
[蓝桥杯 2017 国 C] 分考场(假题:最小色数) 题目描述 nnn 个人参加某项特殊考试。 为了公平,要求任何两个认识的人不能分在同一个考场。 求最少需要分几个考场才能满足条件。 输入格式 第一行,一个整数 n(1<n<100)n(1<n<100…...
BI技巧丨DAX Studio
DAX Studio DAX Studio,作为PowerBI外部插件使用率排名第一的插件,相信各位小伙伴或多或少都听说过,那么DAX Studio具体有哪些功能呢? PS:DAX Studio的下载链接,小伙伴们可以自行搜索,这里就不…...
Java 8常用时间 API
Date: 你不爱我了吗? 🚡本地时间时区相关格式化在Java 8中,Instant类用于表示时间戳,相当于旧的Date类;LocalDateTime类用于表示日期和时间,相当于旧的Calendar类;DateTimeFormatter类用于格式化日期和时间…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...
从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...
如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...
自然语言处理——文本分类
文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益(IG) 分类器设计贝叶斯理论:线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别, 有单标签多类别文本分类和多…...
macOS 终端智能代理检测
🧠 终端智能代理检测:自动判断是否需要设置代理访问 GitHub 在开发中,使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新,例如: fatal: unable to access https://github.com/ohmyzsh/oh…...
