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

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: 在本文中,作者详述了在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-X
《PolarDB-X 动手实践》系列第一期,体验如何一键安装部署 PolarDB-X。
目录
相关文章
|
5天前
|
关系型数据库 MySQL 分布式数据库
PolarDB测试
在CentOS 7.9环境下,作者探索实践了PolarDB-X的分布式与集中式部署,强调了PolarDB-X的稳定性和与MySQL的高兼容性。测试涵盖Anolis OS和openEuler系统,涉及PXD工具和Kubernetes部署。部署步骤包括环境调整、Python 3、Docker和MySQL客户端的安装。在集群部署中,遇到镜像源和版本匹配问题,通过PXD解决。总结中建议官方改进文档、丰富生态工具并提供更多案例,以促进其发展。这次体验展现了PolarDB-X的技术潜力和国产数据库的重要性。
470 4
|
11天前
|
Ubuntu 关系型数据库 分布式数据库
开源PolarDB -X 部署安装
本文记录了在Ubuntu 20.04上部署阿里云分布式数据库PolarDB-X的步骤,包括环境准备、安装依赖、下载源码、编译安装、配置启动,并分享了遇到的配置错误、依赖冲突和日志不清等问题。作者建议官方改进文档细节、优化代码质量和建立开发者社区。安装历史记录显示了相关命令行操作。尽管过程有挑战,但作者期待产品体验的提升。
165 6
|
18天前
|
Java 大数据 流计算
使用Docker快速部署Flink分布式集群
使用Docker快速部署Flink分布式集群
139 0
|
18天前
|
Kubernetes 关系型数据库 分布式数据库
【PolarDB开源】PolarDB在混合云环境下的部署策略与挑战
【5月更文挑战第29天】PolarDB,阿里云的高性能分布式数据库,应对混合云环境的部署策略包括:灵活的架构选择(如Kubernetes)、跨云平台数据实时同步及内置安全特性保障数据安全。然而,也面临复杂性、成本优化和运维难度等挑战。示例展示了使用Kubernetes StatefulSet部署PolarDB的基本配置。
223 3
|
23天前
|
监控 关系型数据库 MySQL
基于AnolisOS8.6+PolarDB-X部署ZABBIX6.0
在AnolisOS-8.6-x86_64-minimal虚拟环境中,使用VirtualBox配置2 vCPU,4G RAM和60 vDisk,下载并安装PolarDB-X,包括libaio和ncurses-devel依赖。创建polarx用户,设置权限和目录结构,编写my.cnf配置文件,然后初始化并启动PolarDB-X。接着安装ZABBIX 6.0,创建数据库、用户及权限,导入数据,并编辑Zabbix配置文件以匹配PolarDB-X。最后,重启相关服务,启用并检查状态,通过指定IP访问Zabbix Web界面,注意初始账号密码为Admin / zabbix。
|
1月前
|
NoSQL Java 关系型数据库
【Redis系列笔记】分布式锁
分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的核心思想就是让大家都使用同一把锁,只要大家使用的是同一把锁,那么我们就能锁住线程,不让线程进行,让程序串行执行,这就是分布式锁的核心思路
394 2
|
2天前
|
NoSQL 算法 Java
探讨redis分布式锁
探讨redis分布式锁
10 1
|
9天前
|
缓存 NoSQL 安全
玩转Redis!非常强大的Redisson分布式集合,少写60%代码
Redisson是Java的Redis客户端,提供实时数据平台服务,简化了分布式环境下的数据管理。它包含RList、RSet、RMap等分布式集合,支持ConcurrentMap和Set接口,确保线程安全和数据一致性。例如,RMap实现了本地缓存和监听器功能,允许数据监听和本地加速读取。此外,还提供了RSet的排序和去重功能,以及RQueue和RBlockingQueue等队列实现,支持阻塞操作。通过Redisson,开发者能轻松处理分布式系统的数据同步和操作。
|
11天前
|
存储 缓存 NoSQL
了解Redis,第一弹,什么是RedisRedis主要适用于分布式系统,用来用缓存,存储数据,在内存中存储那么为什么说是分布式呢?什么叫分布式什么是单机架构微服务架构微服务的本质
了解Redis,第一弹,什么是RedisRedis主要适用于分布式系统,用来用缓存,存储数据,在内存中存储那么为什么说是分布式呢?什么叫分布式什么是单机架构微服务架构微服务的本质
|
13天前
|
缓存 NoSQL 关系型数据库
【Redis】 浅谈分布式架构
【Redis】 浅谈分布式架构

相关产品

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