欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

使用一种点击即可部署开源 PolarDB-X 的方法,在 PolarDB-X 动手实践系列中的第一篇实践指南。

最编程 2024-01-18 15:16:43
...

主讲人:燧木,阿里云 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 分布式数据库了!


通过编译安装


准备工作

  • 下载 GalaxyEngine 代码,main分支
  • 下载 GalaxySQL 代码,main分支
  • 下载 GalaxyGlue 代码,main分支
  • 下载 GalaxyCDC 代码,main分支


编译 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创建的根用户密码


上一篇: 要做PPT,一直找不到资源?

下一篇: 如何画好一张架构图?(内含知识图谱)