注:本文翻译自https://docs.vmware.com/en/VMware-Greenplum/7/greenplum-database/admin_guide-highavail-topics-g-detecting-a-failed-segment.html
启用段镜像后,当主段实例出现故障时,Greenplum Database会自动将故障转移到镜像段实例。如果每个数据部分都有一个段实例在线,用户可能不会意识到段已关闭。如果发生故障时,正在进行的事务回滚,并在重新配置的段集上自动重新启动。gpstate实用程序可用于标识失败的段。该实用程序显示来自目录表的信息,包括gp_segment_configuration。
如果整个Greenplum Database系统由于段故障而变得不可操作(例如,如果未启用镜像或没有足够的段在线访问所有用户数据),则用户在尝试连接数据库时将看到错误。返回给客户端程序的错误可能表明失败。例如:
ERROR: All segment databases are unavailable
在Greenplum Database协调器主机上,Postgres postmaster进程派生一个故障探测进程ftsprobe。这也被称为FTS(容错服务)过程。如果失败,postmaster进程将重新启动FTS。
FTS在一个循环中运行,每个循环之间有一个睡眠间隔。在每个循环中,FTS通过使用在gp_segment_configuration表中注册的主机名和端口建立到段实例的TCP套接字连接来探测每个主段实例。如果连接成功,该段执行一些简单的检查并向FTS报告。检查包括在关键段目录上运行stat系统调用,并检查段实例中的内部故障。如果没有检测到任何问题,则向FTS发送一个肯定的答复,并且不对该段实例采取任何操作。
如果无法建立连接,或者在超时时间内未收到应答,则尝试对段实例进行重试。如果配置的最大探测尝试数失败,FTS探测段的镜像以确保它是正常的,然后更新gp_segment_configuration表,将主段标记为“down”并设置镜像作为主段。FTS用执行的操作更新gp_configuration_history表。
当只有一个活动主段并且相应的镜像关闭时,主段进入Not In Sync状态并继续记录数据库更改,因此可以同步镜像,而无需执行从主段到镜像的完整数据拷贝。
有一组服务器配置参数会影响FTS行为:
gp_fts_probe_interval
多长时间,以秒为单位,开始一个新的FTS循环。例如,如果设置为60,探测循环需要10秒,则FTS进程休眠50秒。如果设置为60,探测周期为75秒,则进程休眠0秒。默认值为60,最大值为3600。
gp_fts_probe_timeout
协调器和段之间的探测超时,以秒为单位。默认值为20,最大值为3600。
gp_fts_probe_retries
探测一个网段的次数。例如,如果设置为5,则在第一次尝试失败后将重试4次。默认值:5
gp_log_fts
FTS的日志级别。取值为off、terse、verbose和debug。“详细”设置可以在生产环境中使用,为故障排除提供有用的数据。“debug”设置不应该在生产环境中使用。默认值:“简洁”
gp_segment_connect_timeout
允许镜像响应的最大时间(以秒为单位)。默认值:180(3分钟)
除了FTS执行的故障检查之外,主段无法向其镜像发送数据可以将镜像状态更改为down。主服务器将数据排队,在gp_segment_connect_timeout秒过去后,表明镜像失败,导致镜像被标记为down,主服务器进入Not In Sync模式。
启用镜像后,您可以在系统中拥有失败的段实例,而不会中断服务或出现任何故障迹象。您可以通过检查gp_segment_configuration目录表的内容或检查日志文件,使用gpstate实用程序来验证系统的状态。
gpstate实用程序提供Greenplum Database系统中每个单独组件的状态,包括主段、镜像段、协调器和备用协调器。
在协调器主机上,运行带有-e选项的gpstate实用程序,以显示具有错误条件的段实例:
$ gpstate -e
如果实用程序列出主角色和镜像角色切换的段,则该段不在其首选角色中(在系统初始化时分配给它的角色)。这意味着系统处于潜在的不平衡状态,因为一些段主机可能拥有比最佳系统性能更多的活动段。
Config status显示为Down的段表示对应的镜像段Down。
要获取有关失败段的详细信息,可以检查gp_segment_configuration编目表。例如:
$ psql postgres -c "SELECT * FROM gp_segment_configuration WHERE status='d';"
对于失败的段实例,请注意主机、端口、首选角色和数据目录。此信息将有助于确定要进行故障排除的主机和段实例。使用实例查询镜像段实例信息。
$ gpstate -m
日志文件可以提供信息,帮助确定错误的原因。协调器和段实例在数据目录的日志中都有自己的日志文件。协调器日志文件包含最多的信息,您应该首先检查它。
使用gplogfilter实用程序检查Greenplum Database日志文件以获取其他信息。如果需要查看网段日志文件,请使用gpssh在网段主机上执行gplogfilter命令。
1.使用gplogfilter检查协调器日志文件中的WARNING, ERROR, FATAL或PANIC日志级别消息:
$ gplogfilter -t
2.使用gpssh检查每个段实例上的WARNING、ERROR、FATAL或PANIC日志级别消息。例如:
$ gpssh -f seg_hosts_file -e 'source
/usr/local/greenplum-db/greenplum_path.sh ; gplogfilter -t
/data1/primary/*/log/gpdb*.log' > seglog.out