ITPub博客

首页 > 数据库 > > 集群HA介绍-单点故障自恢复

集群HA介绍-单点故障自恢复

作者:GaussDB_数据库 时间:2020-01-19 14:45:19 0 删除 编辑

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内切换为例:

  1. 以操作系统用户omm登录GaussDB 200集群任一主机。执行source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile命令启动环境变量。
  2. 输入下列命令调节影响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参数值修改成功。
  3. Total instances: X(总实例数). 
    Failed instances: .
    Success to perform gs_guc!

  4. 执行如下命令重启集群,新的参数值生效。
    gs_om -t stop && gs_om -t start
    出现故障时,集群log目录下可定位观察到故障恢复时间。DN/GTM单点故障RTO(Recovery Time Objective)<30s,CM Server+DN/GTM组合故障RTO<50s。
  5.  说明:

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

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69959250/viewspace-3136377/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 系统表-PG_JOB_PROC
请登录后发表评论 登录
全部评论

注册时间:2020-01-06

  • 博文量
    2907
  • 访问量
    19287