腾讯云上业务弹性实践案例

1. 案例背景

某客户在中秋及国庆期间进行推广活动,业务访问量是平常的几倍,由于访问量的突增,无法及时进行扩容来规避,虽客户内部已提前进行容量评估和预留, 也采用自建的自动化扩容机制,其时效性在突发情况下未能达到预期,导致本次双节活动产生不小的业务损失。

经深入了解客户业务是完全基于腾讯云服务器CVM进行自建的,其应用及数据库等均部署在云服务器中,未直接采用云数据库,负载均衡等产品,其原因:一是客户不想被厂商的云产品绑定,二是习惯用原来的业务架构及运维经验来实施,三是带有一点吐槽产品实践过于单一,缺乏方案级或多产品关联的实践指引,上手成本略高。

(这里简单说下:当下迁移方法论、迁移工具成熟,不存在被绑定或限制的因素;另当下采用云原生产品构建业务、公有云环境运维模式也是趋势所在…

为解决客户此业务的痛点问题,以及多产品的实践指引特输出此篇供客户及感兴趣阅读者的参考。)

2. 解决方案

本篇将结合此Case背景,推荐采用云产品解决方案来解决上述的痛点问题;分别采用云服务器CVM、负载均衡CLB、云数据库MySQL、业务应用模块(用workpress 来模拟业务)、弹性伸缩Auto Scaling进行局部业务架构改造,来解决业务在突增弹性伸缩的能力,提升业务高并发的能力,保障业务的持续运行,同时在业务低峰时期,弹性释放资源减少,降低成本。下面是整个解决方案实践具体方法和简易示意图

2.1. 环境说明

环境模拟说明,这里采用云产品资源规格如下:

  • 服务器规格:标准型S5.MEDIUM2
  • 云数据库: MySQL8.0,通用型-1核 2G,双节点
  • 负载均衡: 公网CLB
  • 弹性伸缩:启动配置选择S5.MEDIUM2(与服务器规格同型号)
  • 业务模拟: 基于wordpress 模拟部分业务

2.2. 创建云服务器

创建云服务器用来进行“业务部署模拟“,选择低规格实例进行,要点如下:

Ø 按量计费、北京地域、北京七区、标准型S5型

镜像操作系统选择Centos7.8

子网选择、设置实例名称、密码等,保持默认配置即可

选择安全组

默认点击下一步,勾选“我已阅读并同意”腾讯云服务协议,完成CVM资源创建。

2.3. 创建云数据库

采用云数据库来存储客户的业务数据,借助云数据库MySQL稳定可靠、可弹性扩展和便于管理等优势,创建数据库要点:

Ø MySQL8.0(贴合当前客户数据库版本)、双节点、北京七区

在创建数据库需注意子网环境与CVM在都一个subnet。

完成数据库创建

2.4. 创建CLB

采用云上负载均衡CLB来实现快捷的流量分发服务,自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障,支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求,创建CLB要点:

Ø 公网型CLB、多可用区、同VPC网络

提交订单确认

完成CLB创建

2.5. LNMP环境部署

2.5.1. 配置软件源

这里模拟客户的业务环境采用LNMP + WordPress 来替换,Nginx 软件源和Mariadb 软件源:

[root@VM-2-8-centos ~]# cat /etc/yum.repos.d/nginx.repo [nginx] name = nginx repo baseurl = https://nginx.org/packages/mainline/centos/7/$basearch/ gpgcheck = 0 enabled = 1

[root@VM-2-8-centos ~]# cat
/etc/yum.repos.d/MariaDB.repo

MariaDB 10.4 CentOS repository list -

created 2019-11-05 11:56 UTC

http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl =
https://mirrors.cloud.tencent.com/mariadb/yum/10.4/centos7-amd64
gpgkey=https://mirrors.cloud.tencent.com/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1
[root@VM-2-8-centos ~]#

2.5.2 Nginx配置

[root@VM-2-8-centos ~]# cp
/etc/nginx/conf.d/default.conf{,.bak}
[root@VM-2-8-centos ~]# vim
/etc/nginx/conf.d/default.conf
[root@VM-2-8-centos ~]# cat  /etc/nginx/conf.d/default.conf
server {
   
listen       80;
   
server_name  localhost;
    root   /usr/share/nginx/html; 

   
location / {
       
index  index.php index.html
index.htm;
   
}

   
#error_page  404              /404.html;

   

redirect server error pages to the static page /50x.html

   

   
error_page   500 502 503
504  /50x.html;
   
location = /50x.html {
       
root   /usr/share/nginx/html;
   
}

   

proxy the PHP scripts to Apache listening on 127.0.0.1:80

   

   
#location ~ .php$ {
   
#    proxy_pass   http://127.0.0.1;
   
#}

   

pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

   

   
location ~ .php$ {
       
fastcgi_pass   127.0.0.1:9000;
       
fastcgi_index  index.php;

fastcgi_param 

SCRIPT_FILENAME 
/scripts$fastcgi_script_name;
       
fastcgi_param  SCRIPT_FILENAME  document_rootfastcgi_script_name;
       
include        fastcgi_params;
   
}

   

deny access to .htaccess files, if Apache's document root

   

concurs with nginx's one

   

   
#location ~ /.ht {
   
#    deny  all;
   
#}
}

[root@VM-2-8-centos ~]# systemctl enable
nginx
[root@VM-2-8-centos ~]# systemctl start
nginx

访问测试

2.5.3 数据库安装

[root@VM-2-8-centos ~]# rpm -qa | grep -i
mariadb
mariadb-libs-5.5.68-1.el7.x86_64
[root@VM-2-8-centos ~]# yum -y remove
mariadb-libs

[root@VM-2-8-centos ~]# yum -y install
MariaDB-client MariaDB-server

[root@VM-2-8-centos ~]# systemctl enable
mariadb
[root@VM-2-8-centos ~]# systemctl start
mariadb

2.5.4安装与配置PHP

依次执行以下命令,更新 yum 中 PHP 的软件源

[root@VM-2-8-centos ~]# rpm -Uvh https://mirrors.cloud.tencent.com/epel/epel-release-latest-7.noarch.rpm
Retrieving https://mirrors.cloud.tencent.com/epel/epel-release-latest-7.noarch.rpm

[root@VM-2-8-centos ~]# yum -y install
mod_php72w.x86_64 php72w-cli.x86_64 php72w-common.x86_64 php72w-mysqlnd
php72w-fpm.x86_64

[root@VM-2-8-centos ~]# systemctl start
php-fpm
[root@VM-2-8-centos ~]# systemctl enable
php-fpm
Created symlink from
/etc/systemd/system/multi-user.target.wants/php-fpm.service to
/usr/lib/systemd/system/php-fpm.service.
[root@VM-2-8-centos ~]#

2.5.5创建php测试页

[root@VM-2-8-centos ~]# cat
/usr/share/nginx/html/index.php
<?php phpinfo(); ?>
[root@VM-2-8-centos ~]#

访问php测试页面,符合预期。

提醒下:若在访问php测试页面,无法正常显示上述截图且日志出现如下信息

注意这两个参数位置与配置(参考2.5.2 Nginx)

  • root /usr/share/nginx/html;
  • fastcgi_param SCRIPT_FILENAME document_rootfastcgi_script_name;

2.6. 云数据库MySQL 配置

进行云数据库配置

创建workpress 数据库/业务相关数据库

完成wordpressv1数据库创建。

2.7. 部署与安装WordPress

2.7.1. 部署WordPress

[root@VM-2-8-centos html]# cd
/usr/share/nginx/html/
[root@VM-2-8-centos html]# wget https://cn.wordpress.org/wordpress-5.0.4-zh_CN.tar.gz
[root@VM-2-8-centos html]# tar zxvf
wordpress-5.0.4-zh_CN.tar.gz^C
[root@VM-2-8-centos html]# cp
wordpress/wp-config.php{,.bak}
[root@VM-2-8-centos html]# vim
wordpress/wp-config.php

输入DB_NAME、DB_USER、DB_PASSWORD、DB_HOST 即可,如下截图

2.7.2. 安装WordPress

浏览器访问http://152.136.34.93/wordpress, 进行在线安装,输入密码、电子邮件地址

Wordpress 部署成功

测试wordpress 数据库SQL执行结果

2.8. 配置CLB

2.8.1. 创建监听器

输入监听器名称、协议及端口

2.8.2. 配置转发规则

输入域名、URL路径、均衡方式即可;这里需要注意域名设置,需输入实际业务域名。

由于LB产品已域名化,我这里模拟直接用LB默认域名,实际业务中需要配置业务域名信息,如:在DNSPOD 或DNS服务商设置业务域名解析,配置lb 负载均衡的转发域名。

2.8.3. 开启健康检查

2.8.4. 绑定后端服务

绑定后端实例集群,设置端口和权重即可。

至此模拟客户业务的环境基本完成。

2.8.5 验证业务访问

2.9. Auto Scaling 配置

2.9.1. 制作WebApp镜像

将前面在云服务器部署好的Wordpress,进行自定义镜像制作

镜像制作成功

2.9.2. 创建启动配置

创建启动配置,选择北京七区、标准型S5机型

选择前面制作的自定义镜像WebApp2

确认配置信息

完成弹性伸缩启动配置。

2.9.3. 创建伸缩组

在完成弹性伸缩启动配置后, 进行弹性伸缩组配置

输入弹性伸缩组名称、最大伸缩数、启动配置、VPC网络、子网等信息

选择前面创建lb、监听器、域名、路径URL等

保持默认,点击下一步

完成伸缩组创建。

2.9.4. 添加关联实例

完成弹性伸缩组后,进行实例关联

2.9.5. 配置告警触发策略

这里为了快速看到效果,配置弹性扩容策略,CPU利用率设置为1分钟

配置告警触发策略,弹性缩容

3. 验证

3.1. 利用命令行压测

安装sysbench 压测软件,进行CPU利用率压测,观察弹性伸缩情况。

[root@VM-2-8-centos ~]# yum install -y
sysbench

[root@VM-2-8-centos ~]# sysbench cpu
--cpu-max-prime=2000000 --threads=2 --time=1000 run
命令参数含义: cpu-max-prime 参数是 Sysbench CPU 测试中用于指定最大质数的参数。此参数指定了计算质数的范围,将计算从 2 到 2000000 之间的所有质数。 运行时间我们设置为1000秒,然后执行命令

3.2 利用混沌演练平台压测

除了上面命令行的压测方式,还可借助腾讯云上的混沌演练平台进行模拟压测,这里不展开,感兴趣的在云平台尝试下即可,切忌在风险可控环境或类生产环境进行压测演练。

3.2 弹性扩缩容验证

在进行压测的过程中, 可以在“伸缩活动”可以查看到,弹性扩缩容策略如期生效,能进行自动弹性扩容、缩容。

4. 总结

本篇结合案例的痛点采用云产品进行业务弹性的改造,解决了在业务突增弹性扩容时效问题、低峰资源缩容节省成本的问题,同时结合多云产品的弹性业务构建方法,让用户更容易上手与参考。

5. 参考资料