GaussDB(DWS)扩容问题定位指南(一)

举报
召走小子 发表于 2020/10/22 11:20:45 2020/10/22
【摘要】 扩容问题定位指南(一)1 扩容基本原理1.1 扩容总体流程1. 用户在FIM界面提交扩容加节点请求;2. FIM向所有新节点下发命令,执行preinstall;3. 第一个新节点在完成preinstall之后等待所有新节点都已完成preinstall,然后ssh到第一个老节点调用gs_expand做内核扩容加节;其它新节点在...

扩容问题定位指南(一)

1      扩容基本原理

1.1      扩容总体流程


1.         用户在FIM界面提交扩容加节点请求;

2.         FIM向所有新节点下发命令,执行preinstall

3.         第一个新节点在完成preinstall之后等待所有新节点都已完成preinstall,然后ssh到第一个老节点调用gs_expand做内核扩容加节;其它新节点在完成preinstall之后直接退出;

4.         新版本:用户在FIM界面提交数据重分布请求,经过内部转发,最终在第一个老节点

调用重分布工具gs_expand进行数据重分布;

老版本:用户在后台第一个cn节点直接调用gs_expand进行数据重分布;

5.         gs_expand在完成重分布前置准备工作之后ssh到第一个cn节点,调用该节点上gs_redis开始实际进行用户表的数据重分布。

1.2      日志路径

mpp-postinstall.sh日志

/var/log/Bigdata/mpp/scriptlog 所有节点均有

gs_expand日志

/var/log/Bigdata/mpp/scriptlog/postinstall-xxxx-xx-xx_xxxxx.log 第一个老节点

/var/log/Bigdata/mpp/omm/om/gs_expand-xxxx-xx-xx.log 第一个老节点

/var/log/Bigdata/mpp/scriptlog/gs_local-xxxx-xx-xx_xxxxx.log 所有节点均有

gs_redis日志

/var/log/Bigdata/mpp/omm/bin/gs_redis/gs_redis-xxxx.log 第一个cn节点

1.3      扩容加节点

1.3.1        元数据同步

1、导出cn元数据命令

gs_dumpall  -p 25308 -s --include-nodes --dump-nodes --include-templatedb --include-buckets --include-alter-table --dump-wrm --non-lock-table --file='/opt/huawei/Bigdata/mppdb/mppdb_tmp/schema_coordinator.sql'  --parallel-jobs  5

2、导出cn pg_job and pg_job_proc表数据

gs_dump -p 25308 postgres -a --file='/opt/huawei/Bigdata/mppdb/mppdb_tmp/schema_coordinator_job_data.sql' -t pg_catalog.pg_job -t pg_catalog.pg_job_proc

3、导出cn 统计信息

/opt/huawei/Bigdata/mppdb/mppdb_tmp/schema_coordinator_statistics_data.sql

4、导出dn全局元数据命令

gs_dumpall  -p 25330 -s --dump-wrm --include-templatedb --file='/opt/huawei/Bigdata/mppdb/mppdb_tmp/schema_datanode.sql' -g

5、导出dn每个库元信息命令

gs_dump -C -p 25330 dbname   --include-alter-table --non-lock-table --file='/opt/huawei/Bigdata/mppdb/mppdb_tmp/dump_output_datanode_dbname.sql'

6、导出元数据文件清单

保存在临时目录/opt/huawei/Bigdata/mppdb/mppdb_tmp下:

schema_coordinator.sql  --cn全局元数据信息

schema_coordinator_dbname.sql  --cn上单个database的元数据信息,每个database一个

schema_coordinator_job_data.sql  --cn上的job信息

schema_coordinator_statistics_data.sql   --cn上的统计信息

schema_datanode.sql  --dn全局元数据信息

dump_output_datanode_dbname.sql   --dn上单个database的元数据信息,每个database一个

1.4      数据重分布

1.4.1        数据重分布监控

在进入数据重分布阶段后,可同时打开多个连接到第一个cn节点的窗口,从如下维度对数据重分布进行全方位监控:

1)        完成表数和剩余表数

watch -n 3 "gsql -d postgres -p 25308 -c ' select * from redis_progress order by name;'"

2)        活跃语句数及运行时长

watch -n 3 "gsql -d postgres -p 25308 -c \"select application_name,pid,(current_timestamp - query_start) as runtime,query from pg_stat_activity where application_name='gs_redis'  and state != 'idle' order by runtime desc;\""

3)        新节点io

选择一个新节点,执行如下命令监控io

iostat -xm 2

4)        老节点io

选择一个老节点,执行如下命令监控io

iostat -xm 2

5)        重分布日志

omm用户登录第一个cn节点,进入如下目录,

cd /var/log/Bigdata/mpp/omm/bin/gs_redis

找到最新的gs_redis开头的日志文件

ls -lrt

监控重分布日志

tail -f gs_redis-xxxx.log

1.4.2        查询有哪些表还未重分布

重分布过程中或估算剩余时间窗是否足够时,需要查看还剩多少表未重分布,步骤如下:

1、  找到老的nodegroup名称old_group_name

select group_name from pgxc_group where in_redistribution='y';

2、  分别连接每个database统计各个database下未重分布的表数量

select count(*) from pgxc_class where pgroup='old_group_name';

3、  如果想知道具体未重分布的表名称,可换成如下sql

select pcrelid::regclass from pgxc_class where pgroup='old_group_name';

1.4.3        查看超过100G的未重分布的大表

数据重分布过程中如果想查看还有多少超过100G的大表未重分布,可按如下步骤查询:

找到老的nodegroup名称old_group_name

select group_name from pgxc_group where in_redistribution='y';

分别连接每个database统计多少张超100G大表未重分布

select count(*) from pg_class c, pgxc_class pc where c.oid=pc.pcrelid and pc.pgroup='old_group_name' and c.relpages*8192/1024/1024>100;

分别连接每个database列出超100G未重分布大表清单

select pc.pcrelid::regclass from pg_class c, pgxc_class pc where c.oid=pc.pcrelid and pc.pgroup='old_group_name' and c.relpages*8192/1024/1024>100;

 

注意:此处超100G大表是按统计信息估算。

1.4.4        手动终止数据重分布

数据重分布过程中出于调整并发、等各种原因,可能需要暂时终止重分布。具体步骤如下:

1、  omm用户登录第一个cn节点;

2、  找到gs_redis进程并将其kill -9 杀掉

ps -ef |grep gs_redis|grep -v grep找到重分布进程pid

kill -9 pid 杀掉重分布进程

ps -ef |grep gs_redis|grep -v grep确认进程已被kill

3、  连接第一个cn,将数据重分布活跃语句全部终止掉

SELECT pg_terminate_backend(pid);

1.4.5        后台手动调用重分布命令

1、  omm用户登录第一个cn节点;

2、  调用重分布命令

source /opt/huawei/Bigdata/mppdb/.mppdbgs_profile

gs_expand -t redistribute --fast-redis --parallel-jobs=12 --redis-mode=read-only

1.4.6        跳过特定表

数据重分布过程中由于有些用户表存在倾斜、数据文件损坏等各种原因,可能需要暂时跳过这些表,先完成其它表的重分布。跳过特定表的具体步骤如下:

1、设置append_mode = off

alter table pgxc_redistb set (append_mode = off);

2、跳过指定表nspname.tb_name

select * from pgxc_redistb where relname = 'tb_name' and nspname=’nspname’;

update pgxc_redistb set redis_order = 0 where relname = 'tb_name' and nspname=’nspname’ and redistributed = 'n';

3、恢复表为只读模式

alter table pgxc_redistb set (append_mode = read_only);

4、确认是否生效

select redis_order from pgxc_redistb where relname = 'tb_name';

tb_nameredis_order字段改为0,则说明已跳过该表。

注意:跳过操作是暂时的,最终在完成其它表之后仍然需要完成这些跳过表的重分布,否则集群仍然处于重分布状态。

1.4.7        手动还原正在重分布表的append_mode

重分布终止后,正在重分布的表无法自动设回append_mode=off,此时业务上如要对这些表执行插入操作将无法执行,需要先对这些表手动设置append_mode=off,方法如下:

1、找到正在重分布的表

select 'alter table '||a.nspname||'.'||b.relname||' set (append_mode = off);' from pg_namespace a, pg_class b where a.oid=b.relnamespace and b.reloptions::text like '%read_only%' and b.relname <> 'pgxc_redistb';

2、修改append_mode

alter table table_name set (append_mode = off);


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。