教程简介
通过本教程,您将学习通过热备切换实现阿里云PolarDB MySQL版Serverless集群的高可用。 集群中的只读节点开启热备功能后,主备切换可实现快速切换和事务保持。本教程采用测试工具SysBench持续对PolarDB MySQL版的Serverless集群注入流量,并在流量注入过程中手动触发数据库crash来观察数据库的切换速度和事务保持能力。
我能学到什么
- 熟悉通过装有mysql client的ECS实例创建PolarDB MySQL版的Serverless集群的数据库命令。
- 了解利用SysBench测试PolarDB MySQL版的Serverless集群的方法。
- 体验PolarDB MySQL版Serverless集群的故障容灾能力。
环节一:准备环境和资源
本环节耗时:18分钟
开始教程前,请按以下步骤准备环境和资源:
1. 准备云服务器ECS实例。
由于要进行SysBench性能测试,ECS实例的操作系统需要选择为CentOS 7.7 64位。ECS实例安全组的出方向要放行MySQL默认使用的3306端口,具体操作请参见添加安全组规则。
您可以前往阿里云免费试用查看您的阿里云账号是否具有云服务器ECS试用资格。如有试用资格,可通过试用ECS来完成教程。如无试用资格,则需使用自有ECS资源才能完成教程。不建议使用生产环境中的自有ECS资源,也不要将教程中的测试数据和自有ECS资源的数据混用。测试完成后及时清理测试数据,避免影响自有资源正常运行。
2.访问阿里云免费试用。
单击页面右上方的登录/注册按钮,并根据页面提示完成账号登录(已有阿里云账号)、账号注册(尚无阿里云账号)或实名认证(根据试用产品要求完成个人实名认证或企业实名认证)。
3.成功登录后,在产品类别下选择数据库 > 关系型数据库,在PolarDB for MySQL Serverless卡片上单击立即试用。
4.在配置PolarDB for MySQL Serverless集群信息面板,完成参数配置。完成本教程需要的配置信息如下(实际操作请根据业务需求按需配置):
- 地域和可用区:如需使用私网IP访问PolarDB MySQL版集群,此处选择的地域必须与ECS实例相同,可用区可以不同。
- VPC网络和交换机:
- 如果您已创建符合您网络规划的VPC和交换机,直接选择该VPC和交换机。
- 如果您未创建符合您网络规划的VPC和交换机,可以使用默认的VPC和交换机。
- 如果以上已创建的和默认的VPC和交换机无法满足您的要求,可以自行创建VPC和交换机,详情请参见创建和管理专有网络。
- 如需使用私网IP访问PolarDB MySQL版集群,此处选择的VPC网络必须与ECS实例相同,否则ECS实例和PolarDB MySQL版集群无法通过VPC网络互通。
- 其他参数:保持默认值或按需修改。
5.同意协议后,单击免费试用,并根据页面提示完成试用申请。开通成功后,需要10~15分钟创建集群,之后您就可以在集群列表中看到新创建的集群。
环节二:创建数据库账号
本环节耗时:5分钟
1.登录PolarDB控制台,单击左侧集群列表,然后选择云产品资源提供的地域。例如:华东1(杭州)。
2.创建数据库账号。
- 在集群列表页面,单击集群ID,进入基本信息页面。
- 单击左侧导航栏配置与管理>账号管理。
- 单击左上方创建账号。
- 参考说明配置账号信息,然后单击确定。请记录此处创建的数据库账号及密码,后续步骤中会反复使用。
- 数据库账号:输入数据库账号名称,例如:temp。
- 账号类型:选择高权限账号。
- 密码:设置账号密码。
- 确认密码:再次输入密码。
3.设置数据库白名单。连接数据库需要设置数据库白名单,单击左侧导航栏配置与管理>集群白名单。在配置白名单界面将默认的白名单地址127.0.0.1更改为ECS实例的公网IP或者私网IP,然后点击确定使白名单地址生效。查看ECS实例IP地址的方法请参见查看IP地址。
环节三:开启只读节点的热备功能
耗时:10分钟
1.在PolarDB控制台单击左侧集群列表,然后选择集群所在地域。例如:华东1(杭州)。
2.为只读节点开启热备。
- 在集群列表页面,单击集群ID,进入基本信息页面。
- 在基本信息页面的数据库节点区域,单击右上角的切换图标切换视图。
- 在数据库节点区域,找到需要设置热备功能的只读节点,单击操作列下的开启热备。开启热备功能会进行节点角色切换,大约需要6分钟,请您耐心等待。只读节点的状态变为运行中,表示热备开启完成。
3.单击左侧导航栏的参数配置,在参数配置页面将集群的loose_innodb_trx_resume参数值设置为ON。参数打开表示事务续传功能开启。具体操作请参见设置集群参数和节点参数。该参数修改生效大概需要两分钟时间,请您耐心等待。当loose_innodb_trx_resume参数的值为ON
时,表示参数修改完成。
环节四:安装mysql-client和SysBench
耗时:5分钟
1.登录ECS实例。
2.在ECS中依次执行命令安装mysql-client。通过mysql --version
命令如果能看到mysql的版本号,说明mysql安装成功。
mkdir package cd package # 下载mysql对应的安装包 wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm # 安装mysql yum -y install mysql57-community-release-el7-10.noarch.rpm yum -y install * --nogpgcheck mysql-community-server
3.在ECS中依次执行命令安装SysBench。通过sysbench --version
命令如果能看到SysBench的版本号,说明SysBench安装成功。
yum install gcc gcc-c++ autoconf automake make libtool bzr mysql-devel git mysql unzip ##如果出现GPG keys的校验报错,请在该命令后面加上--nogpgcheck wget https://labfileapp.oss-cn-hangzhou.aliyuncs.com/Universities/sysbench.zip ##下载sysbench unzip sysbench.zip ##解压缩 cd sysbench ##打开sysbench目录 git checkout 1.0.18 ##切换到sysbench 1.0.18版本 ./autogen.sh ##运行autogen.sh ./configure --prefix=/usr --mandir=/usr/share/man make ##编译 make install
4.执行命令配置SysBench client,使内核可以利用所有的CPU核数处理数据包,同时减少CPU核数之间的上下文切换。如果您购买的ECS实例的CPU核数低于4核,无需执行该命令。本文档中的f
表示使用4个核,请根据您实际购买的ECS实例CPU核数进行配置。如果您购买的是8核的ECS实例,就用ff
表示。
sudo sh -c 'for x in /sys/class/net/eth0/queues/rx-*; do echo f>$x/rps_cpus; done' sudo sh -c "echo 32768 > /proc/sys/net/core/rps_sock_flow_entries" sudo sh -c "echo 4096 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt"
环节五:模拟故障容灾
耗时:150分钟
1.在ECS上执行命令(会提示输入密码,密码为创建数据库账号时为示例账号temp
设置的密码),在PolarDB MySQL版Serverless集群中创建数据库testdb
,用于后续的SysBench流量注入。
- 如果使用ECS实例的公网IP地址访问PolarDB MySQL版Serverless集群,此处的集群地址请使用PolarDB MySQL版集群的公网地址;如果使用ECS实例的私网IP地址访问PolarDB MySQL版Serverless集群,此处的集群地址请使用PolarDB MySQL版集群的私网地址。
- PolarDB的连接地址包括主地址和集群地址,本教程中请使用集群地址。关于如何查看集群的连接地址,请参见查看连接地址和端口。
- 端口号默认3306。
- 用户名是之前步骤中创建的PolarDB数据库账号的用户名(
temp
)。
命令执行成功后,登录PolarDB控制台,在集群详情页面中单击登录数据库,使用已创建的账号temp
和密码登录到DMS中,如果发现DMS中目标实例下存在数据库testdb
,说明数据库创建成功。
mysql -h 集群地址 -P 端口号 -u 用户名 -p -e 'create database testdb'
2.使用SysBench模拟对数据库进行持续的流量注入。整个压测流量注入的时间较长,如果使用ECS实例的公网IP地址访问PolarDB MySQL版Serverless集群,大约需要1~2个小时;如果使用ECS实例的私网IP地址访问PolarDB MySQL版Serverless集群,大约需要10分钟。具体时间取决您的网络情况,请您耐心等待。
sysbench --db-driver=mysql --mysql-host=<集群地址> --mysql-port=<端口号> --mysql-user=<用户名> --mysql-password=<密码> --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 oltp_write_only prepare
3.运行workload。为了您能及时观测到SysBench的TPS跌零现象,请提前登录PolarDB控制台并在运行workload的过程中直接执行第4 - 5步模拟故障容灾。
sysbench --db-driver=mysql --mysql-host=<集群地址> --mysql-port=< 端口号> --mysql-user=<用户名> --mysql-password=<密码> --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 --threads=8 --percentile=95 --report-interval=1 oltp_write_only run
4.登录PolarDB控制台,在集群详情页面中单击登录数据库,使用已创建的账号temp
和密码登录。
5.在PolarDB MySQL版Serverless集群的DMS中执行命令,该命令可激活Serverless集群中的模拟故障容灾功能。
call dbms_fault.crash();
环节六:完成
耗时:3分钟
观察数据库的容灾恢复情况:在ECS终端中,观察压测的执行情况。压测的执行情况可以反应业务的连接情况。 如下图您可以看到,在触发故障容灾后,SysBench的TPS出现了跌零,持续10秒左右后立即恢复,并恢复正常的压测。在触发故障容灾后到恢复正常的压测期间,并没有出现报错,数据库连接也未发生中断。
环节七:清理及后续
耗时:5分钟
清理
完成教程后,请及时清理测试数据和试用资源。
- SysBench模拟流量数据清理
sysbench --db-driver=mysql --mysql-host=集群地址 --mysql-port=端口号 --mysql-user=用户名 --mysql-password=密码 --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 --threads=8 --percentile=95 oltp_write_only cleanup
- PolarDB MySQL版Serverless集群的试用时长为3个月,到期未释放可能产生欠费。如不再使用Serverless集群,请登录PolarDB控制台,找到目标集群,在操作列单击更多>释放,按照界面提升手动释放集群。
- ECS提供的试用实例有按量付费实例和包年包月实例。如果您试用的ECS实例为试用实例,请在试用中心确认您试用的实例类型,并参考以下规则清理:
- 按量付费实例
- 如果无需继续使用实例,可以登录ECS控制台,找到目标实例,在操作列单击,搜索并单击释放设置,根据界面提示释放实例。
- 如果需要继续使用实例,请至少在试用到期1小时前为阿里云账号充值,确保账户金额不小于100.00元人民币。到期未续费的实例会因欠费而被自动停机,停机15天内实例将保留,15天后实例和数据都将被自动释放。
- 包年包月实例
- 包年包月实例到期会自动释放,释放实例的同时释放数据。
- 如果需要继续使用实例,请在试用到期前及时续费。到期未续费的实例会因欠费而被自动停机,停机15天内实例将保留,15天后实例和数据都将被自动释放。
后续
在试用有效期期间,您还可根据希望测试的其它业务场景继续使用PolarDB MySQL版Serverless集群。