在启用Mirror情况下,可能出现Segment失败时,系统不会中断服务,而且没有明确提示。检查系统状态的一种方法就是使用gpstate命令。该命令会列出GPDB系统中每个独立组件(Primary Instance、Mirror Instance、Master、Standby)的状态。
检查失败的Segment
1. 在Master主机,使用-e参数执行gpstate命令。这将显示任何出错状态的Instance:
$ gpstate -e
2. 处于修改跟踪(Change Tracking)状态表明对应的Mirror已经失败。
如果某个Instance不在其初始的角色,意味着其当前的运行状态与系统初始化时的设置不同。这意味着系统处于非平衡状态,一个Segment主机可能会有较多的活动Instance,消耗更高的系统资源。参考”恢复所有Instance到初始角色”相关章节。
3. 要获得失败Instance的详细信息,可查看系统日志表gp_segment_configuration。例如:
$ psql -c "SELECT * FROM gp_segment_configuration WHERE status='d';"
4. 对于失败的Instance,注意其主机、端口、初始角色和数据目录。这些将有助于确定Instance所在的主机和位置,有助于诊断故障。
5. 查看Primary Instance与Mirror Instance之间的映射关系,执行命令:
$ gpstate –m
根据3中提到的可以写一个脚本;通过邮件提醒;或者短信提醒! greenplum_status_report.sh
#/bin/sh export PGPORT= export PGUSER=gpadmin export PGDATABASE=postgres admail="lottu_zhu@staff.easou.com" psql -p ${PGPORT} ${PGDATABASE} ${PGUSER} -t -c "SELECT dbid||' status is down' FROM gp_segment_configuration WHERE status='d';" -o /tmp/dbid.txt l=`awk 'NF{n++}END{print n}' /tmp/dbid.txt` ] then mail -s "GREENPLUM STATUS REPORT " $admail < /tmp/dbid.txt fi
在加入定时任务中即可。