Orchestrator配置3- 半同步复制

本文讨论了Orchestrator如何管理数据库环境中的半同步复制,包括检测和纠正不适当的半同步配置,如过多或过少的副本,以及通过定制查询来强制执行半同步复制。关键参数如DetectSemiSyncEnforcedQuery和EnforceExactSemiSyncReplicas在确保数据一致性中起到关键作用。
摘要由CSDN通过智能技术生成

Semi-sync topology

在一些环境中,不仅控制半同步复制副本的数量很重要,还要控制副本是半同步还是异步。orchestrator可以检测到不希望的半同步配置,并切换半同步标志rpl_semi_sync_slave_enabled和rpl_semi_sync_master_enabled以纠正情况。

Semi-sync master (rpl_semi_sync_master_enabled)

在主故障切换(例如 DeadMaster)期间,如果 DetectSemiSyncEnforcedQuery 对新主返回的值 > 0,orchestrator 会启用半同步主标志。如果主标志被其他方式更改或错误设置,orchestrator 将不触发任何恢复。

半同步主可能会遇到两种故障情况:LockedSemiSyncMaster 和 MasterWithTooManySemiSyncReplicas。在这两种条件的任一恢复期间,orchestrator 会在半同步复制副本上禁用半同步主标志。

Semi-sync replicas (rpl_semi_sync_slave_enabled)

orchestrator能够检测拓扑中是否存在不正确数量的半同步复制副本(LockedSemiSyncMaster 和 MasterWithTooManySemiSyncReplicas),然后通过相应地启用/禁用半同步复制副本标志来纠正情况。

此行为可以通过以下选项进行控制:

  1. DetectSemiSyncEnforcedQuery:

    • 查询返回半同步优先级(0表示异步副本;数字越大表示优先级越高)。
  2. EnforceExactSemiSyncReplicas:

    • 该参数决定是否强制执行严格的半同步复制副本拓扑。如果启用,LockedSemiSyncMaster 和 MasterWithTooManyReplicas 的恢复将根据优先级顺序精确地启用和禁用半同步复制副本,以匹配所需的拓扑。
  3. RecoverLockedSemiSyncMaster:

    • 决定是否从 LockedSemiSyncMaster 场景中恢复。如果启用,LockedSemiSyncMaster 的恢复将按照优先级顺序在副本上启用半同步(永远不会禁用),以匹配主服务器等待副本数。如果设置了EnforceExactSemiSyncReplicas,则此选项不起作用。如果您只想处理半同步副本太少的情况而不处理太多的情况,这将非常有用。
  4. ReasonableLockedSemiSyncMasterSeconds:

    • 触发LockedSemiSyncMaster条件的秒数;如果未设置,则回退到ReasonableReplicationLagSeconds。

优先级顺序由 DetectSemiSyncEnforcedQuery(零表示异步副本;数字越大表示优先级越高)、晋升规则(DetectPromotionRuleQuery)和主机名(fallback)定义。

示例1

执行严格的半同步复制副本拓扑,其中 rpl_semi_sync_master_wait_for_slave_count=1

  "DetectSemiSyncEnforcedQuery": "select priority from meta.semi_sync where cluster_member = @@hostname",
  "EnforceExactSemiSyncReplicas": true

假设这个拓扑,

         ,- replica1 (priority = 10, rpl_semi_sync_slave_enabled = 1)
  master 
         `- replica2 (priority = 20, rpl_semi_sync_slave_enabled = 1)

在这个拓扑中,orchestrator将检测到一个MasterWithTooManySemiSyncReplicas的情况,并在replica1(优先级较低)上禁用半同步。

示例2

强制执行弱的半同步复制副本拓扑,其中 rpl_semi_sync_master_wait_for_slave_count=1

  "DetectSemiSyncEnforcedQuery": "select 2586",
  "DetectPromotionRuleQuery": "select promotion_rule from meta.promotion_rules where cluster_member = @@hostname",
  "RecoverLockedSemiSyncMaster": true

假设目前这个拓扑结构,

         ,- replica1 (priority = 2586, promotion rule = prefer, rpl_semi_sync_slave_enabled = 0)
  master 
         `- replica2 (priority = 2586, promotion rule = neutral, rpl_semi_sync_slave_enabled = 0)

orchestrator将检测到一个LockedSemiSyncMaster的情况,并在replica1上启用半同步(具有更优先的晋升规则)。

相关参数

DetectSemiSyncEnforcedQuery string // 可选查询(在拓扑实例上执行)以确定是否对主写入完全强制执行半同步(在任何情况下都不允许异步回退)。 如果提供,必须返回一行一列、值 0 或 1。

EnforceExactSemiSyncReplicas bool // 如果为 true,则将启用/禁用半同步副本以匹配所需优先级顺序中的等待计数; 这适用于 LockedSemiSyncMaster 和 MasterWithTooManySemiSyncReplicas

RecoverLockedSemiSyncMaster bool // 如果为 true,则 Orchestrator 将通过在副本上启用半同步以匹配等待计数来从 LockedSemiSync 状态恢复; 此行为可以被 EnforceExactSemiSyncReplicas 覆盖

ReasonableLockedSemiSyncMasterSeconds uint // 在触发 LockedSemiSync 分析之前评估 LockedSemiSyncHypothesis 的时间; 如果未设置,则回退到 ReasonableReplicationLagSeconds

DetectSemiSyncEnforcedQuery

可选自定义查询(在拓扑实例上执行)以确定是否对主写入完全强制执行半同步(在任何情况下都不允许异步回退)。 如果提供,必须返回一行一列、值 0 或 1
 

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DBA之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值