写点什么

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:021273

评论

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

【JUC】循环屏障CyclicBarrier详解

JAVA旭阳

Java 并发 JUC

SAP MM 使用两个STO实现免关税跨国公司间转储(II)

SAP虾客

SAP MM PO输出 NACE

实践案例:同程艺龙网的 Dubbo 升级经验总结

Apache Dubbo

Java 开源 微服务 云原生 dubbo

大数据培训学习分析师怎么样

小谷哥

meta force原力元宇宙魔豹联盟矩阵公排dapp系统开发源代码

开发微hkkf5566

【0.1mm钻孔】揭秘激光钻孔加工常见的4种方法

华秋PCB

工艺 PCB PCB设计 钻孔

零售品牌如何挑选达人KOL?火山引擎VeDI有妙招!

字节跳动数据平台

大数据 营销 营销数字化 12 月 PK 榜

安全配置错误规避指南

SEAL安全

配置管理 企业安全 安全配置 配置错误 12 月 PK 榜

MASA Framework 事件总线 - 跨进程事件总线

MASA技术团队

.net MASA Framewrok MASA

web前端培训程序员学习怎么提升技术

小谷哥

一种多引擎可视化数据流实现方案

元年技术洞察

数据中台 数字化转型 专利解析 方舟企业数字化 PaaS 平台

瓴羊Quick BI带给企业新发展,企业数字营销和运营变得格外简单

对不起该用户已成仙‖

Dubbo 3.1.3、3.2.0-beta.2 正式发布

Apache Dubbo

Java 开源 微服务 云原生 dubbo

旺链科技荣膺“2022上海软件核心竞争力企业”

旺链科技

区块链 产业区块链 12 月 PK 榜

打造无证服务化:这个政务服务平台有点不一样

华为云开发者联盟

区块链 华为云 12 月 PK 榜

web前端培训程序员学习什么呢

小谷哥

【JVM故障问题排查心得】「内存诊断系列」JVM内存与Kubernetes中pod的内存、容器的内存不一致所引发的OOMKilled问题总结(上)

洛神灬殇

Docker Kubernetes 容器 JVM 12月日更

瓴羊Quick BI数据大屏,服务企业数字化转型发展

巷子

大数据培训学习编程技术的方法有哪些

小谷哥

【云享·人物】华为云AI高级专家白小龙:AI如何释放应用生产力,向AI工程化前行?

华为云开发者联盟

人工智能 华为云 AI工程化 12 月 PK 榜

将 Vue.js 项目部署至静态网站托管,并开启 Gzip 压缩

华为云开发者联盟

开发 华为云 12 月 PK 榜

云原生大数据平台零信任网络安全实践技术稿

星环科技

嵌入式系统的开发概述

timerring

嵌入式 12月月更

云小课|云小课带你玩转可视化分析ELB日志

华为云开发者联盟

云计算 后端 华为云 12 月 PK 榜

上海大数据培训机构怎么选择比较好

小谷哥

Serverless 架构下的 AI 应用开发

Serverless Devs

React 之 createElement 源码解读

冴羽

JavaScript 前端 前端框架 React react源码

刷新AI作图速度,最快开源Stable Diffusion出炉

OneFlow

人工智能 深度学习 前沿技术

Zebec节点Zepoch销量接近800个,生态发展信心十足

股市老人

阿里云视觉智能开放平台——年终特惠来袭

夏夜许游

人工智能 AI 视觉 特惠

【JVM故障问题排查心得】「内存诊断系列」JVM内存与Kubernetes中pod的内存、容器的内存不一致所引发的OOMKilled问题总结(下)

洛神灬殇

JVM 12月日更 堆外内存 内存干扰

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