目录
1.什么是分布式数据库
分布式数据库,是相对于单体数据库而言的,
简单的说,分布式数据库就是用分布式架构实现的数据库。
当前分布式数据库可以分为三个技术方向,
-
一是以 DRDS、TDSQL 等为代表的 Sharding 技术,其最大的优势在于继承了 MySQL 存储多年的的技术积累;
-
二是以 Cockroach/YugabyteDB/TiDB 为代表的NewSQL,最大的优势在于全自研的技术栈,提供了水平伸缩和原生分布式的能力,重点以 Raft/Paxos 数据高可用、分布式强一致事务为典型技术,满足用户对于分布式下数据一致性的要求;
-
三是以 PolarDB/Aurora 为代表的云原生DB,特点是基于云的虚拟化的技术,提供资源池化的能力。
关于PolarDB-X 如何牛逼,我们就不在这里介绍了,有兴趣可以搜一搜。
接下来,本文主要介绍PolarDB-X架构和安装方式。
2.PolarDB-X 是什么样的存在
2.1 产品架构
PolarDB-X整个架构核心分为4部分:
- CN(全称:Compute Node/计算节点,代号GalaxySQL),主要提供分布式SQL引擎,解决分布式事务协调、优化器、执行器等。
- DN(全称:Data Node/存储节点,代号GalaxyEngine),主要提供数据存储引擎,比如InnoDB和自研存储引擎(X-Engine和神秘列存),解决数据一致性和持久化,并提供计算下推能力满足分布式要求,可支持本地盘和共享存储。
- GMS(全称:Global Meta Service/全局元数据服务),主要提供分布式下元数据和全局授时服务,比如TSO、表的metadata信息等。
- CDC(全称:Change Data Capture/日志节点,代号GalaxyCDC)负责全局增量日志的生成、分发和订阅。通过GalaxyCDC,PolarDB-X 数据库可以对外提供完全兼容 MySQL Binlog 格式和协议的增量日志,可实现与 MySQL Binlog 下游生态工具的无缝对接。
2.2 物理拓扑
PolarDB-X在交互上提供面向后台的数据库管控和用户控制台,并提供OpenAPI,用户可以基于OpenAPI完成管控集成。
PolarDB-X提供数据库实例化,实例规格有8c32g/32c128g等。
一个实例在物理上会有4种资源组成:
- 三副本的GMS
- 一组CN节点(计算节点)
- 一组DN节点(存储节点)
- 一组CDC(提供全局binlog)
组件之间会进行元数据和RPC请求的交互。
不同的实例规格的最大区别在于CN/DN节点数量的不同,实例规格会和CN/DN节点数保持线性一致。
对于外部用户的使用来说,一个PolarDB-X的实例最终会通过接入点(endpoint)的vip/dns来访问,对于用户的感觉就是一个MySQL实例,可以使用MySQL命令行、GUI客户端等进行访问。
3. 部署PolarDB-X
PolarDB-X的部署方式主要包括 通过 PXD 部署、通过 K8S 部署、通过源码编译部署等。
接下里以 PXD的部署方式介绍安装和使用。
通过 PXD 工具部署 PolarDB-X 数据库需要先安装 Python3 和 Docker。
安装 Python3 ,如果是Mac,可以使用 brew install python。更多具体安装方式可以网上搜索。
安装 Docker Desktop for Mac,参考文档:https://docs.docker.com/desktop/mac/install/
3.1 安装PXD
python3 -m venv venv
source venv/bin/activate
# 安装前建议先执行如下命令升级 pip
pip install --upgrade pip
pip install pxd
3.2 部署 PolarDB-X
直接运行 pxd tryout 命令会创建一个最新版本的 PolarDB-X 数据库,其中 GMS, CN, DN, CDC 节点各 1 个:
pxd tryout
也可以指定 CN,DN, CDC 节点的个数以及版本,命令如下:
pxd tryout -cn_replica 1 -cn_version latest -dn_replica 1 -dn_version latest -cdc_replica 1 -cdc_version latest
tryout 模式创建的 GMS 和 DN 默认采用单副本模式,如果想创建基于 Paxos 的三副本的集群,使用如下命令:
pxd tryout -leader_only false
output:
pxd tryout
/Users/lanyangyang/workspace/venv/lib/python3.9/site-packages/deployer
Start creating PolarDB-X cluster pxc-tryout on your local machine
PolarDB-X Cluster params:
* cn count: 1, version: latest
* dn count: 1, version: latest
* cdc count: 1, version: latest
* gms count: 1, version: latest
* leader_only: True
Processing [------------------------------------] 0% pre check
Processing [##----------------------------------] 7% generate topology
Processing [#####-------------------------------] 15% check docker engine version
Processing [########----------------------------] 23% pull images
Pull image: polardbx/galaxysql:latest at 127.0.0.1
latest:Pulling from polardbx/galaxysql
... ...
Status: Downloaded newer image for polardbx/galaxycdc:latest
Processing [###########-------------------------] 30% create gms node
Processing [#############-----------------------] 38% create gms db and tables
Processing [################--------------------] 46% create PolarDB-X root account
Processing [###################-----------------] 53% create dn
Processing [######################--------------] 61% register dn to gms
Processing [########################------------] 69% create cn
Processing [###########################---------] 76% wait cn ready
Processing [##############################------] 84% create cdc containers
Processing [#################################---] 92% wait PolarDB-X ready
Processing [####################################] 100%
PolarDB-X cluster create successfully, you can try it out now.
Connect PolarDB-X using the following command:
mysql -h127.0.0.1 -P62450 -upolardbx_root -pxxxx
PolarDB-X 数据库创建完成后,会输出对应的连接信息。
通过MySQL命令行连接 PolarDB-X实例,执行如下 SQL 初步体验 PolarDB-X 的分布式特性。
检查GMS
> select * from information_schema.schemata;
+--------------+--------------------+----------------------------+------------------------+----------+--------------------+
| CATALOG_NAME | SCHEMA_NAME | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | SQL_PATH | DEFAULT_ENCRYPTION |
+--------------+--------------------+----------------------------+------------------------+----------+--------------------+
| def | information_schema | utf8 | UTF8_GENERAL_CI | NULL | NO |
+--------------+--------------------+----------------------------+------------------------+----------+--------------------+
1 row in set (1.59 sec)
创建分区表
create database polarx_example partition_mode='partitioning';
use polarx_example;
create table example (
`id` bigint(11) auto_increment NOT NULL,
`name` varchar(255) DEFAULT NULL,
`score` bigint(11) DEFAULT NULL,
primary key (`id`)
) engine=InnoDB default charset=utf8
partition by hash(id)
partitions 8;
插入数据
insert into example values(null,'lily',375),(null,'lisa',400),(null,'ljh',500);
mysql> select * from example;
+----+------+-------+
| id | name | score |
+----+------+-------+
| 3 | ljh | 500 |
| 1 | lily | 375 |
| 2 | lisa | 400 |
+----+------+-------+
3 rows in set (0.09 sec)
mysql> show topology from example;
+------+-----------------------------+---------------+----------------+-----------------------+-----------------+
| ID | GROUP_NAME | TABLE_NAME | PARTITION_NAME | PHY_DB_NAME | DN_ID |
+------+-----------------------------+---------------+----------------+-----------------------+-----------------+
| 0 | POLARX_EXAMPLE_P00000_GROUP | example_00000 | p1 | polarx_example_p00000 | pxc-tryout-dn-0 |
| 1 | POLARX_EXAMPLE_P00000_GROUP | example_00001 | p2 | polarx_example_p00000 | pxc-tryout-dn-0 |
| 2 | POLARX_EXAMPLE_P00000_GROUP | example_00002 | p3 | polarx_example_p00000 | pxc-tryout-dn-0 |
| 3 | POLARX_EXAMPLE_P00000_GROUP | example_00003 | p4 | polarx_example_p00000 | pxc-tryout-dn-0 |
| 4 | POLARX_EXAMPLE_P00000_GROUP | example_00004 | p5 | polarx_example_p00000 | pxc-tryout-dn-0 |
| 5 | POLARX_EXAMPLE_P00000_GROUP | example_00005 | p6 | polarx_example_p00000 | pxc-tryout-dn-0 |
| 6 | POLARX_EXAMPLE_P00000_GROUP | example_00006 | p7 | polarx_example_p00000 | pxc-tryout-dn-0 |
| 7 | POLARX_EXAMPLE_P00000_GROUP | example_00007 | p8 | polarx_example_p00000 | pxc-tryout-dn-0 |
+------+-----------------------------+---------------+----------------+-----------------------+-----------------+
8 rows in set (0.01 sec)
检查CDC
mysql> show master status ;
+---------------+----------+--------------+------------------+-------------------+
| FILE | POSITION | BINLOG_DO_DB | BINLOG_IGNORE_DB | EXECUTED_GTID_SET |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000001 | 4 | | | |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.78 sec)
show binlog events in 'binlog.000001' from 4;
检查DN
mysql> show storage;
+-----------------+------------------+------------+-----------+----------+-------------+--------+-----------+-------+--------+
| STORAGE_INST_ID | LEADER_NODE | IS_HEALTHY | INST_KIND | DB_COUNT | GROUP_COUNT | STATUS | DELETABLE | DELAY | ACTIVE |
+-----------------+------------------+------------+-----------+----------+-------------+--------+-----------+-------+--------+
| pxc-tryout-dn-0 | 172.17.0.3:16689 | true | MASTER | 1 | 1 | 0 | false | null | null |
| pxc-tryout-gms | 172.17.0.2:17415 | true | META_DB | 2 | 2 | 0 | false | null | null |
+-----------------+------------------+------------+-----------+----------+-------------+--------+-----------+-------+--------+
2 rows in set (0.02 sec)
检查CN
mysql> show mpp;
+------------+------------------+------+--------+
| ID | NODE | ROLE | LEADER |
+------------+------------------+------+--------+
| pxc-tryout | 172.17.0.4:62452 | W | Y |
+------------+------------------+------+--------+
1 row in set (0.01 sec)
查看 PolarDB-X 状态
执行如下命令,查看当前环境的 PolarDB-X 列表:
(venv) ~/workspace> pxd list
/Users/lanyangyang/workspace/venv/lib/python3.9/site-packages/deployer
NAME CN DN CDC STATUS
pxc-tryout 1 1 1 running
清理 PolarDB-X
执行如下命令,即可清理本地环境所有的 PolarDB-X:
(venv) ~/workspace > pxd cleanup
/Users/lanyangyang/workspace/venv/lib/python3.9/site-packages/deployer
Prepare to delete all PolarDB-X clusters
All PolarDB-X clusters will be deleted, do you want to continue? [y/N]: y
Prepare to delete PolarDB-X cluster: pxc-tryout
stop and remove container: pxc-tryout-cn-DmUZ-62450, id: e04d9b3925 at 127.0.0.1
stop and remove container: pxc-tryout-cdc-Ssvv, id: f3bfd66e1f at 127.0.0.1
stop and remove container: pxc-tryout-gms-Cand-17415, id: b26d81089d at 127.0.0.1
stop and remove container: pxc-tryout-dn-0-Cand-16689, id: ea2f00e4ea at 127.0.0.1