logo
GBase 8a
运维管理
文章

GBase 8a MPP Cluster 多实例最佳实践(上)

GBase用户17199
发表于2024-07-04 15:56:26613次浏览0个评论

1 概述

1.1 概述

GBase 8a MPP Cluster在高配服务器及NUMA架构(非统一内存访问架构,简称NUMA架构)服务器上部署时,一个服务器只部署一个数据库实例,存在无法有效利用服务器硬件资源的情况。如:

  • 当服务器内存大于300G时,单个数据库实例难以有效利用所有内存;
  • 当服务器CPU逻辑核数大于40时,单个数据库实例无法随核数的增加而性能线性提升;
  • 当服务器采用NUMA架构并具有多个NUMA节点时,单个数据库实例频繁的跨NUMA节点访问内存资源,性能不是最优;
  • 单个数据库实例无法发挥SSD/NVME等新硬件的处理能力。

GBase 8a MPP Cluster V9.5.3版本正式提供多实例部署功能。通过在一个服务器上部署多个数据库实例的方式可以解决上述服务器硬件性能无法充分利用的问题,进而提升集群的性能。
根据实际测试情况,在NUMA架构及高配服务器上采用多实例部署的方式可以有效提升集群性能,比单实例部署时的性能提升1倍以上。
本文档用于介绍GBase 8a MPP Cluster V9.5.3版本在多实例部署场景下的安装过程、配置建议、管理方法等内容。

1.2 名词解释

本文涉及的术语解释如下:

术语/定义含    义
多实例多个数据库实例部署的简称,也称多实例部署。是指在一个物理服务器上部署多个data集群节点;每个data集群节点称为一个数据库实例。
NUMANon Uniform Memory Access,非同一内存访问
gcware节点管理集群的节点,GCWare 用于各 GCluster 间共享信息
gcluster节点调度集群的节点,GCluster 负责 SQL 的解析、SQL 优化、分布式执行计划生成、执行调度。 
data节点Data集群的节点,又称gnode节点,由data节点组成data集群,是数据的存储、计算单元。

2 多实例安装部署

2.1 部署方案

GBase 8a MPP Cluster在每个服务器上安装部署多个data节点。每个data节点都需要配置一个独立IP地址,不同节点间通过IP地址来区分。每个物理服务器上最多只能安装一个gcluster节点和一个gcware节点。
多实例部署示意图如下:

在进行集群部署前,需要规划和完成如下工作:

每个服务器上部署实例个数评估和确定

根据每个服务器的numa节点个数、内存大小、集群规模、业务场景(负载)等评估每个服务器上部署的数据库实例个数。通常建议一个物理服务器上部署不超过4个数据库实例,每个数据库实例的可用内存不低于64GB。

IP地址资源规划

需要为每个数据库实例申请一个IP地址,用于集群内部节点间通信。建议物理服务器上配置多块网卡,并进行网卡的负载均衡方式绑定(海光和鲲鹏的网卡配置参考后续文章)。

磁盘规划

建议不同的数据库实例使用不同的磁盘组进行磁盘IO隔离。如为每个数据库实例配置一个raid5磁盘组。

集群架构确定

建议gcware节点、gcluster节点的个数为奇数个,每个物理服务器上最多只能部署1个gcware节点和1个gcluster节点。建议gcware节点和gcluster节点部署在一个numa节点上,不与data节点部署在一起。

确认服务器及操作系统环境满足GBase 8a集群的安装部署要求

详见GBase 8a MPP Cluster产品手册。

2.2 集群安装

安装示例中服务器IP如下:

服务器1:
IP1:192.168.146.20
IP2:192.168.146.40

服务器2:
IP3:192.168.146.21
IP4:192.168.146.41

当前集群版本的限制

1、安装包中只对redhat、suse、centos进行判断,其它系统未做判断,如果是其它系统,需要手动注释掉相关检查CheckOSType、CheckRpms
2、支持Python版本2.6、2.7,不支持python3
3、一台物理机上最多只能有一个coor和一个gcware,并且coor和gcware必须是同一个ip

2.2.1 配置多IP

配备多个万兆网卡的服务器,应进行多个网卡的绑定,在保证网络高可用的基础上还能够提供最大限度网络带宽。

  • 在单个网卡或绑定后的网卡上,为每个数据库实例配置一个IP地址。配置样例如下(注意修改为网卡对应文件名):

vim /etc/sysconfig/network-scripts/ifcfg-p6p2 

以上蓝色部分为添加内容,IPADDR1为第一个虚拟IP地址,NETMASK1为第一个虚拟IP的子网掩码,后边依此类推。NETMASK要和实体ip对应的NETMASK保持一致,如果不添加此参数,虚拟ip分配的子网可能与实体ip不一致。

  • 多个网卡不进行网卡绑定的情况下,每个实例配置一个网卡,样例如下:

网络配置修改后需要执行下面重启命令使其生效:
service network restart / systemctl restart network

2.2.2 准备安装

参照产品手册中GBase 8a集群的安装步骤,在正式安装前还需进行:

在每个服务器上创建gbase用户

useradd gbase
passwd gbase

将安装文件上传到其中一个服务器并解压

tar xjf GBase8a_MPP_Cluster-NoLicense-9.5.3.17-redhat7.3-x86_64.tar.bz2
chown –R gbase:gbase gcinstall

安装包解压后,将SetSysEnv.py文件scp到所有服务器,在所有服务器root用户执行SetSysEnv.py进行环境变量配置:

scp SetSysEnv.py  root@192.168.146.21:/opt
python SetSysEnv.py --installPrefix=/opt --dbaUser=gbase

调整/opt安装路径的权限,使gbase系统用户能够写入文件

drwxr-x---.   6 gbase gbase  157 1月  28 18:59 opt

修改安装配置文件demo.options,如下:

2.2.3 执行安装

使用gbase系统用户执行安装:python gcinstall.py --silent=demo.options

2.2.4 获取License

如果安装的是nolicense版本,则忽略该章节。

1.指纹采集

每台物理机只有一个指纹,只需使用这台物理机多实例中任意一个实例的IP来获取指纹,指纹与IP无关,单台物理机上添加或减少实例均不影响指纹获取。
使用root用户,切换到gcinstall目录,取多实例服务器任意一个实例 IP,执行下面命令获取指纹。
./gethostsid -n 192.168.146.20,192.168.146.21  -u gbase -p gbase -f hostsfingers.txt
如果多实例服务器取了多个IP会报机器重复错误,需要保证一台机器只采集一次指纹。

2.生成license

将hostsfingers.txt文件以邮件方式发到原厂获取license。

3.导入license

导入license需要给所有实例都导入,所有IP需写全所有实例的IP。
./License -n 192.168.146.20,192.168.146.21,192.168.146.40,192.168.146.41 -u gbase  -p gbase  -f gbase.lic
注:
如果多实例服务器的data节点目录下有未导入gbase.lic的,可将gbase.lic手动拷贝到该data节点下,如:
scp /opt/192.168.146.21/gcluster/config/gbase.lic gbase@192.168.146.41:/opt/192.168.146.41/gcluster/config/

2.2.5 集群初始化

配置distribution、执行初始化,详见GBase 8a MPP Cluster产品手册。
gcadmin createvc  vc.xml

gcadmin distribution gcChangeInfo.xml p 1 d 1 vc vc1

注意:
为保持多实例下的数据高可用,需要保证同一data节点的主备分片在不同的服务器上。将同一服务器的多个ip写到gcChangeInfo.xml文件中的同一个<rack>组内,确保使用pattern 1高可用模式生成的数据分布的主备分片在不同的物理服务器上,具体请参考后续集群高可用章节。

2.3 NUMA绑定

对于NUMA架构的高配服务器,安装多实例后,一台服务器上有多个gbase实例,建议将numa节点平均分配给不同的gbase实例进行绑定。比如8numa的服务器上运行了两个gbase实例,建议每个gbase实例绑定4个numa节点。

2.3.1 查看NUMA组

NUMA架构服务器需要在每个服务器上提前安装numactl,如下:

注意:必须安装此功能,启动服务时依赖这个功能。
使用numastat命令查看服务器的NUMA组,如下举例是4个numa节点和8个numa节点的样例。根据numa节点数的不同,可以分为1个numa节点对应一个实例(ip)或者2个numa节点对应一个实例(ip),又或者4个numa节点对应一个实例(ip)等。

4个numa节点:

8个numa节点:

2.3.2 GBase 8a实例绑定numa节点

对于只部署了多个data节点(gbase实例)的服务器,建议将服务器的CPU、内存以NUMA节点的形式,按照data节点个数均匀的分配给不同的实例。对于既部署了data节点(gbase实例),同时又部署了gcluster、gcware节点的服务器,建议将gcluster和gcware节点部署在一个NUMA节点上。

GBase 8a实例与NUMA节点的绑定关系,是通过调整gcluster_services脚本配置绑定的。
安装多实例后,由于集群服务启动命令gcluster_services是指向任意实例(包括gnode实例和gcluster实例)下的gcluster_services脚本,所以可以指定某个实例的gcluster_services文件进行添加绑定命令,如修改IP/gnode/server/bin下的gcluster_services文件进行添加绑定。
后续启动数据库服务有两种方法:

方法一:每次启动数据库服务都使用该修改过的gcluster_services文件

cd  IP/gnode/server/bin
./gcluster_services all start

方法二:将该修改过的gcluster_services文件拷贝替换所有实例下的gcluster_services文件(包含IP/gnode/server/bin/gcluster_services、IP/gcluster/server/bin/gcluster_services),后续每次启动数据库服务命令不变,仍使用集群常规的启动命令:

gcluster_services all start

样例:服务器8numa,绑定关系为1实例绑定4numa

任意选定一个实例的gnode/server/bin下gcluster_services文件,修改两处:
第一处原文如下(约410行处):

修改为:

注解:
numactl --membind=nodes program(nodes写要分配的节点0或1或者其它节点数,后面是程序,可以写绝对路径,也可写服务启动脚本)
numactl --cpunodebind=nodes program(nodes为cpu节点,后面跟程序)
第二处原文如下(约500行处):
gcluster_services all start 的执行代码

修改为:

第三处原文如下(约450行处):
gcluster_services gbase|syncserver start的执行代码

修改为:

更改完上述文件后,需要重新启动集群服务:
cd  IP/gnode/server/bin
./gcluster_services all start

可以使用下面语句检查numa绑定效果:numastat `pidof gbased`
查看语句示例如下,示例为2实例2numa,每个实例绑定1numa的查看效果:[root@pst_w61 config]$ numastat `pidof gbased`

评论

登录后才可以发表评论