赞
踩
分布式数据库,是相对于单体数据库而言的,
简单的说,分布式数据库就是用分布式架构实现的数据库。
当前分布式数据库可以分为三个技术方向,
一是以 DRDS、TDSQL 等为代表的 Sharding 技术,其最大的优势在于继承了 MySQL 存储多年的的技术积累;
二是以 Cockroach/YugabyteDB/TiDB 为代表的NewSQL,最大的优势在于全自研的技术栈,提供了水平伸缩和原生分布式的能力,重点以 Raft/Paxos 数据高可用、分布式强一致事务为典型技术,满足用户对于分布式下数据一致性的要求;
三是以 PolarDB/Aurora 为代表的云原生DB,特点是基于云的虚拟化的技术,提供资源池化的能力。
关于PolarDB-X 如何牛逼,我们就不在这里介绍了,有兴趣可以搜一搜。
接下来,本文主要介绍PolarDB-X架构和安装方式。
PolarDB-X整个架构核心分为4部分:
PolarDB-X在交互上提供面向后台的数据库管控和用户控制台,并提供OpenAPI,用户可以基于OpenAPI完成管控集成。
PolarDB-X提供数据库实例化,实例规格有8c32g/32c128g等。
一个实例在物理上会有4种资源组成:
组件之间会进行元数据和RPC请求的交互。
不同的实例规格的最大区别在于CN/DN节点数量的不同,实例规格会和CN/DN节点数保持线性一致。
对于外部用户的使用来说,一个PolarDB-X的实例最终会通过接入点(endpoint)的vip/dns来访问,对于用户的感觉就是一个MySQL实例,可以使用MySQL命令行、GUI客户端等进行访问。
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/
python3 -m venv venv
source venv/bin/activate
# 安装前建议先执行如下命令升级 pip
pip install --upgrade pip
pip install pxd
直接运行 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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。