
1. 为什么需要分布式LAMP架构传统的单机LAMP部署就像把所有鸡蛋放在一个篮子里——Web服务、数据库和PHP处理都挤在同一台服务器上。我在实际项目中发现当访问量超过500QPS时这种架构的瓶颈就会非常明显数据库查询拖慢页面渲染、PHP进程耗尽CPU资源、Apache线程阻塞导致响应延迟。分布式部署的核心思想是各司其职。通过将Apache、MySQL、PHP分别部署到独立服务器就像组建了一支专业团队前端服务器专注处理HTTP请求和静态资源数据库服务器优化磁盘IO和查询性能应用服务器专攻PHP脚本执行实测下来三台2核4G的CentOS8机器组成的分布式LAMP集群可以轻松应对2000 QPS的访问压力。更重要的是当某个组件需要升级或出现故障时不会影响其他服务——比如MySQL崩溃不会导致网站前端直接500错误。2. 环境准备与基础配置2.1 系统环境规划建议使用三台干净安装的CentOS8服务器我的测试环境配置如下主机名IP地址部署服务推荐配置web01192.168.1.10Apache2核4Gdb01192.168.1.11MySQL4核8GSSDapp01192.168.1.12PHP-FPM2核4G注意所有节点需要配置hosts解析确保能通过主机名互相访问2.2 安全基线配置先完成这些基础操作所有节点都需要执行# 关闭SELinux生产环境建议配置策略而非直接关闭 setenforce 0 sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config # 关闭防火墙生产环境应开放必要端口 systemctl stop firewalld systemctl disable firewalld # 更新系统 yum update -y reboot3. Apache独立部署实战3.1 编译安装优化版Apache在web01节点执行# 安装编译依赖 yum install -y gcc make openssl-devel pcre-devel expat-devel libtool # 下载并解压源码包 cd /opt wget http://archive.apache.org/dist/apr/apr-1.7.0.tar.gz wget http://archive.apache.org/dist/apr/apr-util-1.6.1.tar.gz wget https://downloads.apache.org/httpd/httpd-2.4.54.tar.gz tar xzf apr-1.7.0.tar.gz tar xzf apr-util-1.6.1.tar.gz tar xzf httpd-2.4.54.tar.gz # 编译安装APR cd apr-1.7.0 ./configure --prefix/usr/local/apr make make install # 编译安装APR-util cd ../apr-util-1.6.1 ./configure --prefix/usr/local/apr-util --with-apr/usr/local/apr make make install # 编译安装Apache cd ../httpd-2.4.54 ./configure \ --prefix/usr/local/apache \ --enable-so \ --enable-rewrite \ --with-mpmevent \ --with-apr/usr/local/apr \ --with-apr-util/usr/local/apr-util make -j 4 make install关键参数说明--with-mpmevent使用事件驱动模型比prefork模式更节省内存-j 4启用多核编译加速3.2 配置系统服务创建systemd服务文件cat /etc/systemd/system/httpd.service EOF [Unit] DescriptionApache HTTP Server Afternetwork.target [Service] Typeforking ExecStart/usr/local/apache/bin/apachectl start ExecStop/usr/local/apache/bin/apachectl stop ExecReload/usr/local/apache/bin/apachectl graceful PrivateTmptrue [Install] WantedBymulti-user.target EOF # 启动服务 systemctl daemon-reload systemctl enable --now httpd4. MySQL独立部署与优化4.1 二进制包安装MySQL在db01节点执行# 创建mysql用户 useradd -r -s /sbin/nologin mysql # 下载并解压二进制包 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz tar xzf mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz -C /usr/local/ cd /usr/local mv mysql-5.7.38-linux-glibc2.12-x86_64 mysql # 初始化数据库 mkdir -p /data/mysql chown -R mysql:mysql /data/mysql /usr/local/mysql/bin/mysqld --initialize --usermysql --datadir/data/mysql4.2 关键配置优化编辑/etc/my.cnf[mysqld] datadir/data/mysql socket/var/lib/mysql/mysql.sock log-error/var/log/mysqld.log pid-file/var/run/mysqld/mysqld.pid # 性能优化参数 innodb_buffer_pool_size4G innodb_log_file_size1G max_connections500 query_cache_size0启动服务cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld systemctl enable mysqld service mysqld start5. PHP-FPM独立部署5.1 安装PHP7.4在app01节点执行# 添加Remi仓库 yum install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm yum module reset php yum module enable php:remi-7.4 # 安装PHP及常用扩展 yum install -y php php-fpm php-mysqlnd php-opcache php-gd php-mbstring # 配置PHP-FPM sed -i s/;listen 127.0.0.1:9000/listen 192.168.1.12:9000/ /etc/php-fpm.d/www.conf systemctl enable --now php-fpm5.2 性能调优参数修改/etc/php.iniopcache.enable1 opcache.memory_consumption128 opcache.max_accelerated_files4000 opcache.revalidate_freq60 pm dynamic pm.max_children 50 pm.start_servers 5 pm.min_spare_servers 2 pm.max_spare_servers 106. 分布式架构联调6.1 Apache连接PHP-FPM在web01上配置虚拟主机VirtualHost *:80 ServerName yourdomain.com DocumentRoot /var/www/html ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.1.12:9000/var/www/html/$1 Directory /var/www/html Options Indexes FollowSymLinks AllowOverride All Require all granted /Directory /VirtualHost6.2 PHP连接MySQL在app01上创建测试脚本/var/www/html/db_test.php?php $db new mysqli(192.168.1.11, root, yourpassword, mysql); if ($db-connect_error) { die(Connection failed: . $db-connect_error); } echo MySQL Server version: . $db-server_version; $db-close(); ?7. 性能压测与优化7.1 基准测试工具安装ab进行压力测试yum install -y httpd-tools ab -n 10000 -c 100 http://yourdomain.com/7.2 常见优化手段Apache调优# 修改/usr/local/apache/conf/httpd.conf KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5 # 使用mod_deflate压缩 AddOutputFilterByType DEFLATE text/html text/plain text/xmlMySQL连接池// 使用持久连接 $db new mysqli(p:192.168.1.11, user, pass, db);OPcache监控php -r print_r(opcache_get_status());8. 高可用方案扩展8.1 负载均衡配置使用Nginx作为前端负载均衡upstream backend { server 192.168.1.10:80; server 192.168.1.13:80; # 第二台Apache } server { listen 80; location / { proxy_pass http://backend; } }8.2 数据库主从复制在db02上配置MySQL从库CHANGE MASTER TO MASTER_HOST192.168.1.11, MASTER_USERrepl, MASTER_PASSWORDpassword, MASTER_LOG_FILEmysql-bin.000001, MASTER_LOG_POS107; START SLAVE;9. 监控与维护9.1 基础监控项关键监控指标Apache活跃连接数、请求处理时间MySQLQPS、连接数、慢查询PHP-FPM活跃进程数、请求耗时9.2 日志分析技巧使用goaccess分析Apache日志yum install -y goaccess goaccess /usr/local/apache/logs/access_log --log-formatCOMBINED对于MySQL慢查询日志# 启用慢查询日志 slow_query_log 1 slow_query_log_file /var/log/mysql-slow.log long_query_time 1