通过 PXD 部署

PXD 是 PolarDB-X 的快速部署工具,支持通过 Yaml 文件配置的方式在一组服务器上快速安装与启动 PolarDB-X 分布式数据库。在按照本文部署 PolarDB-X 数据库之前,我们假设已满足以下前提条件:

  1. 已准备一组服务器,并且按照 系统与环境配置 完成了服务器参数配置与软件安装;
  2. 部署机(ops)可以访问互联网,或者您已经按 软件包下载 提前准备了相关的软件包及镜像。

    如果您使用的是阿里云ECS,可以参考文档:连接公网概述 为云服务器开通访问互联网的能力。

准备工作

首先,我们需要在部署机(ops)上安装 python3 与 virtual environment 环境。

安装 Python3

如果你的机器上已经安装了 python3,则可以跳过该步骤。

Python3 检查命令:

which python3

如果有返回,则代表 python3 已安装。

yum install -y python3

安装 Docker

PXD 使用容器方式运行 PolarDB-X 数据库,因此需要安装 Docker 环境。另外,我们也推荐使用私有镜像仓库。您可以参考文档《安装 Docker 与镜像仓库》进行部署。

安装 PXD

在线安装

如果部署机(ops)可以访问互联网,建议选择在线方式安装。

推荐在 virtual environment 下安装与使用 PXD 工具。

首先用以下命令创建一个 Python3 的 virtual environment 环境并激活:

python3 -m venv venv 
source venv/bin/activate

执行以下命令更新 Pip 工具:

pip install --upgrade pip

使用阿里云 Pypi 镜像下载与安装 PXD 工具:

pip install -i https://mirrors.aliyun.com/pypi/simple/ pxd

成功后,下面的命令输出已安装的 PXD 版本:

pxd version

离线安装

如果部署环境无法访问互联网,请参考《软件包下载》,下载对应架构离线安装包,并将离线安装包拷贝到部署环境中的部署机(ops)上。

PXD 离线安装包的目录结构如下所示:

polardbx-install
|-- images                                      # Docker 镜像目录
|   |-- image.list                              # 下载的 Docker 镜像列表
|   |-- image.manifest                          # 离线环境镜像清单,导入脚本参数
|   |-- load_image.sh                           # 离线环境导入镜像的脚本
|   |-- polardbx-cdc-latest-arm64.tar.gz
|   |-- polardbx-engine-latest-arm64.tar.gz
|   |-- polardbx-init-latest-arm64.tar.gz
|   |-- polardbx-sql-latest-arm64.tar.gz
|   `-- xstore-tools-latest-arm64.tar.gz
|-- pxd-0.4.3-py3-none-any.whl                  # PXD 安装包
`-- pxd-denpendency-arm64.tar.gz                # PXD 的依赖包
`-- install.sh                                  # 安装脚本

在部署环境的部署机(ops) 上执行如下命令,进入离线安装包目录,一键安装 PXD 并导入 Docker 镜像:

cd polardbx-install
sh install.sh

上述 install.sh 脚本主要进行如下几项工作:

  • 导入 images 目录下的 Docker 镜像,推送到指定的私有仓库中。本文档以 registry:5000 为例进行说明。
  • 在 polardbx-install 目录下创建一个 python3 的venv目录,并安装 PXD

等安装脚本执行完成后,执行如下命令,验证 PXD 安装完成:

source polardbx-install/venv/bin/activate
pxd version

目录映射

由于 PXD 使用 $HOME/.pxd/data 路径映射容器数据目录,需要提前软链接路径到数据盘。

ansible -i ${ini_file} all -m shell -a " mkdir -p /polarx/data "
ansible -i ${ini_file} all -m shell -a " mkdir -p \$HOME/.pxd "
ansible -i ${ini_file} all -m shell -a " ln -s /polarx/data \$HOME/.pxd/data "

检查路径是否正确映射:

ansible -i ${ini_file} all -m shell -a " df -lh \$HOME/.pxd/data "

部署 PolarDB-X

规划集群拓扑

PolarDB-X 数据库集群由计算节点(CN),存储节点(DN),元数据服务(GMS)以及日志节点(CDC)组成。生产场景的最小部署规模为 3 台服务器,典型数据库集群包含 2 个以上的计算节点,2 组以上的存储节点,1 组元数据节点,以及作为可选功能的 1 组日志节点。 其中,存储节点(DN)、元数据服务(GMS)通过 X-Paxos 协议实现高可用,因此同一组存储节点或元数据服务由 3 个独立的副本容器实例组成,需要分开部署在不同服务器上。 根据服务器型号/数量的不同,规划 PolarDB-X 集群拓扑的主要原则是:

  • 由于对计算与 I/O 能力的不同要求,我们建议计算节点(CN)与存储节点(DN)分别在两组不同的服务器上部署。
  • 选择 I/O 能力较优、磁盘空间较大的服务器部署存储节点(DN); I/O 能力较弱,而 CPU 能力较优的服务器部署计算节点(CN)。
  • 如果单台服务器的 CPU 数量小于 16,建议部署一个计算节点(CN),否则建议部署多个计算节点。
  • 所有计算节点(CN)应该分配相同的服务器资源,防止集群出现“短板效应”:资源最少的节点成为性能瓶颈。所有存储节点(DN)除 log 副本外也应该遵循相同的原则。
  • 同一组存储节点的三个副本应该在三台服务器上分离部署,不同存储节点的三副本可以在同一台服务器上混合部署,保证集群高可用的同时,最大化利用服务器性能。
  • 元数据服务(GMS)存储集群的元数据,它的三个副本应该在三台服务器分别部署,保证高可用。

下面是一份按照上述原则规划的集群拓扑:

服务器 服务器规格 节点 容器限制 容器数量
192.168.1.102 16c64G CN1 16c32G 1
192.168.1.103 16c64G CN2 16c32G 1
192.168.1.104 16c64G CN3 16c32G 1
192.168.1.105 32c128G DN1-1(leader) 16c50G 4
DN2-3(log) -
DN3-2(follower) 16c50G
GMS-1 8c16G
192.168.1.106 32c128G DN1-2(follower) 16c50G 4
DN2-1(leader) 16c50G
DN3-3(log) -
GMS-2 8c16G
192.168.1.107 32c128G DN1-3(log) - 4
DN2-2(follower) 16c50G
DN3-1(leader) 16c50G
GMS-3 8c16G

备注:DN 的 log 节点默认内存限制为 4G,因为 log 只记录日志,需要使用的内存与 CPU 很少。

准备拓扑配置

首先执行如下命令获取 PolarDB-X 各个组件的最新镜像版本(需要填入YAML文件):

curl -s "https://polardbx-opensource.oss-cn-hangzhou.aliyuncs.com/scripts/get-version.sh" | sh

输出内容如下所示(以 PolarDB-X V2.4.0 版本为例):

CN polardbx/polardbx-sql:v2.4.0_5.4.19
DN polardbx/polardbx-engine:v2.4.0_8.4.19
CDC polardbx/polardbx-cdc:v2.4.0_5.4.19

之后按照上述拓扑规划,编写如下的 Yaml 配置文件,并更新各个组件的image tag。

vi polarx_pxd.yaml

配置文件内容:

version: v1
type: polardbx
cluster:
  name: pxc-product
  gms:
    image: registry:5000/polardbx-sql:v2.4.0_5.4.19
    engine: galaxy
    engine_version: "8.0"
    host_group: [192.168.1.102, 192.168.1.103, 192.168.1.104]
    resources:
      mem_limit: 16G
      cpu_limit: 8
  cn:
    image: registry:5000/polardbx-sql:v2.4.0_5.4.19
    replica: 3
    nodes:
      - host: 192.168.1.102
      - host: 192.168.1.103
      - host: 192.168.1.104
    resources:
      mem_limit: 64G
      cpu_limit: 16
  dn:
    image: registry:5000/polardbx-cdc:v2.4.0_5.4.19
    engine: galaxy
    engine_version: "8.0"
    replica: 3
    nodes:
      - host_group: [192.168.1.105, 192.168.1.106, 192.168.1.107]
      - host_group: [192.168.1.106, 192.168.1.107, 192.168.1.105]
      - host_group: [192.168.1.107, 192.168.1.105, 192.168.1.106]
    resources:
      mem_limit: 50G
      cpu_limit: 16

部署数据库

执行以下命令,使用 PXD 快速部署 PolarDB-X 集群:

pxd create -file polarx_pxd.yaml -repo="registry:5000/"

创建成功后,PXD 在日志中输出 PolarDB-X 数据的访问方式:

PolarDB-X cluster create successfully, you can try it out now.
Connect PolarDB-X using the following command:

    mysql -h192.168.1.102 -P54674 -upolardbx_root -p******
    mysql -h192.168.1.103 -P50236 -upolardbx_root -p******
    mysql -h192.168.1.104 -P52400 -upolardbx_root -p******

创建后,推荐用 PXD check 自动调整存储节点(DN)的当前 leader 分布:

pxd check pxc-product -t dn -r true

访问数据库

如果部署机(ops)上已安装 MySQL 客户端,可以用以下命令连接 PolarDB-X 数据库并开始使用:

mysql -h192.168.1.102 -P54674 -Ac -upolardbx_root -p******

通过 MySQL 客户端连接成功后,可以执行以下 SQL 显示存储节点信息:

MySQL [(none)]> show storage;

输出示例:

+--------------------+---------------------+------------+-----------+----------+-------------+--------+-----------+-------+--------+
| STORAGE_INST_ID    | LEADER_NODE         | IS_HEALTHY | INST_KIND | DB_COUNT | GROUP_COUNT | STATUS | DELETABLE | DELAY | ACTIVE |
+--------------------+---------------------+------------+-----------+----------+-------------+--------+-----------+-------+--------+
| pxc-product-dn-0   | 192.168.1.105:15420 | true       | MASTER    | 5        | 21          | 0      | false     | null  | null   |
| pxc-product-dn-1   | 192.168.1.106:17907 | true       | MASTER    | 5        | 19          | 0      | true      | null  | null   |
| pxc-product-dn-2   | 192.168.1.107:16308 | true       | MASTER    | 5        | 19          | 0      | true      | null  | null   |
| pxc-product-gms    | 192.168.1.105:17296 | true       | META_DB   | 2        | 2           | 0      | false     | null  | null   |
+--------------------+---------------------+------------+-----------+----------+-------------+--------+-----------+-------+--------+
4 rows in set (0.01 sec)

results matching ""

    No results matching ""