LNMP 高可用平台部署

项目背景

  • 实训项目名称:LNMP 高可用平台部署
  • 时间:2024年10月 - 2024年11月
  • 项目目标:基于 LNMP(Linux、Nginx、MySQL、PHP)架构搭建高可用 Web 服务平台,整合负载均衡、数据库主从复制及全链路监控,确保系统高可用性与稳定性。
  • 核心指标
    • Nginx + KeepAlived 实现双机热备,VIP 漂移时间 < 3 秒。
    • MySQL 主从复制(半同步模式),数据可靠性 RPO < 1 秒。
    • Zabbix 监控系统实时采集性能指标。
    • Shell 脚本实现一键部署与日志轮转等自动化运维。
  • 操作系统:Debian 12

技术栈

  • 操作系统:Debian 12
  • Web 服务器:Nginx
  • 数据库:MySQL(半同步主从复制)
  • 后端语言:PHP
  • 高可用组件:KeepAlived
  • 监控工具:Zabbix
  • 自动化脚本:Shell

项目架构

  1. Nginx + KeepAlived:Nginx 实现负载均衡,KeepAlived 提供双机热备与 VIP(虚拟 IP)漂移。
  2. MySQL 主从复制:配置半同步复制,确保主从数据一致性。
  3. Zabbix 监控:监控服务器、数据库及应用性能指标,设置告警规则。
  4. Shell 自动化:实现一键部署、日志轮转及服务状态检查。

部署步骤

1. 环境准备

1.1 服务器准备

  • 准备至少两台 Debian 12 服务器(主节点与备节点),推荐配置:
    • CPU:2 核
    • 内存:4 GB
    • 磁盘:50 GB SSD
  • 网络要求:内网互联,固定 IP 地址,开放必要端口(80、443、3306、10050 等)。
  • 示例 IP 配置:
    • 主节点:192.168.1.101
    • 备节点:192.168.1.102
    • 虚拟 IP(VIP):192.168.1.100

1.2 安装基础依赖

在所有服务器上执行:

apt update -y
apt install -y vim wget net-tools build-essential

2. 安装 LNMP 环境

2.1 安装 Nginx

  1. 安装 Nginx:
    apt install -y nginx
    systemctl enable nginx
    systemctl start nginx
    
  2. 配置 Nginx 负载均衡(主节点,/etc/nginx/sites-available/loadbalance):
    upstream backend {
        server 192.168.1.101:80; # 后端服务器1
        server 192.168.1.102:80; # 后端服务器2
    }
    server {
        listen 80;
        server_name your_domain.com;
        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
    
  3. 启用配置并重启 Nginx:
    ln -s /etc/nginx/sites-available/loadbalance /etc/nginx/sites-enabled/
    nginx -t
    systemctl restart nginx
    

2.2 安装 MySQL

  1. 安装 MySQL:
    apt install -y mysql-server
    systemctl enable mysql
    systemctl start mysql
    
  2. 配置 MySQL 主从复制:
    • 主节点(/etc/mysql/mysql.conf.d/mysqld.cnf):
      [mysqld]
      server-id=1
      log-bin=mysql-bin
      binlog_format=ROW
      gtid_mode=ON
      enforce_gtid_consistency=ON
      
    • 从节点(/etc/mysql/mysql.conf.d/mysqld.cnf):
      [mysqld]
      server-id=2
      read_only=ON
      relay-log=relay-bin
      
    • 重启 MySQL:
      systemctl restart mysql
      
    • 主节点创建复制用户:
      mysql -uroot -p
      GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%' IDENTIFIED BY 'password';
      FLUSH PRIVILEGES;
      
    • 从节点配置主从同步:
      CHANGE MASTER TO
          MASTER_HOST='192.168.1.101',
          MASTER_USER='repl',
          MASTER_PASSWORD='password',
          MASTER_AUTO_POSITION=1;
      START SLAVE;
      
    • 验证主从状态:
      SHOW SLAVE STATUS\G
      
  3. 启用半同步复制:
    • 安装半同步插件(主从节点均需执行):
      INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
      INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
      
    • 主节点配置:
      SET GLOBAL rpl_semi_sync_master_enabled = 1;
      SET GLOBAL rpl_semi_sync_master_timeout = 1000; # 1秒超时
      
    • 从节点配置:
      SET GLOBAL rpl_semi_sync_slave_enabled = 1;
      
    • 重启从节点 slave:
      STOP SLAVE; START SLAVE;
      

2.3 安装 PHP

  1. 安装 PHP 及必要扩展:
    apt install -y php php-fpm php-mysql
    systemctl enable php8.1-fpm
    systemctl start php8.1-fpm
    
  2. 配置 Nginx 支持 PHP(/etc/nginx/sites-available/php):
    server {
        listen 80;
        server_name your_domain.com;
        root /var/www/html;
        index index.php index.html;
        location ~ \.php$ {
            fastcgi_pass unix:/run/php/php8.1-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
    }
    
  3. 启用配置并重启 Nginx:
    ln -s /etc/nginx/sites-available/php /etc/nginx/sites-enabled/
    nginx -t
    systemctl restart nginx
    
  4. 测试 PHP(/var/www/html/info.php):
    <?php phpinfo(); ?>
    

3. 配置高可用(KeepAlived)

  1. 安装 KeepAlived:
    apt install -y keepalived
    systemctl enable keepalived
    
  2. 配置主节点(/etc/keepalived/keepalived.conf):
    vrrp_instance VI_1 {
        state MASTER
        interface eth0
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 123456
        }
        virtual_ipaddress {
            192.168.1.100
        }
    }
    
  3. 配置备节点(priority 改为 50,其余相同)。
  4. 启动 KeepAlived:
    systemctl start keepalived
    
  5. 验证 VIP 漂移:
    ip addr show
    

4. 部署 Zabbix 监控

  1. 安装 Zabbix 服务器(主节点):
    wget https://repo.zabbix.com/zabbix/6.0/debian/pool/main/z/zabbix-release/zabbix-release_6.0-4+debian12_all.deb
    dpkg -i zabbix-release_6.0-4+debian12_all.deb
    apt update
    apt install -y zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-agent
    systemctl enable zabbix-server zabbix-agent apache2
    systemctl start zabbix-server zabbix-agent apache2
    
  2. 配置 Zabbix 数据库:
    mysql -uroot -p
    CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
    GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost' IDENTIFIED BY 'zabbix_password';
    
  3. 导入初始数据:
    zcat /usr/share/zabbix-server-mysql/schema.sql.gz | mysql -uzabbix -p zabbix
    zcat /usr/share/zabbix-server-mysql/images.sql.gz | mysql -uzabbix -p zabbix
    zcat /usr/share/zabbix-server-mysql/data.sql.gz | mysql -uzabbix -p zabbix
    
  4. 配置 Zabbix 服务器(/etc/zabbix/zabbix_server.conf):
    DBHost=localhost
    DBName=zabbix
    DBUser=zabbix
    DBPassword=zabbix_password
    
  5. 访问 Zabbix Web 界面(http://your_server_ip/zabbix),完成初始化配置,默认用户:Admin,密码:zabbix。
  6. 配置监控项:
    • 添加主机(服务器、MySQL、Nginx、PHP-FPM)。
    • 配置触发器(如 CPU 使用率 > 80% 告警)。

5. Shell 自动化脚本

5.1 一键部署脚本

创建脚本(/usr/local/bin/deploy_lnmp.sh):

#!/bin/bash
echo "Starting LNMP deployment..."
apt update -y
apt install -y nginx php php-fpm php-mysql mysql-server keepalived
systemctl enable nginx php8.1-fpm mysql keepalived
systemctl start nginx php8.1-fpm mysql keepalived
echo "LNMP deployment completed!"

授权并执行:

chmod +x /usr/local/bin/deploy_lnmp.sh
./usr/local/bin/deploy_lnmp.sh

5.2 日志轮转脚本

创建脚本(/usr/local/bin/logrotate.sh):

#!/bin/bash
LOG_DIR="/var/log/nginx"
ARCHIVE_DIR="/var/log/nginx/archive"
MAX_SIZE=100M

mkdir -p $ARCHIVE_DIR
find $LOG_DIR -type f -name "*.log" -size +$MAX_SIZE -exec mv {} $ARCHIVE_DIR/$(date +%F)_{} \;
systemctl reload nginx

配置定时任务(crontab -e):

0 0 * * * /usr/local/bin/logrotate.sh

6. 测试与验证

  1. 高可用性测试
    • 停止主节点 Nginx,验证 VIP 是否漂移至备节点(ip addr show)。
    • 时间应 < 3 秒。
  2. MySQL 主从复制
    • 在主节点插入数据,检查从节点是否同步(RPO < 1 秒)。
  3. Zabbix 监控
    • 检查仪表盘是否显示服务器、MySQL、Nginx 性能指标。
    • 模拟高负载,验证告警触发。
  4. Shell 脚本
    • 执行一键部署脚本,验证服务状态。
    • 检查日志轮转,确认旧日志归档。

注意事项(若有防火墙)

  • 确保防火墙(如 ufw)开放必要端口:
    ufw allow 80
    ufw allow 443
    ufw allow 3306
    ufw allow 10050
    
  • 定期备份 MySQL 数据和 Nginx 配置。
  • 监控 Zabbix 告警,及时处理异常。
  • 根据实际需求调整 Nginx 和 PHP 配置(如 worker_processes、max_connections)。

总结

实现了双机热备(VIP 漂移 < 3 秒)、MySQL 半同步复制(RPO < 1 秒)、Zabbix 全链路监控及 Shell 自动化运维。该平台可保障 Web 应用持续稳定运行,适用于中小型生产环境。

梦葉樱 all right reserved,powered by Gitbook该文件最后修改时间: 2025-07-31 08:08:02

results matching ""

    No results matching ""