Redis主从复制+哨兵模式
创始人
2024-03-17 08:03:06
0

必读

redis的主从复制是单向的,只能有主节点到从节点,主节点以写为主从节点以读为主不能写入数据!因为系统的80%的需求都是读的需求。

redis服务默认自己是主节点,一个主节点由一个或多个从节点,一个从节点只有一个主节点。

全量复制:redis的从节点挂掉了,当再次连接到主机后,会全量复制主节点的所有数据来保证数据的一致性;
增量复制:当主节点挂掉了,从节点再次连接到重启后的主节点时,主节点存入新的数据,从节点也会存入相同的数据;

查看当前redis信息:

登录redis:

redis-cli -p 6379

在这里插入图片描述
有密码的话执行命令:AUTH 设置的redis的密码

查看主从redis的信息:

 info replication

在这里插入图片描述
role:角色为主节点(默认值)
connected_slaves:连接的从节点数

主从复制配置

我这里有三台服务器,因为redis默认自己是主节点所以在其中任选一台作为主节点,这个服务器的redis不用配置,我们去吧哪两个服务器的redis配置成这个主节点redis的从节点;

在两个从节点服务器连接redis后都执行:

slaveof 8.142.99.94 6379

在这里插入图片描述
slaveof :主从复制的命令
8.142.99.94 :主节点ip
6379 : 主节点redis的端口号

注意:如果主节点redis设置了密码一定要在从节点的配置文件中写上;所有节点的redis密码必须一样
在这里插入图片描述
加上主节点密码后再次连接即可;

在这里插入图片描述
在这里插入图片描述
可以看到两个从节点都连接上了主节点;

在这里插入图片描述
主节点也看到这两个从节点的信息了。

测试:
主节点

在这里插入图片描述
从节点1
在这里插入图片描述
从节点2
在这里插入图片描述
主从复制完成;

哨兵模式

1) 哨兵模式是Redis的高可用方式,哨兵节点是特殊的redis服务,不提供读写服务,主要用来监控redis实例节点。
2) 哨兵架构下client端第一次从哨兵找出redis的主节点,后续就直接访问redis的主节点,不会每次都通过sentinel代理访问redis的主节点,当redis的主节点挂掉时,哨兵会第一时间感知到,并且在slave节点中重新选出来一个新的master,然后将新的master信息通知给client端,从而实现高可用。这里面redis的client端一般都实现了订阅功能,订阅sentinel发布的节点变动消息
3) Sentinel 哨兵是redis官方提供的高可用方案,它可以用来监听多个redis实例的运行情况.

Sentinel是一个进程我们需要启动它,启动方式和redis一样;

新建一个sentinel文件;
在这里插入图片描述
文件夹中在新建一个conf和log文件夹;

在conf文件夹中创建一个名为sentinel.conf文件;在这里插入图片描述
文件内容:

port 26379
dir "/var/log/sentinel"
logfile "/var/log/sentinel/sentinel-log.log"
# sentine1 monitor关键字
# master 给主从服务器集群起一个名字(监控主服务器,从服务器的信息也就获取了)主服务器的IP和端口
# 2主服务器失效的统计数,超过2票就认为失效
sentinel monitor mymaster 8.142.99.94 6379 1
# 如果主服务器redis有密码就在此设置主节点redis的密码
sentinel auth-pass mymaster 123456789
# 主服务器下线超过30秒就进行切换(默认30S)
#sentinel down-after-milliseconds mymaster 30000

在这里插入图片描述

port:sentinel的端口号(以后就是连接sentinel有sentinel去转发操作redis的命令)
dir : sentinel的工作目录用于生成文件;
logfile :日志文件的目录
sentinel monitor :设置监控的redis主机
mymaster :微监控的主机redis取一个名字 ;
192.168.243.4 : 监控主机的ip
6379 : redis的端口号
1 :有一个sentinel 连接不上主机的redis时认为主机挂掉了,这时就需要故障转移;

启动测试:

docker run -d --name sentinel -v /mydocker/sentinel/conf/sentinel.conf:/conf/sentinel.conf -v /mydocker/sentinel/log:/var/log/sentinel  redis:6.2.6 redis-sentinel /conf/sentinel.conf

1、首先停止主节点redis服务
在这里插入图片描述
可以看到主节点变更了;
在这里插入图片描述
这个从节点的主节点也改成新的主节点了;
在这里插入图片描述
现在重启原先的主节点;
在这里插入图片描述
可以看到自动成为从节点并连接到了新的主节点了;
在这里插入图片描述
连接状是down 是因为没有在redis配置文件中配置主节点redis的连接密码:

 masterauth 123456789

在配置文件中添加以上代码即可:
在这里插入图片描述
重启redis:
在这里插入图片描述
数据同步成功!

我这里在增加两个sentinel(哨兵),分别在这两个新的从机上启动sentinel进程使sentinel也实现高可用!
我这里重新停止了当前的sentinel进程重新在这三台服务器上创建sentinel进程;
按照上面启动sentinel的步骤在这三台服务器上创建即可:
在这里插入图片描述

port 26379
dir "/var/log/sentinel"
logfile "/var/log/sentinel/sentinel-log.log"
# sentine1 monitor关键字
# master 给主从服务器集群起一个名字(监控主服务器,从服务器的信息也就获取了)主服务器的IP和端口
# 2主服务器失效的统计数,超过2票就认为失效
sentinel monitor mymaster 43.143.198.158 6379 2
# 如果主服务器redis有密码就在此设置主节点redis的密码
sentinel auth-pass mymaster 123456789
# 主服务器下线超过10秒就进行切换(默认30S)
#sentinel down-after-milliseconds mymaster 30000

分别这在三台服务器上启动即可:

docker run -d --name sentinel -v /mydocker/sentinel/conf/sentinel.conf:/conf/sentinel.conf -v /mydocker/sentinel/log:/var/log/sentinel  redis:6.2.6 redis-sentinel /conf/sentinel.conf

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到全部成功即可:

springboot配置:

spring:redis:timeout: 5000sentinel:master: mymasternodes: 8.142.97.14:26379,43.143.198.158:26379,8.142.99.94:26379

完事!

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...