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异常处理的世界,解…...

网络安全介绍
网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭受到破坏、更改、泄露,系统能够连续可靠正常地运行,网络服务不中断。以下是一些网络安全相关的方面: 首先,随着科学技术的进…...

分享一个好看的APP下载分发页,App Store风格
分享一个好看的APP下载分发页,App Store风格 可以自动识别安卓和苹果哦! 内容直接可以页面上修改,所见即所得 下图是一个真实截图,想要的留下评论哦!...

C++ 获取数组大小、多维数组操作详解
获取数组的大小 要获取数组的大小,可以使用 sizeof() 运算符: 示例 int myNumbers[5] {10, 20, 30, 40, 50}; cout << sizeof(myNumbers);结果: 20为什么结果显示为 20 而不是 5,当数组包含 5 个元素时? 这…...

苹果电脑怎么彻底删除软件 苹果电脑卸载软件在哪里 cleanmymac x怎么卸载 mac废纸篓怎么删除
苹果电脑卸载软件的方法相对直观和简单,尤其是对于习惯使用Mac操作系统的用户来说。以苹果MacBook Pro为例,以下是卸载软件的详细步骤、使用方法、注意事项与建议。 一、卸载软件的详细步骤: 1. 打开Mac电脑,进入桌面,…...

STM32F407 FSMC并口读取AD7606
先贴一下最终效果图.这个是AD7606并口读取数据一个周期后的数据结果. 原始波形用示波器看是很平滑的. AD7606不知为何就会出现干扰, 我猜测可能是数字信号干扰导致的. 因为干扰的波形很有规律. 这种现象基本上可以排除是程序问题. 应该是干扰或者数字信号干扰,或者是数字和模拟…...

WebGPU vs. 像素流
在构建 Bzar 之前,我们讨论过我们的技术栈是基于在云上渲染内容的像素流,还是基于使用设备自身计算能力的本地渲染技术。 由于这种选择会极大地影响项目的成本、可扩展性和用户体验,因此在开始编写一行代码之前,从一开始就采取正确…...

Windows下docker-compose部署DolphinScheduler
参照:快速上手 - Docker部署(Docker) - 《Apache DolphinScheduler v3.1.0 使用手册》 - 书栈网 BookStack 下载源文件 地址:https://dolphinscheduler.apache.org/zh-cn/download/3.2.1 解压到指定目录,进入apache-dolphinscheduler-xxx-…...

微服务项目sc2024通用Base工程
1. cloud-provider-payment8001 2.pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"ht…...

git学习 1
打开自己想要存放git仓库的文件夹,右键打开git bush,用git init命令建立仓库 用 ls -a(表示全都要看,包括隐藏的)可以看到git仓库 也可以用 git clone 接github链接(点code选项里面会给链接,结尾是git的那个…...

HTML - 请你说一下如何阻止a标签跳转
难度级别:初级及以上 提问概率:55% a标签的默认语义化功能就是超链接,HTML给它的定位就是与外部页面进行交流,不过也可以通过锚点功能,定位到本页面的固定id区域去。但在开发场景中,又避免不了禁用a标签的需求,那么都有哪些方式可以禁用…...

【CV】ORB算法
1. ORB算法: 特点: 实现了旋转不变性、尺度不变性和计算效率高等特性。 旋转不变性: 通过计算关键点周围的梯度信息,确定关键点的主方向。将图像旋转到关键点的主方向,然后再提取BRIEF描述符,增强了旋转不…...