某客户在中秋及国庆期间进行推广活动,业务访问量是平常的几倍,由于访问量的突增,无法及时进行扩容来规避,虽客户内部已提前进行容量评估和预留, 也采用自建的自动化扩容机制,其时效性在突发情况下未能达到预期,导致本次双节活动产生不小的业务损失。
经深入了解客户业务是完全基于腾讯云服务器CVM进行自建的,其应用及数据库等均部署在云服务器中,未直接采用云数据库,负载均衡等产品,其原因:一是客户不想被厂商的云产品绑定,二是习惯用原来的业务架构及运维经验来实施,三是带有一点吐槽产品实践过于单一,缺乏方案级或多产品关联的实践指引,上手成本略高。
(这里简单说下:当下迁移方法论、迁移工具成熟,不存在被绑定或限制的因素;另当下采用云原生产品构建业务、公有云环境运维模式也是趋势所在…
为解决客户此业务的痛点问题,以及多产品的实践指引特输出此篇供客户及感兴趣阅读者的参考。)
本篇将结合此Case背景,推荐采用云产品解决方案来解决上述的痛点问题;分别采用云服务器CVM、负载均衡CLB、云数据库MySQL、业务应用模块(用workpress 来模拟业务)、弹性伸缩Auto Scaling进行局部业务架构改造,来解决业务在突增弹性伸缩的能力,提升业务高并发的能力,保障业务的持续运行,同时在业务低峰时期,弹性释放资源减少,降低成本。下面是整个解决方案实践具体方法和简易示意图
环境模拟说明,这里采用云产品资源规格如下:
创建云服务器用来进行“业务部署模拟“,选择低规格实例进行,要点如下:
Ø 按量计费、北京地域、北京七区、标准型S5型
镜像操作系统选择Centos7.8
子网选择、设置实例名称、密码等,保持默认配置即可
选择安全组
默认点击下一步,勾选“我已阅读并同意”腾讯云服务协议,完成CVM资源创建。
采用云数据库来存储客户的业务数据,借助云数据库MySQL稳定可靠、可弹性扩展和便于管理等优势,创建数据库要点:
Ø MySQL8.0(贴合当前客户数据库版本)、双节点、北京七区
在创建数据库需注意子网环境与CVM在都一个subnet。
完成数据库创建
采用云上负载均衡CLB来实现快捷的流量分发服务,自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障,支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求,创建CLB要点:
Ø 公网型CLB、多可用区、同VPC网络
提交订单确认
完成CLB创建
这里模拟客户的业务环境采用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 ~]# |
---|
[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_root$fastcgi_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 |
---|
访问测试
[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 |
---|
依次执行以下命令,更新 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 ~]# |
---|
[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)
进行云数据库配置
创建workpress 数据库/业务相关数据库
完成wordpressv1数据库创建。
[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 即可,如下截图
浏览器访问http://152.136.34.93/wordpress, 进行在线安装,输入密码、电子邮件地址
Wordpress 部署成功
测试wordpress 数据库SQL执行结果
输入监听器名称、协议及端口
输入域名、URL路径、均衡方式即可;这里需要注意域名设置,需输入实际业务域名。
由于LB产品已域名化,我这里模拟直接用LB默认域名,实际业务中需要配置业务域名信息,如:在DNSPOD 或DNS服务商设置业务域名解析,配置lb 负载均衡的转发域名。
绑定后端实例集群,设置端口和权重即可。
至此模拟客户业务的环境基本完成。
将前面在云服务器部署好的Wordpress,进行自定义镜像制作
镜像制作成功
创建启动配置,选择北京七区、标准型S5机型
选择前面制作的自定义镜像WebApp2
确认配置信息
完成弹性伸缩启动配置。
在完成弹性伸缩启动配置后, 进行弹性伸缩组配置
输入弹性伸缩组名称、最大伸缩数、启动配置、VPC网络、子网等信息
选择前面创建lb、监听器、域名、路径URL等
保持默认,点击下一步
完成伸缩组创建。
完成弹性伸缩组后,进行实例关联
这里为了快速看到效果,配置弹性扩容策略,CPU利用率设置为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秒,然后执行命令 |
---|
除了上面命令行的压测方式,还可借助腾讯云上的混沌演练平台进行模拟压测,这里不展开,感兴趣的在云平台尝试下即可,切忌在风险可控环境或类生产环境进行压测演练。
在进行压测的过程中, 可以在“伸缩活动”可以查看到,弹性扩缩容策略如期生效,能进行自动弹性扩容、缩容。
本篇结合案例的痛点采用云产品进行业务弹性的改造,解决了在业务突增弹性扩容时效问题、低峰资源缩容节省成本的问题,同时结合多云产品的弹性业务构建方法,让用户更容易上手与参考。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。