利用热备切换实现PolarDB MySQL版Serverless集群的高可用

更新时间: 2023-04-10 13:08:01

polardb

手动配置

196

教程简介

通过本教程,您将学习通过热备切换实现阿里云PolarDB MySQL版Serverless集群的高可用。 集群中的只读节点开启热备功能后,主备切换可实现快速切换和事务保持。本教程采用测试工具SysBench持续对PolarDB MySQL版的Serverless集群注入流量,并在流量注入过程中手动触发数据库crash来观察数据库的切换速度和事务保持能力。

我能学到什么

  • 熟悉通过装有mysql client的ECS实例创建PolarDB MySQL版的Serverless集群的数据库命令。

  • 了解利用SysBench测试PolarDB MySQL版的Serverless集群的方法。

  • 体验PolarDB MySQL版Serverless集群的故障容灾能力。

操作难度

所需时间

196分钟

使用的阿里云产品

所需费用

如果使用自有的ECS实例会产生费用,具体费用请参见计费概述;如果使用试用中心的ECS实例,费用为0元。

准备环境和资源

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. 创建数据库账号。

    1. 集群列表页面,单击集群ID,进入基本信息页面。

    2. 单击左侧导航栏配置与管理>账号管理

    3. 单击左上方创建账号

    4. 参考说明配置账号信息,然后单击确定。请记录此处创建的数据库账号及密码,后续步骤中会反复使用。

      • 数据库账号:输入数据库账号名称,例如:temp。

      • 账号类型:选择高权限账号。

      • 密码:设置账号密码。

      • 确认密码:再次输入密码。

  3. 设置数据库白名单。连接数据库需要设置数据库白名单,单击左侧导航栏配置与管理>集群白名单。在配置白名单界面将默认的白名单地址127.0.0.1更改为ECS实例的公网IP或者私网IP,然后点击确定使白名单地址生效。查看ECS实例IP地址的方法请参见查看IP地址

    image

开启只读节点的热备功能

10

  1. PolarDB控制台单击左侧集群列表,然后选择集群所在地域。例如:华东1(杭州)。

  2. 为只读节点开启热备。

    1. 集群列表页面,单击集群ID,进入基本信息页面

    2. 基本信息页面的数据库节点区域,单击右上角的切换图标切换视图。

      image
    3. 数据库节点区域,找到需要设置热备功能的只读节点,单击操作列下的开启热备。开启热备功能会进行节点角色切换,大约需要6分钟,请您耐心等待。只读节点的状态变为运行中,表示热备开启完成。

      image
  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
    image
  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
    image
  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

    image
  4. 登录PolarDB控制台,在集群详情页面中单击登录数据库,使用已创建的账号temp和密码登录。

  5. 在PolarDB MySQL版Serverless集群的DMS中执行命令,该命令可激活Serverless集群中的模拟故障容灾功能。

    call dbms_fault.crash();
    image

完成

3

观察数据库的容灾恢复情况:在ECS终端中,观察压测的执行情况。压测的执行情况可以反应业务的连接情况。 如下图您可以看到,在触发故障容灾后,SysBench的TPS出现了跌零,持续10秒左右后立即恢复,并恢复正常的压测。在触发故障容灾后到恢复正常的压测期间,并没有出现报错,数据库连接也未发生中断。

image

清理及后续

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控制台,找到目标实例,在操作列单击icon1,搜索并单击释放设置,根据界面提示释放实例。

    • 如果需要继续使用实例,请至少在试用到期1小时前为阿里云账号充值,确保账户金额不小于100.00元人民币。到期未续费的实例会因欠费而被自动停机,停机15天内实例将保留,15天后实例和数据都将被自动释放。

    包年包月实例

    • 包年包月实例到期会自动释放,释放实例的同时释放数据。

    • 如果需要继续使用实例,请在试用到期前及时续费。到期未续费的实例会因欠费而被自动停机,停机15天内实例将保留,15天后实例和数据都将被自动释放。

后续

在试用有效期期间,您还可根据希望测试的其它业务场景继续使用PolarDB MySQL版Serverless集群。

总结

常用知识点

问题1:开启事务续传功能需要打开集群的哪个参数?(单选题)

  • loose_innodb_trx_resume

  • loose_hotspot

  • loose_innodb_trx_resume_persist_undo_at_stmt

正确答案是loose_innodb_trx_resume。

问题2:ECS、PolarDB MySQL版的地域和可用区是否需要相同?(单选题)

  • 如果使用公网IP地址访问PolarDB MySQL版Serverless集群,需要保持相同

  • 如果使用私网IP地址访问PolarDB MySQL版Serverless集群,无需保持相同

  • 如果使用公网IP地址访问PolarDB MySQL版Serverless集群,无需保持相同

正确答案是如果使用公网IP地址访问PolarDB MySQL版Serverless集群,无需保持相同。如果使用公网IP地址访问PolarDB MySQL版Serverless集群,无需保持相同;如果使用私网IP地址访问PolarDB MySQL版Serverless集群,地域需要保持相同,可用区可以不同。

延伸阅读

阿里云首页 相关技术圈