【开发者空间实践指导】搭建可自动伸缩的Discuz!论坛网站
一、案例介绍
Discuz!论坛是全球成熟度最高、覆盖率最大的论坛软件系统之一。用户对论坛的访问可分为高峰期和平峰期,若论坛采用多服务器部署模式且满足高峰时期的负载需求,平峰期必有部分服务器处于闲置状态,增加了不必要的成本,也造成了资源浪费。AS弹性伸缩服务可帮助用户解决以上问题。当用户在论坛的服务器系统中应用弹性伸缩后,弹性伸缩可以根据用户设定的策略,自动地增加或减少服务器的数量,即可以在保证网站正常运转的同时节约成本。
本实践以搭建可自动伸缩的Discuz!论坛为例,介绍了如何使用弹性伸缩服务搭建一个可自动增加或减少弹性云服务器数量的Web服务。
二、免费领取云主机
如您还没有云主机,可点击链接 ,根据领取指南进行操作。
如您已领取云主机,可直接开始实验。
三、实验流程
说明:
1、华为云上搭建Discuz项目,初始web服务器为一台ECS资源;
2、在AS弹性伸缩服务配置弹性伸缩策略并监控Discuz项目的web服务器;
3、触发伸缩策略的增加/缩减服务器场景,使资源自动伸缩增加一台;
4、两种场景下用户均可通过ELB正常访问到Discuz论坛网站。
实验资源
本次实验花费总计为10.8元,资源采取按需计费,体验结束后,请及时释放资源,避免产生多余费用,给您带来不便。
云资源 |
消耗/时 |
时长 |
弹性云服务器ECS X3 |
0.6876元/小时 |
2 |
负载均衡ELB |
0.383元/小时 |
2 |
弹性公网IP |
0.083元/小时 |
2 |
虚拟私有云VPC |
免费 |
2 |
网络安全组 |
免费 |
2 |
云备份 CBR |
0.168元/小时 |
2 |
四、资源购买与配置
4.1 配置虚拟私有云VPC
在浏览器中输入华为云网址:https://www.huaweicloud.com/ 进入华为云首页。
在华为云的首页右上方,点击“登录”,在弹出的对话框中输入自己的用户名和密码。
在华为云首页,在搜索框中输入“虚拟私有云 VPC”,点击“控制台”进入虚拟私有云控制台页面。
选择“北京四”,点击右上角的“创建虚拟私有云”按钮,进入创建虚拟私有云页面,按照下图配置完成虚拟私有云的创建。
参考以下配置进行VPC的配置。
区域 |
华北-北京四 |
名称 |
vpc-DISCUZ(可自定义) |
企业项目 |
default(可选择自己的其他项目,无则不填写) |
子网名称 |
vpc-test(可自定义) |
可用区 |
可用区1 |
4.2 配置弹性公网IP EIP
浏览器切换到华为云主页,在搜索框中输入“弹性公网IP EIP”,单击下方的“控制台”进入弹性公网IP服务页面。
点击右上角的“购买弹性公网IP”按钮,进行弹性公网IP的购买。
参考以下配置完成弹性公网IP创建。
计费模式 |
按需计费 |
区域 |
华北-北京四 |
线路 |
全动态BPG |
公网带宽 |
按带宽计费 |
带宽大小 |
1 |
带宽名称 |
自定义 |
弹性公网IP名称 |
discuz_ip(可自定义) |
企业项目 |
default(可选择自己的其他项目,无则不填写) |
4.3 配置安全组
点击“网络控制台”左侧菜单栏的“安全组”,点击右上角“创建安全组”来创建安全组并添加规则。
参考以下配置完成安全组的创建。
区域 |
华北-北京四 |
名称 |
sg-DISCUZ(可自定义) |
企业项目 |
default(可选择自己的其他项目,无则不填写) |
入方向规则 |
22,3389,80,443,8080 |
4.4 购买ECS云主机
浏览器切换到华为云主页,在搜索框中输入“弹性云服务器 ECS”点击进入弹性云服务页面。
点击左上角的“购买弹性云服务器”。
参考下列配置进行弹性云服务器ecs-DISCUZ01的购买。
计费模式 |
按需计费 |
区域 |
华北-北京四 |
可用区 |
可用区1 |
CPU架构 |
X86计算 |
实例规格 |
1vCPUs 4GiB(或者其他相似或以上规格) |
镜像 |
公共镜像-CentOS-centOS7.6(本实验是基于Centos系统实现的,如因Centos下线停止更新导致对后续实验环境有要求的用户可以参考Centos停止维护解决方案 解决。 |
存储与备份 |
系统盘:高IO-40GiB 数据盘:新增-高IO-500GiB-数量1-磁盘随实例释放 |
虚拟私有云 |
vpc-DISCUZ |
主网卡 |
vpc-test |
安全组 |
sg-DISCUZ |
弹性公网IP |
使用已有 |
云服务器名称 |
ecs-DISCUZ01(可自定义) |
登录凭证 |
密码 |
密码 |
自定义 |
企业项目 |
default(可选择自己的其他项目,无则不填写) |
购买完ecs-DISCUZ01后,在弹性云服务器ECS列表页面,点击ecs-DISCUZ01后面的“更多”,选择“购买相同配置”。
与ecs-DISCUZ01不同的是需要修改两处配置:
(1) 弹性公网配置选择“暂不购买”。
(2) 云服务器名称改为ecs-DISCUZ02,并设置登陆密码。
配置完后点击立即购买即完成ecs-DISCUZ02资源的购买。
4.5 配置弹性负载均衡ELB
浏览器切换到华为云主页,在搜索框中输入“弹性负载均衡 ELB”,点击“控制台”跳转到弹性负载均衡ELB页面。
点击右上角的“购买弹性负载均衡”按钮进行弹性负载均衡的购买配置。
按照如下规格购买:
实例类型 |
共享型 |
计费模式 |
按需计费 |
区域 |
华北-北京四 |
名称 |
elb-discuz(可自定义) |
企业项目 |
default(可选择自己的其他项目,无则不填写) |
所属VPC |
vpc-DISCUZ |
前端子网 |
vpc-test |
IPv4地址 |
自动分配IP地址 |
弹性公网IP |
现在购买 |
线路 |
全动态BGP |
公网带宽 |
按带宽计费 |
带宽大小 |
1 |
点击“立即购买”后完成弹性负载均衡的配置购买。
点击刚刚创建的ELB“elb-discuz”进入详情页面,然后点击右上角的“创建后端服务器组”。
配置后端分配策略,然后点击下一步。
名称 |
server_group-discuz |
后端协议 |
HTTP |
分配策略类型 |
加权轮询算法 |
添加后端服务器,服务器部署的服务端口为80,权重为1,然后点击“添加云服务器”按钮。
将ECS服务器“ecs-DISCUZ02”选中,点击“确认”。
配置业务端口为80,权重为1,点击下一步。
确认信息无误后,点击“立即创建”。
后端服务器组创建完毕。
五、DISCUZ!网站搭建
5.1 搭建数据库
(1) 在搜索框中输入“弹性云服务器 ECS”点击进入弹性云服务页面,点击ecs-DISCUZ01服务器后面的“远程登录”远程登录云服务器ecs-DISCUZ01。
弹出框下滑选择VNC方式页面登录服务器。
填写用户名:root,回车,密码:购买ecs时设置的密码,回车,即可登录。
(2) 依次在控制台中执行以下命令,安装MySQL并启动MySQL服务。
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql-community-server --nogpgcheck
systemctl start mysqld
systemctl enable mysqld
(3) 查看MySQL运行状态。
systemctl status mysqld.service
(4) 执行以下命令,获取安装MySQL时自动设置的root用户密码,记录好,后面使用。
grep 'temporary password' /var/log/mysqld.log
(5) 执行以下命令,并按照下图回显提示信息进行操作,加固MySQL。
mysql_secure_installation
(6) 执行以下命令,再根据提示输入数据库管理员root账号的密码进入数据库。
mysql -u root -p
(7) 执行以下命令,使用MySQL数据库。
use mysql;
(8) 执行以下命令,查看用户列表。
select host,user from user;
(9) 执行以下命令,刷新用户列表并允许所有IP对数据库进行访问。
update user set host='%' where user='root' LIMIT 1;
(10) 执行以下命令,强制刷新权限。允许同一子网中设置为允许访问的云服务器通过私有IP对MySQL数据库进行访问。
update user set host='%' where user='root' LIMIT 1;
(11) 执行以下命令,退出数据库。
quit
(12) 执行以下命令,重启MySQL服务。
systemctl restart mysqld
(13) 执行以下命令,设置开机自动启动MySQL服务。
systemctl enable mysqld
(14) 执行以下命令,关闭防火墙。
systemctl stop firewalld.service
(15) 重新查看防火墙状态是否为关闭。
systemctl status firewalld
5.2 搭建web环境
(1) 将弹性公网IP从云服务器ecs-DISCUZ01上解绑,并绑定至云服务器ecs-DISCUZ02上。
点击“ecs-DISCUZ01”,进入ecs-DISCUZ01详情页。
切换到“弹性公网IP”页面,点击“解绑”。
解绑成功后,点击“ecs-DISCUZ02”,进入ecs-DISCUZ02详情页,同样切换到“弹性公网IP”页面,点击“绑定”,将discuz_ip绑定到ecs-DISCUZ02。
(2) 参考远程登录云服务器ecs-DISCUZ01方式,远程登录云服务器ecs-DISCUZ02;
(3) 安装Web环境:依次执行以下命令,安装MySQL。
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql-community-server --nogpgcheck
(4) 执行以下命令,安装Apache服务器、PHPFastCGI管理器、MySQL客户端和MySQL数据库服务器。
yum install epel-release
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
yum -y install php74-php-devel php74-php.x86_64 php74-php-cli.x86_64 php74-php-common.x86_64 php74-php-gd.x86_64 php74-php-ldap.x86_64 php74-php-mbstring.x86_64 php74-php-mcrypt.x86_64 php74-php-pdo.x86_64 php74-php-mysqlnd php74-php-fpm php74-php-opcache php74-php-pecl-redis php74-php-pecl-mongodb php74-php-xml httpd mysql mysql-server
回显如下,说明安装成功。
Complete!
(5) 配置Web环境:执行以下命令,启动httpd服务
service httpd start
(6) 执行以下命令,设置开机自动启动httpd服务。
chkconfig httpd on
(7) 执行以下命令,启动php-fpm服务。
service php74-php-fpm start
(8) 执行以下命令,设置开机自动启动php-fpm服务。
chkconfig php74-php-fpm on
(9) 执行以下命令,关闭防火墙。
systemctl stop firewalld.service
(10) 执行以下命令,重新查看防火墙状态是否为关闭。
systemctl status firewalld
(11) 执行以下命令,启动MySQL服务。
systemctl start mysqld
(12) 执行以下命令,设置开机自动启动MySQL服务。
systemctl enable mysqld.service
5.3 部署网站代码
(1) 继续在ecs-DISCUZ02服务器上执行以下命令,安装Discuz软件。
wget https://gitee.com/Discuz/DiscuzX/releases/download/v3.5-20231001/Discuz_X3.5_SC_UTF8_20231001.zip
(2) 执行以下命令,解压Discuz安装包。
unzip Discuz_X3.5_SC_UTF8_20231001.zip
(3) 执行以下命令,将解压后的“upload”文件夹下的所有文件复制到“var/www/html”路径下。
cp -r upload/* /var/www/html
(4) 执行以下命令,将写权限赋予给其他用户。
chmod -R 777 /var/www/html
(5) 在浏览器里输入地址:http://弹性公网IP地址进入安装界面,按照Discuz安装向导进行安装。
a.确认协议,并单击“我同意”。
b.开始安装后,检查安装环境并单击“下一步”。
c.设置运行环境,并单击“下一步”。
d. 安装数据库,填写数据库信息,单击“下一步”完成安装。
①数据库服务器地址即为ecs-DISCUZ01的私有IP地址。
②数据库密码是ecs-DISCUZ01配置的数据库管理员root账号的密码。
自定义管理员信息。
5.4 验证搭建结果
(1) 在浏览器中输入:http://弹性公网IP地址/forum.php 可登录论坛主页则说明网站搭建成功。
(2) 后台管理页面:http://弹性公网IP地址/admin.php
六、AS弹性伸缩扩容缩容验证
6.1 创建伸缩配置
浏览器切换到华为云主页,控制台输入“弹性伸缩 AS”,点击控制台进入弹性伸缩服务首页。
点击右上角“创建伸缩配置”。
参考下列截图配置进行伸缩配置创建。
计费模式 |
按需计费 |
区域 |
华北-北京四 |
名称 |
as-config-discuz(可自定义) |
配置模板 |
使用新模板 |
cpu架构 |
x86计算 |
规格 |
1vCPUs 2GiB(可购买其他相同或者更高规格的配置) |
镜像 |
ecs-discuz私有镜像参考创建私有镜像 步骤创建 |
磁盘 |
云硬盘: 系统盘:高,IO-100GiB 数据盘:高IO-100GiB |
安全组 |
sg-DISCUZ |
弹性公网IP |
不使用 |
登录方式 |
密码 |
密码 |
自定义 |
伸缩配置参数配置完成后,单击“立即创建”。
6.2 创建弹性伸缩组
在“弹性伸缩 AS”主页右上角,单击“创建弹性伸缩组”。
参考下列截图配置进行弹性伸缩组创建。
区域 |
华北-北京四 |
可用区 |
可用区1, 可用区2, 可用区3, 可用区7 |
多可用区扩展策略 |
均衡分布 |
名称 |
as-group-discuz(可自定义) |
最大实例数(台) |
50 |
期望实例数(台) |
0 |
最小实例数(台) |
0 |
伸缩配置 |
as-config-discuz |
虚拟私有云 |
vpc-DISCUZ |
子网 |
vpc-test |
负载均衡 |
使用弹性负载均衡 负载均衡器:elb-discuz 后端云服务器组:server_group-discuz 后端端口:80 权重:1 IP协议版本:IPv4 |
实例移除策略 |
根据较早创建的配置较早创建的实例 |
弹性公网IP |
释放 |
数据盘 |
删除 |
健康检查方式 |
负载均衡健康检查 |
健康检查间隔 |
5分钟 |
健康状况检查宽限期(秒) |
600 |
企业项目 |
default(可选择自己的其他项目,无则不填写) |
弹性伸缩组参数配置完成后,单击“立即创建”返回弹性伸缩组列表,若伸缩组为“已启用”状态,说明伸缩组创建成功。
6.3 添加伸缩策略
在已创建的弹性伸缩组“as-group-discuz”所在行,单击操作列的“查看伸缩策略”。
在伸缩策略页面单击“添加伸缩策略”。
参考下列截图配置进行弹性策略as-policy-discuz01的创建,即当系统连续3次监控到CPU使用率超过70%时,触发伸缩策略as-policy-discuz01,伸缩组会增加一台弹性云服务器。
策略名称 |
as-policy-discuz01 |
策略类型 |
告警策略 |
告警规则 |
现在创建 |
告警规则名称 |
as-alarm-cpu-01 |
监控类型 |
系统监控 |
触发条件 |
CPU使用率—最大值—>--70 |
监控周期 |
5分钟 |
连续出现次数 |
3 |
企业项目 |
default(可选择自己的其他项目,无则不填写) |
告警策略类型 |
简单策略 |
执行动作 |
增加—1—个实例 |
冷却实践(秒) |
900 |
点击“确定”进行创建。
参考下列截图配置进行弹性策略as-policy-discuz02的创建,即当系统连续3次监控到CPU使用率低于30%时,触发伸缩策略as-policy-discuz02,伸缩组会减少一台弹性云服务器。
策略名称 |
as-policy-discuz02 |
策略类型 |
告警策略 |
告警规则 |
现在创建 |
告警规则名称 |
as-alarm-cpu-02 |
监控类型 |
系统监控 |
触发条件 |
CPU使用率—最大值—<--30 |
监控周期 |
5分钟 |
连续出现次数 |
3 |
企业项目 |
default(可选择自己的其他项目,无则不填写) |
告警策略类型 |
简单策略 |
执行动作 |
减少—1—个实例 |
冷却实践(秒) |
900 |
点击“确定”进行创建。
返回列表查看两个伸缩策略创建完毕并启用。
6.4 手动移入待检测主机
单击伸缩组as-group-discuz名称进入伸缩组详情页面。
切换到“伸缩实例”页签,将ecs-DISCUZ02手动移入伸缩组中。
点击“确定”。
修改最小实例数。修改最小实例数的目的是为保证ecs-DISCUZ02不被伸缩活动移出伸缩组。单击页面右上角的“修改伸缩组”。
修改最小实例数为1,确认。
6.5 验证弹性伸缩
(1) 登录http://弹性公网IP地址/admin.php确认discuz论坛可以正常使用。
(2) 控制台输入“弹性云服务器 ECS”跳转弹性云服务器列表,然后登录部署网站的ecs-DISCUZ02机器上。
(3) 构造cpu超过70%场景
执行以下命令创建模拟cpu内存占用脚本。
vim cpu.sh
单击键盘上的“i”键,进入vim的INSERT模式。
通过“复制粘贴”按钮将以下代码复制到服务器中。该脚本主要是为了模拟虚拟机内存到达100%的场景,执行脚本后,输入10,则会将虚拟机内存提升至100%,再输入0之后就会停止内存占用。
#!/bin/bash
read -p "please input a num:(0:stop;10:CPU100%):" num
if [ $num -eq 8 ]; then
pkill -9 dd
for i in $(seq 1 $(cat /proc/cpuinfo | grep "physical id" | wc -l | awk '{print $1-1}')); do
dd if=/dev/zero of=/dev/null &
done
elif [ $num -eq 10 ]; then
pkill -9 dd
for i in $(seq 1 $(cat /proc/cpuinfo | grep "physical id" | wc -l)); do
dd if=/dev/zero of=/dev/null &
done
elif [ $num -eq 0 ]; then
pkill -9 dd
else
echo "input error"
fi
按“Esc”按键,然后按“Shift+:”,输入“wq”,回车保存脚本。
输入“sh cpu.sh”后回车,开始执行脚本。
输入“10”,开始模拟内存占用到达100%场景。
(4) 返回云服务器列表,点击服务器边上的“监控”图标,观察ecs机器cpu指标,
返回弹性伸缩详情页面,点击监控也可以查看CPU使用情况。
(5) 弹性伸缩详情页面的活动历史标签中可以查看到弹性伸缩已触发的通知。
返回云服务器列表也可以查看到新扩容的虚拟机。
(6) 登录http://弹性公网IP地址/admin.php确认discuz论坛是否可以正常使用。
(7) 模拟cpu使用率低于30%,弹性伸缩缩减主机功能。
登录ecs-DISCUZ02机器,执行以下命令再次运行脚本。
sh cpu.sh
输入“0”,回车,将内存占用程序停止。
待CPU内存降下来之后,弹性伸缩详情页面的活动历史标签中可以查看到弹性伸缩触发了主机移除策略,新扩容的虚拟机也会被回收
(8) 登录http://弹性公网IP地址/admin.php确认discuz论坛是否可以正常使用。
至此基于公有云上可自动伸缩的Discuz!论坛网站搭建完毕。
七、Discuz!论坛网站镜像制作步骤
7.1 创建云服务器备份存储库
控制台搜索“云备份 CBR”,跳转到“云备份”主页,左侧菜单点击“云服务器备份”,进入云服务器备份页面。
点击右上角的“购买云服务器备份存储库”,参考下面的配置进行云备份配置。
计费模式 |
按需计费 |
区域 |
华北-北京四 |
保护类型 |
备份 |
备份数据冗余 |
单AZ备份 |
选择服务器 |
暂不配置 |
存储库容量 |
600GB |
自动扩容 |
暂不配置 |
备份策略 |
暂不配置 |
企业项目 |
default(可选择自己的其他项目,无则不填写) |
存储库名称 |
valut-discuz(自定义) |
7.2 创建私有镜像
登录“云服务器控制台”,点击左侧菜单中的“镜像服务”,点击“私有镜像”,然后单击右上角的“创建私有镜像”
参照下列参数进行私有镜像创建
区域 |
华北-北京四 |
创建方式 |
创建私有镜像 |
镜像类型 |
整机镜像 |
选择镜像源 |
云服务器 |
云服务器 |
ecs-DISCUZ02(或者自己创建的的discuz资源服务器) |
云服务器备份存储库 |
valut-discuz(5.1步骤创建) |
名称 |
ecs-discuz(自定义) |
企业项目 |
default(可选择自己的其他项目,无则不填写) |
- 点赞
- 收藏
- 关注作者
评论(0)