猿创征文|国产数据库之使用pxd在docker环境下部署polardb-x集群(代码片段)

江湖有缘 江湖有缘     2022-10-23     763

关键词:

猿创征文 | 国产数据库之使用PXD在Docker环境下部署PolarDB-X集群

一、PolarDB-X介绍

1.PolarDB-X简介

1.PolarDB-X 是一款面向超高并发、海量存储、复杂查询场景设计的云原生分布式数据库系统。
2.PolarDB-X采用 Shared-nothing 与存储计算分离架构,支持水平扩展、分布式事务、混合负载等能力,具备企业级、云原生、高可用、高度兼容 MySQL 系统及生态等特点。

2.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 等。

二、PolarDB-X的产品架构

1.产品架构图

2.PolarDB-X架构介绍

  • 计算节点(CN, Compute Node)

计算节点是系统的入口,采用无状态设计,包括 SQL 解析器、优化器、执行器等模块。负责数据分布式路由、计算及动态调度,负责分布式事务 2PC 协调、全局二级索引维护等,同时提供 SQL 限流、三权分立等企业级特性。

  • 存储节点(DN, Data Node)

存储节点负责数据的持久化,基于多数派 Paxos 协议提供数据高可靠、强一致保障,同时通过 MVCC 维护分布式事务可见性。

  • 元数据服务(GMS, Global Meta Service)

元数据服务负责维护全局强一致的 Table/Schema, Statistics 等系统 Meta 信息,维护账号、权限等安全信息,同时提供全局授时服务(即 TSO)。

  • 日志节点(CDC, Change Data Capture)

日志节点提供完全兼容 MySQL Binlog 格式和协议的增量订阅能力,提供兼容 MySQL Replication 协议的主从复制能力。

三、环境规划

hostnameIP地址角色系统版本docker版本
node01192.168.3.80gms、cdc节点centos7.620.10.18
node02192.168.3.81cn/dn节点centos7.620.10.18
node03192.168.3.82cn/dn节点centos7.620.10.18

四、Docker安装

1.安装系统工具

yum install -y yum-utils device-mapper-persistent-data lvm2

2.配置docker的yum仓库源

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

3.安装docker

yum -y install docker-ce

4.开启docker服务

systemctl start docker && systemctl enable docker

5.配置docker加速

echo ' "registry-mirrors": ["https://sp4mg57h.mirror.aliyuncs.com"] '   > /etc/docker/daemon.json 
systemctl daemon-reload 
systemctl restart docker

6.查看docker状态

[root@node01 yum.repos.d]# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2022-10-09 15:43:11 CST; 44s ago
     Docs: https://docs.docker.com
 Main PID: 13698 (dockerd)
    Tasks: 9
   Memory: 27.7M
   CGroup: /system.slice/docker.service
           └─13698 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Oct 09 15:43:10 node01 dockerd[13698]: time="2022-10-09T15:43:10.354711367+08:00" level=info msg="ccResolverWrapper: sending update to cc: [unix...dule=grpc
Oct 09 15:43:10 node01 dockerd[13698]: time="2022-10-09T15:43:10.354721851+08:00" level=info msg="ClientConn switching balancer to \\"pick_first\\"" module=grpc
Oct 09 15:43:10 node01 dockerd[13698]: time="2022-10-09T15:43:10.370117834+08:00" level=info msg="[graphdriver] using prior storage driver: overlay2"
Oct 09 15:43:10 node01 dockerd[13698]: time="2022-10-09T15:43:10.559156869+08:00" level=info msg="Loading containers: start."
Oct 09 15:43:10 node01 dockerd[13698]: time="2022-10-09T15:43:10.984797715+08:00" level=info msg="Default bridge (docker0) is assigned with an IP ... address"
Oct 09 15:43:11 node01 dockerd[13698]: time="2022-10-09T15:43:11.043510603+08:00" level=info msg="Loading containers: done."
Oct 09 15:43:11 node01 dockerd[13698]: time="2022-10-09T15:43:11.307372551+08:00" level=info msg="Docker daemon" commit=e42327a graphdriver(s)=ove...=20.10.18
Oct 09 15:43:11 node01 dockerd[13698]: time="2022-10-09T15:43:11.307446499+08:00" level=info msg="Daemon has completed initialization"
Oct 09 15:43:11 node01 systemd[1]: Started Docker Application Container Engine.
Oct 09 15:43:11 node01 dockerd[13698]: time="2022-10-09T15:43:11.335017717+08:00" level=info msg="API listen on /var/run/docker.sock"
Hint: Some lines were ellipsized, use -l to show in full.

五、安装前环境配置

1.配置/etc/hosts

[root@node01 ~]# cat /etc/hosts
192.168.3.80 node01
192.168.3.81 node02
192.168.3.82 node03

2.配置SSH免密

 ssh-keygen -t rsa
 ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.3.80
 ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.3.81
 ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.3.82

3.测试shh免密

[root@node01 ~]# ssh root@192.168.3.81
Last login: Sun Oct  9 15:58:14 2022 from node01
[root@node02 ~]# 

4.安装python3

yum install -y python3  #安装python
python3 -m venv venv   # 创建一个 Python3 的 virtual environment 环境
source venv/bin/activate  激活virtual environment 环境

5.检查python3

[root@node01 ~]# which python3
/usr/bin/python3

六、安装 PXD工具

pip install --upgrade pip
pip install pxd

七、部署 PolarDB-X集群

1.编辑polardbx.yaml

[root@node01 polardb-x]# cat polardbx.yaml 
version: v1
type: polardbx
cluster:
  name: pxc_test
  gms:
    image: polardbx/galaxyengine:latest
    host_group: [192.168.3.80]
  cn:
    image: polardbx/galaxysql:latest
    replica: 2
    nodes:
      - host: 192.168.3.81
      - host: 192.168.3.82
    resources:
      mem_limit: 4G
  dn:
    image: polardbx/galaxyengine:latest
    replica: 2
    nodes:
      - host_group: [192.168.3.81]
      - host_group: [192.168.3.82]
    resources:
      mem_limit: 4G
  cdc:
    image: polardbx/galaxycdc:latest
    replica: 1
    nodes:
      - host: 192.168.3.80
    resources:
      mem_limit: 4G

2.一键部署 PolarDB-X集群

pxd create -file polardbx.yaml
Status: Image is up to date for polardbx/xstore-tools:latest
Processing  [#########---------------------------]   25%    create gms node
Processing  [############------------------------]   33%    create gms db and tables
Processing  [###############---------------------]   41%    create PolarDB-X root account
Processing  [##################------------------]   50%    create dn
Processing  [#####################---------------]   58%    register dn to gms
Processing  [########################------------]   66%    create cn
Processing  [###########################---------]   75%    wait cn ready
Processing  [##############################------]   83%    create cdc containers
Processing  [#################################---]   91%    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 -h192.168.3.81 -P5858 -upolardbx_root -pxMvRRABg
    mysql -h192.168.3.82 -P3333 -upolardbx_root -pxMvRRABg

3.查看集群状态

(venv) [root@node01 polardb-x]# pxd list
/data/polardb-x/venv/lib64/python3.6/site-packages/paramiko/transport.py:33: CryptographyDeprecationWarning: Python 3.6 is no longer supported by the Python core team. Therefore, support for it is deprecated in cryptography and will be removed in a future release.
  from cryptography.hazmat.backends import default_backend
/data/polardb-x/venv/lib/python3.6/site-packages/deployer
NAME                          CN        DN        CDC       STATUS         
pxc_test                      2         2         1         running  

八、连接PolarDB-X

1.连接CN节点

[root@node03 ~]#  mysql -h192.168.3.81 -P5858 -upolardbx_root -pxMvRRABg
Welcome to the MariaDB monitor.  Commands end with ; or \\g.
Your MySQL connection id is 18
Server version: 5.6.29 Tddl Server (ALIBABA)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\\h' for help. Type '\\c' to clear the current input statement.

MySQL [(none)]> 

2.检查GMS

MySQL [(none)]> select * from information_schema.schemata;
+--------------+--------------------+----------------------------+------------------------+----------+
| CATALOG_NAME | SCHEMA_NAME        | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | SQL_PATH |
+--------------+--------------------+----------------------------+------------------------+----------+
| def          | information_schema | utf8                       |                        | NULL     |
+--------------+--------------------+----------------------------+------------------------+----------+
1 row in set (0.61 sec)

3.创建数据库

MySQL [(none)]> create database polarx_example partition_mode='partitioning';
Query OK, 1 row affected (3.51 sec)

4.创建分区表

MySQL [(none)]> use polarx_example;
Database changed
MySQL [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;
Query OK, 0 rows affected (16.97 sec)

5.插入内容

MySQL [polarx_example]> insert into example values(null,'lily',375),(null,'lisa',400),(null,'ljh',500);
Query OK, 3 rows affected (0.59 sec)

6.查看分区表内容

MySQL [polarx_example]> select * from example;
+--------+------+-------+
| id     | name | score |
+--------+------+-------+
| 100003 | ljh  |   500 |
| 100001 | lily |   375 |
| 100002 | lisa |   400 |
+--------+------+-------+
3 rows in set (0.26 sec)

MySQL [polarx_example]> show topology from example;
+----+-----------------------------+--------------------+----------------+
| ID | GROUP_NAME                  | TABLE_NAME         | PARTITION_NAME |
+----+-----------------------------+--------------------+----------------+
|  0 | POLARX_EXAMPLE_P00000_GROUP | example_qBAz_00000 | p1             |
|  1 | POLARX_EXAMPLE_P00000_GROUP | example_qBAz_00002 | p3             |
|  2 | POLARX_EXAMPLE_P00000_GROUP | example_qBAz_00004 | p5             |
|  3 | POLARX_EXAMPLE_P00000_GROUP | example_qBAz_00006 | p7             |
|  4 | POLARX_EXAMPLE_P00001_GROUP | example_qBAz_00001 | p2             |
|  5 | POLARX_EXAMPLE_P00001_GROUP | example_qBAz_00003 | p4             |
|  6 | POLARX_EXAMPLE_P00001_GROUP | example_qBAz_00005 | p6             |
|  7 | POLARX_EXAMPLE_P00001_GROUP | example_qBAz_00007 | p8             |
+----+-----------------------------+--------------------+----------------+

7.检查CDC

MySQL [polarx_example]> show master status ;
+---------------+----------+--------------+------------------+-------------------+
| FILE          | POSITION | BINLOG_DO_DB | BINLOG_IGNORE_DB | EXECUTED_GTID_SET |
+---------------+----------+--------------+----------查看详情  

猿创征文|国产数据库实战之使用docker部署tidb集群(代码片段)

猿创征文|国产数据库实战之使用Docker部署TiDB集群一、TiDB介绍1.TiDB简介2.TiDB特性3.TiDB集群整体架构4.TiDB集群各部分介绍5.本次TiDB集群组件二、检查本地环境1.检查docker状态2.检查docker版本3.检查docker-compose版本三、下载tidb-docker-comp... 查看详情

猿创征文|国产数据库实战之使用docker部署tidb集群(代码片段)

猿创征文|国产数据库实战之使用Docker部署TiDB集群一、TiDB介绍1.TiDB简介2.TiDB特性3.TiDB集群整体架构4.TiDB集群各部分介绍5.本次TiDB集群组件二、检查本地环境1.检查docker状态2.检查docker版本3.检查docker-compose版本三、下载tidb-docker-comp... 查看详情

猿创征文|国产数据库实战之使用docker部署tidb集群(代码片段)

猿创征文|国产数据库实战之使用Docker部署TiDB集群一、TiDB介绍1.TiDB简介2.TiDB特性3.TiDB集群整体架构4.TiDB集群各部分介绍5.本次TiDB集群组件二、检查本地环境1.检查docker状态2.检查docker版本3.检查docker-compose版本三、下载tidb-docker-comp... 查看详情

猿创征文|国产数据库之在k8s环境下部署radondbmysql集群(代码片段)

猿创征文|国产数据库之在k8s环境下部署RadonDBMySQL集群一、RadonDBMySQL介绍1.RadonDBMySQL简介2.RadonDBMySQL的应用场景3.RadonDBMySQL核心功能4.RadonDBMySQL架构图二、检查本地k8s环境1.检查k8s节点状态2.检查helm版本三、添加helm仓库1.添加helm仓库... 查看详情

猿创征文|国产数据实战之docker部署mywebsql数据库管理工具(代码片段)

猿创征文|国产数据实战之docker部署MyWebSQL数据库管理工具一、MyWebSQL介绍1.MyWebSQL简介2.MyWebSQL特点二、检查本地环境1.检查docker状态2.检查docker-compose版本三、下载MyWebSQL镜像四、部署MyWebSQL工具1.编辑docker-compose.yaml2.创建MyWebSQL容器... 查看详情

猿创征文|国产数据库实战之tidb数据库快速入门(代码片段)

猿创征文|国产数据库实战之TiDB数据库快速入门一、系统检查1.检查系统版本2.查看本地IP地址3.TiDB集群介绍二、快速部署本地测试集群1.安装TiUP工具2.声明全局环境变量3.快速部署TiDB集群三、连接TiDB数据库1.新开一个session以访问T... 查看详情

猿创征文|国产数据库之opengauss的单机主备部署及快速入门(代码片段)

猿创征文|国产数据库之openGauss的单机主备部署及快速入门一、openGauss介绍1.openGauss简介2.openGauss特点3.openGauss的逻辑架构图二、环境检查1.节点规划2.操作系统版本三、安装前环境配置1.检查admin普通用户2.给安装目录授权3.配置/etc/... 查看详情

猿创征文|国产数据库实战使用docker部署polardb-x云原生分布式开源数据库(代码片段)

猿创征文|【国产数据库实战】使用docker部署PolarDB-X云原生分布式开源数据库一、PolarDB-X介绍1.PolarDB-X简介2.PolarDB-X特点二、检查docker版本三、检查docker配置信息四、下载PolarDB-X镜像五、部署PolarDB-X1.创建PolarDB-X容器2.检查PolarDB-X容... 查看详情

猿创征文|云原生之docker使用docker部署flare个人导航网页(代码片段)

猿创征文|【云原生之Docker】使用Docker部署Flare个人导航网页一、卷首语二、Flare介绍1.Flare介绍2.Flare的硬件配置要求3.Flare的特点三、检查本地docker环境1.检查docker服务状态2.检查docker配置信息3.开启IPv4forwarding四、安装docker-com... 查看详情

猿创征文|云原生领域之容器日常使用工具推荐(代码片段)

猿创征文|云原生领域之容器日常使用工具推荐一、云原生介绍1.云原生定义2.容器技术简介3.云原生相关工具导航二、Docker1.Docker介绍①Docker简介②Docker特点③Docker的三个基本概念④Docker的架构图2.Docker的优势3.Docker的使用效果①... 查看详情

猿创征文|云原生|24docker运行数据库实战之mongodb(代码片段)

作者简介:🏅云计算领域优质创作者🏅新星计划第三季python赛道第一名🏅 阿里云ACE认证高级工程师🏅✒️个人主页:小鹏linux💊个人社区:小鹏linux(个人社区)欢迎您的加入!目录... 查看详情

猿创征文|使用springboot整合国产数据库连接池druid(代码片段)

1前言Java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,又不得不使用数据库连接池。说到数据库连接池大家可能首先会想到C3P0,DBCP等相关。今天给大家介绍的是由国产(阿里)的一种连接池技术࿱... 查看详情

猿创征文|云原生|25docker运行数据库实战之redis(代码片段)

作者简介:🏅云计算领域优质创作者🏅新星计划第三季python赛道第一名🏅 阿里云ACE认证高级工程师🏅✒️个人主页:小鹏linux💊个人社区:小鹏linux(个人社区)欢迎您的加入!为大... 查看详情

猿创征文|破世界纪录的国产数据库-oceanbase

...;不足之处请大家指正。猿创征文|破世界纪录的国产数据库-OceanBase本文关键字:VLDB、国产、数据库、OceanBase、金融文章目录猿创征文|破世界纪录的国产数据库-OceanBase一、7.07亿tpmC1.TPMC2.VLDB二、OceanBase1.数据库介绍2... 查看详情

猿创征文|国产数据库tidb架构特性(代码片段)

前言TiDB是PingCAP公司自主设计、研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理(HybridTransactionalandAnalyticalProcessing,HTAP)的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用、... 查看详情

猿创征文|国产数据库新的飞跃(代码片段)

一、数据库类型首先,我们来说一下当前数据库的类型吧,当前数据库生态可以大致分类三类:一是传统商业数据库,以Oracle为代表,其在40余年时间里所创造的数据库帝国已拥有了极其完善的生态;二是开源数据库,以MySQL、Po... 查看详情

猿创征文|国产数据库一文学会应用sqlsugar工作单元模式操作多数据库(代码片段)

🐋作者简介:博主是一位.Net开发者,同时也是RPA和低代码平台的践行者。🐬个人主页:会敲键盘的肘子🐰系列专栏:SqlSugarORM🦀专栏简介:SqlSugar是一款来自未来的ORM,拥有超前的理念... 查看详情