测试部署PolarDB-X 分布式与集中式

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: 在本文中,作者详述了在CentOS 7.9上部署测试PolarDB-X分布式与集中式数据库的过程。PolarDB-X作为阿里云优化的分布式数据库,提供高稳定性和与MySQL的兼容性,是应对单体数据库扩展性和性能瓶颈的解决方案,同时也符合国产化需求。文章介绍了部署环境准备,包括关闭防火墙和SELinux,设置系统参数,安装Python3和Docker,以及配置MySQL客户端。接着,通过PXD工具部署了PolarDB-X的集中式和分布式版,遇到的问题包括阿里云镜像源异常导致的部署失败以及指定版本安装的困扰。最后,作者进行了初步的压力测试,并对文档完善、生态工具建设以及提供更多使用案例提出了建议。

在CentOS 7.9测试部署PolarDB-X 分布式与集中式

1. 前言

为什么要使用Polardb-x?

  1. 开源组件的稳定性和备选方案:
    CentOS已经改变了发行方式,MySQL被Oracle收购,以及MariaDB在某些情况下的稳定性问题确实引起了关注。PolarDB-X作为一个经过阿里云深度优化和验证的分布式数据库,其稳定性和可靠性得到了广泛的认可。PolarDB-X在继承了MySQL生态优势的同时,针对分布式场景进行了大量的优化和改进,确保了在各种复杂环境下的稳定运行。
    作为备选方案,PolarDB-X不仅提供了与MySQL高度兼容的语法和接口,还提供了强大的分布式功能和性能,使得用户可以在无需大规模修改代码的情况下,轻松实现数据库的升级和迁移。

  2. 单体数据库的局限性和分布式解决方案:
    对于不断增长的业务来说,单体数据库如MySQL、MariaDB等确实存在扩展性和性能瓶颈。虽然存在如MHA、分表分库、MyCat等解决方案,但这些方案往往需要在多个组件之间进行复杂的配置和管理,增加了维护和使用的难度。

PolarDB-X作为一个原生的分布式数据库,内置了数据切分、分布式事务、全局二级索引等核心功能,无需用户额外配置和管理多个组件。同时,PolarDB-X还提供了丰富的企业级特性和工具,如SQL限流、三权分立等,使得用户可以更加轻松地管理和使用分布式数据库。

  1. 国产化的需求:
    随着国产化的不断推进,政企单位对于使用国产数据库的需求也在不断增加。PolarDB-X作为一款国产的分布式数据库,不仅具有强大的功能和性能,还得到了国家相关部门的认证和支持。使用PolarDB-X可以满足政企单位对于国产数据库的需求,同时也有助于推动国内数据库产业的发展。

这些都不展开细说了,下面介绍最近我在部署测试Polardb-x的步骤、一些问题与思考。

2. 部署环境准备

下面的部署都是在CentOS 7.9环境下进行的。

当然我也在Anolis OS 8.9、openEuler 22.03 (LTS-SP3)这两个系统上做了测试。分布式、集中式、使用PXD部署、使用k8s集群在Rancher 2.7控制台下部署,都测试过了。

下面只介绍在单机环境下的测试部署,这个更简单易上手一些。

2.1 环境设置

安装配置之前,为了排除干扰因素,先把防火墙和selinux关闭

systemctl stop firewalld 
systemctl disable firewalld

setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

系统默认语言英文环境,防止有乱码

export LC_ALL=en_US.utf-8
export LANG=en_US.utf-8

系统参数设置

cat << EOF >> /etc/security/limits.conf
* soft nproc 102400
* hard nproc 102400
* soft nofile 102400
* hard nofile 102400
EOF

sysctl -p
ulimit -n

完成上面的设置后,最好重启一下系统,或者是退出重新登录

reboot

2.2 Python3安装

在CentOS 7.9环境下默认是没有python3的,需要yum安装

yum -y install python3-pip python3

配置pip源,使用国内源,速度更快

mkdir ~/.pip
cat <<EOF >  ~/.pip/pip.conf
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn
timeout = 120
EOF

2.3 Docker安装配置

执行如下命令,安装docker

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache

# 查看最新的Docker版本:
yum list docker-ce.x86_64  --showduplicates |sort -r

# 指定版本安装
yum install -y  docker-ce-20.10.24-3.el8

# 也可以直接安装最新版本
yum install -y  docker-ce

查看docker版本

# docker --version 
Docker version 26.1.2, build 211e74b

配置开机启动

systemctl enable docker

修改docker-ce配置

mkdir /etc/docker/
touch /etc/docker/daemon.json
cat > /etc/docker/daemon.json <<EOF
{
    "log-driver": "json-file",
    "log-opts": {
    "max-size": "100m",
    "max-file": "3"
    },
    "max-concurrent-downloads": 10,
    "max-concurrent-uploads": 10,
    "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
EOF
systemctl daemon-reload && systemctl restart docker

测试拉取一个小镜像

docker pull busybox 
docker images

注意:集群模式下,docker engine 版本需要大于等于18.04。

2.4 安装 MySQL 客户端命令行工具

在CentOS 7.9默认的仓库里面有mysql客户端的安装包,是MariaDB 5.5的,在本次测试用,也能用,直接安装即可

yum -y install mysql mysql-devel 

# mysql --version 
mysql  Ver 15.1 Distrib 5.5.68-MariaDB, for Linux (x86_64) using readline 5.1

2. 部署集群

2.1 下载pxd

PXD 是 PolarDB-X 的部署工具,除了支持在本地一键快速拉起测试环境外,也支持在 Linux 集群中通过指定的拓扑的方式部署 PolarDB-X 分布式数据库。

安装好python3、pip3以后,使用virtual environment 安装 PXD 工具,方便测试。

Python虚拟环境是一种用于隔离和管理项目所需的Python解释器及其依赖库的工具。它可以让我们在同一台机器上同时运行多个项目,并且每个项目都可以有不同的依赖库和Python版本。虚拟环境可以为每个项目提供独立的运行环境,避免各项目之间的依赖冲突。创建Python虚拟环境可以使用Python自带的venv模块或者第三方工具virtualenv来完成。

# 执行如下命令,生成一个测试环境
mkdir /home/polardb-test/
cd /home/polardb-test/
python3 -m venv venv
source venv/bin/activate

# 升级pip
pip3 install --upgrade pip

# 下载安装pxd
pip3 install pxd

验证 pxd 是否安装成功:

# pxd version
pxd version: 0.7.0
commit id: 697d126

2.2 使用pxd部署集中式(标准版)版本

PolarDB-X 标准版采用一主一备一日志的三节点架构,性价比高,通过多副本同步复制,确保数据的强一致性。面向具备超高并发、复杂查询及轻量分析的在线业务场景。

执行如下命令会创建一个最新版本的 PolarDB-X 标准版集群,其中 GMS, CN, CDC 个数为0,仅包含一个DN节点。

pxd tryout -t standard -leader_only false -name test01

部署流程如下图,如果是第一次部署,会拉取相关的docker镜像,镜像比较大,时间可能比较慢,估计30分钟左右
27681.jpg

部署完成后会启动3个容器,如下图:
4572.jpg

此时可以通过mysql客户端来访问了:

mysql -h127.0.0.1 -P15376 -uadmin -p12345678

注意:PolarDB-X 管理员账号的密码随机生成,仅出现这一次,请注意保存。丢了就不好找了。

在测试中还发现,这个生成的端口,主从容器角色不知道是不是因为压力测试的原因,自动换了一次,导致我连接的时候,刚开始是主节点,后来变成了从节点只读,更换了端口号(15376换成14746),写入(新建库表)才正常。如果是正式环境使用的时候会有这种自动切换吗?后面还需要再看看客户端连接的文档。

通过 MySQL Client连接,执行如下 SQL 体验PolarDB-X 标准版三节点架构的特性:

# 查询三节点的拓扑信息与状态
select * from information_schema.alisql_cluster_global;

# 查询三节点的延迟信息
select * from information_schema.alisql_cluster_health;

用navicat访问集中式的polardb-x,能发现跟mysql的初始库结构很像
image.png

基本操作跟mysql完全一样。

查看集群状态:

pxd list

清理 PolarDB-X

pxd cleanup

2.3 使用pxd部署分布式(企业版)版本

PolarDB-X 企业版是分布式架构集群,支持更大数据量,面向具备企业级超高并发、大规模数据复杂查询、加速分析的业务场景。 直接运行 pxd tryout 命令会创建一个最新版本的 PolarDB-X 企业版集群,其中 GMS, CN, DN, CDC 节点各 1 个:

pxd tryout

tryout 模式创建的 GMS 和 DN 默认采用单副本模式,如果您想创建基于 Paxos 的三副本的集群,使用如下命令:

pxd tryout -leader_only false

我用的是下面的命令启动的集群

pxd tryout -t enterprise -leader_only false -name test02

集群启动流程如下:
微信图片_20240524101707.png

官方文档里面介绍的还有指定版本安装的,但是我在实际操作后,发现不可行!应该是我用的pxd版本比较新的原因。

pxd version: 0.7.0
commit id: 697d126

部署完成后会启动8个容器,如下图:
3280.jpg

此时可以通过mysql客户端来访问了:

 mysql -h127.0.0.1 -P63383 -upolardbx_root -p12345678

可以看到这次启动用的管理员账号也变了。区分集中式还是分布式,一个比较方便的办法,就是看默认的管理员账号。
通过 MySQL Client连接,执行如下 SQL 体验PolarDB-X集群版架构的特性,如下:

28363.jpg
15256.jpg

用navicat访问集中式的polardb-x,能发现跟mysql的初始库结构就不太一样了。
28910.jpg

新建库、表,基本操作跟mysql一样。

在新建库表操作中,能明显感觉到分布式的比集中式的要慢。
在用sysbench压力测试的时候,也能感觉到分布式的读写性能比集中式的要低很多,不知道是不是默认设置的原因。

937.jpg
在分布式环境中,新建了一个库,用了1.89s。

2.4 部署中的一些问题

1. 阿里云镜像源异常

特别注意:绝对不要使用阿里云的镜像源!!!

例如:

"registry-mirrors": ["https://rsk59qvc.mirror.aliyuncs.com"]

这个镜像源,会导致下面的镜像拉取过程中:

polardbx/xstore-tools:latest

拉取到两年前的,导致pxd部署集群的时候一直报错,第一步就启动不起来。
image.png

刚开始的时候,我有一台机器能启动,另外新加的虚拟机都不能启动,部署的时候一直卡到这一步,报如下错误:

create gms node

然后进度直接卡主,进行不下去

查看容器的信息,显示是mysql的服务没启动成功,报错如下:

subprocess.CalledProcessError: Command '['/opt/galaxy_engine/bin/mysqld', '--defaults-file=/data/mysql/conf/my.cnf', '--loose-pod-name=pxc-tryout-gms-Cand-17823', '--initialize-insecure']' returned non-zero exit status 1.

我还以为是操作系统版本、内核、docker版本、镜像版本的错误,新建了好几台虚拟机进行对比,还是报错,一直卡了好几天,我还以为是pxd部署有问题了,都想放弃了,到最后仔细对比才发现这个大坑。这个bug很难遇到、遇到了也很难发现。还是用docker官方源,或者大学的镜像源吧。

国内镜像源站参考:

Docker国内镜像源:https://registry.docker-cn.com
中科大源:https://docker.mirrors.ustc.edu.cn
网易源:https://hub-mirror.c.163.com
百度源:https://mirror.baidubce.com
腾讯源:https://ccr.ccs.tencentyun.com

上面的阿里云镜像源的问题,已经通过Polardb-X的官方钉钉沟通群反馈了,后面文档更新的时候加上。

2. 指定版本安装的问题

在官方文档中,提到了可以指定版本安装,但是到hub.docker.com看官方镜像标签,因为polardb-x有好几个组件,这几个组件的版本还不一致,如果我换了其中一个组件的版本,另一个是不是也要换?但是换成哪个版本呢?这几个组件,各版本适配关系是什么样的?文档中也没写清楚,我也不敢随便试。

在使用pxd tryout进行测试部署的时候,最新的0.7.0版本,指定版本安装也会报错。命令如下:

pxd tryout -cn_replica 1 -cn_version v2.4.0_5.4.19 -dn_replica 1 -dn_version v2.4.0_8.4.19 -cdc_replica 1 -cdc_version v2.4.0_5.4.19

报错如下:
微信图片_20240524094201.png

我找了一下docker hub的官方仓库,发现根本就找不到 polardbx/polardbx-engine-2.0:v2.4.0_8.4.19 这个镜像标签,实际的镜像应该是polardbx/polardbx-engine:v2.4.0_8.4.19。但是在pxd tryout这个命令里面,应该是把镜像写死了,只能改标签,而用

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

这个命令获取的镜像标签又是错的!

所以,使用pxd tryout命令进行指定版本安装,还是不太行。想要指定版本按照,还是用pxd create这个命令吧。

3. 压力测试情况

使用pxd tryout命令部署完集群之后,我对集中式和分布式、还有单机mysql 5.7,尝试了几次sysbench压力测试,但是不知道是不是我配置参数的问题,一直试不出来官方的效果。

压力测试参考:
阿里云 云原生数据库PolarDB-MySQL 性能测试方法(OLTP)

4. 总结和一些建议

按照官方文档走完部署和测试流程中,虽然碰到了好几个问题,但也算是解决了,最后在不同的环境下成功部署了PolarDB-X,完成了如下的测试

  1. 在Anolis OS 8.9、openEuler 22.03、CentOS 7.9环境下都成功部署了PolarDB-X集群的分布式、集中式
  2. 在Rancher 2.7所管理的k8s集群中,用containerd而非docker,成功部署了PolarDB-X集群的分布式、集中式
  3. 对比测试了PolarDB-X集群的分布式、集中式的功能,并用Sysbench对比压测。

再次总结一下再测试中出现的问题:

  1. 使用pxd tryout部署的时候,不要配置docker镜像源使用阿里云的,要不然会导致部署失败
  2. 使用pxd tryout部署的时候,不要使用指定版本部署。如果要指定版本部署,要用pxd create指定配置文件的方式。

一些需要注意的地方:

使用pxd tryout部署的时候,因为是测试性质,所以默认启动的docker容器资源是有限制的,内存限制的是2G,使用pxd create的时候可以自定义资源限制。生产环境中一定不要用这个部署方式。
image.png

希望官方做出的一些改进:

1. 文档更加完善,及时更新

比如压力测试那一部分,那个工具Benchmark Boot,连接不了mysql 5.7/8.0,没办法对比进行测试。

我看了一下其它开源分布式数据库的文档,再对比一下PolarDB-x的,只能说,还不够完善,更不用说跟MySQL官方的比了。
不能只管商业版,开源版的就放羊了吧。只有把文档写好,写完善,及时答疑解惑,打消大家的顾虑,开源和商业才能相辅相成,用的人越来越多。

2. 生态工具更加完善

比如备份与恢复的工具、UI管理平台等等。现在能看到的生态工具只有两个工具,一个是数据导入导出的,一个是压测平台的。还是太少了

3. 有更多使用案例

什么样的情况下,应该用什么样的部署方式和架构?
比如说1000万数据、一亿数据、10亿数据,这些情况下适合用PolarDB-X吗?
如果适合,应该用什么样的架构?
对于大数据,PolarDB-X有什么优势?有哪些优化方式?
只有更多使用案例,使用方案,才能匹配更多用户场景,让生态更繁荣,让更多人用起来,开源反哺商业。

以上是我的这次评测,希望PolarDB-X开源生态原来越完善,国产开源数据库越来越好,用户越来越多。

相关实践学习
快速体验PolarDB开源数据库
本实验环境已内置PostgreSQL数据库以及PolarDB开源数据库:PolarDB PostgreSQL版和PolarDB分布式版,支持一键拉起使用,方便各位开发者学习使用。
目录
相关文章
|
8天前
|
Cloud Native 关系型数据库 分布式数据库
PolarDB 分布式版 V2.0,安全可靠的集中分布式一体化数据库管理软件
阿里云PolarDB数据库管理软件(分布式版)V2.0 ,安全可靠的集中分布式一体化数据库管理软件。
|
2月前
|
机器学习/深度学习 编解码 监控
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
这篇文章详细介绍了如何使用YOLOv8进行目标检测任务,包括环境搭建、数据准备、模型训练、验证测试以及模型转换等完整流程。
2752 1
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
1月前
|
缓存 自然语言处理 并行计算
基于NVIDIA A30 加速卡推理部署通义千问-72B-Chat测试过程
本文介绍了基于阿里云通义千问72B大模型(Qwen-72B-Chat)的性能基准测试,包括测试环境准备、模型部署、API测试等内容。测试环境配置为32核128G内存的ECS云主机,配备8块NVIDIA A30 GPU加速卡。软件环境包括Ubuntu 22.04、CUDA 12.4.0、PyTorch 2.4.0等。详细介绍了模型下载、部署命令及常见问题解决方法,并展示了API测试结果和性能分析。
1069 1
|
2月前
|
机器学习/深度学习 监控 计算机视觉
目标检测实战(八): 使用YOLOv7完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
本文介绍了如何使用YOLOv7进行目标检测,包括环境搭建、数据集准备、模型训练、验证、测试以及常见错误的解决方法。YOLOv7以其高效性能和准确率在目标检测领域受到关注,适用于自动驾驶、安防监控等场景。文中提供了源码和论文链接,以及详细的步骤说明,适合深度学习实践者参考。
506 0
目标检测实战(八): 使用YOLOv7完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
2月前
|
机器学习/深度学习 并行计算 数据可视化
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
这篇文章介绍了如何使用PaddleClas框架完成多标签分类任务,包括数据准备、环境搭建、模型训练、预测、评估等完整流程。
130 0
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
|
2月前
|
机器学习/深度学习 数据采集 算法
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
这篇博客文章介绍了如何使用包含多个网络和多种训练策略的框架来完成多目标分类任务,涵盖了从数据准备到训练、测试和部署的完整流程,并提供了相关代码和配置文件。
62 0
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
|
2月前
|
机器学习/深度学习 XML 并行计算
目标检测实战(七): 使用YOLOX完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
这篇文章介绍了如何使用YOLOX完成图像目标检测任务的完整流程,包括数据准备、模型训练、验证和测试。
220 0
目标检测实战(七): 使用YOLOX完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
2月前
|
缓存 NoSQL Ubuntu
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
57 3
|
2月前
|
存储 数据采集 分布式计算
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
54 1
|
2月前
|
Ubuntu API Python
Chat-TTS chat-tts-ui 实机部署上手测试!Ubuntu服务器实机 2070Super*2 8GB部署全流程
Chat-TTS chat-tts-ui 实机部署上手测试!Ubuntu服务器实机 2070Super*2 8GB部署全流程
73 1

相关产品

  • 云原生分布式数据库 PolarDB-X
  • 云原生数据库 PolarDB