PolarDB-X 动手实践系列第一讲:如何一键部署开源 PolarDB-X

本文涉及的产品
PolarClaw,2核4GB
简介: PolarDB-X 动手实践系列围绕PolarDB-X社区版进行,内容覆盖PolarDB-X使用过程中的使用场景进行教学,培养操作实践能力。该系列内容将围绕使用 PolarDB-X 全周期过程,涵盖安装部署、开始使用、诊断优化、运维管理等几个方面。

主讲人:燧木,阿里云 PolarDB-X 云原生分布式数据库技术负责人之一,毕业于浙江大学计算机学院,兴趣广泛,对操作系统、密码学、分布式系统等均有涉猎。2017 年加入 PolarDB-X 团队进行高并发低延迟的 MySQL 分布式相关系统开发工作,目前负责 PolarDB-X 的云原生底座打造、生态系统连接、开源等开放生态构建工作。


视频回放链接:https://developer.aliyun.com/live/248029


系列介绍


PolarDB-X 动手实践系列围绕PolarDB-X社区版进行,内容覆盖PolarDB-X使用过程中的使用场景进行教学,培养操作实践能力。该系列内容将围绕使用 PolarDB-X 全周期过程,涵盖安装部署、开始使用、诊断优化、运维管理等几个方面。


准备工作:


在部署之前可以参考PolarDB-X的文档地址:https://doc.polardbx.com

在正式部署前先来了解一下系统架构,PolarDB-X 采用 Shared-nothing 与存储计算分离架构进行设计,系统由4个核心组件组成。


  • 计算节点(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 协议的主从复制能力。


在本次部署中,可以把四个组件想象成四个 docker 容器或者是四个进程,相互之间协作,组合拉起完整的 PolarDB-X。


环境准备


本次部署所需的系统、配置、测试环境可参考下图:



通过PXD部署集群


准备工作


通过 PXD 工具部署 PolarDB-X 数据库需要先安装 Python3 和 Docker。

安装 PXD

注意: 推荐使用 virtual environment 安装 PXD 工具

python3 -m venv venv

source venv/bin/activate


安装前建议先执行如下命令升级 pip

pip install --upgrade pip

执行如下命令安装 pxd:

pip install pxd

注: 部分国内用户从 pypi 下载包的速度较慢, 可以使用如下命令从阿里云的镜像安装:

pip install -i https://mirrors.aliyun.com/pypi/simple/ pxd

部署 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


PolarDB-X 数据库创建完成后,会输出对应的连接信息:

注意:PolarDB-X 管理员账号的密码随机生成,仅出现这一次,请注意保存。

通过 MySQL Client 即可连接,执行如下 SQL 初步体验 PolarDB-X 的分布式特性。


# 检查GMS 
select * from information_schema.schemata;
# 创建分区表
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);
select * from example;
show topology from example;
# 检查CDC
show master status ;
show binlog events in 'binlog.000001' from 4;
# 检查DN和CN
show storage ;  
show mpp ;


查看 PolarDB-X 状态

执行如下命令,查看当前环境的 PolarDB-X 列表:

pxd list

清理 PolarDB-X

执行如下命令,即可清理本地环境所有的 PolarDB-X:

pxd cleanup

以上就是用PXD在本地部署PolarDB-X 集群的过程。


通过 K8S 部署


使用 minikube 创建 Kubernetes 集群

minikube 是由社区维护的用于快速创建 Kubernetes 测试集群的工具,适合测试和学习 Kubernetes。使用 minikube 创建的 Kubernetes 集群可以运行在容器或是虚拟机中,本节中以 CentOS 8.2 上创建 Kubernetes 为例。

注:如在其他操作系统例如 macOS 或 Windows 上部署 minikube,部分步骤可能略有不同。

部署前,请确保已经安装 minikube 和 Docker,并符合以下要求:

  • 机器规格不小于 4c8g
  • minikube >= 1.18.0
  • docker >= 1.19.3


minikube 要求使用非 root 账号进行部署,如果你是用 root 账号访问机器,需要新建一个账号。


/

$ useradd -ms /bin/bash galaxykube 
$ usermod -aG docker galaxykube


如果你使用其他账号,请和上面一样将它加入 docker 组中,以确保它能够直接访问 docker。

使用 su 切换到账号 galaxykube

$ su galaxykube

执行下面的命令启动一个 minikube,

minikube start --cpus 4 --memory 7960 --image-mirror-country cn --registry-mirror=https://docker.mirrors.ustc.edu.cn

注:这里我们使用了阿里云的 minikube 镜像源以及 USTC 提供的 docker 镜像源来加速镜像的拉取。

此时 minikube 已经正常运行。minikube 将自动设置 kubectl 的配置文件,如果之前已经安装过 kubectl,现在可以使用 kubectl 来访问集群:


$ kubectl cluster-info
kubectl cluster-info
Kubernetes control plane is running at https://192.168.49.2:8443
CoreDNS is running at https://192.168.49.2:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.


注意:minikube kubectl 子命令需要在 kubectl 的参数前加 "--",如使用 bash shell 可以用 alias kubectl="minikube kubectl -- " 来设置快捷指令。下文都将使用 kubectl 命令进行操作。

现在我们可以开始部署 PolarDB-X Operator 了!


部署 PolarDB-X Operator


开始之前,请确保满足以下前置要求:

  • 已经准备了一个运行中的 Kubernetes 集群,并确保
  • 集群版本 >= 1.18.0
  • 至少有 2 个可分配的 CPU
  • 至少有 4GB 的可分配内存
  • 至少有 30GB 以上的磁盘空间
  • 已经安装了 kubectl 可以访问 Kubernetes 集群
  • 已经安装了 Helm 3

首先创建一个叫 polardbx-operator-system 的命名空间,

$ kubectl create namespace polardbx-operator-system

执行以下命令安装 PolarDB-X Operator。

$ helm install --namespace polardbx-operator-system polardbx-operator https://github.com/ApsaraDB/galaxy

查看 PolarDB-X Operator 组件的运行情况,等待它们都进入 Running 状态:


$ kubectl get pods --namespace polardbx-operator-system
NAME                                           READY   STATUS    RESTARTS   AGE
polardbx-controller-manager-6c858fc5b9-zrhx9   1/1     Running   0          66s
polardbx-hpfs-d44zd                            1/1     Running   0          66s
polardbx-tools-updater-459lc                   1/1     Running   0          66s


恭喜!PolarDB-X Operator 已经安装完成,现在可以开始部署 PolarDB-X 集群了!


部署 PolarDB-X 集群


现在我们来快速部署一个 PolarDB-X 集群,它包含 1 个 GMS 节点、1 个 CN 节点、1 个 DN 节点和 1 个 CDC 节点。执行以下命令创建一个这样的集群:


echo "apiVersion: polardbx.aliyun.com/v1
kind: PolarDBXCluster
metadata:
  name: quick-start
  annotations:
    polardbx/topology-mode-guide: quick-start" | kubectl apply -f -


你将看到以下输出:

polardbxcluster.polardbx.aliyun.com/quick-start created

使用如下命令查看创建状态:


$ kubectl get polardbxcluster -w
NAME          GMS   CN    DN    CDC   PHASE      DISK   AGE
quick-start   0/1   0/1   0/1   0/1   Creating          35s
quick-start   1/1   0/1   1/1   0/1   Creating          93s
quick-start   1/1   0/1   1/1   1/1   Creating          4m43s
quick-start   1/1   1/1   1/1   1/1   Running    2.4 GiB   4m44s


当 PHASE 显示为 Running 时,PolarDB-X 集群已经部署完成!恭喜你,现在可以开始连接并体验 PolarDB-X 分布式数据库了!


通过编译安装


准备工作


编译 PolarDB-X DN (存储节点,代号GalaxyEngine)


此步骤编译和安装GalaxyEngine(mysql)


安装依赖(CentOS7)


yum install cmake3
ln -s /usr/bin/cmake3 /usr/bin/cmake
# 安装GCC7
yum install centos-release-scl
yum install devtoolset-7-gcc devtoolset-7-gcc-c++ devtoolset-7-binutils
echo "source /opt/rh/devtoolset-7/enable" >>/etc/profile
# 安装依赖
yum install make automake git openssl-devel ncurses-devel bison libaio-devel


安装依赖(Ubuntu20)


# 安装GCC7
apt install -y gcc-7 g++-7
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 60 \
                         --slave /usr/bin/g++ g++ /usr/bin/g++-7 
update-alternatives --config gcc
gcc --version
g++ --version
# 安装依赖
apt install make automake cmake git bison libaio-dev libncurses-dev libsasl2-dev libldap2-dev libssl-dev pkg-config


编译


# 进入 galaxyengine 代码路径
cd galaxyengine
# 安装boost1.70 (注:把boost放到仓库里避免下载)
wget https://boostorg.jfrog.io/artifactory/main/release/1.70.0/source/boost_1_70_0.tar.gz
mkdir extra/boost
cp boost_1_70_0.tar.gz extra/boost/
# 编译安装
# 详细参数请参考 https://dev.mysql.com/doc/refman/8.0/en/source-configuration-options.html
cmake .                                   \
    -DFORCE_INSOURCE_BUILD=ON           \
    -DCMAKE_BUILD_TYPE="Debug"          \
    -DSYSCONFDIR="/u01/mysql"           \
    -DCMAKE_INSTALL_PREFIX="/u01/mysql" \
    -DMYSQL_DATADIR="/u01/mysql/data"   \
    -DWITH_BOOST="./extra/boost/boost_1_70_0.tar.gz"
make -j8
make install


编译 PolarDB-X CN (计算节点,代号GalaxySQL)


# 进入CDC代码
# 编译打包
mvn install -D maven.test.skip=true -D env=release 
# 包在/polardbx-cdc-assemble/target/
# 解压运行
tar zxvf polardbx-binlog.tar.gz


编译 PolarDB-X CDC(日志节点,代号GalaxyCDC)

此步骤编译和安装 galaxycdc 代码。




# 进入CDC代码
# 编译打包
mvn install -D maven.test.skip=true -D env=release 
# 包在/polardbx-cdc-assemble/target/
# 解压运行
tar zxvf polardbx-binlog.tar.gz

启动PolarDB-X DN

  • 此步骤启动一个mysql进程,作为metadb和dn
  • 参考附录中的mysql配置文件(my.cnf),可进行相应修改,默认使用 4886 作为 mysql端口,32886 作为私有协议端口
  • 默认使用 /u01/my3306 作为mysql数据目录,可以修改成其他目录

注意:启动 DN 需要使用非 root 账号完成

启动mysql:


/

mkdir -p /u01/my3306/{data,log,run,tmp,mysql}
/u01/mysql/bin/mysqld --defaults-file=my.cnf --initialize-insecure
/u01/mysql/bin/mysqld --defaults-file=my.cnf


启动PolarDB-X CN

启动mysql进程之后,便可以初始化PolarDB-X,需要准备以下几个配置:

  • metadb user:以下采用 my_polarx
  • metadb database:创建metadb库,以下采用 polardbx_meta_db_polardbx
  • 密码加密key(dnPasswordKey):以下采用 asdf1234ghjk5678
  • PolarDB-X默认用户名:默认为 polarx_root
  • PolarDB-X默认用户密码:默认为 123456,可通过 -S 参数修改

注意:启动 CN 需要使用非 root 账号完成

修改配置文件 conf/server.properties,逐个替换以下配置项:


/

# PolarDB-X 服务端口
serverPort=8527
# PolarDB-X RPC 端口
rpcPort=9090
 # MetaDB地址
metaDbAddr=127.0.0.1:4886
# MetaDB私有协议端口
metaDbXprotoPort=32886
# MetaDB用户
metaDbUser=my_polarx
metaDbName=polardbx_meta_db_polardbx
# PolarDB-X实例名
instanceId=polardbx-polardbx


初始化PolarDB-X:

  • -I: 进入初始化模式
  • -P: 之前准备的dnPasswordKey
  • -d: DataNode的地址列表,单机模式下就是之前启动的mysql进程的端口和地址
  • -r: 连接metadb的密码
  • -u: 为PolarDB-X创建的根用户
  • -S: 为PolarDB-X创建的根用户密码


bin/startup.sh \
    -I \
    -P asdf1234ghjk5678 \
    -d 127.0.0.1:4886:32886 \
    -r "" \
    -u polardbx_root \
    -S "123456"


此步骤中会生成内部密码及加密密码,需要将其填写配置文件 conf/server.properties 中,用于后续访问:


Generate password for user: my_polarx && M8%V5%K9^$5%oY0%yC0+&1!J7@8+R6)
Encrypted password: DB84u4UkU/OYlMzu3aj9NFdknvxYgedFiW9z59bVnoc=
Root user for polarx with password: polardbx_root && 123456
Encrypted password for polarx: H1AzXc2NmCs61dNjH5nMvA==
======== Paste following configurations to conf/server.properties ! ======= 
metaDbPasswd=HMqvkvXZtT7XedA6t2IWY8+D7fJWIJir/mIY1Nf1b58=


最后一步,启动PolarDB-X:

bin/startup.sh -P asdf1234ghjk5678

连接PolarDB-X验证,如果能连上,说明数据库启动成功啦,可以愉快地运行各种SQL啦:

mysql -h127.1 -P8527 -upolardbx_root


启动PolarDB-X CDC


启动PolarDB-X进程之后,便可以初始化PolarDB-X CDC组件,需要准备以下几个配置:

  • metadb user:和启动PolarDB-X时设置的值保持一致,以下采用my_polarx
  • metadb database:和启动PolarDB-X时设置的值保持一致,以下采用 polardbx_meta_db_polardbx
  • metadb password:和启动PolarDB-X时设置的值保持一致,需使用密文,以下采用HMqvkvXZtT7XedA6t2IWY8+D7fJWIJir/mIY1Nf1b58=
  • metadb port:和启动MySQL时设置的值保持一致,以下采用 4886
  • 密码加密key(dnPasswordKey):和启动PolarDB-X时设置的值保持一致,以下采用 asdf1234ghjk5678
  • PolarDB-X用户名:和启动PolarDB-X时设置的值保持一致,以下采用默认值 polardbx_root
  • PolarDB-X用户密码:和启动PolarDB-X时设置的值保持一致,需使用密文,以下采用默认值H1AzXc2NmCs61dNjH5nMvA==
  • PolarDB-X端口:和启动PolarDB-X时设置的值保持一致,以下采用默认值 8527
  • 当前机器分配给CDC使用的内存大小:以下采用16000代指,单位为M,实际配置值请替换为真实值

注意:启动 CDC 需要使用非 root 账号完成


useEncryptedPassword=true
polardbx.instance.id=polardbx-polardbx
mem_size=16000
metaDb_url=jdbc:mysql://127.0.0.1:4886/polardbx_meta_db_polardbx?useSSL=false
metaDb_username=my_polarx
metaDbPasswd=HMqvkvXZtT7XedA6t2IWY8+D7fJWIJir/mIY1Nf1b58=
polarx_url=jdbc:mysql://127.0.0.1:8527/__cdc__
polarx_username=polardbx_root
polarx_password=H1AzXc2NmCs61dNjH5nMvA==
dnPasswordKey=asdf1234ghjk5678
storage.persistBasePath=${HOME}/logs/rocksdb
binlog.dir.path=${HOME}/binlog/


接下来,即可启动CDC daemon进程,命令如下所示。启动之后,通过jps命令查看进程状态,CDC会有3个附属进程,分别是DaemonBootStrap、TaskBootStrap和DumperBootStrap,CDC的系统日志会输出到${HOME}/logs目录下,全局binlog日志会输出到binlog.dir.path参数配置的目录下,TaskBootStrap进程和DumperBootStrap进程被kill后,会被Daemon进程自动拉起。

bin/daemon.sh start

登录PolarDB-X,执行一些DDL或DML操作,然后执行show binary logs 和show binlog events命令,验证全局binlog 的生成状态,enjoy it!

以上就是部署PolarDB-X的三种方法,希望大家都能在本地成功部署体验,后续也会陆续为大家带来更多的PolarDB-X的使用教程,欢迎对PolarDB-X开源感兴趣的小伙伴加入我们的钉钉交流群,共建社区!


相关文章
|
6月前
|
关系型数据库 MySQL 分布式数据库
航天壹进制 PolarDB-X 1.0(DRDS) 数据备份容灾解决方案
本方案基于航天壹进制黑方系统,结合MySQL逻辑备份技术,为阿里云PolarDB-X 1.0(DRDS)构建非侵入式、高可靠的数据备份与恢复体系,支持全量备份、AES-256加密、压缩重删及灵活策略管理,兼容RDS MySQL操作习惯,保障数据安全与业务连续性。
|
关系型数据库 MySQL 分布式数据库
[PolarDB实操课] 05.通过源码部署PolarDB-X标准版
本课程介绍如何通过源码部署PolarDB-X标准版,涵盖基于Paxos的MySQL三副本工作原理和技术特点。主要内容包括: 1. **Paxos三副本工作原理**:讲解Leader和Follower节点的角色及数据同步机制。 2. **技术特点**:强调高性能、数据不丢失(RPO=0)和自动HA切换。 3. **源码部署步骤**:详细演示从编译生成RPM包到启动DN节点的过程,包括配置my.cnf文件和初始化数据库。 4. **高可用体验**:通过三台机器模拟三副本集群,展示Leader选举和故障转移机制,确保数据一致性和服务可用性。
517 1
|
关系型数据库 编译器 分布式数据库
PolarDB实操课] 04.通过源码部署PolarDB-X企业版
本次课程由PolarDB开源架构师王江颖分享,详细介绍了通过源码部署PolarDB-X企业版的全过程。主要内容包括: 1. **编译基础** 2. **使用源码编译部署PolarDB-X企业版** 3. **演示实例**:通过阿里云ECS进行实际操作演示,从创建用户、赋予权限到最终启动并连接PolarDB-X数据库,展示了完整的部署过程。 4. **总结**
435 0
|
安全 druid Java
Seata 1.8.0 正式发布,支持达梦和 PolarDB-X 数据库
Seata 1.8.0 正式发布,支持达梦和 PolarDB-X 数据库
1665 103
Seata 1.8.0 正式发布,支持达梦和 PolarDB-X 数据库
|
存储 DataWorks 监控
DataWorks,一个 polar db 有上万个数据库,解决方案
DataWorks,一个 polar db 有上万个数据库,解决方案
|
SQL 存储 Web App开发
PolarDB-X 分布式数据库中的外键
外键是关系型数据库中非常便利的一种功能,它通过一个或多个列为两张表建立连接,从而允许跨表交叉引用相关数据。外键通过约束来保持数据的一致性,通过级联来同步数据在多表间的更新和删除。在关系数据库系统中,大多数表都遵循外键的概念。
|
7月前
|
Cloud Native 关系型数据库 MySQL
免费体验!高效实现自建 MySQL 数据库平滑迁移至 PolarDB-X
PolarDB-X 是阿里云推出的云原生分布式数据库,支持PB级存储扩展、高并发访问与数据强一致,助力企业实现MySQL平滑迁移。现已开放免费体验,点击即享高效、稳定的数据库升级方案。
免费体验!高效实现自建 MySQL 数据库平滑迁移至 PolarDB-X
|
缓存 运维 关系型数据库
数据库容灾 | MySQL MGR与阿里云PolarDB-X Paxos的深度对比
经过深入的技术剖析与性能对比,PolarDB-X DN凭借其自研的X-Paxos协议和一系列优化设计,在性能、正确性、可用性及资源开销等方面展现出对MySQL MGR的多项优势,但MGR在MySQL生态体系内也占据重要地位,但需要考虑备库宕机抖动、跨机房容灾性能波动、稳定性等各种情况,因此如果想用好MGR,必须配备专业的技术和运维团队的支持。 在面对大规模、高并发、高可用性需求时,PolarDB-X存储引擎以其独特的技术优势和优异的性能表现,相比于MGR在开箱即用的场景下,PolarDB-X基于DN的集中式(标准版)在功能和性能都做到了很好的平衡,成为了极具竞争力的数据库解决方案。
|
存储 缓存 负载均衡
【PolarDB-X 技术揭秘】Lizard B+tree:揭秘分布式数据库索引优化的终极奥秘!
【8月更文挑战第25天】PolarDB-X是阿里云的一款分布式数据库产品,其核心组件Lizard B+tree针对分布式环境优化,解决了传统B+tree面临的数据分片与跨节点查询等问题。Lizard B+tree通过一致性哈希实现数据分片,确保分布式一致性;智能分区实现了负载均衡;高效的搜索算法与缓存机制降低了查询延迟;副本机制确保了系统的高可用性。此外,PolarDB-X通过自适应分支因子、缓存优化、异步写入、数据压缩和智能分片等策略进一步提升了Lizard B+tree的性能,使其能够在分布式环境下提供高性能的索引服务。这些优化不仅提高了查询速度,还确保了系统的稳定性和可靠性。
354 5
|
存储 SQL 运维
“震撼发布!PolarDB-X:云原生分布式数据库巨擘,超高并发、海量存储、复杂查询,一网打尽!错过等哭!”
【8月更文挑战第7天】PolarDB-X 是面向超高并发、海量存储和复杂查询场景设计的云原生分布式数据库系统
333 1

相关产品

  • 云原生数据库 PolarDB