排查:
master节点机登录,发现/home挂载文件夹空间不足,并且/home下只放了gpdata/master/gpseg-1 ,各种du发现,pg_log下有一csv文件基本把磁盘占满了,与开发沟通才知道,有大量数据入库导致的
突然想起来,部署gp集群时忘了看磁盘空间大小了,把gp的master_data_directory放到了/home下
解决:
发现问题后,经过与经验丰富的同事沟通,确定对主从节点进行切换,然后对该路径进行修改。
步骤:
1、手动同步
gpstop -a
gpstart -m
gpinitstandby -n
gpstop
gpstart
2、杀master
在进行master切换时必须保证master节点已死,因为如果master节点依旧有活动会话的话,会造成切换不成功,并且会导致主从节点数据不一致。
gpstop -m
停止成功后开始切换master
3、切换master到standby
在standby节点上执行
这一步的前提是gp集群必须要有standby节点,并且在环境变量里设置master_data_directory以及pgport(最好和原master一致)
修改完环境变量后,运行source ~/.bash_profile使其生效
gpactivatestandby -d /home/gpdata/master/gpseg-1
上述路径为部署gp时启用的master_data_directory路径(ps:在部署集群时,master与standby的master_data_directory路径是一致的)
在此步中并没有指定-c 参数(该参数是用来指定standby机器名称的),因为需要重新指定master_data_dirctory路径;
若报错未找到gpactivatestandby命令,可运行source /usr/local/greenplum-db/greenplum_path.sh。
4、查看集群状态
gpstate -f
此时发现集群并没有启用standby,状态为Not Configured,正常应该是指定了master standby 机器名称和状态为passive。
5、激活standby到原master
因为需要重新指定master_data_directory,需要先了解master使用了哪些filespace
psql postgres
select a.dbid,a.content,a.role,a.port,a.hostname,b.fsname,c.fselocation from gp_segment_configuration a,pg_filespace b,pg_filespace_entry c where a.dbid=c.fsedbid and b.oid=c.fsefsoid order by content;
查看pg_system的位置
mkdir /data1/gpdata/master
在新位置建master文件夹
需要修改这些位置
gpinitstandby -s host01 -F pg_system:/data1/gpdata/master/gpseg-1
6、将master切换回原master
gpstop - m
切换之前要修改原master中的环境变量master_data_directory以及设置pgport(和原standby一致)
gpactivatestandby -d /data1/gpdata/master/gpseg-1
7、激活standby到原standby
gpinitstandby -s host02 -F pg_system:/data1/gpdata/master/gpseg-1
8、gpstate
一切正常!
一切正常!