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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
数据管理 DMS,安全协同 3个实例 3个月
推荐场景:
学生管理系统数据库
简介: 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

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
4天前
|
关系型数据库 分布式数据库 数据库
【PolarDB开源】PolarDB资源隔离技术:在多租户环境中的应用与优化
【5月更文挑战第29天】PolarDB,阿里云的云原生数据库,在多租户环境中通过逻辑(Schema/Partition隔离)和物理(分布式存储计算节点)隔离保障数据安全和资源独占。它支持动态资源分配,适应不同租户需求,处理大规模并发,提供租户管理及数据访问控制功能。通过优化资源分配算法、提升事务处理能力和强化监控告警,PolarDB确保性能和稳定性,满足多租户的高效数据库服务需求。
36 1
|
4天前
|
Cloud Native 关系型数据库 分布式数据库
【PolarDB开源】PolarDB开源项目未来展望:技术趋势与社区发展方向
【5月更文挑战第29天】PolarDB,阿里云的云原生分布式数据库,正聚焦于云原生、容器化、HTAP与实时分析、智能化运维等技术趋势,旨在提升资源利用率、扩展性及数据分析能力。未来,项目将深化全球开源社区合作,拓宽应用场景,构建开发者生态,以创新技术驱动数据库领域发展,目标成为领先的云数据库服务。
33 1
|
4天前
|
Kubernetes 关系型数据库 分布式数据库
【PolarDB开源】PolarDB在混合云环境下的部署策略与挑战
【5月更文挑战第29天】PolarDB,阿里云的高性能分布式数据库,应对混合云环境的部署策略包括:灵活的架构选择(如Kubernetes)、跨云平台数据实时同步及内置安全特性保障数据安全。然而,也面临复杂性、成本优化和运维难度等挑战。示例展示了使用Kubernetes StatefulSet部署PolarDB的基本配置。
32 3
|
5天前
|
人工智能 关系型数据库 分布式数据库
【PolarDB 开源】PolarDB 与 AI 融合:智能数据库管理与预测性维护
【5月更文挑战第28天】PolarDB结合AI,开创数据库管理新纪元,实现智能优化、资源预测与分配、预测性维护。通过AI算法提升查询效率,动态调整资源,提前发现故障,增强安全。示例代码显示如何用AI预测查询时间。面对挑战,持续学习改进,未来二者融合将为数据库管理带来更多创新与竞争力。
82 0
|
5天前
|
安全 关系型数据库 分布式数据库
【PolarDB 开源】PolarDB 在金融行业中的实践:高可用与安全合规解决方案
【5月更文挑战第28天】PolarDB,一款适用于金融行业的强大数据库,以其高可用性和安全合规性脱颖而出。通过多副本机制和自动故障转移确保业务连续性,结合严格的访问控制和数据加密技术保护信息安全。在实际应用中,如银行核心系统,PolarDB 负责处理海量交易数据,同时支持主从架构以备故障切换。此外,设置强密码策略和加密存储确保合规性,并通过监控预警及时解决问题。随着金融科技发展,PolarDB 将在云原生架构和人工智能等领域发挥更大作用,助力金融行业创新与进步。
88 0
|
5天前
|
存储 关系型数据库 分布式数据库
【PolarDB 开源】PolarDB 数据备份与恢复策略:确保数据安全的最后一道防线
【5月更文挑战第28天】PolarDB 开源数据安全的关键:备份与恢复策略。定期备份(全量+增量)降低数据丢失风险,制定策略考虑多种因素。确保备份存储安全,测试恢复流程有效性,结合监控系统及时处理问题。保留多版本备份,应对灾难情况有预案。培训人员,提高数据安全意识,打造稳固防线。
143 0
|
11天前
|
关系型数据库 分布式数据库 数据库
【PolarDB 开源】PolarDB 性能调优实录:提升数据库集群吞吐量的技巧
【5月更文挑战第22天】PolarDB 性能调优关键点包括硬件资源配置、数据库参数调整、索引优化、分区策略、事务优化及性能监控。创建高效索引如`CREATE INDEX idx_name ON table_name (column_name);`,根据业务场景选择分区方式,调整事务隔离级别以提升并发性能。监控 CPU、内存等指标,定期维护数据库,结合业务特点综合调优,从而提升数据库集群吞吐量。这些技巧有助于发挥PolarDB潜力,支持业务高效运行。
219 6
|
2天前
|
存储 关系型数据库 数据管理
探索PostgreSQL的高级数据库操作
【5月更文挑战第31天】探索PostgreSQL的高级特性,如分区表提升大数据查询性能,物化视图加速复杂查询,窗口函数计算累计值,全文搜索快速检索文本,及并行查询优化大规模数据处理。通过这些功能,PostgreSQL能更高效地管理与分析数据,应对复杂场景。
|
5天前
|
存储 监控 关系型数据库
关系型数据库数据库设计优化
【5月更文挑战第18天】关系型数据库数据库设计优化
19 1
|
6天前
|
SQL 关系型数据库 分布式数据库
【PolarDB开源】PolarDB Proxy配置与优化:提升数据库访问效率
【5月更文挑战第27天】PolarDB Proxy是阿里云PolarDB的高性能数据库代理,负责SQL请求转发和负载均衡。其关键配置包括:连接池管理(如最大连接数、空闲超时时间),负载均衡策略(轮询、权重轮询、一致性哈希),以及SQL过滤规则。优化方面,关注监控与调优、缓存策略、网络优化。通过这些措施,可提升数据库访问效率和系统稳定性。
106 1