数据管理的艺术:PolarDB开源版详评与实战部署策略(一)

本文涉及的产品
数据管理 DMS,安全协同 3个实例 3个月
推荐场景:
学生管理系统数据库
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: PolarDB-X是阿里巴巴自研的高性能云原生分布式数据库,基于共享存储的Shared-nothing架构,支持MySQL生态,具备金融级高可用、分布式水平扩展、HTAP混合负载等能力。它通过CN(计算节点)和DN(存储节点)实现计算与存储分离,保证数据强一致性,并支持全局二级索引和多主多写。PolarDB-X开源版提供更高程度的定制化和控制权,适合追求技术自主性和成本优化的开发者。部署方式包括RPM包、PXD工具和Kubernetes,其中PXD工具提供了一键部署的便利性。

前言

对于PolarDB数据库其实大家并不陌生,阿里云以PolarDB为核心的瑶池数据库业界首创计算、内存与存储资源的“三层解耦”架构,并率先落地多主多写、基于内存池化的HTAP、Serverless、一体化分布式等全球领先的技术创新,因此也成为了亚太唯一,连续4年稳居Gartner全球云数据库报告「领导者」。

image.png

周周在过去已经实测过一次PolarDB Serverless版的基础能力了(点此直达),总结来看优点可以概括为三个:秒级弹升、无感伸缩、强一致性。具体优势如下图(官网给出):

image.png

而这次,我想将目光聚焦于PolarDB的开源版本——**PolarDB-X,旨在深入挖掘其在自建环境下的部署便捷性、性能表现与可扩展性。不同于Serverless版自动化的无忧管理,开源版更侧重于给予用户高度的定制化与控制权,这对于追求技术自主性和成本优化的开发者而言,无疑是一大吸引力。下面,让我们从部署开始逐一揭开PolarDB-X开源版的神秘面纱。

开源PolarDB -X

简介

PolarDB-X 作为PolarDB分布式版,是阿里巴巴自主设计研发的高性能云原生分布式数据库产品,采用 Shared-nothing 与存储分离计算架构,支持集中式和分布式一体化形态,具备金融级数据高可用、分布式水平扩展、混合负载、低成本存储和极致弹性等能力,坚定以兼容MySQL开源生态构建分布式能力,为用户提供高吞吐、大存储、低延时、易扩展和超高可用的云时代数据库服务。

PolarDB-X在架构上可以简单分为CN节点(计算节点)和DN节点(存储节点)。计算节点CN负责SQL的解析和执行,存储节点DN负责数据的分布式事务和高可用存储。

image.png

除此,还包含GMS(元数据服务)和CDC(日志节点)。GMS(元数据服务)负责维护全局强一致的 Table/Schema, Statistics 等系统 Meta 信息,维护账号、权限等安全信息,同时提供全局授时服务(即 TSO)。CDC(日志节点)日志节点提供完全兼容 MySQL Binlog 格式和协议的增量订阅能力,提供兼容 MySQL Replication 协议的主从复制能力。

产品下载地址如下:开源PolarDB -X 部署安装

产品优势

  • 金融级高可靠场景:基于X-Paxos实现的数据三副本强一致,让业务轻松具备跨多可用区的高可用与容灾能力。

  • 海量数据归集场景:PolarDB-X的平滑扩展能力,让客户轻松实现横向和纵向的容量变更且保持访问性能不变。

  • 超高并发访问场景:深度优化的PolarDB-X计算下推能力显著提升在线事务处理性能,令访问尖峰丝般顺滑。

  • HTAP混合负载场景:无需进行ETL,可对在线数据做实时报表分析。

image.png

核心优势

下面仅给出部分,具体内容请参考官方文档

高可用与容灾

为了保证副本间的强一致性,现代数据库往往采用以Paxos为代表的多数派复制协议。Paxos通常要求集群中至少存3个节点,每次写入都要获得超过半数节点的确认,即便其中1个节点宕机,集群也仍然能正常提供服务。Paxos算法能够保证副本间的强一致性,彻底解决副本不一致问题。

PolarDB-X在副本复制方面采用了X-Paxos。X-Paxos是阿里巴巴自研的Paxos协议实现,起源于AliSQL(阿里内部的 MySQL 分支)。基于朴素的Paxos实现,它在功能、性能上都做了大量优化,且经历了数十载的双十一考验,稳定可靠。

image.png

X-Paxos实现了Multi-Paxos算法,通常存在一个相对稳定的Leader节点用于处理读写请求。如果Leader节点因为某些意外情况发生宕机或超时,Follower节点就会重新发起选主投票,如果得到超过半数的选票则成为新的Leader。Logger节点只负责保存日志以及参与Paxos投票。Learner节点通常用在只读实例中,它仅仅接受主机群的变更日志,不参与Paxos投票。

此外,X-Paxos还支持动态添加删除节点、权重化选主、Leader主动回切等企业级特性,允许用户根据业务需求灵活定义部署方式。

分布式事务

PolarDB-X原生支持分布式事务,并保证事务的ACID性质。

  • 原子性(Atomicity)

  • 一致性(Consistency)

  • 隔离性(Isolation)

  • 持久性(Durability)

PolarDB-X通过引入中心授时节点(TSO),结合多版本并发控制(MVCC),确保读取到一致的快照,而不会读到事务的中间状态。如下图所示,提交事务时,计算节点(CN)执行事务时从TSO获取到时间戳,随着数据一同提交到存储节点(DN)多版本存储引擎上,读取时CN通过读取快照时间戳去DN上读取相应版本的数据。

image.png

水平扩展

PolarDB-X将数据表以水平分区的方式,分布在多个DN(Data Node,数据节点)上。数据分区方式由分区函数决定,PolarDB-X支持哈希(Hash)、范围(Range)等常用的分区函数。

以下图为例,shop库中的orders表根据每行数据的id属性的哈希,被水平切分成orders_00~orders_11共计12个分区,均匀分布在4个数据节点上。PolarDB-X的分布式SQL层将会自动完成查询路由、结果合并等。

image.png

MySQL 生态兼容

PolarDB-X通讯协议兼容MySQL协议,可以使用常见的MySQL客户端直接连接到PolarDB-X集群,包括JDBC Driver、ODBC Driver、Golang Driver等。兼容MySQL SSL、Prepare、Load等传输协议。

PolarDB-X兼容MySQL的各种DML、DAL、DDL语法

PolarDB-X事务采用基于乐观读(ReadView)、悲观锁的设计,支持ANSI标准中的四种隔离级别,且行为和MySQL一致。与MySQL相同,PolarDB-X默认采用可重复读(Repeatable Read)隔离级别,该级别下更新范围条件会引入间隙锁(Gap Lock)。

PolarDB-X账号权限系统的用法跟MySQL一致,支持GRANT、REVOKE、SHOW GRANTS、CREATE USER、DROP USER、SET PASSWORD等语句。目前支持库级和表级权限的授予,暂不支持列级别权限。更多信息参见账号与权限。

PolarDB-X还支持基于角色(Role)的权限管理。角色(Role)是分配给账号(User)的权限的集合,定义了允许账号在应用程序中查看和执行的操作。PolarDB-X中的Role操作与MySQL的操作兼容

olarDB-X兼容MySQL的常规备份策略。备份操作通常都发生在非主节点上,可以确保备份操作对在线业务流量无影响,同时支持定时全量备份、实时binlog增量备份的能力。支持任意时间点的一致性恢复。

PolarDB-X兼容MySQL的透明数据加密TDE,支持将数据表空间的文件做加密处理,确保业务数据的安全性。

PolarDB-X兼容MySQL binlog复制协议。用户可以将PolarDB-X集群看作一个普通的MySQL节点,将其他MySQL节点作为PolarDB-X的同步源端或目标端。

PolarDB-X的binlog格式和MySQL原生格式一致,因此也可以用于CDC场景,例如利用 Canal 等将PolarDB-X的写入数据同步到其他存储中。

全局二级索引

全局二级索引(Global Secondary Index,GSI)是PolarDB-X中的一项重要特性,相比于本地二级索引,全局二级索引中的数据按照指定的拆分方式分布在各个存储节点上。通过全局二级索引,用户能够按需增加拆分维度、提供全局唯一约束等。

每个GSI对应一张分布式索引表,和其他分布式表一样,按照指定的分区规则水平拆分为多张物理表。PolarDB-X使用分布式事务维护主表和索引表之间数据强一致。

image.png

混合负载HTAP

PolarDB-X是一款支持HTAP(Hybrid Transaction/Analytical Processing)的数据库,在支持高并发、事务性请求的同时,也对分析型的复杂查询提供了良好的支持。

为了加速复杂分析型查询,PolarDB-X将计算任务切分并调度到多个计算节点上,从而利用多个节点的计算能力,加速查询的执行。这种方式也称为MPP并行计算。

image.png

全局日志变更 CDC

MySQL binlog是MySQL记录变更数据的"二进制日志",它可以看做是一个消息队列,队列中按顺序保存了MySQL中详细的增量变更信息,通过消费队列中的变更条目,下游系统或工具实现了与MySQL的实时数据同步,这样的机制也称为CDC(Change Data Capture,增量数据捕捉)。

PolarDB-X是兼容MySQL生态的分布式数据库。通过集群内的CDC组件,PolarDB-X 能够提供与MySQL binlog格式兼容的变更日志,并且隐藏掉集群扩缩容、分布式事务、全局索引等分布式特性对外部的影响,以便提供与单机MySQL数据库一致的使用体验。

image.png

快速部署体验

PolarDB-X支持多种形态的快速部署能力,可以结合各自需求尽心选择。

但是注意,推荐在Linux虚拟机环境下进行部署体验,不要在自己本地环境里,更不要在windows系统下直接装docker来测试。另外,虚拟机实验前请做快照,因为涉及多种部署方式,快照可以方便恢复状态。

image.png

【注意】:PXD 主要面向的是开发测试场景,生产环境请使用 polardbx-operator 在 K8S 上进行部署。

RPM包部署

这里先采用依赖最少的RPM包部署方式,通过 RPM 部署 PolarDB-X 标准版(集中式形态),需要首先获取相应的 RPM 包点此链接到达下载界面。依据自己的电脑情况下载对应版本。

image.png

下载完后如图所示。

image.png

打开虚拟机,初次实验的小伙伴可以参考我的这篇文章:Linux技术基础(1)——操作系统的安装 ,里面详细讲述了如何从0到1安装龙蜥操作系统虚拟机,这里就不过多赘述。

使用shell或者finalshell远程上去,把rpm文件拖入进服务器。

image.png

进入你拖入rpm的文件夹下,我的为/usr/local/sbin,所以执行如下命令。

cd /usr/local/sbin

执行如下命令开始快速安装:

yum install -y <您下载或编译的rpm>

安装过程如下图,请耐心等待~

image.png

安装完毕后如图所示:

image.png

安装后的二进制文件,会出现在 /opt/polardbx-engine/bin 中。

cd /opt/polardbx_engine/bin

image.png

准备一份 my.cnf(参考模板)和数据目录(如果改了 my.cnf,则下面的目录也要相应修改),就可以准备启动了。

my.cnf内容如下,可以自行修改:

[mysqld]
basedir = /opt/polardbx-engine
log_error_verbosity = 2
default_authentication_plugin = mysql_native_password
gtid_mode = ON
enforce_gtid_consistency = ON
log_bin = mysql-binlog
binlog_format = row
binlog_row_image = FULL
master_info_repository = TABLE
relay_log_info_repository = TABLE

# change me if needed
datadir = /home/polarx/polardbx-engine/data
tmpdir = /home/polarx/polardbx-engine/tmp
socket = /home/polarx/polardbx-engine/tmp.mysql.sock
log_error = /home/polarx/polardbx-engine/log/alert.log
port = 4886
cluster_id = 1234
cluster_info = 127.0.0.1:14886@1

[mysqld_safe]
pid_file = /home/polarx/polardbx-engine/run/mysql.pid

进入虚拟机中,执行如下命令:

# 创建并切换到 polarx 用户
useradd -ms /bin/bash polarx
echo "polarx:polarx" | chpasswd
echo "polarx    ALL=(ALL)    NOPASSWD: ALL" >> /etc/sudoers
su - polarx

# 创建必要目录
mkdir polardbx-engine
cd polardbx-engine && mkdir log mysql run data tmp

image.png

接下来创建my.cnf文件:

# 初始化my.cnf文件
vi my.cnf

image.png

初始化并启动PolarDB-X :

# 初始化
/opt/polardbx_engine/bin/mysqld --defaults-file=my.cnf --initialize-insecure
# 启动
/opt/polardbx_engine/bin/mysqld_safe --defaults-file=my.cnf &

image.png
image.png

查看进程启动状态和日志状态:

ps -ef|grep mysql

image.png
image.png

登录数据库,验证状态:

# 登录数据库,my.cnf指定了端口
mysql -h127.0.0.1 -P4886 -uroot
# 查询本机的paxos角色
MySQL [(none)]> SELECT * FROM INFORMATION_SCHEMA.ALISQL_CLUSTER_LOCAL \G
*************************** 1. row ***************************
          SERVER_ID: 1
       CURRENT_TERM: 2
     CURRENT_LEADER: 127.0.0.1:14886
       COMMIT_INDEX: 1
      LAST_LOG_TERM: 2
     LAST_LOG_INDEX: 1
               ROLE: Leader
          VOTED_FOR: 1
   LAST_APPLY_INDEX: 0
SERVER_READY_FOR_RW: Yes
      INSTANCE_TYPE: Normal
1 row in set (0.00 sec)

# 查询集群所有机器的paxos角色(只有Leader节点会返回数据)
MySQL [(none)]> SELECT * FROM INFORMATION_SCHEMA.ALISQL_CLUSTER_GLOBAL \G
*************************** 1. row ***************************
      SERVER_ID: 1
        IP_PORT: 127.0.0.1:14886
    MATCH_INDEX: 1
     NEXT_INDEX: 0
           ROLE: Leader
      HAS_VOTED: Yes
     FORCE_SYNC: No
ELECTION_WEIGHT: 5
 LEARNER_SOURCE: 0
  APPLIED_INDEX: 0
     PIPELINING: No
   SEND_APPLIED: No
1 row in set (0.00 sec)

image.png

因为默认my.cnf只配置了单机模式启动,因此只会显示单副本的Leader状态。

另外此处其实有好几个雷区,有的时候莫名其妙执行初始化任务时会失败。

image.png

会直接弹error日志报错,大概是cannot create directory ‘/opt/polardbx_engine/data/’: Permission denied,就是权限不够,这时候要切回root账号再去执行初始化任务。

如还有异常可以直接去alert.log里面查看,这种方式安装感觉不是特别稳定,稍有不慎就会有报错,不过也因为是测试环境,所以问题不大。

通过PXD部署

通过PXD部署单机环境

还是按照操作一步一步来,先安装 Python3 和 Docker。

yum install -y python3

image.png

检查命令:

which python3

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

image.png

接下来安装docker:

sudo yum install -y yum-utils    
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

image.png

安装完成后启动docker。

sudo systemctl start docker

image.png

执行 docker ps 命令验证。

docker ps

至此,Python3 和 Docker就已经部署完成了,下面就来使用 virtual environment 安装 PXD 工具。

python3 -m venv venv
source venv/bin/activate

image.png

先执行如下命令升级 pip

pip install --upgrade pip

如果出现下列样子,则是加载超时了:

image.png

改为执行如下命令:

pip --default-timeout=100 install --upgrade pip

image.png

然后再使用如下命令从阿里云的镜像安装,国外的镜像太慢了:

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

image.png
image.png

执行如下命令验证 pxd 是否安装成功:

pxd version

image.png

接下来开始部署部署 PolarDB-X。

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

pxd tryout

image.png

等到PolarDB-X 数据库创建完成后,会输出对应的连接信息,大概三十分钟左右,有些慢:

image.png

需要注意的是,PolarDB-X 管理员账号的密码随机生成,仅出现这一次,请注意保存。

执行如下命令,查看当前环境的 PolarDB-X 列表:

pxd list

image.png

上面安装的是署 PolarDB-X 企业版集群,同理,我们也可以尝试安装PolarDB-X 标准版集群。PolarDB-X 标准版采用一主一备一日志的三节点架构,性价比高,通过多副本同步复制,确保数据的强一致性。面向具备超高并发、复杂查询及轻量分析的在线业务场景。

首先,我们执行如下命令,清理本地环境所有的 PolarDB-X:

pxd cleanup

image.png

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

pxd tryout -t standard

image.png

当然,如果想创建基于 Paxos 的一主一备一日志的三节点集群,也可以使用如下命令:

pxd tryout -t standard -leader_only false

后面的安装过程就与上文一致了,为了节约时间,在此也不过多赘述,以上就是用PXD在本地部署PolarDB-X 单机的过程。

通过PXD部署多服务器集群环境

顺便一提,PXD 除了支持在本地一键创建实例外,也支持在 Linux 集群部署 PolarDB-X,可以组三台虚拟机搭建一个三节点集群,具体可以参考如下位置:

image.png

对于这三台虚拟机,也是有一些要求的:

  1. 集群内的所有机器都能访问互联网。进入机器后执行:ping www.baidu.com ,测试其网络是否正常。

  2. 在集群内的所有机器上安装 Docker。这个可以参考上文的步骤来做,最后执行docker --version来查看是否有回显即可。

  3. 集群机器建配置免密登录。选择任意一台机器作为部署机,配置部署机到集群所有机器的免密登录

最后一点额外说明一下,这里就是使用ssh-keygen来生成密钥对实现对于其他机器的免密登录,是为了方便跨节点进行一系列配置、数据同步、状态检查等操作。

# 生成密钥对,空格处按空格保持默认即可
ssh-keygen -t rsa

image.png

# 复制免登公钥到目标机器,修改user和ip
# 部署机也需要能免密登录自己
ssh-copy-id {
   user}@{
   ip}

image.png
image.png

在此输入密码即可,回显如下即表示添加成功。

image.png

接下来,开始在部署机上安装 PXD,该过程与单机部署过程基本一致,下面仅贴出命令,不过多解释和赘述。

安装 Python3,执行如下命令:

yum install -y python3

创建一个 Python3 的 virtual environment 环境并激活

python3 -m venv venv
source venv/bin/activate

安装PXD前建议先执行如下命令升级pip

pip install --upgrade pip

执行如下命令安装 pxd:

pip install pxd

至此,pxd部署完成。接下来开始准备 PolarDB-X 拓扑文件,这个文件主要是描述PolarDB-X集群组件布局、网络连接信息以及各节点角色配置的配置文件或定义。

由于PolarDB-X目前包含企业版和标准版两个系列,其对应系列的拓扑文件也不相同,大家按各自需求准备即可,在此,我以企业版为例进行安装部署。

PolarDB-X 企业版拓扑文件是分布式架构集群,支持更大数据量,面向具备企业级超高并发、大规模数据复杂查询、加速分析的业务场景。

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

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

image.png

编写如下的 YAML 文件,指定 PolarDB-X 企业版集群的名称以及 GMS, CN,DN 的部署节点。比如:总共准备了3台机器1.1.1.1、1.1.1.2、1.1.1.3.

假设 1.1.1.1 用来部署gms、cdc节点;1.1.1.2、1.1.1.3用来部署cn/dn各两个节点,其中dn下的 host_group 表示一个dn节点多副本的部署机器,比如Paxos三副本的话需要填入三个ip。

version: v1
type: polardbx
cluster:
  name: pxc_test
  gms:
    image: polardbx/polardbx-engine:v2.4.0_8.4.19
    host_group: [ 1.1.1.1]
  cn:
    image: polardbx/polardbx-sql:v2.4.0_5.4.19
    replica: 2
    nodes:
      - host: 1.1.1.2
      - host: 1.1.1.3
    resources:
      mem_limit: 4G
  dn:
    image: polardbx/polardbx-engine:v2.4.0_8.4.19
    replica: 2
    nodes:
      - host_group: [1.1.1.2]
      - host_group: [1.1.1.3]
    resources:
      mem_limit: 4G
  cdc:
    image: polardbx/polardbx-cdc:v2.4.0_5.4.19
    replica: 1
    nodes:
      - host: 1.1.1.1
    resources:
      mem_limit: 4G

通过以上拓扑文件创建的 PolarDB-X 企业版集群。拓扑文件包括如下属性:

  • version: 拓扑文件版本,无需修改

  • type: polardbx, 无需修改

  • cluster.name:PolarDB-X 集群名称

  • cluster.gms.image: gms docker 镜像名称,建议填上述命令的获取到的 DN 镜像,如不填,默认为最新镜像

  • cluster.gms.host_group: gms 机器 ip 列表,如果想创建单副本模式,列表中填写1个ip即可,如果想创建基于Paxos的三副本集群,列表中填3个ip即可,三副本集群的Leader节点将从前两个ip的节点上随机选出。

  • cluster.cn

    1. image: 计算节点镜像名称,建议填上述命令的获取到的 CN 镜像,如不填,默认为最新镜像。

    2. replica: 计算节点数目,需要与nodes中的host数量对应

    3. nodes: 计算节点的ip列表

    4. resources: 计算节点使用的资源

    5. mem_limit: 内存上限,默认 2G

  • cluster.dn

    1. image: 数据节点镜像名称,建议填上述命令的获取到的 DN 镜像,如不填,默认为最新镜像

    2. replica: 数据节点数目,需要与nodes中的 host_group 数量对应

    3. nodes: 存储节点的host_group列表,一个 host_group 表示一个dn节点多副本的部署机器,比如Paxos三副本的话需要填入三个ip,例如:[172.16.1.11,172.16.1.12,172.16.1.13]。三副本集群的Leader节点将从前两个ip的节点上随机选出

    4. resources: 存储节点使用的资源;mem_limit: 内存上限,默认 2G

  • cluster.cdc

    1. image: CDC 节点镜像名称,建议填上述命令的获取到的 CDC 镜像,如不填,默认为最新镜像

    2. replica: CDC 节点数目,需要与nodes中的host数量对应

    3. nodes: CDC 节点的ip列表

    4. resources: CDC 节点使用的资源;mem_limit: 内存上限,默认 2G

接下来,开始创建 PolarDB-X 集群,执行如下命令,即可在集群内一键部署 PolarDB-X:

pxd create -file polardbx.yaml

时间也很慢,大概要过三十多分钟。。。不知道是我家网卡还是咋地。。。

image.png

安装完成后,发现和上面单机部署明显不同的是,此处会生成两个连接地址。

image.png

而查看和管理命令依旧采用PXD的语法,见上文即可。

至此,通过PXD部署多服务器集群环境完成。

通过 K8S 部署

采用k8s部署的话,也是官方推荐的正式环境下的部署方式。

官方推荐的是采用 minikube 创建 Kubernetes 测试集群,当然,我们也可以使用阿里云的 容器服务 ACK 来创建一个 Kubernetes 集群,并遵循教程部署 PolarDB-X Operator 和 PolarDB-X 集群。

minikube 是由社区维护的用于快速创建 Kubernetes 测试集群的工具,适合测试和学习 Kubernetes。使用 minikube 创建的 Kubernetes 集群可以运行在容器或是虚拟机中,本节中以 CentOS 8.2 上创建 Kubernetes 为例。

部署前,请确保已经安装 minikube 和 Docker,并符合以下要求:

  • 机器规格不小于 4c8g

  • minikube >= 1.18.0

  • docker >= 1.19.3

下面我们来部署minikube,这里官方文档也并未提及到。

首先安装 conntrack

yum -y install conntrack

image.png

下载安装 (x86)版,等待大约5分钟。

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

image.png

设置可执行权限

chmod +x /usr/local/bin/minikube

image.png

启动 minikube,这里内存太少了,得调一下虚拟机的内存。

minikube start --force --vm-driver=docker

image.png

一切运行正常,输出如下,我用的连接器不能识别表情符号,所以看不到官方那样的:

image.png

此时 minikube 已经正常运行。minikube 将自动设置 kubectl 的配置文件,但是没有安装 kubectl ,所以minikube 也提供了子命令来使用 kubectl,不过似乎需要下载相关组件:

minikube kubectl -- cluster-info

image.png

有时候下载也会出现超时的情况,如下:

image.png

所以这里我还是推荐先安装 kubectl,再使用 kubectl 来访问集群:

下载kubectl文件:

curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl

image.png

赋可执行权限:

chmod +x ./kubectl

移动到系统目录:

sudo mv ./kubectl /usr/local/bin/kubectl

测试执行,查看回显:

kubectl version

再执行如下命令查看:

kubectl cluster-info

image.png

所以啊,这里又是一个雷区,用minikube 提供的子命令来使用 kubectl真的不靠谱啊,组件要下载一百多个小时。。。

接下来,开始部署 PolarDB-X Operator。这里有提了一堆需求,没办法,慢慢来做吧。

image.png

首先创建一个叫 polardbx-operator-system 的命名空间

kubectl create namespace polardbx-operator-system

image.png

执行以下命令安装 Helm3,先下载:

wget https://get.helm.sh/helm-v3.2.0-linux-amd64.tar.gz

image.png

随缘吧,外网的反正也不稳定,等他自己慢慢下载吧

下载完之后解压。

tar -zxvf helm-v3.2.0-linux-amd64.tar.gz

拷贝到该目录下。

cp linux-amd64/helm /usr/local/bin

执行验证。

helm version

image.png

OK,接下来再安装 PolarDB-X Operator。

helm install --namespace polardbx-operator-system polardbx-operator https://github.com/polardb/polardbx-operator/releases/download/v1.6.0/polardbx-operator-1.6.0.tgz

又是漫长的等待。。。不对,我卡了,错怪你了牢里!等待看到回显如下:

image.png

查看 PolarDB-X Operator 组件的运行情况,等待它们都进入 Running 状态后,PolarDB-X Operator 就安装完成了,现在可以开始部署 PolarDB-X 集群了

kubectl get pods --namespace polardbx-operator-system

image.png

这里我还是以企业版集群为例子吧。PolarDB-X 企业版是分布式架构集群,支持更大数据量,面向具备企业级超高并发、大规模数据复杂查询、加速分析的业务场景。 现在来快速部署一个 PolarDB-X 企业版集群,它包含 1 个 GMS 节点、1 个 CN 节点、1 个 DN 节点和 1 个 CDC 节点。

等等,难道我中幻术了?这下面的部署过程怎么似曾相识。

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

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

image.png

准备一个quick-start.yaml文件,将如下内容粘贴到文件中,并根据上述命令的结果更新 YAML 文件各个组件的image字段。

apiVersion: polardbx.aliyun.com/v1
kind: PolarDBXCluster
metadata:
  name: quick-start
spec:
  topology:
    nodes:
      gms:
        template:
          image: polardbx/polardbx-engine:v2.4.0_8.4.19 
          resources:
            requests:
              cpu: 100m
              memory: 500Mi
            limits:
              cpu: 1
              memory: 1Gi
      cn:
        replicas: 1
        template:
          image: polardbx/polardbx-sql:v2.4.0_5.4.19
          resources:
            requests:
              cpu: 100m
              memory: 1Gi
            limits:
              cpu: 1
              memory: 2Gi
      dn:
        replicas: 1
        template:
          image: polardbx/polardbx-engine:v2.4.0_8.4.19
          resources:
            requests:
              cpu: 100m
              memory: 500Mi
            limits:
              cpu: 1
              memory: 1Gi
      cdc:
        replicas: 1
        template:
          image: polardbx/polardbx-cdc:v2.4.0_5.4.19
          resources:
            requests:
              cpu: 100m
              memory: 500Mi
            limits:
              cpu: 1
              memory: 1Gi

执行如下命令创建集群:

kubectl apply -f quick-start.yaml

image.png

使用如下命令查看创建状态:

image.png

当 PHASE 显示为 Running 时,PolarDB-X 集群就已经部署完成了。

完成测试后,可以通过以下命令销毁 PolarDB-X 集群:

kubectl delete polardbxcluster quick-start

image.png

使用如下命令卸载 PolarDB-X Operator:

$ helm uninstall --namespace polardbx-operator-system polardbx-operator

image.png

Helm 卸载并不会删除对应的定制资源 CRD,使用下面的命令查看并删除 PolarDB-X 对应的定制资源:

image.png

至此,基于K8S 部署PolarDB -X已经全部完成。

结尾及建议

这篇文章写了两天,三种部署方式都尝试了一次,也是一边写一边记录的,整体体验下来,我感觉PXD部署还是最简便和可靠的。

第一种方式我采用的是RPM包部署。里面的坑点就在于初始化PolarDB-X时容易报错,稍微容易一点解决的权限问题都还好说,有些报错问题是压根就看不明白,我把虚拟机恢复快照了三次才使用第一种方式安装成功,第一天大部分的时间都耗在这个上面了,所以建议在RPM包部署上的排错提示能稍微多一些,多给出一些已知问题的解决方案和针对性的解决建议。

第二种方式是PXD,也是目前我觉得体验感最好的一个,虽然也是有一些小坑。比如我上文提到的执行pip install --upgrade pip时可能会超时,部署下载过程很慢等等。。但这些都是可以通过查找手册解决的小问题,所以其实影响不大,这也是为啥我觉得该方式最好的原因。

第三种方式是K8S部署,这里我也没有说这种方式不好,主要是前奏准备阶段有些太长了,如果搭测试环境确实显得很臃肿,但是如果是正式环境的话也还是建议采用K8s来部署。里面的坑点我也提到了,不要使用minikube 提供的子命令来使用 kubectl,要下载一百多个小时!

根据这几天的体验,PolarDB开源版确实是展现出了无与伦比的灵活性与强大的性能潜力,尤其在自定义配置、资源优化以及对多样化业务场景的支持上,彰显了其作为新一代云原生数据库的独特魅力。它不仅巩固了PolarDB在数据库技术领域的领导地位,更为开发者和企业用户开启了一扇通往高效数据管理与分析的新大门。

未来,也期望PolarDB开源版能继续深化其在开源社区的影响力,通过不断吸纳来自全球开发者的智慧与创新,逐步完善产品功能,优化用户体验:包括增强数据库的安全性,提升跨平台兼容性,以及深化AI与机器学习技术的融合,使数据库能够自我学习、自我优化,更好地适应快速变化的业务需求。

在此,致谢。

image.png

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
运维 Cloud Native 数据管理
云原生数据库:下一代数据管理的趋势与挑战
【9月更文挑战第4天】云原生数据库作为下一代数据管理的趋势,正以其独特的优势引领着数据管理领域的变革。然而,在快速发展的同时,云原生数据库也面临着诸多挑战。未来,随着技术的不断进步和市场的不断成熟,云原生数据库将不断优化和完善,为企业数字化转型提供更加高效、安全、灵活的数据管理服务。同时,我们也需要关注并解决其面临的挑战,推动云原生数据库技术的健康发展。
|
21天前
|
存储 关系型数据库 MySQL
阿里云PolarDB解决游戏行业全球部署高并发问题
阿里云PolarDB解决游戏行业全球部署高并发问题
|
2月前
惊世骇俗!开源 PolarDB-X 部署安装大冒险,全程心跳与惊喜不断!
【9月更文挑战第8天】作为技术爱好者的我,近期成功完成了开源 PolarDB-X 的部署安装。尽管过程中遇到不少挑战,但通过精心准备环境、下载安装包、配置参数及启动服务等步骤,最终顺利实现部署。本文将详细介绍部署全过程及可能遇到的问题,为您的 PolarDB-X 探索之旅提供参考与启发,希望能让大家在技术海洋里畅游得更加顺利!
126 2
|
2月前
|
Kubernetes 关系型数据库 分布式数据库
PolarDB在混合云环境下的部署策略与挑战
【9月更文挑战第5天】随着云计算技术的发展,混合云成为众多企业首选,以满足数据管理和业务扩展需求。阿里巴巴自研的PolarDB是一款高性能云原生数据库,在混合云中可通过多种方式部署,如Kubernetes,实现资源弹性伸缩及自动化管理,并支持跨平台数据同步与金融级高可用性。然而,混合云环境下也带来了复杂性、成本优化及运维难度等挑战,企业需综合考虑平台兼容性、安全性和资源投入比例等问题。
101 5
|
3月前
|
Oracle 关系型数据库 分布式数据库
PolarDB 数据备份与恢复策略
【8月更文第27天】PolarDB 是阿里云推出的一款高性能、高可用的关系型数据库服务,支持 MySQL、PostgreSQL 和 Oracle 数据库引擎。对于任何数据库系统来说,数据的安全性和完整性至关重要。本文将详细介绍 PolarDB 的备份机制,并提供数据恢复的最佳实践。
147 0
|
3月前
|
监控 Oracle 关系型数据库
PolarDB 在多云环境下的部署与管理
【8月更文第27天】随着云计算的普及和发展,越来越多的企业开始采用多云策略来分散风险、优化成本并提高业务灵活性。阿里云的 PolarDB 是一种兼容 MySQL、PostgreSQL 和 Oracle 的关系型数据库服务,它提供了高性能、高可用性和自动化的管理功能。本文将探讨如何在多云环境下部署和管理 PolarDB 实例,并提供一些实用的代码示例。
74 0
|
3月前
|
关系型数据库 分布式数据库 数据库
PolarDB 数据库迁移工具与策略
【8月更文第27天】随着业务的增长和技术的发展,企业常常需要对现有的数据库进行升级或迁移以适应新的需求。阿里云提供的 PolarDB 是一款高性能的关系型数据库服务,支持 MySQL、PostgreSQL 和 Oracle 三种存储引擎。本文将介绍如何利用 PolarDB 提供的迁移工具来高效地完成数据迁移工作,并探讨在迁移过程中需要注意的关键点。
192 0
|
22天前
|
关系型数据库 MySQL 分布式数据库
零基础教你用云数据库PolarDB搭建企业网站,完成就送桌面收纳桶!
零基础教你用云数据库PolarDB搭建企业网站,完成就送桌面收纳桶,邀请好友完成更有机会获得​小米Watch S3、小米体重称​等诸多好礼!
零基础教你用云数据库PolarDB搭建企业网站,完成就送桌面收纳桶!
|
2月前
|
关系型数据库 MySQL Serverless
探索PolarDB MySQL版:Serverless数据库的灵活性与性能
本文介绍了个人开发者对阿里云PolarDB MySQL版,特别是其Serverless特性的详细评测体验。评测涵盖了产品初体验、性能观测、Serverless特性深度评测及成本效益分析等方面。尽管试用过程中遇到一些小问题,但总体而言,PolarDB MySQL版表现出色,提供了高性能、高可用性和灵活的资源管理,是个人开发者和企业用户的优秀选择。
|
3月前
|
关系型数据库 MySQL 分布式数据库
PolarDB 与传统数据库的性能对比分析
【8月更文第27天】随着云计算技术的发展,越来越多的企业开始将数据管理和存储迁移到云端。阿里云的 PolarDB 作为一款兼容 MySQL 和 PostgreSQL 的关系型数据库服务,提供了高性能、高可用和弹性伸缩的能力。本文将从不同角度对比 PolarDB 与本地部署的传统数据库(如 MySQL、PostgreSQL)在性能上的差异。
208 1