redis主从复制、哨兵模式、集群
文章目录
- redis主从复制
- 主从复制的配置
- **安装Redis**
- 配置主服务器
- 配置从服务器
- 验证主从效果
- 哨兵模式
- 哨兵的工作机制
- 哨兵模式的搭建
- 启动哨兵
- 集群
- 分布式集群的搭建
redis主从复制
Redis主从复制(Redis replication)是Redis提供的一种数据备份和故障转移机制。通过主从复制,可以将一个Redis服务器(主节点)的数据复制到一个或多个Redis服务器(从节点)。这样做的好处包括:
- 数据冗余:从节点作为主节点的数据副本,提供了数据冗余,可以在主节点发生故障时快速恢复数据。
- 负载均衡:可以将读操作分散到多个从节点上,减轻主节点的压力,提高整体性能。
- 故障转移:在主节点不可用时,可以自动或手动将从节点升级为新的主节点,继续提供服务。
主从复制的配置
Master节点:192.168.20.10
Slave1节点:192.168.20.20
Slave2节点:192.168.20.30
安装Redis
systemctl stop firewalld.service
setenforce 0
mkdir /usr/local/redis/{conf,log,data}
cd /opt
yum install -y gcc gcc-c++ make
wget /opt http://download.redis.io/releases/redis-5.0.7.tar.gz
tar xfv redis-5.0.7.tar.gz
cd /opt/redis-5.0.7/
make
make install
cd utils/
./install_server.sh
安装完成
配置主服务器
修改主服务器文件
/etc/redis/6379.conf
bind 0.0.0.0 #70行,修改监听地址为0.0.0.0
daemonize yes #137行,开启守护进程
logfile /var/log/redis_6379.log #172行,指定日志文件目录
dir /var/lib/redis/6379 #264行,指定工作目录
appendonly yes #700行,开启AOF持久化功能
一般只用修改bind 0.0.0.0和appendonly yes ,其他保持默认
/etc/init.d/redis_6379 restart
重启服务
配置从服务器
修改从服务器配置文件
/etc/redis/6379.conf
bind 0.0.0.0 #70行,修改监听地址为0.0.0.0
daemonize yes #137行,开启守护进程
logfile /var/log/redis_6379.log #172行,指定日志文件目录
dir /var/lib/redis/6379 #264行,指定工作目录
replicaof 192.168.20.10 6379 #288行,指定要同步的Master节点IP和端口
appendonly yes #700行,开启AOF持久化功能
验证主从效果
从服务器重启服务
/etc/init.d/redis_6379
主服务器
tail -f /var/log/redis_6379.log
或者所有服务器使用
redis-cli info replication
可以看到主从复制成功
哨兵模式
Redis哨兵(Redis Sentinel)是一种高可用解决方案,用于监控Redis主服务器和从服务器,并在主服务器不可用时自动将其中一个从服务器提升为新的主服务器。哨兵系统由一组哨兵进程组成,它们相互通信以保持一致性,并监视主服务器和从服务器的状态。
- 监控主从状态:哨兵进程定期与主服务器和从服务器通信,以确认它们是否正常运行。
- 自动故障转移:如果主服务器不可用,哨兵会自动将一个从服务器提升为新的主服务器,并通知其他从服务器连接到新的主服务器。
- 配置提供者:哨兵进程还提供配置信息,例如主服务器地址、从服务器地址等,以便客户端可以连接到新的主服务器。
- 手动故障转移:哨兵允许管理员手动指定一个从服务器作为新的主服务器。
- 消息通知:哨兵可以配置为在发生故障时通过各种方式(如发送邮件、短信等)通知管理员。
- 数据持久化:哨兵可以与Redis的持久化功能一起使用,以实现数据的高可用性和持久性。
为了实现哨兵模式,需要启动至少三个哨兵进程,并确保它们能够相互通信。
哨兵的工作机制
在Redis哨兵模式中,故障转移(Failover)是指当主服务器不可用时,哨兵进程能够自动将一个从服务器提升为新的主服务器,以保持Redis集群的可用性。以下是Redis哨兵模式中故障转移的步骤:
- 监控:哨兵进程不断地监控主服务器和从服务器的运行状态,确保它们都处于正常工作状态。
- 心跳检测:哨兵之间以及哨兵与Redis服务器之间通过心跳检测来确认对方的存活状态。
- 发现故障:如果主服务器没有在指定的时间内响应心跳,或者主服务器在指定时间内没有与从服务器同步数据,哨兵会认为主服务器发生了故障。
- 投票选举:哨兵之间通过通信,对故障的主服务器进行投票,确定哪个从服务器将被提升为新的主服务器。
- 故障转移:一旦从服务器被选定,哨兵会向其他从服务器发送命令,将它们指向新的主服务器。
- 配置更新:客户端和其他哨兵会更新它们的配置,以指向新的主服务器。
- 同步数据:新的主服务器开始与从服务器同步数据,确保它们之间的数据一致性。
- 完成故障转移:当新的主服务器与所有从服务器都同步完成后,故障转移完成,Redis集群恢复正常工作。
在整个故障转移过程中,Redis哨兵会确保数据的一致性和集群的可用性。故障转移通常是自动完成的,但在某些情况下,管理员也可以手动干预,例如在主服务器发生故障时手动选择一个从服务器作为新的主服务器。
Redis哨兵的故障转移机制是一个高度可靠和自动化的过程,它确保了Redis集群即使在主服务器发生故障的情况下也能继续提供服务,从而保证了系统的稳定性和高可用性。
哨兵模式的搭建
搭建哨兵模式必须先搭建主从模式
1关闭Redis
/etc/init.d/redis_6379
2 修改哨兵模式配置文件
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.20.10 6379 2 #84行,修改
设置完成
启动哨兵
cd /opt/redis-5.0.7/
redis-sentinel sentinel.conf &
查看哨兵信息
redis-cli -p 26379 info Sentinel
故障模拟
ps -ef | grep redis
关闭主服务器的redis服务
/etc/init.d/redis_6379 stop
成功
集群
Redis集群是一种分布式Redis实现,它允许您将多个Redis实例组织在一起,以提供跨多个节点的数据一致性和高可用性。Redis集群的设计允许它自动在多个Redis实例之间分配数据,并且能够自动处理节点的故障。
以下是Redis集群的一些关键特点:
- 自动故障转移:当集群中的一个节点出现故障时,Redis集群能够自动将故障节点的数据转移到其他健康的节点上,以保持服务的高可用性。
- 数据分区:Redis集群将数据自动分布在不同的节点上,每个节点负责一部分数据的存储。
- 数据一致性:Redis集群提供了强一致性的数据存储,确保所有节点的数据都是最新的。
- 自动节点添加和删除:当有新的节点加入或离开集群时,Redis集群能够自动调整数据分布,以保持集群的可用性和一致性。
- 负载均衡:Redis集群能够自动将客户端请求分配到不同的节点上,以实现负载均衡。
- 数据分片:Redis集群使用虚拟节点(共16384个)(也称为哈希槽)来将数据平均分布在多个节点上。每个虚拟节点负责一部分数据的存储。 (分布式存储)
当一个节点丢失时,会导致缺少部分哈希槽而无法正常工作。
- 故障转移:如果一个节点出现故障,集群会自动将该节点的数据转移到其他健康的节点上。
分布式集群的搭建
redis集群一般来说需要六个节点,但这里为了方便我使用三个虚拟机分别设置不同端口来区分结点每台虚拟机一主一从
主192.168.20.10:4320
192.168.20.20:4320
192.168.20.30:4320
从192.168.20.10:4321
192.168.20.20:4321
192.168.20.30:4321
在etc/redis目录下创建redis-cluster/redis4320和redis4321并且考入配置文件
cd /etc/redis/
mkdir -p redis-cluster/redis432{0..1}
cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis4320
cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis4321
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis4320
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis4321
开启群集功能:
修改各个Redis配置文件,以主为例
cd /etc/redis/redis-cluster/redis4320
vim redis.conf
#bind 127.0.0.1 #69行,注释掉bind 项,默认监听所有网卡
protected-mode no #88行,修改,关闭保护模式
port 4320 #92行,修改,redis监听端口,
daemonize yes #136行,开启守护进程,以独立进程启动
cluster-enabled yes #832行,取消注释,开启群集功能
cluster-config-file nodes-6001.conf #840行,取消注释,群集名称文件设置
appendonly yes #700行,修改,开启AOF持久化
在这里插入图片描述
分别进入那六个文件夹,执行命令:redis-server redis.conf ,来启动redis节点
启动集群
redis-cli --cluster create 192.168.20.10:4320 192.168.20.20:4320 192.168.20.30:4320 192.168.20.10:4321 192.168.20.20:4321 192.168.20.30:4321 --cluster-replicas 1
部署完成
测试
进入192.168.20.10 添加一对数据
相关文章:

redis主从复制、哨兵模式、集群
文章目录 redis主从复制主从复制的配置**安装Redis**配置主服务器配置从服务器验证主从效果 哨兵模式哨兵的工作机制哨兵模式的搭建启动哨兵 集群分布式集群的搭建 redis主从复制 Redis主从复制(Redis replication)是Redis提供的一种数据备份和故障转移…...
shell免登陆脚本
#!/bin/bash ## 脚本接收的参数,也就是要互相配置 SSH 免密登录的服务器列表参数 BASE_HOST_LISTip ## 密码,默认用户是当前运行脚本的用户,比如 root 用户 ## 这里改成你的用户对应的密码 BASE_PASSWORD"password" ## shell 函…...

基于springboot+vue+Mysql的职称评审管理系统
开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…...

GitLab教程(一):安装Git、配置SSH公钥
文章目录 序一、Git安装与基本配置(Windows)下载卸载安装基本配置 二、SSH密钥配置 序 为什么要使用代码版本管理工具: 最近笔者确实因为未使用代码版本管理工具遇到了一些愚蠢的问题,笔者因此认为代码版本管理工具对于提高团队…...
【算法】无序数组的两数之和 - map标记
题目 在一个无序数组中找到两个数,两个数之和为给定的一个数,返回两个数在数组中的下标。 原理 遍历数组,遍历到一个数字的时候,记录下这个数及其下标,遍历时判断给定数减去这个数为key在map中是否存在,…...

Prime (2021): 2
前言 这个靶机有亿点难,收获很多。打靶的时候,前面很顺,到创建ssh公钥之后就一点不会了。 1 01 arp扫描,发现有一个130,再查看端口 有22,80,129,445,10123 dirb扫描目录 这…...
React 状态管理:安全高效地修改对象属性的 3 种方法
在 React 应用程序中,状态(state)是驱动整个应用程序的核心。当应用程序的状态发生变化时,React 会自动重新渲染相应的组件,以确保用户界面的更新。 与数组状态一样,对象状态在 React 中也需要特别处理。直接修改对象属性是不被允许的,因为 React 的不可变性原则要求我们创建一…...
python实现pdf的页面替换
利用第三方库PyPDF2,下面例子中进行的是将 origin.pdf 的第17页替换为 s17.pdf 的第1页: import PyPDF2def replace_pages(original_pdf_path, replacement_pages):with open(original_pdf_path, rb) as original_file:original_pdf PyPDF2.PdfReader(…...
[AIGC] Java List和Map常用API以及其Python实现方式对照介绍
Java和Python作为当今非常浅显易懂的编程语言,其数据结构中对于List和Map(Java)或List和Dict(Python)的操作无疑是每个程序员都非常必需的知识。本文将介绍在Java中对List和Map常用的一些操作,并给出在Pyth…...

零基础如何闯入IT的神秘大门?
前言 随着信息技术的飞速发展,IT行业成为了许多有志之士梦寐以求的职业领域。但对于零基础的人来说,如何成功进入这个行业却是一个不小的挑战。下面,我将结合自身的C语言专业知识,为大家详细阐述一条可行的学习路径,并…...

java程序 .exe启动nginx防止重复启动,已解决
java代码生成好的.exe启动nginx服务程序 根据nginx占用端口来解决nginx服务重复启动问题(下面代码了解代码逻辑后根据自己的业务需求修改即可) 代码: package org.example;import javax.swing.*; import java.awt.*; import java.io.*; …...
二十一、Rust 反射 获取类型
不同于 java 中的反射,Rust 没有提供以往意义上的运行时反射,取而代之的是 “编译期反射”,如 类型分析、类型转换、类型签名。但即便如此,也已经能对 Rust元编程 提供很多助力了。 这种操作,主要通过 Any 来实现&…...
Flutter Engine引擎概念
1.Flutter是Google提供的开源框架。 2.本身由C编写并兼容iOS(底层C)/Android(底层C)平台的FlutterEngine框架负责UI渲染、数据转移、调用DartVM虚拟机。 3.FlutterEngine框架由Skia图形库、Dart运行时、Flutter框架代码组成。Skia是用于图形绘制和文本显示的2D图形引擎库&#…...
【运行环境】加载资源的形式
相关资源:性能优化原则 1 加载资源的形式 html代码 媒体文件,如图片,视频等 javasccript css 2 加载资源的过程 DNS解析:域名-> ip地址 浏览器根据IP地址向服务器发送http 请求 服务器处理http 请求,并返回给浏览器…...

备战蓝桥杯Day40 - 第11届python组真题 - C跑步锻炼
一、题目描述 二、思路 1、使用datetime库中的方法可以很好的解决这个问题。 2、定义起始时间和结束时间,判断是否是周一或者是1号,结果res加上相应的里程数。 3、最后输出 res 即为本题答案。 三、代码实现 import datetimestart datetime.date(2…...

书生·浦语大模型第二期实战营第二课笔记和基础作业
来源: 作业要求:Homework - Demo 文档教程:轻松玩转书生浦语大模型趣味 Demo B站教程:轻松玩转书生浦语大模型趣味 Demo 1. 笔记 2.基础作业 2.1 作业要求 2.2 算力平台 2.3 新建demo目录,以及新建目录下的文件,下载模型参数 2.4 Intern…...

成功解决> 错误: 无效的源发行版:17
运行项目的时候出现下面的报错: Execution failed for task ‘:device_info_plus:compileDebugJavaWithJavac’. 错误: 无效的源发行版:17 原因:没有设置好自己项目的JDK版本 解决:1.检查自己项目的JDK版本 将自己的项目改为JDK 1…...

深度剖析:网络安全中的红蓝对抗策略
红蓝对抗 红蓝对抗服务方案 在蓝队服务中,作为攻击方将开展对目标资产的模拟入侵,寻找攻击路径,发现安全漏洞和隐患。除获取目标系统的关键信息(包括但不限于资产信息、重要业务数据、代码或管理员账号等)外&#x…...
Java异常处理之旅:解救迷失的程序员(二)
本系列文章简介: 在编程世界中,程序员们常常会遇到各种各样的问题和挑战。有时候,这些问题很容易解决,而有时候,它们却会让我们感到迷失和无助。 在这个旅程中,我们将探索Java异常处理的世界,解…...
网络安全介绍
网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭受到破坏、更改、泄露,系统能够连续可靠正常地运行,网络服务不中断。以下是一些网络安全相关的方面: 首先,随着科学技术的进…...

无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...

基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...

华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
32单片机——基本定时器
STM32F103有众多的定时器,其中包括2个基本定时器(TIM6和TIM7)、4个通用定时器(TIM2~TIM5)、2个高级控制定时器(TIM1和TIM8),这些定时器彼此完全独立,不共享任何资源 1、定…...

HTTPS证书一年多少钱?
HTTPS证书作为保障网站数据传输安全的重要工具,成为众多网站运营者的必备选择。然而,面对市场上种类繁多的HTTPS证书,其一年费用究竟是多少,又受哪些因素影响呢? 首先,HTTPS证书通常在PinTrust这样的专业平…...