原文:https://www.percona.com/blog/2017/05/31/proxysql-assisted-pxc-maintenance-mode/
在这篇博文中,我们将介绍PXC 维护模式如何使用ProxySQL 使集群节点下线而不影响工作负载
Percona XtraDB Cluster 维护模式
由于PXC提供了高可用的解决方案,它必须考虑到集群节点需要下线维护的情况(通过与集群隔离或完全关闭)
PXC通过引入维护模式实现这一点。PXC的维护模式减少因为突发故障影响工作负载的次数,如果节点是使用ProxySQL下线的(作为负载均衡器)
中心思想是延迟核心节点的动作,并允许ProxySQL转移工作负载
ProxySQL是如何管理PXC维护模式的
在PXC维护模式下,当用户触发shutdown信号(或者将特定的节点设置为维护模式),ProxySQL将节点标记为OFFLINE
当用户触发了shutdown,PXC节点设置pxc_maint_mode为SHUTDOWN(默认DISABLED)然后sleep x秒(由参数pxc_maint_transition_period决定---默认10s)。ProxySQL 自动检测这个变化并将节点标记为OFFLINE。应用这个改变后,ProxySQL拒绝为任何DML事务建立连接,但已经存在的查询可以继续执行,直到 pxc_maint_transition_period 秒后。一旦休眠期完成,PXC传递一个真正的关闭信号-----从而给了ProxySQL足够的时间转移工作负载
如果用户需要将节点设置为维护模式,可以简单的设置参数pxc_maint_mode 为 MAINTENANCE。随即,pxc_maint_mode 被更新并且客户端连接开始休眠x秒(由 pxc_maint_transition_period 决定)后再把控制权交给用户。ProxySQL 自动检测这个变化并将节点标记为OFFLINE。在这种情况下,ProxySQL避免为任何DML事务建立连接,但已经存在的连接可以继续使用。
ProxySQL 自动检测 维护状态的变化并自动重新路由流量,从而减少了突发性的工作负载故障
技术细节:
ProxySQL Galera checker 脚本(proxysql_galera_checker)通过使用 ProxySQL 调度程序检查pxc_maint_mode参数状态(除了已经存在的wsrep_local_state),持续检测各个节点的状态。
调度程序 是一个集成在ProxySQL中的像计划任务(cron-like)的实现,支持毫秒的粒度
如果 脚本(proxysql_galera_checker)检测到 pxc_maint_mode = SHUTDOWN | MAINTENANCE,然后proxySQL将节点标记为OFFLINE_SOFT。这样可以避免在这个节点新建立连接(或工作负载)
proxysql_galera_checker 日志示例:
<span style="font-weight: 400;">Thu Dec 8 11:21:11 GMT 2016 Enabling config</span> <span style="font-weight: 400;">Thu Dec 8 11:21:17 GMT 2016 Check server 10:127.0.0.1:25000 , status ONLINE , wsrep_local_state 4</span> <span style="font-weight: 400;">Thu Dec 8 11:21:17 GMT 2016 Check server 10:127.0.0.1:25100 , status ONLINE , wsrep_local_state 4</span> <span style="font-weight: 400;">Thu Dec 8 11:21:17 GMT 2016 Check server 10:127.0.0.1:25200 , status ONLINE , wsrep_local_state 4</span> <b>Thu Dec 8 11:21:17 GMT 2016 Changing server 10:127.0.0.1:25200 to status OFFLINE_SOFT due to SHUTDOWN</b> <span style="font-weight: 400;">Thu Dec 8 11:21:17 GMT 2016 Number of writers online: 2 : hostgroup: 10</span> <span style="font-weight: 400;">Thu Dec 8 11:21:17 GMT 2016 Enabling config</span> <span style="font-weight: 400;">Thu Dec 8 11:21:22 GMT 2016 Check server 10:127.0.0.1:25000 , status ONLINE , wsrep_local_state 4</span> <span style="font-weight: 400;">Thu Dec 8 11:21:22 GMT 2016 Check server 10:127.0.0.1:25100 , status ONLINE , wsrep_local_state 4</span> <b>Thu Dec 8 11:21:22 GMT 2016 Check server 10:127.0.0.1:25200 , status OFFLINE_SOFT , wsrep_local_state 4</b>
翻译的不好,欢迎批评