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

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地址需要安装的组件节点端口
Master1CentOS7.4(64位) 192.168.254.106redis-5.0.7.tar.gz6001
Slave 1CentOS7.4(64位) 192.168.254.106redis-5.0.7.tar.gz7001
Master2CentOS7.4(64位) 192.168.254.107redis-5.0.7.tar.gz6002
Slave 2CentOS7.4(64位) 192.168.254.107redis-5.0.7.tar.gz7002
Master3CentOS7.4(64位) 192.168.254.108redis-5.0.7.tar.gz6003
Slave 3CentOS7.4(64位) 192.168.254.108redis-5.0.7.tar.gz7003

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.原理 哨兵&#xff08;sentinel&#xff09;&#xff1a; 是一个分布式系统&#xff0c;用于对主从结构中的每台服务器进行监控&#xff0c;当出现 故障时&#xff0c;通过投票机制选择新的master并将所有slave连接到新的master。所以整个运行哨兵的集…...

ctfshow web入门 java 295 298-300

其他没啥好讲的&#xff0c;都是工具就通杀了 web295 漏洞地址 http://ip/S2-048/integration/saveGangster.action 这里我们可以看到他是解析了 尝试使用网上的payload %{(#dmognl.OgnlContextDEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess#dm):((#container#cont…...

SWIG包装器使用指南——(四)C#使用SWIG简介与实践

SWIG系列&#xff1a;http://t.csdn.cn/cIAcr 文章目录一、简介二、全局函数、变量、常量三、继承四、传递指针、引用、数组与值五、基本类型的指针与引用六、基本类型的数组七、基本类型的默认map规则八、常用的typemap方法九、代码插入十、实践10.1 如何映射Foo*&到ref F…...

HashTable, HashMap 和 ConcurrentHashMap

HashTable, HashMap 和 ConcurrentHashMap 都是 Java 集合框架中的类&#xff0c;用于存储和操作键值对。它们之间存在一些关键区别&#xff0c;如下所示&#xff1a; 1.同步性&#xff1a; HashTable&#xff1a;线程安全&#xff0c;所有的方法都是同步的&#xff08;synchr…...

ToBeWritten之IoT 技战法

也许每个人出生的时候都以为这世界都是为他一个人而存在的&#xff0c;当他发现自己错的时候&#xff0c;他便开始长大 少走了弯路&#xff0c;也就错过了风景&#xff0c;无论如何&#xff0c;感谢经历 转移发布平台通知&#xff1a;将不再在CSDN博客发布新文章&#xff0c;敬…...

基于ASP.NET开发的医院手术麻醉信息管理系统源码 项目源码

系统主要功能介绍&#xff1a; 门诊科室管理系统&#xff1a;手术快速申请、手术申请、手术审核 麻醉科管理系统&#xff1a;手术安排、术后处方、术后小结、PCS实施及管理记录、手术流程 手术护理系统&#xff1a;手术安排、安排临时手术、添加急诊手术、局麻手术护理、整体护…...

伪加密超具体破解办法,直击原理底层,细致演示!!!

前言&#xff1a; 由于我自己目前在misc和取证工作中&#xff0c;也遇到很多压缩包的问题&#xff0c;我个人非常喜欢做压缩包的题目&#xff0c;但也会遇到伪加密问题难以破解&#xff0c;全网ctf教程我都看完了&#xff0c;但是都觉得不够具体&#xff0c;所以我写一篇博客&…...

ChatGPT大规模封锁亚洲地区账号

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 在毫无征兆的情况下&#xff0c;从3月31日开始OpenAI大规模封号&#xff0c;而且主要集中在亚洲地区&#xff0c;特别是ip地址在台湾、日本、香港三地的&#xff0c;命中率目测40%。新注册的账号、…...

脂肪酸脂质Myristic acid PEG NHS,Myristic-acid PEG NHS ester,肉豆蔻酸PEG活性酯,具有优异疏水性

一、基础产品数据&#xff1a; 中文名&#xff1a;肉豆蔻酸PEG N-羟基琥珀酰亚胺&#xff0c;肉豆蔻酸PEG活性酯 英文名&#xff1a;Myristic acid PEG NHS&#xff0c;Myristic-acid PEG NHS ester&#xff0c;Myristic acid PEG SE 结构式&#xff08;Structural&#xff09;…...

MFC - CFormView类学习1

CFormView简介 MFC提供了一个名为CFormView的特殊视图类&#xff0c;我们称其为表单视图。表单视图是指用控件来输入和输出数据的视图&#xff0c;用户可以方便地在表单视图中使用控件。表单视图具有对话框和滚动视图的特性&#xff0c;它使程序看起来象是一个具有滚动条的对话…...

图像预处理方法

图像预处理 膨胀腐蚀概述 ⚫ 膨胀、腐蚀属于形态学的操作, 简单来说就是基于形状的一系列图像处理操作 ⚫ 膨胀腐蚀是基于高亮部分(白色)操作的, 膨胀是対高亮部分进行膨胀, 类似“领域扩张”, 腐蚀是高亮部分被腐蚀, 类似“领域被蚕食” ⚫ 膨胀腐蚀的应用和功能: 消除噪声…...

【蓝桥杯C/C++】专题六:动态规划

专题六&#xff1a;动态规划 目录专题六&#xff1a;动态规划导读什么是动态规划解决的问题解题步骤动态规划应该如何debug记忆化搜索斐波那契数题目代码题解爬楼梯题目代码题解使用最小花费爬楼梯题目代码题解不同路径题目题解dfsdp凑硬币题目题解dfsdp滑雪题目代码题解汉罗塔…...

图的定义和基本术语

图的定义和基本术语1.图的定义2.图的基本术语3.图的分类1.图的定义 图是由顶点和有穷非空集合和顶点边的集合吗&#xff0c;表示为G(V,E)。 G表示一个图&#xff0c;V是图G的顶点&#xff08;数据元素&#xff09;的集合&#xff0c;E是图G中顶点之间边的集合。在图中&#xf…...

041:cesium加载Blue Marble地图

第041个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中加载Blue Marble地图。Blue Marble是一个术语,用来描述星球漂浮在浩瀚太空中的形象。早在 1972 年,阿波罗 17 号任务的工作人员就首次捕捉到了地球的标志性卫星图像,并将其称为“Blue Marble”。从那时起,NA…...

【概念梳理】激活函数

一、引言 常用的激活函数如下&#xff1a; 1、Sigmoid函数 2、Tanh函数 3、ReLU函数 4、ELU函数 5、PReLU函数 6、Leaky ReLU函数 7、Maxout函数 8、Mish函数 二、激活函数的定义 多层神经网络中&#xff0c;上层节点的输出和下层节点的输入之间具有一个函数关系&#xff0c;…...

【python】@property 和 @staticmethod

property 和 staticmethod 是 Python 中的两个装饰器&#xff0c;它们分别用于在类中创建属性或静态方法。它们的作用如下&#xff1a; property property&#xff1a;用于将类的一个方法作为属性访问。在 Python 中&#xff0c;使用“getter” 和“setter”方法来实现属性&a…...

Spring题集 - Spring AOP相关面试题总结

文章目录01. Spring AOP 的理解?02. Spring AOP 思想的代码实现03. Spring AOP 的相关术语有哪些&#xff1f;04. Spring AOP 基于注解的切面实现&#xff1f;05. Spring AOP 的通知有哪些类型&#xff1f;06. AOP 有哪些实现方式&#xff1f;07. Spring AOP 和 AspectJ AOP 有…...

分考场

[蓝桥杯 2017 国 C] 分考场(假题&#xff1a;最小色数) 题目描述 nnn 个人参加某项特殊考试。 为了公平&#xff0c;要求任何两个认识的人不能分在同一个考场。 求最少需要分几个考场才能满足条件。 输入格式 第一行&#xff0c;一个整数 n(1<n<100)n(1<n<100…...

BI技巧丨DAX Studio

DAX Studio DAX Studio&#xff0c;作为PowerBI外部插件使用率排名第一的插件&#xff0c;相信各位小伙伴或多或少都听说过&#xff0c;那么DAX Studio具体有哪些功能呢&#xff1f; PS&#xff1a;DAX Studio的下载链接&#xff0c;小伙伴们可以自行搜索&#xff0c;这里就不…...

Java 8常用时间 API

Date: 你不爱我了吗? &#x1f6a1;本地时间时区相关格式化在Java 8中&#xff0c;Instant类用于表示时间戳&#xff0c;相当于旧的Date类&#xff1b;LocalDateTime类用于表示日期和时间&#xff0c;相当于旧的Calendar类&#xff1b;DateTimeFormatter类用于格式化日期和时间…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...