当前位置:网站首页>阿里云有奖体验:用PolarDB-X搭建一个高可用系统
阿里云有奖体验:用PolarDB-X搭建一个高可用系统
2022-07-05 21:20:00 【阿里云云起实验室】
体验简介
场景将提供一台配置了CentOS 8.5操作系统和安装部署PolarDB-X集群的ECS实例(云服务器)。通过本教程的操作,带您体验如何使用PolarDB-X搭建一个高可用系统,通过直接kill容器模拟节点故障,以观察PolarDB-X 的自动恢复情况。立即前往
实验准备
1. 创建实验资源
开始实验之前,您需要先创建ECS实例资源。
在实验室页面,单击创建资源。
(可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、用户信息等)。
**说明:**资源创建过程需要1~3分钟。
2. 安装环境
本步骤将指导您如何安装Docker、kubectl、minikube和Helm3。
- 安装Docker。
a.执行如下命令,安装Docker。
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
b.执行如下命令,启动Docker。
systemctl start docker
- 安装kubectl。
a.执行如下命令,下载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
- 安装minikube。
执行如下命令,下载并安装minikube。
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
- 安装Helm3。
a.执行如下命令,下载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
3. 使用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,部分步骤可能略有不同。
a.执行如下命令,新建账号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
返回如下结果,您可以查看到集群相关信息。
- 部署 PolarDB-X Operator。
a.执行如下命令,创建一个名为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已经安装完成。
- 部署 PolarDB-X 集群。
a.执行如下命令,创建polardb-x.yaml。
vim polardb-x.yaml
b.按i键进入编辑模式,将如下代码复制到文件中,然后按ECS退出编辑模式,输入:wq后按下Enter键保存并退出。
apiVersion: polardbx.aliyun.com/v1
kind: PolarDBXCluster
metadata:
name: polardb-x
spec:
config:
dn:
mycnfOverwrite: |-
print_gtid_info_during_recovery=1
gtid_mode = ON
enforce-gtid-consistency = 1
recovery_apply_binlog=on
slave_exec_mode=SMART
topology:
nodes:
cdc:
replicas: 1
template:
resources:
limits:
cpu: "1"
memory: 1Gi
requests:
cpu: 100m
memory: 500Mi
cn:
replicas: 2
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集群已经部署完成。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NLE2IkdB-1656901220334)(https://oscimg.oschina.net/oscnet/up-33db821e0a87a939856077bad0cbc2041cf.png)]
e.按Ctrl+C键,退出查看PolarDB-X集群创建状态。
4. 连接PolarDB-X集群
本步骤将指导您如何连接通过K8s部署的PolarDB-X集群。
- 执行如下命令,查看PolarDB-X集群登录密码。
kubectl get secret polardb-x -o jsonpath="{.data['polardbx_root']}" | base64 -d - | xargs echo "Password: "
返回结果如下,您可以查看到PolarDB-X集群登录密码。
- 执行如下命令,将PolarDB-X集群端口转发到3306端口。
说明:使用MySQL Client方式登录通过k8s部署的PolarDB-X集群前,您需要进行获取PolarDB-X集群登录密码和端口转发。
kubectl port-forward svc/polardb-x 3306
- 在实验页面,单击右上角的图标,创建新的终端二。
- 执行如下命令,连接PolarDB-X集群。
说明:
您需要将<PolarDB-X集群登录密码>替换为实际获取到的PolarDB-X集群登录密码。
如遇到mysql: [Warning] Using a password on the command line interface can be insecure.ERROR 2013 (HY000): Lost connection to MySQL server at ‘reading initial communication packet’, system error: 0报错,请您稍等一分钟,重新转发端口并连接PolarDB-X集群即可。
mysql -h127.0.0.1 -P3306 -upolardbx_root -p<PolarDB-X集群登录密码>
5. 启动业务
本步骤将指导您如何使用Sysbench OLTP场景模拟业务流量。
准备压测数据。
- 执行如下SQL语句,创建压测数据库sysbench_test。
create database sysbench_test;
- 输入exit退出数据库。
- 执行如下命令,切换到账号galaxykube。
su galaxykube
- 执行如下命令,进入到/home/galaxykube目录。
cd
- 执行如下命令,创建准备压测数据的sysbench-prepare.yaml文件。
vim sysbench-prepare.yaml
- 按i键进入编辑模式,将如下代码复制到文件中,然后按ECS退出编辑模式,输入:wq后按下Enter键保存并退出。
apiVersion: batch/v1
kind: Job
metadata:
name: sysbench-prepare-data-test
namespace: default
spec:
backoffLimit: 0
template:
spec:
restartPolicy: Never
containers:
- name: sysbench-prepare
image: severalnines/sysbench
env:
- name: POLARDB_X_USER
value: polardbx_root
- name: POLARDB_X_PASSWD
valueFrom:
secretKeyRef:
name: polardb-x
key: polardbx_root
command: [ 'sysbench' ]
args:
- --db-driver=mysql
- --mysql-host=$(POLARDB_X_SERVICE_HOST)
- --mysql-port=$(POLARDB_X_SERVICE_PORT)
- --mysql-user=$(POLARDB_X_USER)
- --mysql_password=$(POLARDB_X_PASSWD)
- --mysql-db=sysbench_test
- --mysql-table-engine=innodb
- --rand-init=on
- --max-requests=1
- --oltp-tables-count=1
- --report-interval=5
- --oltp-table-size=160000
- --oltp_skip_trx=on
- --oltp_auto_inc=off
- --oltp_secondary
- --oltp_range_size=5
- --mysql_table_options=dbpartition by hash(`id`)
- --num-threads=1
- --time=3600
- /usr/share/sysbench/tests/include/oltp_legacy/parallel_prepare.lua
- run
- 执行如下命令,运行准备压测数据的sysbench-prepare.yaml文件,初始化测试数据。
kubectl apply -f sysbench-prepare.yaml
- 执行如下命令,获取任务进行状态。
kubectl get jobs
返回结果如下,请您耐心等待大约1分钟,当任务状态COMPLETIONS为1/1时,表示数据已经初始化完成。
启动压测流量。
- 执行如下命令,创建启动压测的sysbench-oltp.yaml文件。
vim sysbench-oltp.yaml
- 按i键进入编辑模式,将如下代码复制到文件中,然后按ECS退出编辑模式,输入:wq后按下Enter键保存并退出。
apiVersion: batch/v1
kind: Job
metadata:
name: sysbench-oltp-test
namespace: default
spec:
backoffLimit: 0
template:
spec:
restartPolicy: Never
containers:
- name: sysbench-oltp
image: severalnines/sysbench
env:
- name: POLARDB_X_USER
value: polardbx_root
- name: POLARDB_X_PASSWD
valueFrom:
secretKeyRef:
name: polardb-x
key: polardbx_root
command: [ 'sysbench' ]
args:
- --db-driver=mysql
- --mysql-host=$(POLARDB_X_SERVICE_HOST)
- --mysql-port=$(POLARDB_X_SERVICE_PORT)
- --mysql-user=$(POLARDB_X_USER)
- --mysql_password=$(POLARDB_X_PASSWD)
- --mysql-db=sysbench_test
- --mysql-table-engine=innodb
- --rand-init=on
- --max-requests=0
- --oltp-tables-count=1
- --report-interval=5
- --oltp-table-size=160000
- --oltp_skip_trx=on
- --oltp_auto_inc=off
- --oltp_secondary
- --oltp_range_size=5
- --mysql-ignore-errors=all
- --num-threads=8
- --time=3600
- /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua
- run
- 执行如下命令,运行启动压测的sysbench-oltp.yaml文件,开始压测。
kubectl apply -f sysbench-oltp.yaml
- 执行如下命令,查找压测脚本运行的POD。
kubectl get pods
返回结果如下, 以‘sysbench-oltp-test-’开头的POD即为目标POD。
- 执行如下命令,查看QPS等流量数据。
**说明:**您需要将命令中的目标POD替换为以‘sysbench-oltp-test-’开头的POD。
kubectl logs -f 目标POD
6. 体验PolarDB-X高可用能力
经过前面的准备工作,我们已经用PolarDB-X+Sysbench OLTP搭建了一个正在运行的业务系统。本步骤将指导您通过使用kill POD的方式,模拟物理机宕机、断网等导致的节点不可用场景,并观察业务QPS的变化情况。
- 在实验页面,单击右上角的[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hm5tYmLQ-1656901220335)(https://ucc.alicdn.com/pic/developer-ecology/fd8f9871eff543b087e964fde60d87b3.png)]图标,创建新的终端三。
kill CN。
- 执行如下命令,切换到账号galaxykube。
su galaxykube
- 执行如下命令,获取CN POD的名字。
kubectl get pods
返回结果如下,以‘polardb-x-xxxx-cn-default’开头的是CN POD的名字。
- 执行如下命令,删除任意一个CN POD。**说明:**您需要将命令中的替换为任意一个以‘polardb-x-xxxx-cn-default’开头的CN POD的名字。
kubectl delete pod <CN POD>
- 执行如下命令,查看CN POD自动创建情况。
kubectl get pods
返回结果如下,您可查看到CN POD已经处于自动创建中。
经过几十秒后,被kill的CN POD自动恢复正常。
- 切换至终端二,您可查看kill CN之后业务QPS的情况。
kill DN。
- 切换至终端三,执行如下命令,获取DN POD的名字。
kubectl get pods
返回结果如下,以‘polardb-x-xxxx-dn’开头的是DN POD的名字。
- 执行如下命令,删除任意一个DN POD。
说明:
您需要将命令中的替换为任意一个以‘polardb-x-xxxx-dn’开头的DN POD的名字。
DN每个逻辑节点为三副本架构,也就是说一个DN节点对应3个POD,可任意选择一个进行删除操作。此外,GMS节点是一个特殊角色的DN,同样具备高可用能力,可选择任一POD进行删除。
kubectl delete pod <DN POD>
- 执行如下命令,查看DN POD自动创建情况。
kubectl get pods
返回结果如下,您可查看到DN POD已经处于自动创建中。
经过几十秒后,被kill的DN POD自动恢复正常。
- 切换至终端二,您可查看kill DN之后业务QPS的情况。
kill CDC。
- 切换至终端三,执行如下命令,获取CDC POD的名字。
kubectl get pods
返回结果如下,以‘polardb-x-xxxx-cdc-defaul’开头的是CDC POD的名字。
- 执行如下命令,删除任意一个CDC POD。
**说明:**您需要将命令中的替换为任意一个以‘polardb-x-xxxx-cdc-defaul’开头的CDC POD的名字。
kubectl delete pod <CDC POD>
- 执行如下命令,查看CDC POD自动创建情况。
kubectl get pods
返回结果如下,您可查看到CDC POD已经处于自动创建中。
经过几十秒后,被kill的CDC POD自动恢复正常。
- 切换至终端二,您可查看kill CDC之后业务QPS的情况。
7. 了解更多
如果您想了解更多有关PolarDB-X高可用知识,详情请参见如下内容。
恭喜完成
边栏推荐
- leetcode:1139. The largest square bounded by 1
- 请查收.NET MAUI 的最新学习资源
- selenium 获取dom内属性值的方法
- MySQL InnoDB Architecture Principle
- postgres 建立连接并删除记录
- XML modeling
- Influence of oscilloscope probe on signal source impedance
- Determine the best implementation of horizontal and vertical screens
- Pytorch实战——MNIST数据集手写数字识别
- 模式-“里氏替换原则”
猜你喜欢
【案例】定位的运用-淘宝轮播图
Interviewer: will concurrent programming practice meet? (detailed explanation of thread control operation)
Longest swing sequence [greedy practice]
The transformation based on vertx web sstore redis to realize the distributed session of vertx HTTP application
XML modeling
EN 438-7 laminated sheet products for building covering decoration - CE certification
Write an interface based on flask
Reading and writing operations of easyexcel
面试官:并发编程实战会吗?(线程控制操作详解)
Teach yourself to train pytorch model to Caffe (2)
随机推荐
Is Kai Niu 2980 useful? Is it safe to open an account
[case] Application of positioning - Taobao rotation map
AITM 2-0003 水平燃烧试验
Get JS of the previous day (timestamp conversion)
Add ICO icon to clion MinGW compiled EXE file
Golang (1) | from environmental preparation to quick start
Determine the best implementation of horizontal and vertical screens
Hdu2377bus pass (build more complex diagram +spfa)
XML modeling
基於flask寫一個接口
uni-app 蓝牙通信
Opérations de lecture et d'écriture pour easyexcel
poj 3414 Pots (bfs+线索)
MySQL 千万数据量深分页优化, 拒绝线上故障!
MYSQL IFNULL使用功能
2022-07-03-CKA-粉丝反馈最新情况
Teach yourself to train pytorch model to Caffe (I)
The transformation based on vertx web sstore redis to realize the distributed session of vertx HTTP application
Using webassembly to operate excel on the browser side
Clion configures Visual Studio (MSVC) and JOM multi-core compilation