Polardb-x 弹性伸缩实验
1. 创建资源
开始实验之前,您需要先创建实验相关资源。
- 在实验室页面,单击创建资源。
- (可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、子用户信息等)。
说明:资源创建过程需要3~5分钟(视资源不同开通时间有所差异,ACK等资源开通时间较长)。完成实验资源的创建后,您可以在云产品资源列表查看已创建的资源信息,例如:子用户名称、子用户密码、AK ID、AK Secret、资源中的项目名称等。
实验环境一旦开始创建则进入计时阶段,建议学员先基本了解实验具体的步骤、目的,真正开始做实验时再进行创建。
资源创建成功,可在左侧的资源卡片中查看相关资源信息以及RAM子账号信息
2. 安装实验环境
本步骤将指导您如何安装Docker、kubectl、minikube和Helm3。
- 安装Docker。
- 执行如下命令,安装Docker。
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
b.执行如下命令,启动Docker。
systemctl start docker
2. 安装kubectl。
- 执行如下命令,下载kubectl文件。
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
b.执行如下命令,赋予可执行权限。
chmod +x ./kubectl
c.执行如下命令,移动到系统目录。
mv ./kubectl /usr/local/bin/kubectl
3. 安装minikube。
执行如下命令,下载并安装minikube。
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 sudo install minikube-linux-amd64 /usr/local/bin/minikube
4. 安装Helm3。
- 执行如下命令,下载Helm3。
wget https://labfileapp.oss-cn-hangzhou.aliyuncs.com/helm-v3.9.0-linux-amd64.tar.gz
b.执行如下命令,解压Helm3。
tar -zxvf helm-v3.9.0-linux-amd64.tar.gz
c.执行如下命令,移动到系统目录。
mv linux-amd64/helm /usr/local/bin/helm
5. 安装MySQL。
yum install mysql -y
6. 安装sysbench
- 安装epel源
rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/epel/epel-release-latest-8.noarch.rpm
- 安装sysbench
yum -y install sysbench
3. 使用PolarDB-X Operator安装PolarDB-X
新建内容使用PolarDB-X Operator安装PolarDB-X
本步骤将指导您如何创建一个简单的Kubernetes集群并部署PolarDB-X Operator ,使用Operator部署一个完整的PolarDB-X集群,详细文档请参考通过Kubernetes安装PolarDB-X。
- 使用minikube创建Kubernetes集群。
minikube是由社区维护的用于快速创建Kubernetes测试集群的工具,适合测试和学习Kubernetes。使用minikube创建的Kubernetes集群可以运行在容器或是虚拟机中,本实验场景以CentOS 8.5上创建Kubernetes为例。
**说明:**如果您使用其他操作系统部署minikube,例如macOS或Windows,部分步骤可能略有不同。
- 执行如下命令,新建账号galaxykube,并将galaxykube加入docker组中。minikube要求使用非root账号进行部署,所以您需要新建一个账号。
useradd -ms /bin/bash galaxykube usermod -aG docker galaxykube
b.执行如下命令,切换到账号galaxykube。
su galaxykube
c.执行如下命令,进入到home/galaxykube目录。
cd
d.执行如下命令,启动一个minikube。
**说明:**这里我们使用了阿里云的minikube镜像源以及USTC提供的docker镜像源来加速镜像的拉取。
minikube start --cpus 4 --memory 12288 --image-mirror-country cn --registry-mirror=https://docker.mirrors.sjtug.sjtu.edu.cn --kubernetes-version 1.23.3
返回结果如下,表示minikube已经正常运行,minikube将自动设置kubectl的配置文件。
e.执行如下命令,使用kubectl查看集群信息。
kubectl cluster-info
返回如下结果,您可以查看到集群相关信息。
2. 部署 PolarDB-X Operator。
- 执行如下命令,创建一个名为polardbx-operator-system的命名空间。
kubectl create namespace polardbx-operator-system
b.执行如下命令,安装PolarDB-X Operator。
helm repo add polardbx https://polardbx-charts.oss-cn-beijing.aliyuncs.com helm install --namespace polardbx-operator-system polardbx-operator polardbx/polardbx-operator
c.执行如下命令,查看PolarDB-X Operator组件的运行情况。
kubectl get pods --namespace polardbx-operator-system
返回结果如下,请您耐心等待2分钟,等待所有组件都进入Running状态,表示PolarDB-X Operator已经安装完成。
3. 部署 PolarDB-X 集群。
- 执行如下命令,创建polardb-x.yaml。
vim polardb-x.yaml
b.按i键进入编辑模式,将如下代码复制到文件中,然后按ECS退出编辑模式,输入:wq后按下Enter键保存并退出。
apiVersion: polardbx.aliyun.com/v1 kind: PolarDBXCluster metadata: name: polardb-x spec: topology: nodes: cdc: replicas: 1 template: resources: limits: cpu: "1" memory: 1Gi requests: cpu: 100m memory: 500Mi cn: replicas: 1 template: resources: limits: cpu: "2" memory: 4Gi requests: cpu: 100m memory: 1Gi dn: replicas: 1 template: engine: galaxy hostNetwork: true resources: limits: cpu: "2" memory: 4Gi requests: cpu: 100m memory: 500Mi gms: template: engine: galaxy hostNetwork: true resources: limits: cpu: "1" memory: 1Gi requests: cpu: 100m memory: 500Mi serviceType: ClusterIP upgradeStrategy: RollingUpgrade
c.执行如下命令,创建PolarDB-X集群。
kubectl apply -f polardb-x.yaml
d.执行如下命令,查看PolarDB-X集群创建状态。
kubectl get polardbxCluster polardb-x -o wide -w
返回结果如下,请您耐心等待七分钟左右,当PHASE显示为Running时,表示PolarDB-X集群已经部署完成。
e. 按Ctrl+C键,退出查看PolarDB-X集群创建状态。
4. sysbench 压测前连接数据库准备
获取密码
kubectl get secret polardb-x -o jsonpath="{.data['polardbx_root']}" | base64 -d - | xargs echo "Password: "
将PolarDB-X集群的端口转发到本地的3306端口
kubectl port-forward svc/polardb-x 3306
点击右上角的+ 符号新建终端,输入以下命令,连接mysql
mysql -h127.0.0.1 -P3306 -upolardbx_root -p<PolarDB-X集群密码>
执行下列sql语句,查看当前的storage
show storage;
sql 语句创建一个测试数据库
create database sbtest;
5. sysbench 压测
sysbench 命令的必定设置的选项介绍:
–mysql-db |
测试库名称 |
–mysql-host |
数据库IP地址 |
–mysql-port |
端口号 默认3306 |
–mysql-user |
数据库用户名,一般是root |
–mysql-password |
数据库密码 |
sysbench的其他常规设置选项介绍
--table_size=N: 制定每个表的大小。
--tables=N:制定表的数量。
--threads=N:指定线程数,默认值为1。
--events=N:指定总的请求数,默认值为0,表示不限制请求数。
--time=N:指定压测时长,默认值为10s。
--thread-stack-size=SIZE:指定每个线程的堆栈大小,默认值为64KB。
--rate=N:限定事务速率(tps),默认值为0,表示不限制。
--report-interval=N:指定中间统计结果报告的间隔时间,默认值为0,表示关闭中间统计结果报告输出。
--report-checkpoints=[LIST,...]:用逗号分隔的一组列表值,这些值在执行sysbench压测时被依次读取,表示执行多少秒就打印一次统计报告(例如--report- checkpoints=10,20,30,表示当执行10s、20s、30s时分别打印一次统计报告。注意,该数值是指从执行sysbench开始到现在的时间),默认值为空,表示在--time选项指定的时间到期后才打印统计报告。
--debug[=on|off]:是否打印调试信息,默认值为off。
--help[=on|off]:是否打印帮助信息,默认值为off。
--version[=on|off]:是否打印版本信息,默认值为off。
- 准备数据
目前使用的sysbench测试数据是创建十五个表格,每个表格的大小是10000,并发数目是5,使用sysbench自带的oltp_read_only进行只读查询计算进行压测,整个压测时间是120秒。
sysbench --db-driver=mysql --mysql-host=127.0.0.1 --mysql-user=polardbx_root --mysql-password=<PolarDB-X集群密码> --mysql-db=sbtest --table_size=10000 --tables=15 --events=0 --time=120 --threads=5 oltp_read_only prepare
- 压测以及结果分析
sysbench --db-driver=mysql --mysql-host=127.0.0.1 --mysql-user=polardbx_root --mysql-password=<PolarDB-X集群密码> --mysql-db=sbtest --table_size=10000 --tables=15 --events=0 --time=120 --threads=5 oltp_read_only run
结果分析:
120s里面一共进行了204302个读取操作,进行了14593个事务,总共执行了233488个查询语句。事务执行的速度是96.11个每秒。 数据库的主要评判标准是: tps:96.11,每秒执行了96.11个事务;qps:1537.81,这个意思就是每秒可以执行1537.81个请求; lat(ms,95%):69.29,95%的请求的延迟都在60.29毫秒以下。其中tps和qps越大越好,lat越小越好。
e. 清除数据
sysbench --db-driver=mysql --mysql-host=127.0.0.1 --mysql-user=polardbx_root --mysql-password=<PolarDB-X集群密码> --mysql-db=sbtest --table_size=10000 --tables=15 --events=0 --time=120 --threads=5 oltp_read_only cleanup
4. 体验PolarDB-X集群扩容
本步骤将指导您如何对PolarDB-X集群进行扩容。
- 执行如下命令,编辑polardb-x.yaml文件。
vim polardb-x.yaml
- 按i键进入编辑模式,在polardb-x.yaml 中CN代表计算节点,DN代表数据节点负责数据的存储和本地数据的部分计算。CN是计算节点,而CDC负责管理日志,GMS负责集群元数据的管理。根据分析,我们想要集群的计算能力提升,只需要将CN节点扩容即可,所以这里将CN的replicas参数改为2,进行计算节点的扩容操作。
- 按ECS退出编辑模式,输入:wq后按下Enter键保存并退出。
c. 执行如下命令,将修改后的polardb-x.yaml文件应用到已经创建的PolarDB-X集群中。
kubectl apply -f polardb-x.yaml
2. 执行如下命令,观察集群的变化情况。
kubectl get polardbxCluster polardb-x -o wide -w
返回结果如下,您可以看到PolarDB-X集群扩容过程中各个节点的变化,可以看到CN计算节点从1变成了2。请您耐心等待两分钟左右,当PHASE显示为Running时,表示PolarDB-X集群已经扩容完成。
3. 按Ctrl+C键,退出查看PolarDB-X集群状态。
4. 执行如下命令,获取PolarDB-X集群登录密码。
kubectl get secret polardb-x -o jsonpath="{.data['polardbx_root']}" | base64 -d - | xargs echo "Password: "
返回结果如下,您可以查看到PolarDB-X集群登录密码。
5. 执行如下命令,将PolarDB-X集群的端口转发到本地的3306端口。
kubectl port-forward svc/polardb-x 3306
6. 在实验页面,单击右上角的图标,创建新的终端二窗口。
7. 执行如下命令,连接PolarDB-X集群。 说明: 您需要将<PolarDB-X集群登录密码>替换为实际获取到的PolarDB-X集群登录密码。 如果您遇到ERROR 3933 (HY000): [1469bb175b401000][172.17.0.6:3306][polardbx]ERR-CODE: [PXC-9001][ERR_GMS_GENERIC] Failed to create physical db, dbName=[sysbench_test], instId=[polardb-x].报错,请您耐心等待一分钟后,再次执行SQL语句。
mysql -h127.0.0.1 -P3306 -upolardbx_root -p<PolarDB-X集群登录密码>
8. 执行如下SQL语句,检查扩容后的状态。
show storage;
返回结果如下,您可查看到PolarDB-X集群扩容后的状态。
9. sysbench 压测
- 准备数据
目前使用的sysbench测试数据是创建十五个表格,每个表格的大小是10000,并发数目是5,使用sysbench自带的oltp_read_only进行只读查询计算进行压测,整个压测时间是120秒,和扩容前是一样的。
sysbench --db-driver=mysql --mysql-host=127.0.0.1 --mysql-user=polardbx_root --mysql-password=<PolarDB-X集群密码> --mysql-db=sbtest --table_size=10000 --tables=15 --events=0 --time=120 --threads=5 oltp_read_only prepare
b. 压测以及结果分析
sysbench --db-driver=mysql --mysql-host=127.0.0.1 --mysql-user=polardbx_root --mysql-password=<PolarDB-X集群密码> --mysql-db=sbtest --table_size=10000 --tables=15 --events=0 --time=120 --threads=5 oltp_read_only run
结果分析:
120s里面一共进行了263130个读取操作,进行了187795个事务,总共执行了300720个查询语句。事务执行的速度是156个每秒。 数据库的主要评判标准是: tps:156.6,每秒执行了156.6个事务;qps:2505.54,这个意思就是每秒可以执行2505.54个请求; lat(ms,95%):65.65,95%的请求的延迟都在65.65毫秒以下。对比扩容前的tps为96.11,qps为1537.81,lat为69.29。 其中tps和qps越大越好,lat越小越好。可以看出扩容后的压测数据是明显好于扩容前的。
c. 清除数据
sysbench --db-driver=mysql --mysql-host=127.0.0.1 --mysql-user=polardbx_root --mysql-password=kcpkmpn4 --mysql-db=sbtest --table_size=10000 --tables=15 --events=0 --time=120 --threads=5 oltp_read_only cleanup
5. 体验PolarDB-X集群缩容
本步骤将指导您如何对PolarDB-X集群进行缩容。
- 切换至终端一,按Ctrl+C键,停止PolarDB-X集群端口转发。
- 执行如下命令,编辑polardb-x.yaml文件。
vim polardb-x.yaml
按i键进入编辑模式,将CN的replicas参数改为1,进行缩容操作。
3. 按ECS退出编辑模式,输入:wq后按下Enter键保存并退出。
4. 执行如下命令,将修改后的polardb-x.yaml文件应用到已经创建的PolarDB-X集群中。
kubectl apply -f polardb-x.yaml
5. 执行如下命令,观察集群的变化情况。
kubectl get polardbxCluster polardb-x -o wide -w
返回结果如下,您可以看到PolarDB-X集群缩容过程中各个节点的变化。请您耐心等待两分钟左右,当PHASE显示为Running时,表示PolarDB-X集群已经缩容完成。
6. 按Ctrl+C键,退出查看PolarDB-X集群状态。
7. 执行如下命令,将PolarDB-X集群的端口转发到本地的3306端口。
kubectl port-forward svc/polardb-x 3306
8. 切换至终端二,执行如下SQL语句,检查缩容后的状态。
show storage;
返回结果如下,您可查看到PolarDB-X集群缩容后的状态。
缩容后的状态和扩容前是一致的,所以这里就不再进行压测了。
实验链接:https://developer.aliyun.com/adc/scenario/8a6e43ddfb68494dbcfc51fcdc146a09