Keepalive+LVS+Nginx+NFS 高可用集群搭建保姆级教程(全命令解析版)

06-01 1379阅读

一、项目架构解析

本方案通过整合多款主流技术构建高可用Web服务集群:

  • LVS:实现四层负载均衡,调度请求到后端Nginx服务器

  • Keepalived:为LVS提供高可用保障,防止单点故障

  • Nginx:作为Web服务器处理静态请求

  • NFS:统一存储网站文件,保证多节点数据一致性

    Keepalive+LVS+Nginx+NFS 高可用集群搭建保姆级教程(全命令解析版)


    二、主机规划清单

    角色系统安装软件IP地址特殊说明
    ClientRedHat 9.5192.168.220.115测试客户端
    LVS-MasterRedHat 9.5ipvsadm + keepalived192.168.220.116VIP:192.168.220.100
    LVS-BackupRedHat 9.5ipvsadm + keepalived192.168.220.117VIP:192.168.220.100
    RS1RedHat 9.5nginx + nfs-utils192.168.220.118挂载NFS存储
    RS2RedHat 9.5nginx + nfs-utils192.168.220.119挂载NFS存储
    NFS-ServerRedHat 9.5nfs-utils192.168.220.120共享存储服务器

    三、基础环境准备(所有节点)

    1. 关闭防火墙与SELinux

    # 停止防火墙服务
    systemctl stop firewalld
    # 禁用防火墙开机启动
    systemctl disable firewalld
    # 临时关闭SELinux(立即生效)
    setenforce 0
    # 永久关闭SELinux(需重启生效)
    sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

    命令解析:

    • systemctl stop firewalld:立即停止防火墙服务

    • systemctl disable firewalld:禁止防火墙开机自启

    • setenforce 0:将SELinux设置为宽松模式(临时生效)

    • sed命令:修改配置文件永久禁用SELinux

      2. 配置本地YUM仓库(RedHat系统)

      # 创建仓库配置文件
      vim /etc/yum.repos.d/dnf.repo
      # 输入以下内容(注意修改前备份原仓库):
      [BaseOS]
      name=BaseOS
      baseurl=file:///mnt/BaseOS  # 本地路径需要三个斜杠
      gpgcheck=0                  # 关闭签名验证(仅限实验环境)
      [AppStream]
      name=AppStream
      baseurl=file:///mnt/AppStream
      gpgcheck=0
      # 挂载系统ISO镜像(需提前加载ISO文件)
      mkdir -p /mnt
      mount /dev/sr0 /mnt
      # 设置开机自动挂载
      echo "/dev/sr0  /mnt  iso9660  defaults  0 0" >> /etc/fstab
      mount -a
      # 验证仓库可用性
      dnf clean all
      dnf makecache
      dnf repolist

      关键步骤说明:

      • /dev/sr0:光驱设备文件路径(虚拟机环境)

      • iso9660:光盘文件系统类型

      • mount -a:重新加载所有挂载配置

      • gpgcheck=0:关闭安全验证(生产环境不建议)


        四、NFS服务器配置

        1. 基础配置

        # 设置主机名(立即生效)
        hostnamectl hostname nfs-server
        # 配置静态IP地址(示例为NAT网络)
        nmcli c m ens160 ipv4.method manual ipv4.addresses 192.168.220.120/24 ipv4.gateway 192.168.220.2 ipv4.dns 223.5.5.5 connection.autoconnect yes
        # 应用网络配置
        nmcli con up ens160

        参数说明:

        • hostnamectl hostname:永久修改主机名

        • nmcli c m:修改网络连接配置

          • ipv4.addresses:设置IPv4地址和掩码

          • ipv4.gateway:设置默认网关

          • ipv4.dns:设置DNS服务器

          • nmcli c up:激活网络连接

            2. 安装NFS服务

            # 通过本地仓库安装
            dnf install -y nfs-utils
            # 查看安装结果
            rpm -qa | grep nfs-utils

            命令解析:

            • dnf:RedHat系列的包管理工具

            • -y:自动确认安装

              3. 创建共享目录

              # 创建共享目录
              mkdir -p /nfs/share
              # 进入目录创建测试文件
              cd /nfs/share
              echo "RS1 Default Page" > index1.html
              echo "RS2 Default Page" > index2.html

              参数说明:

              • mkdir -p:递归创建目录,自动创建父目录

              • >:输出重定向,创建文件并写入内容

                4. 配置共享权限

                vim /etc/exports

                添加以下内容:

                /nfs/share 192.168.220.118(rw,sync,no_root_squash) 192.168.220.119(rw,sync,no_root_squash)

                配置项说明:

                • /nfs/share:共享目录路径

                • 192.168.220.118:允许访问的客户端IP

                • rw:读写权限

                • sync:同步写入模式

                • no_root_squash:允许root用户保持权限

                  5. 启动NFS服务

                  # 设置开机自启并立即启动
                  systemctl enable --now nfs-server
                  # 查看共享配置
                  exportfs -v
                  firewall-cmd --add-service=nfs --permanent  # 若开启防火墙需执行
                  firewall-cmd --reload

                  输出示例:

                  /nfs/share  192.168.220.118(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
                  /nfs/share  192.168.220.119(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)

                  五、RS服务器配置(RS1/RS2相同操作)

                  1. 基础配置(以RS1为例)

                  # 设置主机名
                  hostnamectl hostname rs1
                  # 配置静态IP
                  nmcli c m ens160 ipv4.method manual ipv4.addresses 192.168.220.118/24 ipv4.gateway 192.168.220.2 ipv4.dns 223.5.5.5 connection.autoconnect yes
                  # 应用网络配置
                  nmcli con up ens160

                  2. 安装必要软件

                  dnf install -y nginx nfs-utils

                  软件说明:

                  • nginx:Web服务器

                  • nfs-utils:NFS客户端工具

                    3. 配置NFS挂载

                    # 创建挂载点目录
                    mkdir -p /usr/share/nginx/html
                    # 临时挂载NFS共享
                    mount -t nfs 192.168.220.120:/nfs/share /usr/share/nginx/html
                    # 永久挂载配置
                    echo "192.168.220.120:/nfs/share  /usr/share/nginx/html  nfs  defaults  0 0" >> /etc/fstab
                    # 验证挂载配置
                    mount -a

                    命令解析:

                    • mount -t nfs:指定挂载NFS类型

                    • /etc/fstab配置格式:

                      设备路径   挂载点   文件系统类型   挂载选项   dump备份标记  fsck检查顺序
                    • mount -a:重新挂载所有fstab配置

                      4. Nginx配置(RS1)

                      vim /etc/nginx/conf.d/rs.conf

                      添加以下内容:

                      server {
                          listen       80;
                          server_name  _;
                          
                          location / {
                              root   /usr/share/nginx/html;
                              index  index1.html;  # RS2此处改为index2.html
                          }
                      }
                      # 验证配置
                      nginx -t && systemctl restart nginx

                      配置说明:

                      • listen 80:监听80端口

                      • server_name _:匹配所有域名

                      • root:网站根目录路径

                      • index:默认访问文件

                        验证并重启服务:

                        nginx -t              # 检查配置语法
                        systemctl restart nginx  # 重启服务

                        六、LVS服务器配置(双机热备)

                        1. 基础配置(Master/Backup相同)

                        # 设置主机名(Master节点)
                        hostnamectl hostname lvs-master   # Backup节点设为lvs-backup
                        # 安装必要软件
                        dnf install -y ipvsadm keepalived

                        软件说明:

                        • ipvsadm:LVS管理工具

                        • keepalived:高可用解决方案

                          2. Keepalived配置(Master节点)

                          vim /etc/keepalived/keepalived.conf

                          完整配置:

                          global_defs {
                             router_id LVS_MASTER  # 唯一标识符,Backup节点改为LVS_BACKUP
                          }
                          vrrp_instance VI_1 {
                              state MASTER         # 主节点标识,Backup节点改为BACKUP
                              interface ens160     # 监听网卡
                              virtual_router_id 51 # 虚拟路由ID(集群内必须一致)
                              priority 100         # 优先级(数值越大优先级越高),Backup节点设为90
                              advert_int 1         # 心跳间隔(秒)
                              authentication {
                                  auth_type PASS   # 认证类型
                                  auth_pass 1111    # 认证密码
                              }
                              virtual_ipaddress {
                                  192.168.220.100/24 dev ens160  # 虚拟IP配置
                              }
                          }
                          virtual_server 192.168.220.100 80 {
                              delay_loop 6         # 健康检查间隔
                              lb_algo wrr          # 加权轮询算法
                              lb_kind DR           # 直接路由模式
                              persistence_timeout 50 # 会话保持时间
                              protocol TCP         # 使用TCP协议
                              real_server 192.168.220.118 80 {
                                  weight 1         # 权重值
                                  TCP_CHECK {
                                      connect_timeout 3  # 连接超时时间
                                      nb_get_retry 3     # 重试次数
                                      delay_before_retry 3 # 重试间隔
                                  }
                              }
                              real_server 192.168.220.119 80 {
                                  weight 1
                                  TCP_CHECK {
                                      connect_timeout 3
                                      nb_get_retry 3
                                      delay_before_retry 3
                                  }
                              }
                          }

                          3. Backup节点配置

                          # 修改以下参数:
                          state BACKUP      # 备份节点标识
                          priority 90       # 优先级低于主节点
                          router_id LVS_BACKUP # 唯一标识符

                          4. 启动服务

                          systemctl enable --now keepalived
                          # 查看负载规则
                          ipvsadm -Ln

                          输出示例:

                          IP Virtual Server version 1.2.1 (size=4096)
                          Prot LocalAddress:Port Scheduler Flags
                            -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
                          TCP  192.168.220.100:80 wrr persistent 50
                            -> 192.168.220.118:80          Route   1      0          0         
                            -> 192.168.220.119:80          Route   1      0          0  

                          七、全链路测试与排错

                          1. 客户端访问测试

                          # 连续访问测试负载均衡
                          while true; do curl 192.168.220.100; sleep 1; done

                          预期结果:

                          RS1 Default Page
                          RS2 Default Page
                          RS1 Default Page
                          RS2 Default Page
                          ...

                          2. 故障转移测试

                          # 在主节点停止keepalived
                          systemctl stop keepalived
                          # 在备节点查看VIP(应自动接管)
                          ip addr show ens160 | grep '192.168.220.100'

                          3. NFS挂载验证

                          # 在RS节点查看挂载
                          df -hT | grep nfs
                          # 测试文件写入
                          touch /usr/share/nginx/html/test_file
                          ls -l /nfs/share  # 在NFS服务器查看

                           


                          八、深度技术解析

                          1. LVS工作模式DR原理

                          • 数据流向:

                            1. 客户端请求到达LVS

                            2. LVS修改目标MAC地址转发到RS

                            3. RS直接响应客户端(不经过LVS)

                          • ARP抑制:

                            # RS节点需要配置ARP隐藏
                            echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
                            echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
                            echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
                            echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

                            2. Keepalived健康检查机制

                            • 检查类型:

                              • TCP_CHECK:端口连通性检查

                              • HTTP_GET:发送HTTP请求检查

                              • SSL_GET:HTTPS健康检查

                              • 故障切换流程:

                                1. Master节点停止发送VRRP通告

                                2. Backup节点等待advert_int*3时间

                                3. 抢占模式切换为Master


                                九、排错指南

                                场景一:YUM仓库不可用
                                # 检查项:
                                ls /mnt/BaseOS/Packages             # 确认有RPM文件
                                cat /etc/yum.repos.d/dnf.repo       # 检查baseurl路径
                                df -hT | grep sr0                   # 验证挂载状态
                                # 常见修复:
                                umount /mnt && mount /dev/sr0 /mnt  # 重新挂载
                                dnf clean all && dnf makecache      # 重建缓存
                                场景二:NFS挂载失败
                                # 检查项:
                                showmount -e 192.168.220.120         # 查看共享列表
                                rpcinfo -p 192.168.220.120           # 验证RPC服务
                                telnet 192.168.220.120 2049          # 测试端口连通性
                                # 修复步骤:
                                systemctl restart nfs-server        # NFS服务端
                                exportfs -arv                       # 重载共享配置
                                umount -lf /usr/share/nginx/html    # 强制卸载后重试
                                场景三:VIP无法访问
                                # 诊断命令:
                                ip addr show ens160 | grep 192.168.220.100  # 检查VIP存在
                                journalctl -u keepalived -f         # 查看实时日志
                                tcpdump -i ens160 vrrp              # 抓包分析VRRP通信
                                # 处理方案:
                                systemctl restart keepalived        # 重启服务
                                firewall-cmd --list-all             # 检查防火墙规则
                                场景四:负载不均衡
                                # 分析工具:
                                ipvsadm -Ln --stats                 # 查看连接分布
                                watch -n 1 ipvsadm -lnc             # 实时监控连接状态
                                # 调整策略:
                                # 修改keepalived配置中的lb_algo参数
                                # 可选算法:rr(轮询), wrr(加权轮询), lc(最少连接)等

                                通过本教程的详细解析,您可以深入理解每个配置步骤的技术原理,快速搭建稳定可靠的高可用集群。建议在生产环境中结合监控系统(如Prometheus)实现自动化运维管理。

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码