Polardb-x 弹性伸缩实验

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: 本实验主要介绍如何对PolarDB-X进行手动收缩扩容,了解PolarDB-X 中各个节点的含义,以及如何对不同配置的PolarDB-x 进行压测。

Polardb-x 弹性伸缩实验

1. 创建资源

开始实验之前,您需要先创建实验相关资源。

  1. 在实验室页面,单击创建资源
  2. (可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、子用户信息等)。

说明:资源创建过程需要3~5分钟视资源不同开通时间有所差异,ACK等资源开通时间较长。完成实验资源的创建后,您可以在云产品资源列表查看已创建的资源信息,例如:子用户名称、子用户密码、AK ID、AK Secret、资源中的项目名称等。

实验环境一旦开始创建则进入计时阶段,建议学员先基本了解实验具体的步骤、目的,真正开始做实验时再进行创建。

资源创建成功,可在左侧的资源卡片中查看相关资源信息以及RAM子账号信息


2. 安装实验环境

本步骤将指导您如何安装Docker、kubectl、minikube和Helm3。

  1. 安装Docker。
  2. 执行如下命令,安装Docker。
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

b.执行如下命令,启动Docker。

systemctl start docker

2. 安装kubectl。

  1. 执行如下命令,下载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。

  1. 执行如下命令,下载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

  1. 安装epel源
rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/epel/epel-release-latest-8.noarch.rpm
  1. 安装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

  1. 使用minikube创建Kubernetes集群。

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

**说明:**如果您使用其他操作系统部署minikube,例如macOS或Windows,部分步骤可能略有不同。

  1. 执行如下命令,新建账号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。

  1. 执行如下命令,创建一个名为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 集群。

  1. 执行如下命令,创建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。

  1. 准备数据

目前使用的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
  1. 压测以及结果分析
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集群进行扩容。

  1. 执行如下命令,编辑polardb-x.yaml文件。
vim polardb-x.yaml
  1. 按i键进入编辑模式,在polardb-x.yaml 中CN代表计算节点,DN代表数据节点负责数据的存储和本地数据的部分计算。CN是计算节点,而CDC负责管理日志,GMS负责集群元数据的管理。根据分析,我们想要集群的计算能力提升,只需要将CN节点扩容即可,所以这里将CN的replicas参数改为2,进行计算节点的扩容操作
  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 压测

  1. 准备数据

目前使用的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集群进行缩容。

  1. 切换至终端一,按Ctrl+C键,停止PolarDB-X集群端口转发。
  2. 执行如下命令,编辑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

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
SQL 关系型数据库 测试技术
PolarDB的Online DDL功能验证实验
本场景带您体验如何在PolarDB-X中进行Online DDL。
|
6月前
|
关系型数据库 分布式数据库 数据库
云原生数据库PolarDB快速入门实验
【2月更文挑战第2天】很基础的PolarDB入门操作实验考试,假期闲着无聊考着玩玩。云原生数据库 PolarDB MySQL 版是阿里云自研产品,100%兼容 MySQL。PolarDB产品具有多主多写、多活容灾、HTAP 等特性,交易性能最高可达开源数据库的6倍,分析性能最高可达开源数据库的400倍,TCO 低于自建数据库50%。
|
11月前
|
关系型数据库 MySQL Serverless
|
6月前
|
SQL 关系型数据库 分布式数据库
西电数据库实验二:XDSQL与PolarDB对比实验
实验二 XDSQL与PolarDB对比实验 姓名:贾瑞  学号:21009201172
|
弹性计算 运维 负载均衡
《企业运维之弹性计算原理与实践》——第五章 CMS&ESS——第五章(下)实验:ESS 结合 CMS 自动弹性伸缩(1)
《企业运维之弹性计算原理与实践》——第五章 CMS&ESS——第五章(下)实验:ESS 结合 CMS 自动弹性伸缩(1)
121 0
|
弹性计算 运维 API
《企业运维之弹性计算原理与实践》——第五章 CMS&ESS——第五章(下)实验:ESS 结合 CMS 自动弹性伸缩(2)
《企业运维之弹性计算原理与实践》——第五章 CMS&ESS——第五章(下)实验:ESS 结合 CMS 自动弹性伸缩(2)
93 0
|
弹性计算 运维 关系型数据库
企业运维训练营之数据库原理与实践—RDS常见问题排除及DAS自动弹性伸缩—实验:RDS MySQL大促场景下的智能化弹性
企业运维训练营之数据库原理与实践—RDS常见问题排除及DAS自动弹性伸缩—实验:RDS MySQL大促场景下的智能化弹性
162 0
|
SQL 安全 关系型数据库
实验3 阿里云数据库 PolarDB 的简单应用| 学习笔记
快速学习实验3 阿里云数据库 PolarDB 的简单应用
实验3 阿里云数据库 PolarDB 的简单应用| 学习笔记
|
SQL 弹性计算 关系型数据库
实验报告: PolarDB MySQL HTAP:实时数据分析加速
实验过程中忽略了在PolarDB mysql集群设置时开启行存/列存自动引流功能,发现开启这个功能后,如果会话use_imci_engine变量设置为off,单表分析的查询要慢不少。
549 0
实验报告: PolarDB MySQL HTAP:实时数据分析加速
|
Kubernetes 监控 网络协议
实验记录:PolarDB-X集群kill POD自动恢复实验
实验记录:PolarDB-X集群kill POD自动恢复实验
203 0
实验记录:PolarDB-X集群kill POD自动恢复实验

相关产品

  • 云原生数据库 PolarDB