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免密(注意: 每台主机对自己也要配置免密)

以下是操作样例

  1. 在11上执行对其他机器执行 ssh-copy-id 命令,使得11可以免密登录到其他机器上。

    ssh-copy-id host11
    ssh-copy-id host10
    ssh-copy-id host193
    
  2. 创建一个hostfile_exkeys文件,填入所有主机名

    cat hostfile_exkeys
    
    host11
    host10
    host193
    
  3. 使用 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 , 拷贝一份出来做必要配置。

必须修改的配置项如下:

  1. PORT_BASE

    segment实例的端口,每个segment会递增分配,如果配置6000,则会依次分配6000,6001,…, 注意检查下服务器上端口是否有被占用。

    应用程序是不直接访问这些端口的。 但是集群之间需要相互访问,如果开启了防火墙,则需要在集群机器之间开放这些端口。

  2. DATA_DIRECTORY

    segment节点的实例的目录列表,注意,这里配置几个目录,就表示在每个主机上安装几个segment。

    例如,如下所示,DATA_DIRECTORY指定了两个目录,表示每个主机需要安装2个segment。 假如segment主机有2个(后面通过host文件指定), 则总共需要安装4个segment。

    注意所有目录都要先创建好,并且是空目录。

    declare -a DATA_DIRECTORY=(/data/lightadb/primary1 /data/lightadb/primary2)
    
  3. COORDINATOR_HOSTNAME

    表示coordinator节点所在的主机名, 按前面的例子,需要配置成 host10

    注意 coordinator 可以和 segment 在同一台机器上,也可以分开。

  4. COORDINATOR_DIRECTORY

    coordinator节点的实例路径,注意需要先创建好,并且是空目录。

  5. 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安装成功。