Redis主从复制+哨兵模式

必读

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: 5000
    sentinel:
      master: mymaster
      nodes: 8.142.97.14:26379,43.143.198.158:26379,8.142.99.94:26379

完事!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值