当一台segment机器坏了,然后机器又恢复了,或某一个segment数据库停了。
只需要运行gprecoverseg,就可以把segment恢复过来:
gprecoverseg
运行gprecoverseg之后,需要运行gpstate -m查看同步是否都完成了。
如果一个primary的segment失败后,mirror segment会升级成primary segment,然后集群可以正常运行。原先失败的primary segment的机器恢复后,使用gprecoverseg恢复这个segment后,这个原先的primary segment会变成mirror segment,如果想让原先的失败的primary segment,在恢复后仍然能成为primary segment,则需要使用gprecoverseg -r。
如果primary segment和mirror segment都同时失败了,这时集群变的不可用。
恢复的步骤为:
重启greenplum集群
gpstop -r
运行gprecoverseg恢复数据库
gprecoverseg
使用 gpstate -m 查看恢复状态,如果有segment一直处于Change Tracking mode,则运行一个全拷贝的恢复:
gprecoverseg -F
如果集群没有配置mirror,则只有任意一个segment失败后,集群就会变成不可用。
这时只能等机器恢复后重启集群:
gpstop -r
当一台机器完全坏了,磁盘上的数据也完全丢了,这时就需要重建一个新的segment了。
使用一台新的机器,上面把greenplum装好,然后使用下面的命令:
gprecoverseg -i recover_config_file
recover_config_file文件内容如下:
filespaceOrder=
sdw5-2:50002:/gpdata/gpseg2 sdw9-2:50002:53002:/gpdata/gpseg2
sdw5-2:50002是原先失败的segment,sdw9-2:50002是新主机。
当master主机失败了。
这时我们可以激活standby master。
在standby master主机上执行:
gpactivatestandby -d /data/master/gpseg-1
一旦standby master激活后,它就变成primary master了,如果想在把当前standby master变成primary master后,再把另一台主机加成standby master,则可以用下面的命令:
gpactivatestandby -d /data/master/gpseg-1 -c new_standby_hostname
当然,当激活standby master后,也可以以后再加新的standby master。这与当没有standby master时,加一个standby master的操作一样,都是运行:
gpinitstandby -s new_standby_master_hostname
最后用gpstate -f检查集群的状态。
psql dbname -c 'SELECT * FROM gp_segment_configuration;'