基于某某原因,我們的Greenplum需要卸載一個節點(測試環境的Greenplum集群),由于該集群使用了很久,里面有許多開發所需要的數據,所以在卸掉一個節點后,還要保證數據不會丟失。
當然,期間也遇到了點問題,在此也做個總結和記錄。
1,備份數據【本次使用gp_dump備份】
gp_dump [-a | -s] [-c] [-d] [-D] [-n schema] [-o] [-O]
[-t table_name] [-T table_name] [-x] [-h hostname] [-p port]
[-U username] [-W] [-i] [-v] [--gp-c] [--gp-d=backup_directory]
[--gp-r=reportfile] [--gp-s=dbid [, ...]] database_name
gp_dump -? | --help
gp_dump --version
該指令最簡潔的使用方式為
gp_dump database_name ;
即直接跟要備份的數據庫名即可。
如上圖顯示有文件上使用的時間錯以及備份文件在各個節點上的存儲位置。
2,將要移除節點上的備份文件拷貝到master節點上。
3,從集群中移除節點
1)關閉數據庫
gpstop -M fast
2)以管理模式啟動數據庫
gpstart -m
3)在master節點上登錄管理數據庫
PGOPTIONS="-c gp_session_role=utility" psql -d postgres
4)查看當前節點
select * from gp_segment_configuration;
5)設置操作權限
set allow_system_table_mods='dml';
6)刪除節點(161)
delete from gp_segment_configuration where dbid=2;
delete from pg_filespace_entry where fsedbid=2;
注意:這里很重要,我們需要將刪除后不連續的索引通過update將其修改成連續的,不然啟動的時候會報以下錯誤:
[gpadmin@ultra-hp-157 root]$ gpstart -a
20190427:13:45:19:002659 gpstart:ultra-hp-157:gpadmin-[INFO]:-Starting gpstart with args: -a
20190427:13:45:19:002659 gpstart:ultra-hp-157:gpadmin-[INFO]:-Gathering information and validating the environment...
20190427:13:45:19:002659 gpstart:ultra-hp-157:gpadmin-[INFO]:-Greenplum Binary Version: 'postgres (Greenplum Database) 5.0.0-alpha.8 build commit:548dc837c957d8c4834445b642cda1f0a5bf9b66'
20190427:13:45:19:002659 gpstart:ultra-hp-157:gpadmin-[INFO]:-Greenplum Catalog Version: '301705051'
20190427:13:45:19:002659 gpstart:ultra-hp-157:gpadmin-[INFO]:-Starting Master instance in admin mode
20190427:13:45:20:002659 gpstart:ultra-hp-157:gpadmin-[INFO]:-Obtaining Greenplum Master catalog information
20190427:13:45:20:002659 gpstart:ultra-hp-157:gpadmin-[INFO]:-Obtaining Segment details from master...
20190427:13:45:21:002659 gpstart:ultra-hp-157:gpadmin-[INFO]:-Setting new master era
20190427:13:45:21:002659 gpstart:ultra-hp-157:gpadmin-[INFO]:-Master Started...
20190427:13:45:21:002659 gpstart:ultra-hp-157:gpadmin-[INFO]:-Shutting down master
20190427:13:45:22:002659 gpstart:ultra-hp-157:gpadmin-[CRITICAL]:-gpstart failed. (Reason=''NoneType' object has no attribute 'valid'') exiting...
7)退出管理模式,正常啟動數據庫
gpstop –m
gpstart
8)將刪除節點的備份文件使用psql恢復到當前數據,例如:
psql ioss_dns -f /data/greenplumdatabak/dump_161/gp_dump_0_2_20190427074146
其中ioss_dns為數據庫名;gp_dump_0_2_20190427074146為備份的數據文件。
到此,移除節點成功。
以上是通過并行備份的方式來備份數據,在各個節點上都會備份各個數據庫的數據,也就是數據備份文件是分散在各個節點上的。 除此之外還可以通過非并行的方式來備份數據,原理就是將所有的數據都備份到master節點上,在數據量較小的情況下還是比較實用,具體操作不在贅述,上面提供的參考連接中有詳細介紹。