通过 PXD 部署
PXD 是 PolarDB-X 的快速部署工具,支持通过 Yaml 文件配置的方式在一组服务器上快速安装与启动 PolarDB-X 分布式数据库。在按照本文部署 PolarDB-X 数据库之前,我们假设已满足以下前提条件:
- 已准备一组服务器,并且按照 系统与环境配置 完成了服务器参数配置与软件安装;
- 部署机(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-engine:v2.4.0_8.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-engine:v2.4.0_8.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)