HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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

评论

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

豆瓣评分8.0!深入理解Java虚拟机,把GC算法与实现讲得明明白白!

Java永远的神

程序员 面试 JVM GC Java虚拟机

「Go工具箱」web中想做到cookie值安全?securecookie库的使用和实现原理

Go学堂

golang 开源 程序员 Cookie WEB安全

LED显示屏设计和安装比例有什么联系

Dylan

LED显示屏 户外LED显示屏 led显示屏厂家

数据可视化分析之新技能——魔数图

葡萄城技术团队

数据分析 前端 可视化 商业智能

重磅发布.NET 7!更快、更强、更统一

Azure云科技

.NET 7

云BI,如何成为了企业的“贴身管家”?

夏日星河

为什么电脑主板晶振多采用14.318MHz和32.768KHz ?

元器件秋姐

晶振 元器件 元器件电商平台 元器件采购

Databend 在 MinIO 环境使用copy 命令 | 新手篇(3)

Databend

开源密码管理器更安全吗?(2)

神锁离线版

开源 网络安全 信息安全 数据安全 密码管理器

【C语言】do 关键字

謓泽

11月月更

云原生系列五:Kafka 集群数据迁移基于Kubernetes的内部

叶秋学长

kafka\ kurbernetes 11月月更

Oracle 表空间创建标准(二)

默默的成长

oracle 前端 11月月更

链表只有面试有用?Redis 之父说:我不同意!

图灵教育

算法 链表 Redis 数据结构

火山引擎钜惠双11开启,云服务器0.71折起

Geek_2d6073

HummerRisk 快速入门教程

HummerCloud

云安全 云原生安全 11月月更 HummerRisk

华为云发布三大生态举措,携手伙伴及开发者共创新价值

华为云开发者联盟

云计算 华为云 企业号十月 PK 榜

双11niubility的数据恢复软件,获得更专业的数据恢复服务

淋雨

数据恢复 文件恢复

应用现代化产业联盟,正式成立

华为云开发者联盟

云计算 华为云 企业号十月 PK 榜

用火山引擎DataTester,这家企业开始了“数据驱动增长”

字节跳动数据平台

内存数据库如何发挥内存优势?

C++后台开发

算法 内存数据库 后端开发 linux开发 C++开发

七层模型

初学者

网络 服务器 11月月更

SQL编写规范

默默的成长

前端 sql 11月月更

React组件通信

xiaofeng

React

Git本地提交代码推送远程并未统计贡献量问题分析

Andy

链表只有面试有用?Redis 之父说:我不同意!

图灵社区

算法 链表 Redis 数据结构

双十一剁手快,ERP系统不能慢

力软低代码开发平台

KeeWiDB的高性能修炼之路:架构篇

腾讯云数据库

数据库 nosql redis 腾讯云数据库 KeeWiDB

CSS 如何实现五彩斑斓的“呼吸字”?速度拿去装杯!

掘金安东尼

CSS 11月月更

MindStudio模型训练场景精度比对全流程和结果分析

华为云开发者联盟

人工智能 华为云 企业号十月 PK 榜

开源遇上华为云——DataX for HuaweiCloud OBS

华为云开发者联盟

开源 后端 华为云 企业号十月 PK 榜

阿里这份Java程序性能优化指南,让你的程序快上200%

小小怪下士

Java 程序员 性能优化

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