暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

华为GaussDB A 单点故障自恢复

墨天轮 2019-10-12
1622

单点故障自恢复

GaussDB 200可做到短时间内恢复并对外提供服务,即单点故障自恢复。该功能需要具备以下前提条件:

  • 同一DN(Data Node)的主、备、从备有且只有一个异常退出。
  • GTM(Global Transaction Manager)主、备只有一个异常退出。
  • CN(Coordinator Node)只有一个异常退出且已开启自动剔除故障CN的功能。

单点故障自恢复,实际是由其他实例承接故障实例的业务。这种情况下,会打破集群本来的负载均衡,使承接了故障实例服务的主机负荷增大。若不及时修复故障实例,并恢复集群的负载均衡,存在未来发生非单点故障导致集群服务不可修复风险。因此,DBA可以每日使用gs_check工具例行对GaussDB 200进行健康检查,及时发现异常进行处理,提前预防故障或对故障及时进行修复。

单点故障自恢复过程中,实例状态会不断演进。GaussDB 200不断检查各节点上的实例进程是否存在。如果未检测到进程,会将实例状态置为“Unknown”,并尝试重启进程。
  • 重启成功但是尚未恢复与集群其他主机通信时,实例的状态为“Pending”。恢复与其他主机通信后,实例状态为“Normal”。
  • 超过15s没有重启成功则会认为其已故障,实例的状态将被置为“Down”。
    • 如果是主DN或主GTM“Down”,GaussDB 200会在30s内将备实例升主。
    • 如果是CN“Down”,GaussDB 200会根据coordinator_heartbeat_timeout参数的取值进行等待,超时后将故障CN剔除,CN状态变为“Deleted”。CN发生故障,在被剔除前,集群无法执行DDL语句。coordinator_heartbeat_timeout=0时表示CN剔除功能关闭,不剔除CN。

以上所述时间均为GaussDB 200的出厂默认时间。通过缩短对应时间,可以提升单点故障自恢复的效率。但是,缩短检测时间后,对于大集群情况或者业务压力大的情况下,很容易会因正常的实例通信超时,导致业务失败。因此,如果需要,建议在技术支持工程师的辅助下进行设置。

以将CM Server+DN/GTM单点故障后集群支持50s内切换为例:

  • 以操作系统用户omm登录GaussDB 200集群任一主机。执行source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile命令启动环境变量。
  • 输入下列命令调节影响DN故障恢复相关参数:

    cm_server端:

    gs_guc set -Z cmserver -N all -I all -c "instance_heartbeat_timeout = 15" gs_guc set -Z cmserver -N all -I all -c "instance_failover_delay_timeout = 0" gs_guc set -Z cmserver -N all -I all -c "cmserver_ha_heartbeat_timeout= 8" gs_guc set -Z cmserver -N all -I all -c "cmserver_self_vote_timeout= 8" gs_guc set -Z cmserver -N all -I all -c "cmserver_ha_connect_timeout = 3" gs_guc set -Z cmserver -N all -I all -c "cmserver_ha_status_interval = 1" gs_guc set -Z cmserver -N all -I all -c "alarm_report_interval = 3"

    cm_agent端:

    gs_guc set -Z cmagent -N all -I all -c "agent_heartbeat_timeout = 5" gs_guc set -Z cmagent -N all -I all -c "agent_connect_timeout = 1" gs_guc set -Z cmagent -N all -I all -c "agent_report_interval = 1" gs_guc set -Z cmagent -N all -I all -c "agent_connect_retries = 15"

    GTM端:

    gs_guc set -Z cmagent -N all -I all -c "standby_connection_timeout = 7"

    DN端:

    gs_guc set -Z datanode -N all -I all -c "wal_receiver_timeout = 15" gs_guc set -Z datanode -N all -I all -c "wal_receiver_connect_timeout = 2"
    说明:

    如果备DN连接主DN时,报"timeout expired",代表连接超时时间设置太小,此时只需要手动增加wal_receiver_connect_timeout的值就可以了。

    例如:

    gs_guc reload -Z datanode -N all -I all -c "wal_receiver_connect_timeout = 5"

  • 参数调节完成后,显示如下信息,则GUC参数值修改成功。

    Total instances: X(总实例数). Failed instances: 0. Success to perform gs_guc!

  • 执行如下命令重启集群,新的参数值生效。

    gs_om -t stop && gs_om -t start

  • 出现故障时,集群log目录下可定位观察到故障恢复时间。DN/GTM单点故障RTO(Recovery Time Objective)<30s,CM Server+DN/GTM组合故障RTO<50s。

    说明:

    当GTM主机和运行业务的CN实例同时故障时,业务可能在50s内无法恢复到可用状态,因此建议安装部署时GTM主备物理机器上不要部署CN实例。


查看更多:华为GaussDB 200 集群HA介绍
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论