MogDB 中 synchronous_standby_names 参数的工作机制
mogdb synchronous_standby_names notes在 MogDB 中,参数 synchronous_standby_names
用于配置同步复制设置。特别是当这个参数设置为 '*'
时,表示可以使用任何一个可用的同步备库作为同步备库。这个配置允许任何一个当前连接的备库都可以被用作同步备库,而不需要明确指定备库的名称。
工作机制
当 synchronous_standby_names
被设置为 '*'
MogDB 的同步复制机制会按照以下步骤选择同步备库:
初始连接: 当主服务器启动或参数被更改时,主服务器会接受所有连接的备库。
同步备库的确认:
- 主服务器会向所有连接的备库发送同步请求。
- 每个备库在接收到同步请求后,会进行确认并向主服务器报告其状态。
选择同步备库:
- 主服务器根据备库的响应情况,选择最早确认的一个或多个备库作为同步备库。
- 这个选择过程是动态的,也就是说,当有新的备库连接或当前的同步备库断开连接时,主服务器会重新选择同步备库。
优先级和行为
- 无优先级排序: 由于
'*'
表示任何备库,因此所有备库的优先级是相同的,主服务器只是选择最早响应的备库作为同步备库。 - 动态调整: 当一个同步备库断开连接时,主服务器会自动选择下一个响应的备库作为新的同步备库。这保证了同步复制的持续性和可靠性。
- 并发管理: 如果多个备库同时连接,主服务器可以处理这些并发连接,并根据同步请求的确认情况选择同步备库。
示例配置和使用
假设我们有一个主服务器和三个备库(standby1
、standby2
和 standby3
),在配置文件 postgresql.conf
中设置 synchronous_standby_names
为 '*'
:
synchronous_standby_names = '*'
场景分析
启动时选择:
- 当主服务器启动时,所有连接的备库都会发送心跳信号并等待主服务器的同步请求。
- 主服务器会选择最早响应的备库作为同步备库。
运行时变化:
- 如果当前同步备库
standby1
断开连接,主服务器会自动选择下一个响应的备库standby2
作为新的同步备库。 - 如果新的备库
standby3
连接到主服务器,且当前没有同步备库,主服务器会选择standby3
作为同步备库。
- 如果当前同步备库
动态调整
如果我们启动了主服务器和三个备库,并且设置了 synchronous_standby_names = '*'
,以下是可能的状态转换示例:
- 初始状态: 所有备库(
standby1
、standby2
和standby3
)连接,主服务器选择最早响应的备库standby1
作为同步备库。 standby1
断开连接: 主服务器自动选择下一个响应的备库standby2
作为新的同步备库。- 新备库连接: 新的备库
standby4
连接,主服务器不会改变当前的同步备库,除非standby2
断开连接。
总结
当 synchronous_standby_names
设置为 '*'
时,PostgreSQL 会动态地选择任何一个当前可用的备库作为同步备库。这提供了一种灵活和高可用的同步复制机制,无需管理员手动指定备库的名称。选择过程基于备库的响应情况,并在运行时自动调整,以保证同步复制的持续性和可靠性。