本方案通过弹性伸缩和POLARDB的配合,实现应用和数据库两个层面的弹性。

前提条件

应用场景

在互联网行业的业务发展中,很多业务具有突发性特点。

  • 例如互联网电商的秒杀、促销等活动,这类业务的特点是时间固定,但访问量不固定。除了提前升级配置之外,客户往往希望系统本身也能有自动弹性伸缩的能力。
  • 对于互联网教育的场景,由于存在放假和工作日的区别,系统也需要有一定的弹性伸缩能力去应对高出平时几倍的压力,等访问减少时,业务系统能释放冗余的资源达到节约成本的目标。

典型场景和需求:

  • 业务系统波动大,以互联网行业为典型代表;
  • 业务系统和数据库系统都要能实现弹性伸缩;
  • 系统可用性高,弹性收缩用户感知小;
  • 支持手工快速提升系统和数据库性能。

技术架构

本实践基于如下图所示的技术架构和主要流程。



方案优势

  • 应用弹性:通过配置合理的弹性伸缩配置,业务高峰期到来业务压力上涨时自动增加ECS实例保障业务系统平稳运行。对于可预见的快速业务上涨,配置定时任务或者通过手动执行伸缩规则的方式可以预先备齐ECS资源。业务低谷期自动释放多余ECS资源节约成本。
  • 数据库弹性:通过POLARDB在线节点配置弹性、只读节点弹性、同步克隆弹性和存储弹性四个维度的弹性,保障在大规模业务压力到来时快速应对业务压力。
  • 应用高可用性:通过ESS收缩配置设置均衡分布策略,在主可用区宕机时,ESS会在备可用区开出相同资源,保障业务平稳运行。
  • 缓存数据库和弹性负载均衡高可用性:通过多可用区的主备策略保障跨可用区自动容灾。

注意事项

  • 跨可用区访问可能会有1-2ms的延迟。
  • 数据库不能实现自动弹性伸缩,需要人工干预升降配。
  • 业务系统需无状态,有状态系统需要先进行业务改造。
  • POLARDB现阶段未推出同城容灾版本,若要容灾需通过DTS同步,切换时需要修改应用的数据库连接。
    说明 使用DTS实时同步POLARDB请参见文档从POLARDB for MySQL同步至POLARDB for MySQL

操作步骤

本例以WordPress为业务系统演示。

  1. 登录云数据库POLARDB版控制台
  2. 创建POLARDB集群数据库和拥有读写权限的账号,具体操作请参见创建数据库创建数据库账号
  3. 登录云服务器ECS控制台
  4. 连接目标ECS实例,具体操作请参见连接ECS实例
  5. 在ECS上安装解压和压测工具。
    yum install -y unzip zip sysbench dstat
    说明
    • unzip和zip为压缩和解压缩程序,后续解压zip文件使用。
    • sysbench和dstat为Linux系统压测和系统监控工具,后续验证弹性伸缩时使用。
  6. 在ECS上安装Apache和PHP组件。
    1. 安装Apache和PHP组件。
      yum install -y httpd php php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc
      说明 安装完成后使用如下命令查看PHP版本:
      yum list installed | grep php

      WordPress 5.2.2要求PHP最低版本为5.6.20,若PHP版本低于该版本,请使用如下命令重新安装PHP组件。

      ## 查看当前PHP版本
      yum list installed | grep php
      
      ## 卸载低版本PHP组件
      yum remove -y php.x86_64 php-cli.x86_64 php-common.x86_64 php-gd.x86_64 php-ldap.x86_64 php-mbstring.x86_64 php-mcrypt.x86_64 php-mysql.x86_64 php-pdo.x86_64
      
      ## 确认是否全都卸载完成
      yum list installed | grep php
      
      ## 安装PHP组件的rpm包
      rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm
      rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
      
      ## 重新安装PHP相关组件
      yum install -y php56w.x86_64 php56w-cli.x86_64 php56w-common.x86_64 php56w-gd.x86_64 php56w-ldap.x86_64 php56w-mbstring.x86_64 php56w-mcrypt.x86_64 php56w-mysql.x86_64 php56w-pdo.x86_64
    2. 启动Apache服务。
      service httpd start
    3. 设置Apache为开机默认启动。
      sudo chkconfig httpd on
    4. 编辑info.php文件。
      vim /var/www/html/info.php
    5. i进行编辑,在文件中输入如下内容。
      <?php
      phpinfo();
      ?>


    6. 按Esc,输入:wq保存并退出。
    7. 在浏览器输入http://<ECS的弹性公网IP>/info.php,PHP安装正确会看到下图的PHP信息。

  7. 在ECS上安装WordPress。
    1. 创建WordPress安装目录。
      mkdir -p /opt/WP
    2. 打开WP文件夹。
      cd /opt/WP
    3. 下载并解压WordPress。
      ## 下载WordPress
      wget https://cn.wordpress.org/latest-zh_CN.tar.gz
      
      ## 解压WordPress
      tar -xzvf latest-zh_CN.tar.gz
    4. 配置WordPress访问POLARDB。
      ## 打开wordpress文件夹
      cd /opt/WP/wordpress/
      
      ## 复制wp-config-sample.php文件,并将复制后的文件名称修改成为wp-config.php
      cp wp-config-sample.php wp-config.php
      
      ## 编辑wp-config.php文件
      vim wp-config.php
    5. i进行编辑,配置如下参数。
      /** WordPress数据库的名称 */
      define( 'DB_NAME', 'wp-polardb' );
      
      /** MySQL数据库用户名 */
      define( 'DB_USER', 'wp_user' );
      
      /** MySQL数据库密码 */
      define( 'DB_PASSWORD', 'password' );
      
      /** MySQL主机 */
      define( 'DB_HOST', 'pc-wz957jq**********.mysql.polardb.rds.aliyuncs.com' );


      参数 描述 示例
      DB_NAME POLARDB数据库名称。 wp-polardb
      DB_USER POLARDB数据库账户的用户名。 wp_user
      DB_PASSWORD POLARDB数据库账户对应的密码。 password
      DB_HOST POLARDB数据库内网连接地址,查看内网连接地址方式请参见查看连接地址 pc-wz957jq**********.mysql.polardb.rds.aliyuncs.com
    6. 按Esc,输入:wq保存并退出。
    7. 打开/var/www/html/,并将wordpress目录复制到/var/www/html/路径下。
      cd /var/www/html
      cp -rf /opt/WP/wordpress/* /var/www/html/
    8. 在浏览器输入http://<ECS的弹性公网IP>,在WordPress配置页面填写站点标题、用户名和密码等信息,如下图所示。

    9. 单击左下角安装WordPress,完成安装。
  8. 在WordPress上开通redis缓存支持。
    1. 下载并解压redis-cache插件。
      ## 切换到WP目录
      cd /opt/WP
      
      ## 下载redis-cache插件
      wget https://downloads.wordpress.org/plugin/redis-cache.1.4.1.zip
      
      ## 解压redis-cache
      unzip redis-cache.1.4.1.zip
      
      ## 复制到/var/www/html/wp-content/plugins/
      cp -rf redis-cache /var/www/html/wp-content/plugins/
    2. 编辑wp-config.php文件。
      vim /var/www/html/wp-config.php
    3. i进行编辑,在POLARDB设置后增加Redis数据库信息。
      /** Redis 主机 */
      define('WP_REDIS_HOST', 'r-**********.redis.rds.aliyuncs.com');
      
      /** Redis 端口 */
      define('WP_REDIS_PORT', '6379');
      
      /** 接受用于使用该SELECT命令自动选择逻辑数据库的数值,不用修改 */
      define('WP_REDIS_DATABASE', '10');
      
      /** Redis数据库密码 */
      define('WP_REDIS_PASSWORD', 'password');


      参数 描述 示例
      WP_REDIS_HOST 云数据库Redis内网连接地址,查看内网连接地址方式请参见查看连接地址 r-**********.redis.rds.aliyuncs.com
      WP_REDIS_PORT Redis服务端口,默认为6379. 6379
      WP_REDIS_DATABASE 指定缓存信息保存的DB,例如10就是保存到DB10。 10
      WP_REDIS_PASSWORD Redis的连接密码 password
    4. 按Esc,输入:wq保存并退出。
    5. 复制配置文件到根目录下。
      cp /var/www/html/wp-content/plugins/redis-cache/includes/object-cache.php /var/www/html/wp-content/
    6. 在浏览器输入http://<ECS的弹性公网IP>/wp-login.php,登录WordPress管理页面。

    7. 在左侧导航点单击插件 > 已安装插件
    8. 插件页面,单击Redis Object Cache下的启动

    9. 单击Settings,打开Redis Object Cache页面。

    10. Status显示Connected时,表示Redis数据库连接正常。您可以点击Flush Cache将缓存数据导入Redis数据库。

  9. 在WordPress管理页面左侧导航栏中单击设置 > 常规,在WordPress地址(URL)站点地址(URL)选项中输入您预先申请并备案的域名。


  10. 配置负载均衡。
    1. 登录负载均衡SLB控制台
    2. 在左侧导航栏单击实例 > 实例管理
    3. 定位到目标SLB实例,单击右侧点我开始配置

    4. 负载均衡业务配置导航页面,选择HTTP协议,监听端口设置为80,开启开启会话保持功能,单击下一步

    5. 单击默认服务器组 > 继续添加,勾选之前创建的ECS实例,单击下一步:配置权重和端口号

    6. 设置端口号80权重50,单击下一步
    7. 配置健康检查页面,开启健康检查后单击下一步
    8. 配置审核页面,单击提交
    9. 待到审核项目都显示成功后单击确定即可。
  11. 登录云解析DNS控制台,将SLB弹性公网IP地址绑定预先申请并备案的域名。
    说明 如何绑定域名请参见添加网站解析
  12. 登录云服务器ECS控制台,为之前创建好的ECS创建镜像。
    说明 如何创建ECS实例镜像请参见使用实例创建自定义镜像
  13. 登录弹性伸缩控制台,配置弹性伸缩。
    1. 创建伸缩组。

      说明 创建伸缩组具体配置请参见创建伸缩组
    2. 创建伸缩配置并启用。
      说明 创建伸缩配置具体配置请参见创建伸缩配置
    3. 在该伸缩组中加入ECS实例。
      1. 登录弹性伸缩控制台,单击目标伸缩组后的管理

      2. 单击ECS实例列表 > 手动添加 > 添加已有实例,将目标ECS实例移动到右侧后,单击确定

    4. 创建伸缩规则。


      说明 创建伸缩规则具体配置请参见创建伸缩规则
    5. 创建伸缩任务。


      说明 创建伸缩任务具体配置请参见执行伸缩规则
  14. 验证弹性伸缩。
    1. 通过控制台登录ECS,登录操作请参见连接ECS实例
    2. 通过压测命令提高ECS的CPU使用率。
      sysbench cpu --cpu-max-prime=2000000 --threads=2 --time=1000 run
    3. 根据之前配置的报警任务。
      • 当CPU使用率超过80%时,触发ESS的报警任务,ESS会自动创建ECS服务器。
      • 当CPU使用率低于50%时,触发ESS的报警任务,ESS会自动减少ECS服务器。

      至此配置完成。