1. 适用场景
集群在运行过程中,出于运维目的数据库管理员可能需要手工对DN或GTM做主备切换。例如发现DN或GTM主备自动failover后想恢复原有的主备角色。
2. 前提条件
1) GaussDB A集群安装成功,且处于主备不均衡状态。
2) 操作时间取得客户同意,并且确认为业务低峰期
3. 对系统影响
由于过程中会短暂实例服务不可用,故需要选择业务低峰期进行操作,从而减少因数据库主备切换对客户业务的影响。
4. 变更步骤
4.1检查集群状态处于不均衡状态
步骤1 以omm用户登录GaussDB A集群的第一个正常的cn节点
步骤2 执行以下命令,启用环境变量
| source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile |
步骤3 执行以下命令,查看GaussDB A集群当前状态
| cm_ctl query |
结果如下,balanced显示为No,则说明需要进行主备均衡,否则不需要执行此方案
| [ Cluster State ]
cluster_state : Normal redistributing : No balanced : No |
4.2检查当前为业务低峰期
若存在大量业务进行切换时会导致主实例等待业务进程退出长时间无法将备,集群持续不可用,因此执行均衡操作前需要确保处于业务低峰期。
步骤1 以omm用户登录GaussDB A集群的第一个正常的cn节点
步骤2 执行以下命令,启用环境变量
| source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile |
步骤3 执行以下命令,查看当前业务情况
| gsql -d postgres -p 25308 -c ” select * from pgxc_stat_activity where usename!=’omm’ and state=’active’; “ |
如下查询无结果或少于20条记录,则为正常,若大于20条记录联系客户停止当前运行业务或另找业务低峰期进行。
| coorname | datname | usename | pid | application_name | client_addr | backend_start | xact_start | query_start | state_change | waiting | enqueue | state | query_id | query
———-+———+———+—–+——————+————-+—————+————+————-+————–+———+———+——-+———-+——- (0 rows) |
4.3查看是否有主备追赶
步骤1 以omm用户登录GaussDB A集群的第一个正常的cn节点
步骤2 执行以下命令,启用环境变量
| source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile |
步骤3 执行以下命令,确保Catchup视图无主备追赶
| gsql -d postgres -p 25308 -c “select * from pgxc_get_senders_catchup_time()” |
如下查询无结果,则为正常
| nodename | lwpid | local_role | peer_role | state | sender | catchup_start | catchup_end
———-+——-+————+———–+——-+——–+—————+————- (0 rows) |
如果查询有结果,且结果持续没有变化,并且确认为业务低峰期,则联系华为工程师处理。
4.4检查不均衡备DN redo进度
备机需要redo追齐主机才能升主成功,若备机redo进度与当前主实例相差较大执行均衡命令后,需要等备机redo完才能正式成为主机接管业务,在此之前集群持续不可用,因此在切换必须保证主备相差不大,缩短均衡时间。
步骤1 以omm用户登录GaussDB A集群的第一个正常的cn节点
步骤2 执行以下命令,启用环境变量
| source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile |
步骤3 执行以下命令,查找不均衡DN实例
| cm_ctl query -Csdipv |
结果如下,6001和6002实例发生了主备切换
| [ Datanode State ]
node node_ip instance state | node node_ip instance state ———————————————————————————————————————- 1 host1 192.168.0.1 6001 25330 P Standby Normal | 2 host2 192.168.0.2 6002 25490 S Primary Normal |
当前的主(Primary)实例为6002,6002所在节点为host2,25490为6002进程的端口号
步骤 4 登录第一个cn节点创建redo查询视图
| source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile
gsql -d postgres -p 25308 -r |
连接到CN执行如下命令创建redo查询视图:
| CREATE OR REPLACE FUNCTION public.get_redo_info(OUT node_name name, OUT sender_replay_location text, OUT sender_flush_location text, out redoing bool)
RETURNS SETOF RECORD LANGUAGE plpgsql AS $$ DECLARE V_SQL text; query_str text; rec record; result record; a text; b text; c text; d text; BEGIN V_SQL := ‘select node_name from pgxc_node where node_type = ”D” and hostis_primary = ”f”’; FOR rec IN EXECUTE(V_SQL) LOOP query_str := ‘EXECUTE DIRECT ON(‘ || rec.node_name || ‘) ”select sender_replay_location,sender_flush_location,receiver_replay_location,receiver_flush_location from pg_stat_get_wal_senders() where peer_role = ””Standby”” ”’; EXECUTE query_str into result; node_name := rec.node_name; sender_replay_location := result.receiver_replay_location; sender_flush_location := result.receiver_flush_location; a := split_part(sender_replay_location, ‘/’, 1); b := split_part(sender_flush_location, ‘/’, 1); c := split_part(sender_replay_location, ‘/’, 2); d := split_part(sender_flush_location, ‘/’, 2); IF a = b THEN redoing = ‘f’; ELSE redoing = ‘t’; END IF; RETURN NEXT; END LOOP; RETURN; END$$; |
步骤 5 登录第一个cn节点查询redo进度
| source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile
gsql -d postgres -p 25308 -c ” select * from get_redo_info(); “ |
结果如下,0/1188D4B8为16进制数字,所有实例查询结果redoing项为f即为正常。
| node_name | sender_replay_location | sender_flush_location | redoing
————–+————————+———————–+——— dn_6001_6002 | 0/1188D4B8 | 0/1188D4B8 | f (1 row) |
4.5连接CN执行checkpoint
步骤1 以omm用户登录GaussDB A集群的第一个正常的cn节点
步骤2 执行以下命令,启用环境变量
| source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile |
步骤3 执行以下命令,做checkpoint
| gsql -d postgres -p 25308 -c “checkpoint” |
执行结果如下
| CHECKPOINT |
若超过5分钟未结束,则联系华为工程师处理。
4.6检查当前集群是否有备份任务
该步骤只需要在8.1.1(2021年330之后版本)以上版本进行判断,其余版本非均衡情况下不支持备份任务。若当前集群存在备份任务,进行集群均衡会导致备份失败。
步骤1 以omm用户登录GaussDB A集群的第一个正常的cn节点
步骤2 执行以下命令判断是否存在备份任务
| ps -ef|grep gs_roach|grep -v grep |
若输出为空则无备份任务,集群进行均衡操作,否则与客户沟通后停止备份集再进行均衡操作。
步骤3 执行以下命令,停止备份任务
| python $GPHOME/script/GaussRoach.py -t stop -F |
4.7执行主备均衡
步骤1 以omm用户登录GaussDB A集群的第一个cn节点
步骤2 执行以下命令,启用环境变量
| source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile |
步骤3 使用如下命令进行主备均衡
| cm_ctl switchover -a |
结果如下,则为正常
| cm_ctl: cmserver is rebalancing the cluster automatically.
…. cm_ctl: switchover successfully. |
4.8均衡操作是否成功
1)后台集群状态验证
步骤1 以omm用户登录GaussDB A集群的第一个正常的cn节点
步骤2 执行以下命令,启用环境变量
| source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile |
步骤3 执行以下命令,查看GaussDB A集群当前状态
| cm_ctl query |
如下则为正常
| [ Cluster State ]
cluster_state : Normal redistributing : No balanced : Yes |
2)客户业务验证
验证方案需包括DDL和DML语句
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/bigdata/316748.html