GaussDB(DWS)扩容问题定位指南(一)
扩容问题定位指南(一)
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_name的redis_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);
- 点赞
- 收藏
- 关注作者
评论(0)