1. 前言
本文档说明LightDB-A安装步骤
2. 安装前准备
以下操作在每台机器上进行
2.1. 创建用户
创建lightdb用户与用户组
groupadd lightadb
useradd -g lightadb -m lightadb
passwd lightadb
为lightadb用户设置sudo免密,在 /etc/sudoers
中新增一行 lightadb ALL=(ALL) NOPASSWD:ALL
2.2. 防火墙配置
集群所有机器之间需要相互访问,并且数据库需要有对外的服务端口。
如果您的环境可以关闭防火墙,则关闭防火墙软件。
例如:
systemctl stop firewalld.service
systemctl disable firewalld.service
如果不能关闭防火墙软件,则需要正确开放相关服务端口(具体端口见后面章节)。
2.3. 关闭SELINUX
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
setenforce 0
2.4. 部署安装包
获取LightDB-A 安装包,上传到每台服务器上,解压到相同目录下。
注意: 每台服务器的安装包解压目录要相同。
解压完成后,配置LightDB-A的环境变量:
source <安装目录>/lightadb_path.sh
这个命令建议配置在 ~/.bashrc
文件中,方便以后使用。
2.5. 安装依赖包
sudo yum install -y epel-release
sudo yum install -y \
apr \
bzip2 \
gcc \
gcc-c++ \
krb5 \
libcurl \
libevent \
libkadm5 \
libyaml \
libxml2 \
libzstd \
openssl \
perl-ExtUtils-Embed \
python3 \
python3-pip \
python3-devel \
readline \
xerces-c \
zlib \
rsync
# 创建一个pyton依赖文件,用于后续安装python依赖
tee python-dependencies.txt <<-'EOF'
psutil==5.7.0
pygresql==5.2
pyyaml==5.3.1
EOF
pip3 install -r python-dependencies.txt --user
# 如果需要指定python镜像源,则可以使用如下命令(注意替换成您可以访问的合适的镜像源)
pip3 install -r python-dependencies.txt --user \
-i http://yum.hundsun.com/mirrors/pypi/simple/ \
--trusted-host yum.hundsun.com
2.6. 配置hostname
在 /etc/hosts
中配置所有服务器的ip和主机名称,例如:
cat /etc/hosts
10.19.36.11 host11
10.19.36.10 host10
10.20.30.193 host193
这个也是在每台机器上配置,这样每台主机就有一个主机名。
为主机设置设置正确的 hostname
,注意和 /etc/hosts
中保持一致
例如:
# 在 10.19.36.11
hostnamectl set-hostname host11
# 在 10.19.36.10
hostnamectl set-hostname host10
# 在 10.20.30.193
hostnamectl set-hostname host193
2.7. 配置免密
然后需要配置所有机器两两ssh免密(注意: 每台主机对自己也要配置免密)
以下是操作样例
在11上执行对其他机器执行
ssh-copy-id
命令,使得11可以免密登录到其他机器上。ssh-copy-id host11 ssh-copy-id host10 ssh-copy-id host193
创建一个hostfile_exkeys文件,填入所有主机名
cat hostfile_exkeys host11 host10 host193
使用
gpssh-exkeys
命令配置两两免密gpssh-exkeys -f hostfile_exkeys
确认免密是否配置成功,可以每台机器上执行如下命令, 如果不提示输密码,则表示配置成功
gpssh -f hostfile_exkeys -e "ls"
上面gpssh命令也是LightDB-A提供的批量执行的便利性工具,可以在所有节点上同时执行指定的shell命令。
3. 创建数据库实例
以下部署以1个coordinator节点, 4个segment节点为例,
其中 coordinator
节点在host10上, host11和host193各有两个segment节点。
3.1. 实例目录
需要在每台机器上为LightDB-A准备数据磁盘空间,并确保 lightadb
用户有对应目录的读写权限。
在host10上创建coordinator节点实例目录
mkdir -p /data/lightadb/coordinator
在所有segment主机上创建segment实例目录,host11和host193上创建segment节点实例目录
mkdir -p /data/lightadb/primary1
mkdir -p /data/lightadb/primary2
3.2. 准备实例化配置文件
配置文件模板为 <安装目录>/docs/cli_help/gpconfigs/gpinitsystem_config
, 拷贝一份出来做必要配置。
必须修改的配置项如下:
PORT_BASE
segment实例的端口,每个segment会递增分配,如果配置6000,则会依次分配6000,6001,…, 注意检查下服务器上端口是否有被占用。
应用程序是不直接访问这些端口的。 但是集群之间需要相互访问,如果开启了防火墙,则需要在集群机器之间开放这些端口。
DATA_DIRECTORY
segment节点的实例的目录列表,注意,这里配置几个目录,就表示在每个主机上安装几个segment。
例如,如下所示,DATA_DIRECTORY指定了两个目录,表示每个主机需要安装2个segment。 假如segment主机有2个(后面通过host文件指定), 则总共需要安装4个segment。
注意所有目录都要先创建好,并且是空目录。
declare -a DATA_DIRECTORY=(/data/lightadb/primary1 /data/lightadb/primary2)
COORDINATOR_HOSTNAME
表示coordinator节点所在的主机名, 按前面的例子,需要配置成
host10
。注意 coordinator 可以和 segment 在同一台机器上,也可以分开。
COORDINATOR_DIRECTORY
coordinator节点的实例路径,注意需要先创建好,并且是空目录。
COORDINATOR_PORT coordinator节点的端口,这个端口是对外服务的,安装成功后,应用程序需要连这个端口来访问数据库。
要确认下coordinator主机上这个端口是否被占用。
这个端口是对外服务的,如果开启了防火墙,则需要正确配置,以便应用程序可以访问。
3.3. 准备实例化host文件
host文件很简单,仅包含segment主机列表即可,例如,创建一个 hostfile_gpinitsystem
文件,内容如下:
cat hostfile_gpinitsystem
host11
host193
这里的主机数量乘以 gpinitsystem_config
中的 DATA_DIRECTORY
的目录数量,就是segment的总数量。
3.4. 创建实例
使用如下命令创建实例
gpinitsystem -c gpinitsystem_config -h hostfile_gpinitsystem
安装成功后,会有类似如下输出
-LightDB-A Database instance successfully created
-------------------------------------------------------
-To complete the environment configuration, please
-update lightadb .bashrc file with the following
-1. Ensure that the lightadb_path.sh file is sourced
-2. Add "export COORDINATOR_DATA_DIRECTORY=/data/lightadb/zhj/coordinator/gpseg-1"
- to access the LightDB-A scripts for this instance:
- or, use -d /data/lightadb/zhj/coordinator/gpseg-1 option for the LightDB-A scripts
- Example gpstate -d /data/lightadb/zhj/coordinator/gpseg-1
-Script log file = /home/lightadb/ltaAdminLogs/gpinitsystem_20230322.log
-To remove instance, run gpdeletesystem utility
-To initialize a Standby Coordinator Segment for this LightDB-A instance
-Review options for gpinitstandby
按照上面的提示配置环境变量,可以直接配置到 ~/.bashrc
中:
# 前面成功消息中有提示
export COORDINATOR_DATA_DIRECTORY=/data/lightadb/zhj/coordinator/gpseg-1
# COORDINATOR_PORT是前面gpinitsystem_config文件中配置的
export PGPORT=<COORDINATOR_PORT>
4. segment扩容
上面章节的安装方法要求每个主机的segment数量一致。 如果segment主机配置相差较大,希望在不同主机上安装不同数量的segment,则可以按照本章节方法。 则可以先按照前面章节的标准方法安装一个最小实例,然后再扩容。
以下是操作样例:
在host10,host11,host193,host199上各有4个segment,总共是16个segment,coordinator在host11上。 现在计划在host11,host10上各新增4个segment, host199,host193上不变, 扩容完成后总共有24个segment。
4.1. 准备实例目录
在host10,host11上面各新增4个目录,用于安装新的segment
mkdir -p /data/gpadmin/lightdba/data5
mkdir -p /data/gpadmin/lightdba/data6
mkdir -p /data/gpadmin/lightdba/data7
mkdir -p /data/gpadmin/lightdba/data8
4.2. 准备扩容host文件
host文件很简单,仅包含要扩容的主机列表即可,例如,创建一个 hostfile_expand
文件,内容如下:
cat hostfile_expand
host11
host10
4.3. 生成扩容配置文件
gpexpand -f hostfile_expand
这个是交互式的程序, 主要输入要扩容4个节点,然后再输入4个路径(前面创建好的)。
How many new primary segments per host do you want to add? (default=0):
> 4
Enter new primary data directory 1:
> /data/gpadmin/lightdba/data5
Enter new primary data directory 2:
> /data/gpadmin/lightdba/data6
Enter new primary data directory 3:
> /data/gpadmin/lightdba/data7
Enter new primary data directory 4:
> /data/gpadmin/lightdba/data8
Generating configuration file...
20230322:20:38:33:3439364 gpexpand:hs-10-19-36-11:gpadmin-[INFO]:-Generating input file...
Input configuration file was written to 'gpexpand_inputfile_20230322_203833'.
Please review the file and make sure that it is correct then re-run
with: gpexpand -i gpexpand_inputfile_20230322_203833
此时会生成一个扩容配置文件
4.4. 修改扩容配置文件
默认情况下,所有节点都要扩容成数量一样的segment,比如我们前面输入4的含义是每个主机都扩容4个segment(包含未指定的host193,host199)。
所以我们需要修改修改配置文件,去掉不必要的节点。仅保留11和10的配置
hs-10-19-36-10|hs-10-19-36-10|49005|/data/gpadmin/lightdba/data5/gpseg16|18|16|p
hs-10-19-36-10|hs-10-19-36-10|49006|/data/gpadmin/lightdba/data6/gpseg17|19|17|p
hs-10-19-36-10|hs-10-19-36-10|49007|/data/gpadmin/lightdba/data7/gpseg18|20|18|p
hs-10-19-36-10|hs-10-19-36-10|49008|/data/gpadmin/lightdba/data8/gpseg19|21|19|p
hs-10-19-36-11|hs-10-19-36-11|49005|/data/gpadmin/lightdba/data5/gpseg20|22|20|p
hs-10-19-36-11|hs-10-19-36-11|49006|/data/gpadmin/lightdba/data6/gpseg21|23|21|p
hs-10-19-36-11|hs-10-19-36-11|49007|/data/gpadmin/lightdba/data7/gpseg22|24|22|p
hs-10-19-36-11|hs-10-19-36-11|49008|/data/gpadmin/lightdba/data8/gpseg23|25|23|p
4.5. 执行扩容
gpexpand -i gpexpand_inputfile_20230322_203833
如果出现失败,则可以执行 gpexpand -r
命令回滚。
4.6. 数据重分布
如果扩容前已经有数据,则可以执行重分布操作。 这个操作会锁表,需要在业务低峰期进行。
# 开始数据重分布
gpexpand
开始后重分布后,可以通如下 gpstate -x
查询重分布进度:
Obtaining Segment details from coordinator...
Cluster Expansion State = Data Distribution - Active
----------------------------------------------------
Number of tables to be redistributed
Database Count of Tables to redistribute
tpch 76
postgres 12
pgbench 6
hs 8
jdbc 4
template1 2
metrics 2
----------------------------------------------------
Active redistributions = 1
Action Database Table
Redistribute tpch public.part
---------------------------------------------------
或者通过表来查看
SELECT * FROM gpexpand.expansion_progress;
SELECT * FROM gpexpand.status_detail order by status;
重分布完成后,通过 gpexpand -c
清理掉扩容schema。
5. 安装LightDB-A客户端
5.1. 命令行安装
目前LightDB-A数据库服务端只有CentOS7版本,所以LightDB-A的客户端也只有CentOS7版本。
将LightDB-A client安装包拷贝到服务器的安装目录下,对于本文档演示所用的范例来说安装包是
lightdb-a-client-23.2-12178-el7.x86_64.zip
,安装目录是/root
。[root@localhost ~]# ls anaconda-ks.cfg Desktop Documents Downloads lightdb-a-client-23.2-12178-el7.x86_64.zip Music original-ks.cfg Pictures Public Templates Videos [root@localhost ~]# [root@localhost ~]# pwd /root [root@localhost ~]#
解压LightDB-A client安装包。
[root@localhost ~]# unzip lightdb-a-client-23.2-12178-el7.x86_64.zip Archive: lightdb-a-client-23.2-12178-el7.x86_64.zip creating: lightdb-a-client-23.2-12178-el7.x86_64/ creating: lightdb-a-client-23.2-12178-el7.x86_64/bin/ inflating: lightdb-a-client-23.2-12178-el7.x86_64/bin/psql inflating: lightdb-a-client-23.2-12178-el7.x86_64/bin/pg_restore inflating: lightdb-a-client-23.2-12178-el7.x86_64/bin/pg_dumpall inflating: lightdb-a-client-23.2-12178-el7.x86_64/bin/pg_dump inflating: lightdb-a-client-23.2-12178-el7.x86_64/bin/gpfdist inflating: lightdb-a-client-23.2-12178-el7.x86_64/bin/gpload.py inflating: lightdb-a-client-23.2-12178-el7.x86_64/bin/pg_config creating: lightdb-a-client-23.2-12178-el7.x86_64/lib/ linking: lightdb-a-client-23.2-12178-el7.x86_64/lib/libpq.so -> libpq.so.5.12 linking: lightdb-a-client-23.2-12178-el7.x86_64/lib/libpq.so.5 -> libpq.so.5.12 inflating: lightdb-a-client-23.2-12178-el7.x86_64/lib/libpq.so.5.12
cd到LightDB-A client解压后生成的目录中,本例中就是
lightdb-a-client-23.2-12178-el7.x86_64
目录,bin目录中存放的就是客户能够使用的脚本和可执行文件,lib目录存放的是被依赖的so文件,include是依赖的头文件。[root@localhost ~]# ls lightdb-a-client-23.2-12178-el7.x86_64 bin include lib [root@localhost ~]#
配置环境变量。
export GPHOME=/root/lightdb-a-client-23.2-12178-el7.x86_64 export PATH=${GPHOME}/bin:${PATH} export LD_LIBRARY_PATH=${GPHOME}/lib:${LD_LIBRARY_PATH} export PYTHONPATH=${GPHOME}/lib/python:${PYTHONPATH}
安装依赖包。
sudo yum install -y epel-release sudo yum install -y python3 python3-pip python3-devel sudo yum install -y apr libzstd tee python-dependencies.txt <<-'EOF' psutil==5.7.0 pygresql==5.2 pyyaml==5.3.1 EOF pip3 install -r python-dependencies.txt --user \ -i http://yum.hundsun.com/mirrors/pypi/simple/ \ --trusted-host yum.hundsun.com
以上步骤都执行成功,则LightDB-A client安装成功。