个人博客网:https://wushaopei.github.io/    (你想要这里多有)

sentinel-目录

        主从复制高可用
安装配置
实现原理
架构说明
客户端连接
常见开发运维问题

一、主从复制高可用

1、主从复制的作用?

2、主从复制高可用存在的问题?

3、手动故障转移:

Redis 入门到分布式 (八)Redis Sentinel-LMLPHPRedis 入门到分布式 (八)Redis Sentinel-LMLPHP

如图,假如这时候master挂掉了, master向slave的复制也被断掉了,这对于我们连接master的客户端肯定会连接或者读写失败的。这对于连接或读写分离的策略,这里的读是正常的,但是数据的更新却是无法保证的。

解决方案:

Redis 入门到分布式 (八)Redis Sentinel-LMLPHPRedis 入门到分布式 (八)Redis Sentinel-LMLPHP

发生以上问题后,要进行故障转移。首先,要选中一个客户端slave,让它执行slaveof no one,让它成为master;然后对于其余的slave让它们执行slaveof new master 从而向新的master进行数据同步,这样就完成了生成一个新的master和向它复制的过程。

同时,我们的客户端slave也会去读取新的master。

二、 redis sentinel

1、  Redis Sentinel架构:

Redis 入门到分布式 (八)Redis Sentinel-LMLPHPRedis 入门到分布式 (八)Redis Sentinel-LMLPHP

首先,Redis Sentinel包含多个redis节点,其中包括一主一从或者一主多从等多个节点;同样包含有多个sentinel节点。

sentinel节点主要用于对redis节点的状态进行故障判断,对redis进行故障转移的处理以及对客户端进行通知的处理。

对于一个节点的失败是可以达到公平性,还可以保证高可用,因为当前某个sentinel节点挂了,还可以保证整个Senetinel结构是完美的。

2、Redis Sentinel故障转移:

Redis 入门到分布式 (八)Redis Sentinel-LMLPHPRedis 入门到分布式 (八)Redis Sentinel-LMLPHP

整个过程其实就是从手动故障配置转移改成由sentinel进行故障发现、故障处理转移、故障通知的机制。

Redis 入门到分布式 (八)Redis Sentinel-LMLPHPRedis 入门到分布式 (八)Redis Sentinel-LMLPHP

Redis Sentinel可以进行多套master~slave的机制的监控;每套master~slave会使用一个master-name进行标识。

三、redis sentinel 安装

1、安装与配置

1)配置开启主从节点

2) 配置开启sentinel监控主节点。(sentinel是特殊的redis)

3)实际应该多机器

4)详细配置节点

2、案例:

Redis 入门到分布式 (八)Redis Sentinel-LMLPHPRedis 入门到分布式 (八)Redis Sentinel-LMLPHP

有个master:master-7000,两个slave: slave-7001,slave-7002:

1)Redis主节点:

启动:

配置:

2) Redis从节点

启动 :

配置:

slave-1:

slave-2:

3、sentinel主要配置

四、redis sentine安装演示1

1、配置主节点配置文件: redis-7000.conf

1)配置参数:

2)将redis-7000复制为从节点rediss-7001、redis-7002

3)让redis-7001、redis-7002指向redis-7000主节点:

2、启动主、从节点:

3、查看主从节点端口及相关配置信息:

Redis 入门到分布式 (八)Redis Sentinel-LMLPHPRedis 入门到分布式 (八)Redis Sentinel-LMLPHP

五、 redis sentinel 安装2

安装配置redis-sentinel:

1、创建sentinel.conf文件:

2、复制创建 redis-sentinel-26379.conf文件:

3、主节点参数配置:

4、启动redis-sentinel-26379主节点:

5、查看主节点状态:

6、从sentinel端口26379启动:

7、为两个从节点配置sentinel:

8、启动从节点的sentinel:

9、状态查看;

六、 java 客服端

  • 请求响应流程
  • Jedis
  • Redis-py
  • 直连?

1.服务高可用?

2.客户端高可用?

1、客户端实现基本原理-step1

Redis 入门到分布式 (八)Redis Sentinel-LMLPHPRedis 入门到分布式 (八)Redis Sentinel-LMLPHP

首先,我们要获取所有的sentinel节点,因为我们不知道哪个sentinel节点是活的,哪个sentnel节点已经宕机,所以我们要获取所有的sentinel节点的集合。同时,我要获取所以的master,就需要获取所有的master-name。

然后去遍历sentinel集合,找到可用的sentinel节点,也就是可以被ping通的节点。

2、客户端实现基本原理-step2

Redis 入门到分布式 (八)Redis Sentinel-LMLPHPRedis 入门到分布式 (八)Redis Sentinel-LMLPHP

通过sentinel节点的集合和masterName去sentine-k中去查询并返回可用master节点的真正可用信息。

3、客户端实现基本原理-step3

Redis 入门到分布式 (八)Redis Sentinel-LMLPHPRedis 入门到分布式 (八)Redis Sentinel-LMLPHP

当我们的客户端获取到master节点的时候,它会执行一次role或rol replication进行一次验证,从而验证该节点是否是真的master节点

Redis 入门到分布式 (八)Redis Sentinel-LMLPHPRedis 入门到分布式 (八)Redis Sentinel-LMLPHP

如果master节点发生了变化,那么,sentinel是感知的。因为谁是真正的master,是由他来决定的。

Sentinel和客户端进行通知的机制:它们内部采用的是发布订阅的方式实现的。

Redis 入门到分布式 (八)Redis Sentinel-LMLPHPRedis 入门到分布式 (八)Redis Sentinel-LMLPHP

4、客户端接入流程:

5、Jedis的使用:

JedisSentinelPool senntinelPool = new JedisSentinelPool(masterName,sentinelSet,poolConfig,timeout);
Jedis jedis = null;
try {
jedis = redisSentinelPool.getResource();
//jedis command
}catch(Exception e){
logger.error(e.getMessage(),e);
}finally(
if(jedis != null)
jedis.close():
}
05-11 19:53