sentinel(四):规则持久化

规则丢失

无论是通过硬编码的方式来更新规则,还是通过接入 Sentinel Dashboard 后,在页面上操作来更新规则,都无法避免一个问题,那就是服务重新后,规则就丢失了,因为默认情况下规则是保存在内存中的。

Dashboard 是通过 transport 模块来获取每个 Sentinel 客户端中的规则的,获取到的规则通过 RuleRepository 接口保存在 Dashboard 的内存中,如果在 Dashboard 页面中更改了某个规则,也会调用 transport 模块提供的接口将规则更新到客户端中去。

是想一种情况,客户端连接上 Dashboard 之后,我们在 Dashboard 上为客户端配置好了规则,并推送给了客户端。这时由于一些因素客户端出现异常,服务不可用了,当客户端恢复正常再次连接上 Dashboard 后,这时所有的规则都丢失了,我们还需要重新配置一遍规则,这肯定不是我们想要的。

rules-in-memory

如上图所示,当 Sentinel 的客户端挂掉之后,保存在各个 RuleManager 中的规则都会付之一炬,所以在生产中是绝对不能这么做的。

规则持久化原理

那我们有什么办法能解决这个问题呢,其实很简单,那就是把原本保存在 RuleManager 内存中的规则,持久化一份副本出去。这样下次客户端重启后,可以从持久化的副本中把数据 load 进内存中,这样就不会丢失规则了,如下图所示:

rules-in-persistence

Sentinel 为我们提供了两个接口来实现规则的持久化,他们分别是:ReadableDataSource 和 WritableDataSource。

其中 WritableDataSource 不是我们本次关心的重点,或者说 WritableDataSource 并没有那么重要,因为通常各种持久化的数据源已经提供了具体的将数据持久化的方法了,我们只需要把数据从持久化的数据源中获取出来,转成我们需要的格式就可以了。

下面我们来看一下 ReadableDataSource 接口的具体的定义:

public interface ReadableDataSource<S, T> {
	// 从数据源中读取原始的数据
    S readSource() throws Exception;
	// 将原始数据转换成我们所需的格式
    T loadConfig() throws Exception;
    // 获取该种数据源的SentinelProperty对象
    SentinelProperty<T> getProperty();
}

接口很简单,最重要的就是这三个方法,另外 Sentinel 还为我们提供了一个抽象

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
sentinel-mysql规则持久是指将sentinel对mysql实例所设置的规则信息进行持久存储,以便在重启sentinel或发生故障时能够恢复规则配置。 sentinel是一个监控和管理mysql主从复制集群的工具,通过对主从节点进行心跳监测、故障切换等操作来保证系统的高可用性。在配置了sentinel后,我们可以通过sentinel命令行工具或API对mysql实例设置一些规则,如故障切换策略、实例监控参数等。 然而,如果sentinel规则配置信息无法进行持久存储,那么在重启sentinel或发生故障时,之前设置的规则信息将会丢失,导致系统的稳定性和安全性受到影响。因此,持久sentinel-mysql规则是非常重要的。 持久sentinel-mysql规则的方法有多种,比较常用的有以下几种: 1. 将规则配置信息存储在磁盘文件中:可以将sentinel配置文件中的规则信息保存在一个磁盘文件中,当sentinel启动时会读取该文件,并根据其中的配置信息进行规则设置。这样就可以实现规则持久存储和恢复。 2. 利用数据库进行规则持久:可以将sentinel规则配置信息存储在一个专门的数据库中,比如将规则信息存储在MySQL或Redis数据库中。当sentinel启动时,会从数据库中读取规则配置信息,并进行相应的规则设置。 3. 使用外部存储系统进行规则持久:可以利用一些外部存储系统,如etcd、ZooKeeper等,将sentinel规则配置信息存储在其中。这样可以实现规则信息的高可用性和分布式管理,同时可以通过监听机制及时感知配置的变并及时更新规则。 无论使用哪种方法,持久sentinel-mysql规则是非常重要的,它可以保证系统在重启和故障恢复时能够及时恢复原有的规则配置,确保系统的稳定性和可用性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值