前言
体验了基于源码构建的部署polardb-x 单机部署,当然也想体验性能更好的完全分布式集群。这边文章将重点介绍如何部署polardb-x集群
简介
PolarDB-X 是一款面向超高并发、海量存储、复杂查询场景设计的云原生分布式数据库系统。其采用 Shared-nothing 与存储计算分离架构,支持水平扩展、分布式事务、混合负载等能力,具备企业级、云原生、高可用、高度兼容 MySQL 系统及生态等特点。
PolarDB-X 最初为解决阿里巴巴天猫"双十一"核心交易系统数据库扩展性瓶颈而生,之后伴随阿里云一路成长,是一款经过多种核心业务场景验证的、成熟稳定的数据库系统。 PolarDB-X 的核心特性如下:
水平扩展
PolarDB-X 采用 Shared-nothing 架构进行设计,支持多种 Hash 和 Range 数据拆分算法,通过隐式主键拆分和数据分片动态调度,实现系统的透明水平扩展。
分布式事务
PolarDB-X 采用 MVCC + TSO 方案及 2PC 协议实现分布式事务。事务满足 ACID 特性,支持 RC/RR 隔离级别,并通过一阶段提交、只读事务、异步提交等优化实现事务的高性能。
混合负载
PolarDB-X 通过原生 MPP 能力实现对分析型查询的支持,通过 CPU quota 约束、内存池化、存储资源分离等实现了 OLTP 与 OLAP 流量的强隔离。
企业级
PolarDB-X 为企业场景设计了诸多内核能力,例如 SQL 限流、SQL Advisor、TDE、三权分立、Flashback Query 等。
云原生
PolarDB-X 在阿里云上有多年的云原生实践,支持通过 K8S Operator 管理集群资源,支持公有云、混合云、专有云等多种形态进行部署,并支持国产化操作系统和芯片。
高可用
通过多数派 Paxos 协议实现数据强一致,支持两地三中心、三地五副本等多种容灾方式,同时通过 Table Group、Geo-locality 等提高系统可用性。
兼容 MySQL 系统及生态
PolarDB-X 的目标是完全兼容 MySQL ,目前兼容的内容包括 MySQL 协议、MySQL 大部分语法、Collation、事务隔离级别、Binlog 等。
集群部署方案
集群部署方案主要有两个
- PXD 部署
- k8s部署
鉴于便捷性,这是我们使用k8s部署
k8s 部署polardb-x集群
1. 环境准备
- 安装 Helm 已经配置环境变量
- k8s 集群
- 良好的网络环境
2. 安装 PolarDB-X Operator
-
在 Helm 仓库中添加 PolarDB-X 相关网址:
shellhelm repo add polardbx https://polardbx-charts.oss-cn-beijing.aliyuncs.com
-
检查已发布的 PolarDB-X Operator 版本:
shellhelm search repo polardbx/polardbx-operator -l
推荐安装最新版本,例如:v1.6.2。
-
创建 polardbx-operator-system 命名空间:
shellkubectl create namespace polardbx-operator-system
-
用以下 Helm 命令安装 v1.6.2:
shellhelm install --namespace polardbx-operator-system \ --set node.volumes.data=/polarx/data --set imageRepo=registry:5000 \ --set extension.config.images.store.galaxy.exporter=register:5000/mysqld-exporter:master \ --version 1.6.2 \ polardbx-operator polardbx/polardbx-operator
-
检查容器启动是否成功:
shellkubectl get pods -n polardbx-operator-system
如果pod的状态都处于running 就说明PolarDB-X Operator 安装成功了
3. 部署polardb-x集群
3.1 准备yaml
-
首先执行如下命令获取 PolarDB-X 各个组件的最新镜像版本(需要填入YAML文件):
shellcurl -s "https://polardbx-opensource.oss-cn-hangzhou.aliyuncs.com/scripts/get-version.sh" | sh
-
输出内容 以2.4版本为例
logCN 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 COLUMNAR polardbx/polardbx-columnar:v2.4.0_5.4.19
-
编写 yaml文件
shellvi polardbx_cluster.yaml
-
yaml 内容如下
和官方配置文件不同的是,这里使用了polardbx-opensource-registry.cn-beijing.cr.aliyuncs.com/polardbx 镜像仓库地址,而不是默认的,避免因为网络问题拉取不到镜像。如果自带梯子可直接将镜像替换成官方推荐的地址 例如 把 polardbx-opensource-registry.cn-beijing.cr.aliyuncs.com/polardbx/替换为polardbx/
yamlapiVersion: polardbx.aliyun.com/v1 kind: PolarDBXCluster metadata: name: polardbx-cluster spec: topology: nodes: gms: template: image: polardbx-opensource-registry.cn-beijing.cr.aliyuncs.com/polardbx/polardbx-engine:v2.4.0_8.4.19 resources: requests: cpu: 1 memory: 4Gi limits: cpu: 1 memory: 4Gi cn: replicas: 2 template: image: polardbx-opensource-registry.cn-beijing.cr.aliyuncs.com/polardbx/polardbx-sql:v2.4.0_5.4.19 resources: requests: cpu: 2 memory: 4Gi limits: cpu: 2 memory: 4Gi dn: replicas: 3 template: image: polardbx-opensource-registry.cn-beijing.cr.aliyuncs.com/polardbx/polardbx-engine:v2.4.0_8.4.19 resources: requests: cpu: 2 memory: 8Gi limits: cpu: 2 memory: 8Gi cdc: replicas: 1 template: image: polardbx-opensource-registry.cn-beijing.cr.aliyuncs.com/polardbx/polardbx-cdc:v2.4.0_5.4.19 resources: requests: cpu: 1 memory: 4Gi limits: cpu: 2 memory: 4Gi
3.2 镜像提前下载(推荐 因为镜像都比较大 推荐提前下载)
在k8s1.20 以后 运行时环境被替换为了 Containerd 故使用 工具拉取镜像
shell
crictl pull polardbx-opensource-registry.cn-beijing.cr.aliyuncs.com/polardbx/polardbx-engine:v2.4.0_8.4.19
crictl pull polardbx-opensource-registry.cn-beijing.cr.aliyuncs.com/polardbx/polardbx-sql:v2.4.0_5.4.19
crictl pull polardbx-opensource-registry.cn-beijing.cr.aliyuncs.com/polardbx/polardbx-cdc:v2.4.0_5.4.19
注意: crictl 拉取镜像的命令没有进度条限制,并且一直阻塞住,在保证网络正常的情况下 静静的等待即可
下载后可使用crictl image list | grep polardbx-opensource-registry.cn-beijing.cr.aliyuncs.com 命令查看
如果运行时环境还是docker的话 可以使用docker命令拉取镜像
shell
docker pull polardbx-opensource-registry.cn-beijing.cr.aliyuncs.com/polardbx/polardbx-engine:v2.4.0_8.4.19
docker pull polardbx-opensource-registry.cn-beijing.cr.aliyuncs.com/polardbx/polardbx-sql:v2.4.0_5.4.19
docker pull polardbx-opensource-registry.cn-beijing.cr.aliyuncs.com/polardbx/polardbx-cdc:v2.4.0_5.4.19
同样也可以使用 docker images -a | grep polardbx-opensource-registry.cn-beijing.cr.aliyuncs.com 命令查看
3.3 执行apply
shell
kubectl apply -f polardbx_cluster.yaml
3.4 等待部署完成
通过如下命令查看部署情况
shell
kubectl get polardbxcluster -w
部署 完成后 效果如下
4. 卸载 polardb-x集群
卸载 polardb-x集群 也比较容易
shell
# polardbx-cluster 这个是集群的名称 名称是在yaml里定义的
kubectl delete polardbxcluster polardbx-cluster
5. 使用polardb-x集群
-
首先查看连接连接地址 因为我们是两个DN 节点 需要使用一个负载均衡的地址 这个polardb-x 集群部署完成后 已经提供在 k8s的服务里
也可通过命令行 查看该服务
shell kubectl get service polardbx-cluster
我们需要使用的就是 这个cluster ip
-
查看连接DN的账号密码
可通过可视化工具查看
内容如下
需要注意的是 这个密码不能直接使用 需要先进行base64解密 然后才是真正的密码
也可以通过命令行查看
shellkubectl get secret polardbx-cluster -o jsonpath="{.data['polardbx_root']}" | base64 -d | xargs echo "Password:"
输出结果即是密码
-
使用可视化工具连接测试
good day !!!