使用AWS ALB为WordPress做负载均衡

网上有许多做负载均衡的文章,都是大神写的高级方法,对于小白来说有点不太容易,我自己也不会搞。因此自己根据网上搜索的资源来自己整理了一份做AWS ALB的简易方法,此方法亲自验证,但与每个人的配置环境有一定区别,想使用的请自己根据创建过程自行修改适合自己的方法。

本过程使用LNNPA+Ubuntu20.04做为服务器环境。

无需一个一个的输入命令,无需值守,编译安装优化编译参数,提高性能,解决不必要的软件间依赖,特别针对配置自动优化。支持自定义Nginx、PHP编译参数及网站和数据库目录、支持生成LetseEcrypt证书、LNMP模式支持多PHP版本、支持单独安装Nginx/MySQL/MariaDB/Pureftpd服务器,同时提供一些实用的辅助工具如:虚拟主机管理、FTP用户管理、Nginx、MySQL/MariaDB、PHP的升级、常用缓存组件Redis/Xcache等的安装、重置MySQL root密码、502自动重启、日志切割、SSH防护DenyHosts/Fail2Ban、备份等许多实用脚本。

负载均衡最重要的就是数据的同步,分为网站源码的文件同步和数据库的同步。网上有一些介绍使用AWS S3存储来同步网站源码的,我也测试了,可以使用,但EC2与S3之间的延迟过大,会造成网站WTTB时间过大,网站加载缓慢,无法接受,后来决定使用一台EC2做为NFS服务器来放网站源码,再开其它EC2服务器来提供Nginx服务,并挂载NFS服务器上的网站源码文件夹,这样可以做到网站源码文件的同步问题,各个EC2之间的延迟相对于S3来说还是比较小的,但仍然有一定延迟,对网站速度影响大约为10%,在网站使用了page cache、CDN后,这个延迟的影响会更小。数据库的同步非常简单,只需要使用AWS RDS服务即可。

  1. 创建用于放文件的NFS服务器
    1. 启动1个EC2实例,系统选择ubuntu 20.04
    2. 查找EC2的IP地址并使用SSH登陆EC2服务器
    3. 使用apt-update, apt-upgrade为操作系统所有软件升级到最新版本
    4. 下载LNMP最新版本,当前为1.8测试版本
      • wget http://soft.vpser.net/lnmp/lnmp1.8beta.tar.gz
    5. 解压缩lnmp1.8beta.tar.gz
      • tar zxf lnmp1.8beta.tar.gz
    6. 进入lnmp1.8目录
      • cd lnmp1.8
    7. 如果使用了LNMPA进行安装(Nginx+apache),为了保证Nginx日志可以正确的获取到访客IP地址,可以提前编辑lnmp.conf配置文件,添加Nginx模块with-http_realip_module
      • vi lnmp.conf
      • Nginx_Modules_Options=''   后添加需要添加的模块
      • Nginx_Modules_Options='--with-http_realip_module'
      • 如果安装的时候没有添加这个模块,或是安装后想添加新的模块,均可以编辑这个文件,然后执行./upgrade.sh nginx
    8. 使用./install.sh lnmpa 安装lnmpa环境
      • 根据自己的需求选择对应的版本来安装
      • php版本建议安装7.4版本,8.0版本部分主题和插手不兼容
      • 为了数据库同步,可以不安装mysql直接使用AWS RDS服务
      • 如果需要节省费用,也可以在NFS上安装mysql,然后wordpress数据库选择nfs上的服务器即可。注:lnmp 中的mysql和ubuntu默认均没有打开mysql的3306端口,需自行开启mysql的远程访问和ubuntu防火墙的3306端口
    9. 等待lnmp安装完成
    10. 修改nginx配置文件  /usr/local/nginx/conf/nginx.conf,添加real_ip_header头,使nginx日志可以正确的记录访客源ip
      • vi /usr/local/nginx/conf/nginx.conf
      • 在access_log off;之后添加
      • real_ip_header X-Forwarded-For;
      • real_ip_recursive on;
      • set_real_ip_from 172.31.0.0/16;
      • (ip为elb网段地址)
      • 保存重启
    11. 安装NFS软件服务器
      • apt-get install nfs-kernel-server
      • 配制文件vi /etc/exports, 添加以下条目
      • /home/wwwroot/wordpress *(rw,sync,no_root_squash)
      • 其中/home/wwwroot/wordpress为共享目录,即源程序所在的目录,rw为可读写操作。注:可以把nfs源程序目录和alb目录设置为一样的,这样方便把nfs服务器也加入到alb里面,不需要再做任何修改。
      • 开启nfs服务 /etc/init.d/nfs-kernel-server start
      • 重启nfs命令为
      • /etc/init.d/nfs-kernel-server restart
      • service nfs-kernel-server restart
  2. 配置第一个ALB服务器
    1. 重复步骤一的1-10的步骤,如果在步骤一中安装了数据库,ALB服务器不需要安装数据库
    2. 安装NFS软件客户端
      1. apt-get install nfs-common
    3. 创建一个准备用于挂载的文件夹 /home/wwwroot/wordpress,文件夹路径最好和EFS上的一致,方便在应急的情况下把EFS服务器直接加入到ALB组里面。
    4. 远程mount
      • mount -t nfs 172.16.1.14:/home/wwwroot/wordpress /home/wwwroot/wordpress
      • ip为nfs服务器ip
      • 第一个/home/wwwroot/wordpress为NFS上共享的路径,第二个/home/wwwroot/wordpress为ALB服务器上的路径
    5. 挂载如果出现问题 mount.nfs: access denied by server while mounting
      • 修改 vi /etc/exports
      • /home/wwwroot/wordpress *(rw,sync,no_root_squash,insecure)
  3. 下载wordpress安装包
    1. 在nfs服务器上获取wordpress最版安装包
      • cd /home/wwwroot
      • wget https://wordpress.org/latest.zip
      • unzip latest.zip
      • 此时解压缩后的文件夹名为latest, 可以把原来的文件夹先删除,再修改latest文件夹名为wordpress,也可以在之前配置NFS时先不创建wordpress文件夹,这里直接修改
      • rm -r wordpress
      • mv latest wordpress
    2. 在alb服务器对应的文件夹里确认可以看到共享文件夹里面的内容
    3. 在nfs服务器上使用lnmp vhost add添加自己的网站配置
      • 所有选顶根据自己的情况来填写
    4. 在alb服务器上重复上一个步骤
  4. 创建负载均衡器
    1. 进行负载均衡器,点击创建负载均衡器,
    2. 选择Application Load Balancer,点击创建
    3. 名称:自定义名称
    4. 模式:面向interent
    5. ip地址类型,根据自己的选择,默认ipv4
    6. 侦听器->负载均衡器协议
      • 根据情况选择,http网站选用http,不需要证书,https网站选用https,之后需要选择证书
    7. 可用区
      • VPC选择自己ec2所在的vpc
      • 可用区可全部选择,也可以只选择ec2所在的可用区
    8. 附加服务,附加服务可以之后再创建,也可以完全不用,和负载均衡是不同的内容
    9. 点击下一步
    10. 如果之前添加了https协议,这一步需要添加证书,
      1. 如果自己有证书,可以选择将证书上传到 ACM (推荐)
      2. 如果没有证书,可以向 ACM 要求一个新的证书,然后再继续
    11. 下一步
    12. 配置安全组,根据自己情况选择现有的安全组,或是创建新的安全组
    13. 配置路由
      • 目标组
        • 目标组:新建目标组
        • 名称:自定义名称
        • 目标类型:实例
        • 协议:根据情况选择是http还是https
      • 运行状况检查
        • 协议:根据情况选择是http还是https
      • 其它默认
    14. 下一步,注册目标
      • 选中alb服务器,点击添加到已注册
    15. 下一步,审核
      • 如果没有问题,审核可直接通过,负载均衡器已经可以开始使用
      • 如果有问题,根据提示修改
  5. DNS解析
    1. 进入负载均衡器,点击刚刚创建的负载均衡器,复制描述里面的DNS 名称
    2. 进入自己的域名管理网站,(万网,Godaddy等),对要使用的域名做cname解析,解析到DNS名称上
  6. 安装wordpress
    1. 在浏览器中输入自己的域名,按正常安装wordpress的步骤来安装wordpress
  7. 创建更多的alb服务器
    1. 对第一台alb服务器的卷做快照
    2. 选择对应的快照,点击操作,创建映像
    3. 名称:自定义名称
    4. 点创建
    5. 启动新的ec2,在启动的过程中选择我的AMI,选择刚刚创建的映像
    6. 启动完全后进入ec2, 使用mount命令挂载efs上文件夹,同第二步,第4个小步骤
    7. 进入负载均衡器,选择目标群组,点击注册目标,把刚刚启动的ec2注册到目标群里面
  8. 为了更简单的增加新的alb服务器,可以在第七步之前设置开机自动挂载
    • vi /etc/rc.local
    • 添加内容
    • !/bin/sh
    • sleep 10
    • mount -t nfs 172.16.1.14:/home/wwwroot/wordpress /home/wwwroot/wordpress
    • sleep 1
    • exit 0
    • 然后执行
    • chmod +x /etc/rc.local
    • ln -s /lib/systemd/system/rc.local.service /etc/systemd/system/
    • 完全后重启,使用命令df -h测试

本站所有测试环境均使用ubuntu+lnmp
所有的测试、优化均基于lnmp进行,大部分方法均是相通的,仅仅因为是lnmp是一键安装,集成了大部分安装脚本,方法配置。
本人对于服务器,网站运行环境是十窍通了九窍,还有一窍不通,一桶不满,半桶晃荡,所以在配置上能偷懒的就偷懒,能省事的就省事,并且这些配置仅仅为自己配置过的记录,所有配置均自己在自己服务器上实现,并不一定通用所有配置环境,并且文章描述也可能不通顺,前言不搭后语,驴唇不对马嘴,请需要参照此文章配置的客观慎思而行,不保证你配置的时候一定可以成功。
此段落本站所有文章均有,作者已完成自我批评,只接受评论区指正,不再接受批评,谢谢。

发表回复