写点什么

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

评论

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

【JS】防抖与节流---在定义时返回的是回调函数

Sam9029

JavaScript 前端 防抖节流 9月月更

库调多了,都忘了最基础的概念 《锁与线程2终结篇》

知识浅谈

线程 9月月更

学人工智能难吗?怎么用它赚到钱?

felix

人工智能 赚钱 副业赚钱 算法

LeetCode-861. 翻转矩阵后的得分(Java)

bug菌

9月日更 9月月更

「趣学前端」今日祝福不限量,批量导入在路上

叶一一

前端 设计思维 9月月更

这个中秋,国潮元宇宙的A新玩法是……?

文心大模型

Java进阶(十三)servlet监听器

No Silver Bullet

Java Servlet 9月月更

HTML笔记3

喜羊羊

9月月更

LeetCode-1. 两数之和(java)

bug菌

9月日更 Leet Code 9月月更

Web & Electron 平台即时通讯产品的技术选型

融云 RongCloud

Web Electron 即时通讯

使用 Angular Transfer State 的一个具体例子

汪子熙

typescript 前端开发 angular Web Component 9月月更

HTML笔记2

喜羊羊

9月月更

数据治理(十二):Ranger2.1.0源码编译

Lansonli

数据治理 9月月更

「工作小记」多个页面的相似操作公共化设计方案

叶一一

前端 设计思维 9月月更

社招前端二面常见面试题

coder2028

JavaScript 前端

C++学习------cmath头文件的源码学习02

桑榆

c++ 9月月更

「工作小记」后台系统代码简洁之路-详情页设计

叶一一

前端 设计模式 React Hooks 9月月更

HTML笔记1

喜羊羊

9月月更

当代用电行为大赏:有人心疼电费,有人靠屋顶光伏“理财”

脑极体

哈希索引

急需上岸的小谢

9月月更

「趣学前端」前端设计模式学习与应用

叶一一

前端 设计模式 9月月更

redis数据类型以及它们的底层实现数据结构

想要飞的猪

力扣429 - N叉树的层序遍历【BFS+DFS】

Fire_Shield

LeetCode DFS BFS 9月月更

Nodejs安装及环境配置

nodejs NVM 9月月更

Java进阶(十)tomcat中context配置

No Silver Bullet

tomcat Context 9月月更

2022-09-09:给定一个正整数 n,返回 连续正整数满足所有数字之和为 n 的组数 。 示例 1: 输入: n = 5 输出: 2 解释: 5 = 2 + 3,共有两组连续整数([5],[2,

福大大架构师每日一题

算法 rust 福大大

全球新兴市场移动应用报告

易观分析

移动应用

Ansible如何使用lookup插件模板化外部数据

山河已无恙

ansible 9月月更

【C语言深度剖析】重点详解函数的形参和实参、传值和传址

Albert Edison

开发语言 传值 C语音 9月月更 传址

Python 教程之数据分析(7)—— Jupyter Notebook 入门

海拥(haiyong.site)

Python 9月月更

Python 教程之变量(1)—— 变量、表达式、条件和函数

海拥(haiyong.site)

Python 9月月更

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