? GBase 8a MPP集群扩容实战 - 公司新闻 | 新炬网络
當前位置: 首頁 > 關于新炬 > 新聞資訊 > 正文

GBase 8a MPP集群擴容實戰

2020-07-01 08:38:49
作者介紹

汪浩,新炬網絡核心業務系統DBA,主要涉及Oracle、Greenplum、Gbase等數據庫管理、IT運維管理工作,對數據庫多業務場景性能優化有著豐富的實踐經驗,專注于數據庫性能優化、IT運維自動化工作。

一、背景

 

由于業務模型的發展及數據周期保留的需要,最近某省運營商計劃將對現有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'

-- selinux

cexec 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/hosts

vi /etc/hosts 添加新增節點信息并同步到新增節點

-- 確認集群正常

gcadmin

gcadmin showddlevent

gcadmin showdmlevent

gcadmin showdmlstorageevent

-- 設置集群readonly

gcadmin 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。sh

ls -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.options

cd gcinstall/

vi demo。options

installPrefix= /opt

coordinateHost = 

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.50

existCoordinateHost =

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。227

existDataHost =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.227

loginUser= root

loginUserPwd = ' Huawei#123'

#loginUserPwdFile = loginUserPwd.json

dbaUser = gbase

dbaGroup = gbase

dbaPwd = gbase

rootPwd = ' Huawei#123'

#rootPwdFile = rootPwd.json

dbRootPwd = 'Huawei@123'

#mcastAddr = 226.94.1.39

mcastPort = 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.cnf

cexec data: md5sum /opt/gnode/config/gbase_8a_gbase。cnf

-- 生成新的distribution(備份方式)

gcadmin distribution gcChangeInfo.xml p 1 d 1

-- 生成新的hashmap

gccli -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集群由于數據分布在很多數據節點,所以在擴容操作完成后,為了避免數據傾斜,需要將所有的業務表數據重分布到所有數據節點(包括擴容節點)。

 

 

-- 重分布

-- 設置重分布并發度為0

gccli -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小時”的情況。

上一篇:新炬網絡入選CB Insights中國企業服務競爭力榜單
下一篇:大型金融企業DevOps持續交付實踐

1688网赚联盟 支付宝网赚活动真实吗 北京赛车pk10APP网资讯 湖北快3走势 什么网赚真实啊 福缘网赚论坛 58日付网赚联盟怎么样 江西11选5 六合开奖网址 网赚兼职