m0_75124167 2025-07-28 16:55 采纳率: 0%
浏览 8

(标签-Ansible)

Ansible角色部署Nginx调度两台Tomcat。Tomcat第一台:192.168.10.10,Tomcat第二台:192.168.10.20 Nginx:192.168.10.30

  • 写回答

5条回答 默认 最新

  • 檀越@新空间 2025-07-28 16:56
    关注

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

    在Ansible中,可以通过角色(Roles)来组织和部署Nginx调度两台Tomcat服务器。以下是详细的部署步骤,包括创建角色、编写任务文件、配置Nginx反向代理等。


    目标

    • 使用 Ansible 角色部署 Nginx
    • 配置 Nginx 作为反向代理,将请求调度到两台 Tomcat 服务器:
      • Tomcat 1: 192.168.10.10
      • Tomcat 2: 192.168.10.20
    • Nginx 服务器为:192.168.10.30

    步骤一:准备环境

    确保以下几点:

    1. 所有主机(包括 Nginx 和 Tomcat)已安装 Ansible。
    2. 所有主机之间可通过 SSH 相互通信。
    3. 在 Ansible 控制机上,配置好 hosts 文件(如 /etc/ansible/hosts),添加如下内容:
    [tomcats]
    192.168.10.10
    192.168.10.20
    
    [nginx]
    192.168.10.30
    

    步骤二:创建 Ansible 角色

    使用 Ansible 的 role 功能,创建一个用于部署 Nginx 的角色。

    1. 创建角色目录结构

    mkdir -p nginx-role/{tasks,templates}
    

    2. 编写 tasks/main.yml

    nginx-role/tasks/main.yml 中定义安装 Nginx 和配置反向代理的任务:

    ---
    - name: Install Nginx
      apt:
        name: nginx
        state: present
        update_cache: yes
      when: ansible_distribution == "Ubuntu"
    
    - name: Copy Nginx configuration template
      template:
        src: nginx.conf.j2
        dest: /etc/nginx/sites-available/default
        owner: root
        group: root
        mode: 0644
      notify: restart nginx
    
    - name: Enable default site
      file:
        src: /etc/nginx/sites-available/default
        dest: /etc/nginx/sites-enabled/default
        state: link
    

    步骤三:编写模板文件

    1. 创建模板文件 nginx-role/templates/nginx.conf.j2

    server {
        listen 80;
        server_name localhost;
    
        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    
        upstream backend {
            least_conn;
            server {{ tomcat1_ip }} weight=3;
            server {{ tomcat2_ip }} weight=1;
        }
    }
    

    注意: 模板中的 {{ tomcat1_ip }}{{ tomcat2_ip }} 是变量,将在 playbook 中传入。


    步骤四:编写 Playbook

    创建一个 playbook 文件,例如 deploy_nginx.yml,并指定角色和变量:

    ---
    - name: Deploy Nginx with load balancing
      hosts: nginx
      roles:
        - role: nginx-role
          vars:
            tomcat1_ip: 192.168.10.10
            tomcat2_ip: 192.168.10.20
    

    步骤五:执行 Playbook

    运行 playbook:

    ansible-playbook deploy_nginx.yml
    

    步骤六:验证部署

    1. 登录到 Nginx 服务器(192.168.10.30)。
    2. 检查 Nginx 是否正常运行:
    systemctl status nginx
    
    1. 访问 http://192.168.10.30,查看是否能访问 Tomcat 应用。

    解决方案总结

    1. 创建 Ansible 角色:用于封装 Nginx 安装和配置逻辑。
    2. 编写任务文件:定义安装 Nginx 和复制配置的步骤。
    3. 编写模板文件:使用 Jinja2 模板动态生成 Nginx 配置。
    4. 编写 Playbook:调用角色并传递变量(Tomcat IP)。
    5. 执行 Playbook:自动化部署 Nginx 并配置负载均衡。

    注意事项

    • 确保所有节点的防火墙允许 HTTP 流量(端口 80)。
    • 如果使用 CentOS,需将 apt 替换为 yum
    • 可根据需要调整 least_connround_robin 负载均衡算法。

    代码示例(修改后的 playbook)

    ---
    - name: Deploy Nginx with load balancing
      hosts: nginx
      roles:
        - role: nginx-role
          vars:
            tomcat1_ip: 192.168.10.10
            tomcat2_ip: 192.168.10.20
    

    如需进一步优化,可以添加健康检查、日志管理、SSL 支持等功能。欢迎继续提问!

    评论

报告相同问题?

问题事件

  • 创建了问题 7月28日