Agentic AI、具身智能、强化学习框架、端侧大模型……来QCon上海站,感受AI的未来! 了解详情
写点什么

GBase 8a MPP 集群扩容实战

  • 2020-04-14
  • 本文字数:4687 字

    阅读完需:约 15 分钟

GBase 8a MPP集群扩容实战

本文由 dbaplus 社群授权转载。

一、背景

由于业务模型的发展及数据周期保留的需要,最近某省运营商计划将对现有 GBase 8a 集群进行扩容,从现有的 3coor+21data 节点扩到 3coor+61data 节点。


当前 GBase 8a 集群版本是 GBase8a_MPP_Cluster-NoLicense-8.6.2_build33-R12-redhat7.3-x86_64。新增的 40 个节点只作为数据节点。本人有幸参与其中,负责具体的扩容及后续数据重分布操作。

二、环境信息

1、硬件配置信息


CPU:


  • CPU 数:4*8C (4 个物理 cpu,每个物理 cpu 有 8 个逻辑 cpu)


内存:


  • MemTotal: 512GB


2、软件版本


GBase 8a 集群版本 GBase8a_MPP_Cluster-NoLicense-8.6.2_build33-R12-redhat7.3-x86_64


3、扩容机器规划


为保证应用接入接口 ip 地址群不变,扩容后,仍保留 3 个 coordinator(管理节点)节点不变,扩容 40 节点均为 data(数据)节点。规划主机名为 gbase25-gbase64。

三、实施前准备

1、扩容实施的网络环境需求


现场的网络环境是原集群的 24 台服务器和新扩容 40 台服务器均为内网万兆,外网千兆,双网卡绑定,网络测试结果符合扩容要求。


2、扩容实施的存储空间需求


为保证扩容实施的绝对安全,需要每台服务器具有足够的空间用来存放重分布的临时数据。集群已有节点每节点 opt 目录有空闲空间 13TB,根目录空闲空间 439GB;新增节点 opt 有空闲空间 22TB,根目录空闲空间 149GB,符合扩容要求。


检查发现有两台服务器(IP 地址为 190、193)磁盘写速度明显异常,主机人员确定是 RAID 卡电池故障,修复后磁盘读写速度正常。



3、扩容实施的服务器需求


统一 MPP 集群节点的操作系统版本。扩容前已将新扩容节点操作系统统一重新集成,与集群已有节点操作系统版本一致,为 rhel7.3,符合扩容要求。

四、扩容实施

1、添加新增节点 root 及 gbase 用户互信


-- root用户scp -r ~/.ssh 192.168.200.12:~/-- gbase用户scp -r ~/.ssh 192.168.200.12:~/
复制代码


2、配置 C3 工具(该工具用于 GBASE 各节点同时执行执行命令)


-- root用户vi /etc/c3.conf 添加cluster new {     192.168.200.11:redhat1     192.168.200.12}
复制代码


3、使用 C3 工具配置扩容节点环境


-- 操作系统cexec new_data: new: 'cat /etc/redhat-release'-- 内核cexec new_data: new: 'uname -a'-- 防火墙cexec new_data: new: 'service iptables status'cexec new_data: new: 'service ip6tables status'cexec new_data: new: 'chkconfig | grep iptables'cexec new_data: new: 'chkconfig | grep ip6tables'-- selinuxcexec new_data: new: 'sestatus'cexec new_data: new: 'grep ^SELINUX= /etc/selinux/config'-- 内存参数cexec new_data: new: 'ulimit -H'cexec new_data: new: 'ulimit -S'cexec new_data: new: 'ulimit -m'-- vi /etc/security/limits.config 添加-- * soft as unlimited-- * hard as unlimited-- * rss as unlimited-- 透明大页cexec new_data: new: 'cat /sys/kernel/mm/redhat_transparent_hugepage/enabled'-- echo "never" > /sys/kernel/mm/redhat_transparent_hugepage/enabled-- 主机名检查cexec new_data: new: 'hostname'
复制代码


4、设置集群 readonly 后备份集群信息


-- 修改/etc/hostsvi /etc/hosts 添加新增节点信息并同步到新增节点-- 确认集群正常gcadmingcadmin showddleventgcadmin showdmleventgcadmin showdmlstorageevent-- 设置集群readonlygcadmin switchmode readonly-- scn tableid 备份cexec 'python -c "import gcware;print gcware.getscn()"'cexec 'python -c "import gcware;print gcware. gettableid ()"'-- 版本信息查看cexec "/opt/gcluster/server/bin/gclusterd -V"cexec "gcadmin -V"cexec data: "/opt/gnode/server/bin/gbased -V"cexec 'gccli -ugbase -pgbase20110531 -Nse "select @@version"'-- 数据库信息备份sh backup_database.shls -l /home/gbase/gbase_expand/201811-- nodedatamap备份gccli -ugbase -pgbase20110531 -vvv -e"rmt:select * from gbase.nodedatamap  into outfile '/home/gbase/gbase_expand/201811/nodedatamap.dat' fields terminated by '|'"wc -l /home/gbase/gbase_expand/201811/nodedatamap.dat-- 备份集群配置文件cexec "mkdir -p /home/gbase/gbase_expand/201811/gcluster"cexec "cp -r /opt/gcluster/config/ /home/gbase/gbase_expand/201811/gcluster/"cexec "ls /home/gbase/gbase_expand/201811/gcluster/config"cexec data: "mkdir -p /home/gbase/gbase_expand/201811/gnode"cexec data: "cp -r /opt/gnode/config/ /home/gbase/gbase_expand/201811/gnode/"cexec coor: "ls /home/gbase/gbase_expand/201811/gnode/config"-- 备份corosync配置文件cexec "cp -r /etc/corosync /home/gbase/gbase_expand/201811/"cexec "ls /home/gbase/gbase_expand/201811/corosync | wc -l"-- 备份gcware配置文件cexec "cp -r /var/lib/gcware /home/gbase/gbase_expand/201811/"cexec 'ls /home/gbase/gbase_expand/201811/gcware | wc -l'
复制代码


5、执行扩容


-- 停止集群cexec "service gcware stop"
--找到原来的升级包所在的目录-- 修改demo.optionscd gcinstall/vi demo.optionsinstallPrefix= /optcoordinateHost = dataHost = 134.32.48.8,134.32.48.11,134.32.48.13,134.32.48.14,134.32.48.46,134.32.48.47,134.32.48.48,134.32.48.50existCoordinateHost =134.32.48.208,134.32.48.209,134.32.48.210,134.32.48.211,134.32.48.212,134.32.48.213,134.32.48.214,134.32.48.215,134.32.48.216,134.32.48.217,134.32.48.218,134.32.48.219,134.32.48.220,134.32.48.221,134.32.48.222,134.32.48.223,134.32.48.224,134.32.48.225,134.32.48.226,134.32.48.227existDataHost =134.32.48.208,134.32.48.209,134.32.48.210,134.32.48.211,134.32.48.212,134.32.48.213,134.32.48.214,134.32.48.215,134.32.48.216,134.32.48.217,134.32.48.218,134.32.48.219,134.32.48.220,134.32.48.221,134.32.48.222,134.32.48.223,134.32.48.224,134.32.48.225,134.32.48.226,134.32.48.227loginUser= rootloginUserPwd = ' Huawei#123'#loginUserPwdFile = loginUserPwd.jsondbaUser = gbasedbaGroup = gbasedbaPwd = gbaserootPwd = ' Huawei#123'#rootPwdFile = rootPwd.jsondbRootPwd = 'Huawei@123'#mcastAddr = 226.94.1.39mcastPort = 5493
复制代码


-- 执行扩容./gcinstall.py --silent=demo.options-- 配置文件对比diff /opt/gcluster/config/gbase_8a_gcluster.cnf /home/gbase/gbase_expand/201811/gcluster/config/gbase_8a_gcluster.cnf diff /opt/gnode/config/gbase_8a_gbase.cnf /home/gbase/gbase_expand/201811/gnode/config/gbase_8a_gbase.cnfcexec data: md5sum /opt/gnode/config/gbase_8a_gbase.cnf-- 生成新的distribution(备份方式)gcadmin distribution gcChangeInfo.xml p 1 d 1-- 生成新的hashmapgccli -ugbase -pgbase20110531 -vvv -e"initnodedatamap"
复制代码


6、扩容完成集群可用性基本验证


增删改查测试create database db_test;create table db_test.t1(c1 int,c2 int) distributed by ('c1');insert into db_test.t1 values (1,1),(2,2),(3,3);update db_test.t1 set c2=10 where c1=1;select * from db_test.t1;delete from db_test.t1 where c1>=3;select * from db_test.t1;truncate table db_test.t1;数据加载测试load data infile 'sftp://gbase:gbase@192.168.200.11/tmp/t1.txt' into table db_test.t1 fields terminated by ':';select count(1) from db_test.t1;drop table db_test.t1;drop database db_test;
复制代码

五、数据重分布

所有的 MPP 集群由于数据分布在很多数据节点,所以在扩容操作完成后,为了避免数据倾斜,需要将所有的业务表数据重分布到所有数据节点(包括扩容节点)。


-- 重分布-- 设置重分布并发度为0gccli -ugbase -pgbase20110531 -vvv -e"set global gcluster_rebalancing_concurrent_count=0"gccli -ugbase -pgbase20110531 -Ns -e"select @@gcluster_rebalancing_concurrent_count"-- 重分布整个实例gccli -ugbase -pgbase20110531 -vvv -e"rebalance instance"gccli -ugbase -pgbase20110531 -Ns -e"select count(1) from gclusterdb.rebalancing_status"-- 调整优先级create table test.reb_tab(db_name varchar(64),table_name varchar(64),priority int) replicated;-- 插入优先级高的表insert into test.reb_tab values ('test','t1',1),('test','t2',2);update gclusterdb.rebalancing_status a, test.reb_tab b set a.priority=b.priority where a.db_name=b.db_name and a.table_name=b.table_name ;select count(1) from gclusterdb.rebalancing_status where priority<5; -- 调整重分布并发度gccli -ugbase -pgbase20110531 -vvv -e"set global gcluster_rebalancing_concurrent_count=1"gccli -ugbase -pgbase20110531 -Ns -e"select @@gcluster_rebalancing_concurrent_count"-- 暂停重分布gccli -ugbase -pgbase20110531 -vvv -e"pause rebalance instance"gccli -ugbase -pgbase20110531 -Ns -e"select status,count(1) from gclusterdb.rebalancing_status group by 1"-- 继续重分布gccli -ugbase -pgbase20110531 -vvv -e"continue rebalance instance"gccli -ugbase -pgbase20110531 -Ns -e"select status,count(1) from gclusterdb.rebalancing_status group by 1"-- 等待重分布完成-- 恢复业务
复制代码

六、效率分析

在扩容中各步骤的分别耗时情况:


  • 扩容:24 日 18:30 ~ 24 日 20:20,耗时约 2 小时;

  • 重分布:一共 8802 张表,231T 的数据量,24 日 20.25 ~ 26 日 10.36,耗时约 38 小时,原计划 91 个小时(以工程经验 35MB/s 的速度计算)。


注:因为有一张分布极不平均的表,全部数据落在一个节点,70 个字段,75 亿记录,13 压缩,单个分片 350GB。仅这一张表重分布就用了 12 小时。除掉这张一表以外,8801 张表实际用时 27 小时(24 日 20:25~25 日 23:25),达到 118MB/s,重分布速度远远超出预期。

七、经验总结

1、MPP 集群一般在做数据重分布操作的时候,必须要考虑到业务调度的执行时间,因为重分布操作可能会造成业务表锁表从而影响业务调度的正常执行,本次扩容操作前调研数据同步时间为 2 点到下午 15 点,调度执行周期较长,采用在调度执行前将所有调度需要的业务表,提高重分布优先级,提前完成重分布,调度执行期间降低重分布的并发度,从而做到能够做到 24 小时重分布,且不影响生产调度。如果日调度时间较短或者表过多无法筛选那些表为调度执行需要表的情况下,建议错时重分布数据。


2、新加节点除了考虑和本集群的网络打通外,需要考虑到与数据加载机,与 hadoop 集群(如果配置了 hdp 加载数据的话)的网络连通。


3、扩容前最好检查下表的倾斜情况,倾斜较大的表建议调整分布键,以防止本次扩容类似“因为有一张分布极不平均的表,全部数据落在一个节点,70 个字段,75 亿记录,13 压缩,单个分片 350GB。仅这一张表重分布就用了 12 小时”的情况。


作者介绍


汪浩,新炬网络核心业务系统 DBA,主要涉及 Oracle、Greenplum、Gbase 等数据库管理、IT 运维管理工作,对数据库多业务场景性能优化有着丰富的实践经验,专注于数据库性能优化、IT 运维自动化工作。


原文链接


https://mp.weixin.qq.com/s?__biz=MzI4NTA1MDEwNg==&mid=2650787161&idx=2&sn=1e5957e9d70401ad26b06d40b26e5fc7&chksm=f3f978ccc48ef1dad1e354e53d35b3edac8b522c34dc3b354cbfa3852ebc435e188c99778a82&scene=27#wechat_redirect


2020-04-14 14:021487

评论

发布
暂无评论
发现更多内容

应用场域的深度融合与创新构想

百度开发者中心

#人工智能 ChatGPT 大模型微调

从理解到实现:一种强大的AI技术

百度开发者中心

深度学习 #人工智能 生成式AI

国密算法是什么意思?支持国密算法的云管平台哪家好?

行云管家

云计算 云管平台 云管理 国密 国密浏览器

TDengine 与煤矿智能 AI 视频管理系统实现兼容性互认

TDengine

时序数据库 #TDengine 恒达智控

用友iuap 技术平台:创新基础架构,赋能企业数智化转型

用友BIP

数智底座 2023全球商业创新大会

基于开源IM即时通讯框架MobileIMSDK:RainbowChat v10.0版已发布

JackJiang

网络编程 即时通讯 IM

坐标休斯顿,TDengine 受邀参与第九届石油天然气数字化大会

TDengine

时序数据库 #TDengine

人民日报发文祝贺,这位作者是藏不住了!

博文视点Broadview

第1期 | 抚今 现代企业已步入新的项目制管理时代

用友BIP

项目管理

创新性与自主性的融合

百度开发者中心

AIGC #人工智能 生成式AI

未来社交媒体的变革者

百度开发者中心

媒体服务 #人工智能 生成式AI

推送服务本地通知频次及分类管控通知

HarmonyOS SDK

HMS Core

分布式系统的主键生成方案对比 | 京东云技术团队

京东科技开发者

分布式系统 uuid 企业号9月PK榜 主键生成

NFTScan Meetup 上海站主题分享:TON 的发展现状与未来展望

NFT Research

NFT\

文盘Rust -- tonic-Rust grpc初体验 | 京东云技术团队

京东科技开发者

rust gRPC 虚拟操作系统 企业号9月PK榜

iOS16新特性:实时活动-在锁屏界面实时更新APP消息 | 京东云技术团队

京东科技开发者

iOS16 企业号9月PK榜 Live Activity

【ChatGPT-应用篇】基于chatGPT覆盖测试过程的初步探索 | 京东物流技术团队

京东科技开发者

人工智能 测试 ChatGPT 企业号9月PK榜

大模型开发:从数据挖掘到智能应用

百度开发者中心

AIGC #人工智能 大模型微调

从过去5年CWE TOP 25的数据看软件缺陷的防护

云计算 软件开发 代码

http代理ip服务器有哪些?代理服务器有什么作用?

巨量HTTP

代理IP http代理

Hologres RoaringBitmap实践:千亿级画像数据秒级分析

阿里云大数据AI技术

大数据 阿里云

万字长文教你实现华为云IoT+OpenHarmony智能家居开发

华为云开发者联盟

鸿蒙 物联网 华为云 华为云开发者联盟 企业号9月PK榜

一文详解数据仓库的物理细粒度备份恢复

华为云开发者联盟

数据库 大数据 华为云 华为云开发者联盟 企业号9月PK榜

“融合康养产业、乐享宜居灞桥”灞桥康养论坛成功举办

联营汇聚

微调语言模型前,需要考虑这三个关键方面

Baihai IDP

AI LLM 白海科技 大模型微调 Baihai IDP

简单好用的音频播放器:Infuse 激活中文最新版

胖墩儿不胖y

媒体播放器 Mac软件 播放器推荐

GBase 8a MPP集群扩容实战_软件工程_dbaplus社群_InfoQ精选文章