lixiaohao_li 2025-07-24 14:47 采纳率: 0%
浏览 6

5台虚拟机 两台nginx 两个tomcat 一个nfs keepalived和调度器合在一起做高可用 dns加在vip上 用IP加端口进行访问 如果一台nginx损坏 可以适用另一台备用

5台虚拟机 两台nginx 两个tomcat 一个nfs keepalived和调度器合在一起做高可用 dns加在vip上 用IP加端口进行访问 如果一台nginx损坏 可以适用另一台备用

  • 写回答

4条回答 默认 最新

  • 檀越@新空间 2025-07-24 14:48
    关注

    下午好🌅🌅🌅
    本答案参考通义千问

    根据你的描述,这是一个典型的高可用(HA)架构设计,使用 Keepalived 实现高可用负载均衡,Nginx 作为反向代理和负载均衡器,Tomcat 作为应用服务器,NFS 提供共享存储。以下是详细的架构说明及部署方案。


    ✅ 架构概述

    • 5台虚拟机

      • 2台 Nginx(主备):用于负载均衡和反向代理
      • 2台 Tomcat:应用服务器,提供 Web 应用服务
      • 1台 NFS:提供共享存储,用于 Tomcat 的 session 共享或静态资源同步
    • Keepalived 和调度器合在一起

      • Keepalived 负责实现 VIP(Virtual IP)的高可用切换
      • 调度器即为 Nginx,通过 Keepalived 实现主从切换
    • DNS 加在 VIP 上

      • DNS 解析指向 VIP 地址,客户端通过 VIP 访问服务
      • 使用 IP + 端口 进行访问(如 http://VIP:80
    • 故障切换机制

      • 如果一台 Nginx 损坏,另一台 Nginx 会自动接管流量,确保服务不中断

    🧩 部署步骤详解

    1. 准备环境

    • 虚拟机分配如下: | 虚拟机名称 | 角色 | IP地址 | 备注 | |------------|------|--------|------| | VM1 | Nginx 主 | 192.168.1.10 | Keepalived + Nginx | | VM2 | Nginx 备 | 192.168.1.11 | Keepalived + Nginx | | VM3 | Tomcat1 | 192.168.1.12 | 应用服务器 | | VM4 | Tomcat2 | 192.168.1.13 | 应用服务器 | | VM5 | NFS | 192.168.1.14 | 共享存储 |

    2. 安装并配置 Keepalived

    安装 Keepalived

    sudo apt update
    sudo apt install keepalived -y
    

    配置 Keepalived(VM1 和 VM2)

    在 VM1(主节点)中配置 /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
        }
    }
    
    在 VM2(备节点)中配置 /etc/keepalived/keepalived.conf
    vrrp_instance VI_1 {
        state BACKUP
        interface eth0
        virtual_router_id 51
        priority 90
        advert_int 1
    
        authentication {
            auth_type PASS
            auth_pass 123456
        }
    
        virtual_ipaddress {
            192.168.1.100
        }
    }
    

    注意: virtual_ipaddress 是 VIP,所有客户端通过这个 IP 访问服务。


    3. 配置 Nginx(主备)

    安装 Nginx

    sudo apt install nginx -y
    

    配置 Nginx 反向代理到 Tomcat(在 VM1 和 VM2 中配置相同)

    编辑 /etc/nginx/sites-available/default/etc/nginx/conf.d/upstream.conf

    upstream backend {
        server 192.168.1.12:8080;
        server 192.168.1.13:8080;
    }
    
    server {
        listen 80;
    
        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
    

    重点: Nginx 通过 upstream 指向两个 Tomcat 实例,实现负载均衡。


    4. 配置 Tomcat(VM3 和 VM4)

    • 安装 Java 和 Tomcat(以 Ubuntu 为例):
    sudo apt install openjdk-8-jdk -y
    wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.73/bin/apache-tomcat-9.0.73.tar.gz
    tar -zxvf apache-tomcat-9.0.73.tar.gz -C /opt/
    
    • 修改 conf/server.xml 中的 Connector 端口:
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    
    • 启动 Tomcat:
    /opt/apache-tomcat-9.0.73/bin/startup.sh
    

    注意: 确保防火墙允许 8080 端口访问。


    5. 配置 NFS 共享存储(VM5)

    安装 NFS 服务

    sudo apt install nfs-kernel-server -y
    

    配置 NFS 共享目录

    编辑 /etc/exports

    /var/www/html 192.168.1.0/24(rw,sync,no_subtree_check)
    

    重启 NFS 服务

    sudo systemctl restart nfs-kernel-server
    

    在 Tomcat 节点挂载 NFS(VM3 和 VM4)

    sudo mount 192.168.1.14:/var/www/html /var/www/html
    

    注意: 可将挂载命令写入 /etc/fstab 实现开机自动挂载。


    6. DNS 配置(可选)

    如果你希望使用域名访问,可以将域名解析到 VIP(192.168.1.100):

    example.com A 192.168.1.100
    

    客户端访问方式为:http://example.com:80http://192.168.1.100:80


    ✅ 故障切换测试

    • 停止 VM1 的 Nginx 和 Keepalived:

      sudo systemctl stop nginx
      sudo systemctl stop keepalived
      
    • 查看 VM2 是否接管 VIP:

      ip a show eth0
      
    • 如果看到 192.168.1.100 则表示切换成功。


    ✅ 总结

    📌 关键点总结:

    1. Keepalived 实现 VIP 高可用

      • 主节点(VM1)和备节点(VM2)通过 VRRP 协议实现故障切换
      • VIP 为 192.168.1.100
    2. Nginx 负载均衡 Tomcat

      • 通过 upstream 配置将请求分发到两个 Tomcat 实例
      • 支持负载均衡和故障转移
    3. NFS 提供共享存储

      • Tomcat 通过 NFS 实现 session 共享或静态资源同步
    4. DNS 解析到 VIP

      • 客户端通过域名或 IP + 端口访问服务
      • 确保服务连续性

    ✅ 附录:完整配置文件示例

    Keepalived 配置(主节点)

    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
        }
    }
    

    Nginx 配置

    upstream backend {
        server 192.168.1.12:8080;
        server 192.168.1.13:8080;
    }
    
    server {
        listen 80;
    
        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
    

    如有需要,我可以为你生成完整的脚本或一键部署方案。欢迎继续提问!

    评论

报告相同问题?

问题事件

  • 创建了问题 7月24日