redis高可用集群sentinel哨兵模式的搭建和使用

一、简单说说redis-sentinel哨兵模式

1.让redis集群变得更健壮、高可用。相对比redis-cluster,它可以自动故障迁移,自动变换master
2.其工作流程是Sentinel 会不断地检查你的主服务器和从服务器是否运作正常,如果发生故障,会推举出新的master,保证服务高可用,而且是自动化

监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。

提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。

自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。

3.也有不好的地方,只有一主,因此会有性能瓶颈的问题。

4.哨兵工作流程:

哨兵进程启动后后会和master建立两条链接:

1).用来获取其他同样在监控着此redis系统的哨兵信息

2).发送一个info命令来获取此redis系统master本身的信息

当和master完成链接建立后,该哨兵就会定时的做以下三件事情:

1).每10秒会向master和slave发送info命令

2).每2秒会向master和slave发送自己的信息

3).每1秒会向master,slave以及其他同样在监控着此redis系统的哨兵发送ping命令

info命令可以让哨兵获取到当前数据库的信息,比如运行id,复制信息等等,进入到对应节点输入 info即可查看

哨兵选举过程

1).第一个发现该master挂了的哨兵,向每个哨兵发送命令,让对方选举自己成为领头哨兵

2.)其他哨兵如果没有选举过他人,就会将这一票投给第一个发现该master挂了的哨兵

3).第一个发现该master挂了的哨兵如果发现由超过一半哨兵投给自己,并且其数量也超过了设定的quoram参数,那么该哨兵就成了领头哨兵

4).如果多个哨兵同时参与这个选举,那么就会重复该过程,直到选出一个领头哨兵选出领头哨兵后,就开始了故障修复,会从选出一个从数据库作为新的master

master选举过程

1.从所有在线的从数据库中,选择优先级最高的从数据库

2.如果有多个优先级高的从数据库,那么就会判断其偏移量,选择偏移量最小的从数据库,这里的偏移量就是增量复制的

3.如果还是有相同条件的从数据库,就会选择运行id较小的从数据库升级为master

二、服务器搭建redis实例和sentinel哨兵

1.redis配置,redis的配置按照单例去配置,不要用cluster的那种集群配置。
redis.conf示例

port 6382
daemonize yes
requirepass "root123"
#绑定当前机器 IP
bind 172.22.169.168
#
##数据文件存放位置
dir "/root/redis-cluster/redis6382/data"
#
##pid 6382和port要对应
pidfile "/root/redis-cluster/redis6382/data/redis_6382.pid"
#
##不启动集群模式
cluster-enabled no
##6382和port要对应
cluster-config-file "47.119.159.55_6382.conf"
cluster-node-timeout 15000
appendonly yes
#设置主节点的密码
masterauth "root123"

其他redis节点根据这个去做端口修改,如果是不同主机,每台主机都这个配置也可。

sentinel.conf示例

port 16382
#指定工作目录
dir "/root/redis-cluster/redis6382/data"
logfile "./sentinel.log"
#指定别名  主节点地址  端口  哨兵个数(有几个哨兵监控到主节点宕机执行转移)
sentinel monitor mymaster 47.119.159.55 6382 1

#如果哨兵3s内没有收到主节点的心跳,哨兵就认为主节点宕机了,默认是30秒
sentinel down-after-milliseconds mymaster 3000
#选举出新的主节点之后,可以同时连接从节点的个数

#如果10秒后,master仍没活过来,则启动failover,默认180s
sentinel failover-timeout mymaster 10000
#配置连接redis主节点密码
sentinel auth-pass mymaster root123
#注:我们稍后要启动四个redis实例,其中端口为7501的redis设为master,其他三个设为slave 。
#所以mymaster 后跟的是master的ip和端口,最后一个'2'代表我要启动只要有2个sentinel认为master下线,就认为该master客观下线
#启动failover并选举产生新的master。通常最后一个参数不能多于启动的sentinel实例数。建议至少启动三台sentinel实例。

启动redis节点:

./src/redis-server ./redis.conf

把所有redis节点都起来后,如果想把A台服务器的redis实例作为master主节点,则分别进入到其他服务器的redis节点,设置成为A服务器redis的从节点

./src/redis-cli -h 120.77.46.185 -p 6382 -a root123 

进入后 输入命令:

SLAVEOF A 6382

A为服务器,6382为redis实例端口
示例:
在这里插入图片描述

表示120.77.46.185 服务器 端口为6382的redis实例 成为 47.119.159.55 服务器 端口为6382的redis实例的从节点,即前者120.77.46.185成为 47.119.159.55的从节点。

也可以不进行这种设置操作,直接在redis实例启动前conf文件添加:

slaveof 47.119.159.55 6382  

表示成为47.119.159.55实例的从节点。简单点说 就是设置为47.119.159.55的从节点

查看节点信息:

info Replication

在这里插入图片描述
启动sentinel哨兵

./src/redis-sentinel ./sentinel.conf

大功告成,一个高可用的redis哨兵集群就建成了!

三、springboot整合

redis的config配置跟单例模式一样。只需要修改yml的即可

spring
 redis:
    #哨兵配置
    sentinel:
      master: mymaster
      nodes: 120.77.46.185:16382
      password: root123
    lettuce:
      pool:
        max-active: 1000  #连接池最大连接数(使用负值表示没有限制)
        max-idle: 10   #连接池中的最大空闲连接
        min-idle: 5       # 连接池中的最小空闲连接
        max-wait: -1    # 连接池最大阻塞等待时间(使用负值表示没有限制)
    timeout: 5000
    password: root123  #redis主节点密码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值