Redis主从复制、哨兵模式、Cluster集群

目录

一、Redis主从复制

1、主从复制介绍

2、主从复制原理

              ​编辑

3、主从复制的作用

4.Redis主从复制实验搭建

1. 关闭防火墙和安装依赖环境

2. 解压安装包

3. 编译并安装到指定目录 

4. 执行脚本文件

5. 做软连接

6. 启动redis并查看端口

7. 重启redis

8. 修改主服务器--->7-4---配置文件

9. 重启redis服务

10. 修改从服务器--->7-3---配置文件

11. 重启服务,看主从有没连接

12. 修改从服务器--->7-2---配置文件

13. 重启服务,查看主从服务器有没有连接

14. 在Master--->7-4---验证主从效果

15. 在Master--->7-4---验证从节点 

16. 在Master节点上设置键,查看从节点

二、Redis哨兵模式

1. 哨兵模式的作用

2. 哨兵结构由两部分组成,哨兵节点和数据节点

3. 故障切换原理

4. 主节点的选举

5.  哨兵模式的搭建

1. 环境配置

2. 修改Redis配置文件(所有节点--->7-4,7-3和7-2)

3. 启动哨兵模式

4. 故障模拟

5. 查看结果 

三、Redis群集模式

3.1 集群的作用

3.2 Redis集群的数据分片

3.3 Redis群集模式搭建

1. 创建6个端口文件 

2. 开启群集功能

3. 配置其他5个端口

4. 启动redis节点

5. 启动集群

​编辑

6. 测试集群


一、Redis主从复制

1、主从复制介绍

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。

默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

2、主从复制原理

#####sync  同步
#####RDB(完全备份的文件------>从服务器)  和  AOF(增量备份的文件----->从服务器)

1. 从服务器给主服务器发送sync同步数据请求

2. 主redis会fork一个子进程,会产生rdb文件(#完全备份的文件)
    2.1 客户端还在持续写入redis
    
3. rdb文件的持久化完成后,主redis会将rdb文件和缓存起来的命令给从服务器

4. 复制和推送完数据后,主redis会持续同步操作命令(利用的是AOF[增量备份]的持久化功能)

5. 再下一台redis接入主从复制之前,主redis会持续的利用AOF的方式来同步数据给从服务器

              

3、主从复制的作用

  1. 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
  2. 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
  3. 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
  4. 高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。

4.Redis主从复制实验搭建

主机操作系统IP地址软件 / 安装包 / 工具
MasterCentOS7192.168.91.104redis-5.0.7.tar.gz
Slave1CentOS7192.168.91.103redis-5.0.7.tar.gz
Slave2CentOS7192.168.91.102redis-5.0.7.tar.gz

1. 关闭防火墙和安装依赖环境

systemctl stop firewalld
setenforce 0
yum install gcc gcc-c++ -y make

2. 解压安装包

#解压文件到指定文件夹 opt
tar zxvf redis-5.0.7.tar.gz -C /opt/
cd /opt/redis-5.0.7/

3. 编译并安装到指定目录 

make
#编译
make PREFIX=/usr/local/redis install
#执行软件包提供的install_server.sh 脚本文件,设置Redis服务所需要的相关配置文件

4. 执行脚本文件

cd utils###先切换目录
./install_server.sh

5. 做软连接

ln -s /usr/local/redis/bin/* /usr/local/bin/

6. 启动redis并查看端口

/etc/init.d/redis_6379 start
netstat -natp|grep 6379

7. 重启redis

8. 修改主服务器--->7-4---配置文件

vim /etc/redis/6379.conf
bind 0.0.0.0      #70行,修改监听地址为0.0.0.0
daemontze yes     #137行,开启守护进程
logfile/var/log/redis_6379.1og   #172行,指定日志文件目录
dir/var/lib/redis/6379           #264行,指定工作目录
appendonly yes                   #700行,开启AOF持久化功能
/etc/init.d/redis_6379 restart

修改内容如下 

9. 重启redis服务

10. 修改从服务器--->7-3---配置文件

vim /etc/redis/6379.conf 
 
bind 0.0.0.0         #70行,修改监听地址为0.0.0.0
daemonize yes        #137行,开启守护进程
logfile/var/log/redis 6379.1og    #172行,指定日志文件目录
dir/var/lib/redis/6379            #264行,指定工作目录
replicaof 192.168.52.140 6379#288行,指定要同步的Master节点IP和端口
appendonly yes     #700行,开启AOF持久化功能
#################################################################
/etc/init.d/redis_6379 restart
netstat -natp | grep redis 

默认内容如下

需要修改内容如下 

11. 重启服务,看主从有没连接

/etc/init.d/redis_6379 restart
netstat -natp|grep redis

12. 修改从服务器--->7-2---配置文件

vim /etc/redis/6379.conf 
 
bind 0.0.0.0         #70行,修改监听地址为0.0.0.0
daemonize yes        #137行,开启守护进程
logfile/var/log/redis 6379.1og    #172行,指定日志文件目录
dir/var/lib/redis/6379            #264行,指定工作目录
replicaof 192.168.52.140 6379#288行,指定要同步的Master节点IP和端口
appendonly yes     #700行,开启AOF持久化功能
/etc/init.d/redis_6379 restart
netstat -natp | grep redis 

默认内容如下

需要修改内容如下 

13. 重启服务,查看主从服务器有没有连接

/etc/init.d/redis_6379 restart
netstat -natp|grep redis

14. 在Master--->7-4---验证主从效果

tail /var/log/redis_6379.log

15. 在Master--->7-4---验证从节点 

redis-cli info replication

16. 在Master节点上设置键,查看从节点

二、Redis哨兵模式

主从切换技术的方法是:当服务器宕机后,需要手动一台从机切换为主机,这需要人工干预,不仅费时费力而且还会造成一段时间内服务不可用。为了解决主从复制的缺点,就有了哨兵机制。

哨兵的核心功能:在主从复制的基础上,哨兵引入了主节点的自动故障转移。

1. 哨兵模式的作用

  • 监控:哨兵会不断地检查主节点和从节点是否运作正常。
  • 自动故障转移:当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其它从节点改为复制新的主节点。
  • 通知(提醒):哨兵可以将故障转移的结果发送给客户端。

2. 哨兵结构由两部分组成,哨兵节点和数据节点

  • 哨兵节点:哨兵系统由一个或多个哨兵节点组成,哨兵节点是特殊的redis节点,不存储数据,台数必须为大于等于3奇数台。
  • 数据节点:主节点和从节点都是数据节点。

3. 故障切换原理

一、哨兵对主从复制的集群进行监控
监控对象:所有redis数据节点

二、 哨兵与哨兵之间进行相互监控
监控对象:哨兵彼此

三、 监控的原理
1. 哨兵与哨兵之间的监控目的:检测彼此的存活状态
2. 哨兵会监控所有的redis数据库的目的:为了实现自动故障切换

###故障切换原理:1. 当master宕机,哨兵会及时发现,会进行投票机制,选举出新master(一定是奇数)
                               2. 完成slave---->master的从向主进行切换
                               3. 完成其他从服务器对新master做配置

需要特别注意的是,客观下线是主节点才有的概念;如果从节点和哨兵节点发生故障,被哨兵主观下线后,不会再有后续的客观下线和故障转移操作

4. 主节点的选举

  • 过滤掉不健康的(己下线的),没有回复哨兵ping响应的从节点。
  • 选择配置文件中从节点优先级配置最高的。(replica-priority,默认值为100)
  • 选择复制偏移量最大,也就是复制最完整的从节点。

哨兵的启动依赖于主从模式,所以须把主从模式安装好的情况下再去做哨兵模式

5.  哨兵模式的搭建

1. 环境配置

哨兵模式要在基于主从复制已搭建完成的前提下

主机操作系统IP地址软件 / 安装包 / 工具
MasterCentOS7192.168.91.104redis-5.0.7.tar.gz
Slave1CentOS7192.168.91.103redis-5.0.7.tar.gz
Slave2CentOS7192.168.91.102redis-5.0.7.tar.gz

2. 修改Redis配置文件(所有节点--->7-4,7-3和7-2)

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.223.10 6379 2 #84行,修改 指定该哨兵节点监控192.168.223.10:6379这个主节点,该主节点的名称是mymaster,最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移
sentinel down-after-milliseconds mymaster 30000 #113行,判定服务器down掉的时间周期,默认30000毫秒(30秒)
sentinel failover-timeout mymaster 180000   #146行,故障节点的最大超时时间为180000(180秒)

默认配置如下

 

需要修改内容如下

3. 启动哨兵模式

redis-sentinel sentinel.conf &
注意!先启动主服务器,再启动从服务器

4. 故障模拟

查看redis-server进程号

ps aux|grep redis
root      58036  0.2  0.2 159624  4752 ?        Ssl  13:18   0:08 /usr/local/bin/redis-server 0.0.0.0:6379
root      58613  0.4  0.2 153992  4600 ?        Ssl  14:18   0:01 redis-sentinel *:26379 [sentinel]
root      58709  0.0  0.0 112824   980 pts/1    S+   14:23   0:00 grep --color=auto redis

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

kill -9 57031     #Master节点上redis-server的进程号

5. 查看结果 

在哨兵节点上验证master是否转换至从服务器 

tail -f /var/log/sentinel.log

在哨兵上查看是否转换成功

redis-cli -p 26379 info sentinel
####用于检索有关Redis Sentinel的信息

三、Redis群集模式

集群,即Redis Cluster,是Redis 3.0开始引入的分布式存储方案。

集群由多个节点(Node)组成,Redis的数据分布在这些节点中。集群中的节点分为主节点和从节点:只有主节点负责读写请求和集群信息的维护;从节点只进行主节点数据和状态信息的复制。

3.1 集群的作用

数据分区:数据分区(或称数据分片)是集群最核心的功能。

集群将数据分散到多个节点,一方面突破了Redis单机内存大小的限制,存储容量大大增加;另一方面每个主节点都可以对外提供读服务和写服务,大大提高了集群的响应能力。

Redis单机内存大小受限问题,在介绍持久化和主从复制时都有提及;例如,如果单机内存太大,bgsave和bgrewriteaof的fork操作可能导致主进程阻塞,主从环境下主机切换时可能导致从节点长时间无法提供服务,全量复制阶段主节点的复制缓冲区可能溢出。

高可用:集群支持主从复制和主节点的自动故障转移(与哨兵类似);当任一节点发生故障时,集群仍然可以对外提供服务。

3.2 Redis集群的数据分片

Redis集群引入了哈希槽的概念

Redis集群有16384个哈希槽(编号0-16383)

集群的每个节点负责一部分哈希槽

每个Key通过CRC16校验后对16384取余来决定放置哪个哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作

#以3个节点组成的集群为例:

节点A包含0到5460号哈希槽

节点B包含5461到10922号哈希槽

节点C包含10923到16383号哈希槽

#Redis集群的主从复制模型

集群中具有A、B、C三个节点,如果节点B失败了,整个集群就会因缺少5461-10922这个范围的槽而不可以用。

为每个节点添加一个从节点A1、B1、C1整个集群便有三个Master节点和三个slave节点组成,在节点B失败后,集群选举B1位为的主节点继续服务。当B和B1都失败后,集群将不可用

3.3 Redis群集模式搭建

redis的集群一般需要6个节点,3主3从。方便起见,这里所有节点在同一台服务器上模拟:
以端口号进行区分:3个主节点端口号:6001/6002/6003,对应的从节点端口号:6004/6005/6006。

1. 创建6个端口文件 

cd /etc/redis/
mkdir -p redis-cluster/redis600{1..6}

for i in {1..6}
do
cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis600$i
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis600$i
done

2. 开启群集功能

#其他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-6001.conf		#840行,取消注释,群集名称文件设置
cluster-node-timeout 15000				#846行,取消注释群集超时时间设置
appendonly yes							#700行,修改,开启AOF持久化

3. 配置其他5个端口

需要修改的内容如下

4. 启动redis节点

cd /etc/redis/redis-cluster/redis6001
redis-server redis.conf

for d in {1..6}
do
cd /etc/redis/redis-cluster/redis600$d
redis-server redis.conf
done

ps -ef | grep redis

5. 启动集群

#启动集群
redis-cli --cluster create 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006 --cluster-replicas 1

#六个实例分为三组,每组一主一从,前面的做主节点,后面的做从节点。下面交互的时候 需要输入 yes 才可以创建。
--replicas 1 表示每个主节点有1个从节点。

6. 测试集群

redis-cli -p 6001 -c

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/522335.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

秋招刷题4(动态规划)

1.购物单 import java.util.Scanner;public class Main {public static void main(String[] args){Scanner sc new Scanner(System.in);int N sc.nextInt();int m sc.nextInt();Goods[] goods new Goods[m];for(int i 0; i < m; i){goods[i] new Goods();}for(int i …

Matlab|含氢微网优化调度模型

目录 1 主要内容 模型示意图 目标函数 2 部分程序 3 程序结果 4 下载链接 1 主要内容 最近咨询含氢微网优化调度模型的同学较多&#xff0c;本次就分享一个高质量的源码资源。该程序方法复现《Simulation of design and operation of hydrogen energy utilization system…

数据生成 | Matlab实现基于K-means和SVM的GMM高斯混合分布的数据生成

数据生成 | Matlab实现基于K-means和SVM的GMM高斯混合分布的数据生成 目录 数据生成 | Matlab实现基于K-means和SVM的GMM高斯混合分布的数据生成生成效果基本描述模型描述程序设计参考资料 生成效果 基本描述 1.Matlab实现基于K-means和SVM的GMM高斯混合分布的数据生成&#xf…

揭秘动态内存管理,让你少走弯路!

1. 为什么要有动态内存分配 2. malloc和free 3. calloc和realloc 4. 常⻅的动态内存的错误 5. 动态内存经典笔试题分析 6. 柔性数组 7. 总结C/C中程序内存区域划分 正文开始&#xff1a; 1. 为什么要有动态内存分配 我们已经掌握的内存开辟⽅式有&#xff1a; int…

LeetCode---391周赛

题目列表 3099. 哈沙德数 3100. 换水问题 II 3101. 交替子数组计数 3102. 最小化曼哈顿距离 一、哈沙德数 简单的模拟题&#xff0c;代码如下 class Solution { public:int sumOfTheDigitsOfHarshadNumber(int x) {int s 0, tmp x;while(tmp){stmp%10;tmp/10;}return x…

Redis 5种数据结构常用命令

文章目录 1 字符串2 哈希3 列表4 集合5 有序集合 1 字符串 命令描述set key value设置指定key的值为valueget key获取指定key的值del key [key …]删除一个或多个keymset key value [key value …]设置多个key的值mget key [key …]获取一个或多个key的值incr key将key中储存的…

vue项目配置看板娘

这个博主讲的不错&#xff0c;很清楚&#xff0c;但是我实操时无法找到资源&#xff0c;一直报404找不到模型&#xff0c;苦恼了我很久也没解决&#xff0c;之后发现了 Evgo的项目&#xff0c;这就简单多了 最简单的引入Vue看板娘教程 一、项目引入 这里使用的是来自Evgo老哥…

03-JAVA设计模式-工厂模式详解

工厂模式 工厂设计模式是一种创建型设计模式&#xff0c;它提供了一种封装对象创建过程的机制&#xff0c;将对象的创建与使用分离。 这种设计模式允许我们在不修改客户端代码的情况下引入新的对象类型。 在Java中&#xff0c;工厂设计模式主要有三种形式&#xff1a;简单工厂…

每日OJ题_优先级队列_堆③_力扣692. 前K个高频单词

目录 力扣692. 前K个高频单词 解析代码 力扣692. 前K个高频单词 692. 前K个高频单词 难度 中等 给定一个单词列表 words 和一个整数 k &#xff0c;返回前 k 个出现次数最多的单词。 返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率&#xff0c…

潜水后可以戴耳机吗?精选四款防水游泳耳机,不惧水压挑战

随着生活水平的提高&#xff0c;人们越来越注重健康与休闲娱乐。潜水作为一项集运动、探险和乐趣于一身的活动&#xff0c;近年来受到了越来越多的关注。然而&#xff0c;在享受潜水带来的乐趣的同时&#xff0c;我们也希望能够在水下保持与外界的联系&#xff0c;例如欣赏音乐…

经济学 赋税

赋税&#xff1a; 1.为政府服务提供金钱来源 2. 用于保护环境 3.帮助国家使用财政和货币政策&#xff0c;推动经济增长 4.再分配社会财富的一种方式&#xff0c;平衡富人和穷人的贫富差距 5.帮助我们支付市场自身可能无法实现的服务&#xff0c;比如公共安全&#xff0c;国…

【MySQL】解决修改密码时报错:--skip-grant-tables option

首先我们先了解到为何会出现如上报错&#xff1a; 是因为我们在第一次配置MySQL中的my.cnf时&#xff0c;我们添加了–skip–grant-tables 选项 跳过验证身份的选项 所以&#xff0c;我们第一次登录成功后想要修改密码会出现如下报错&#xff1a; [hxiZ0jl69kyvg0h181cozuf5Z…

如何高效学习Python编程语言

理解Python的应用场景 不同的编程语言有不同的发展历史和应用场景,了解Python主要应用在哪些领域对于学习它会有很大帮助。Python最初是一种通用脚本语言,主要用于系统级任务自动化。随着时间的推移,它逐步成为数据处理、科学计算、Web开发、自动化运维等众多领域的主要编程语…

Vue - 3( 15000 字 Vue 入门级教程)

一&#xff1a;初识 Vue 1.1 收集表单数据 收集表单数据在Vue.js中是一个常见且重要的任务&#xff0c;它使得前端交互变得更加灵活和直观。 Vue中&#xff0c;我们通常使用v-model指令来实现表单元素与数据之间的双向绑定&#xff0c;从而实现数据的收集和更新。下面总结了…

深入浅出 -- 系统架构之负载均衡Nginx反向代理

一、Nginx反向代理-负载均衡 首先通过SpringBootFreemarker快速搭建一个WEB项目&#xff1a;springboot-web-nginx&#xff0c;然后在该项目中&#xff0c;创建一个IndexNginxController.java文件&#xff0c;逻辑如下&#xff1a; Controller public class IndexNginxControl…

卷积神经网络实战

构建卷积神经网络 卷积网络中的输入和层与传统神经网络有些区别&#xff0c;需重新设计&#xff0c;训练模块基本一致 1.首先读取数据 - 分别构建训练集和测试集&#xff08;验证集&#xff09; - DataLoader来迭代取数据 # 定义超参数 input_size 28 #图像的总尺寸28*28…

优雅强大的前端管理模板——Soybean Admin

公众号&#xff1a;【可乐前端】&#xff0c;每天3分钟学习一个优秀的开源项目&#xff0c;分享web面试与实战知识&#xff0c;也有全栈交流学习摸鱼群&#xff0c;期待您的关注! 每天3分钟开源 hi&#xff0c;这里是每天3分钟开源&#xff0c;很高兴又跟大家见面了&#xff0…

python 03序列(列表和元组)

列表 1.创建 x[1,2,3,4,5,6,7,8,9,10] print(x) 或者是 y[a,b,c,d,e,f,g,h] print(y) 2.访问 &#xff08;1&#xff09;取出一个元素 x[0] #取出第0号&#xff0c;即List里第一个元素 &#xff08;2&#xff09;取出多个连续元素 通过两个索引值实现&#xff0c;第一…

专题【双指针】【学习题】刷题日记

题目列表 11. 盛最多水的容器 42. 接雨水 15. 三数之和 16. 最接近的三数之和 18. 四数之和 26. 删除有序数组中的重复项 27. 移除元素 75. 颜色分类 167. 两数之和 II - 输入有序数组 2024.04.06 11. 盛最多水的容器 题目 给定一个长度为 n 的整数数组 height 。有 n 条垂…

MATLAB - mpcobj = mpc(model,ts,P,M,W,MV,OV,DV) 函数

系列文章目录 前言 模型预测控制器使用线性工厂、干扰和噪声模型来估计控制器状态并预测未来的工厂输出。控制器利用预测的设备输出&#xff0c;解决二次规划优化问题&#xff0c;以确定控制动作。 有关模型预测控制器结构的更多信息&#xff0c;请参阅 MPC 预测模型。 一、语法…