【问题标题】:Manage pairs of servers with Ansible使用 Ansible 管理服务器对
【发布时间】:2016-02-29 16:49:16
【问题描述】:

我的设置包含“服务器对”,因为我的服务的每个“实例”都由(通常)不同主机上的两台服务器(例如数据库和 Web)组成。也就是说,我没有许多 Web 服务器与之通信的单个数据库服务器——相反,每个 Web 服务器都与它自己的数据库服务器通信。我想管理多个这样的对,但我不知道使用 Ansible 对这些对进行建模的最佳方法。

Ansible 中主要的宿主组织工具似乎是组和角色。但是,这些仅将相同类型的主机组合在一起。例如,我可以使用它在我的数据库和 Web 服务器上设置必要的软件。但是,我认为我不能使用组或角色来告诉每台 Web 服务器只使用其中一个数据库服务器。

使用 Ansible 组对一对服务器建模也没有什么意义,因为我无法区分这些组中的两个不同角色。

虽然我的设置由服务器对组成,但我也有兴趣为n-to-m 主机关系的多个实例建模(比如n 数据库服务器和m Web 服务器)。

【问题讨论】:

    标签: ansible


    【解决方案1】:

    您可以只使用 ansible 变量来提供必要的链接。例如,在您的库存中:

    [webservers]
    web0 dbserver=db0
    web1 dbserver=db1
    
    [dbservers]
    db0
    db1
    

    现在,在您的网络服务器上运行任务时,您可以简单地参考dbserver 变量来找到合适的服务器。假设采用标准命名方案,您可以通过使用 set_fact 模块自动完成此操作。

    更新

    您不需要指定两个方向的链接;你可以使用 像这样找到应该有权访问的网络服务器 给定的数据库服务器:

    - name: allow access to webserver
      command: >
        iptables -A INPUT
        -s {{hostvars[item].ansible_default_ipv4.address}}
      with_items: "{{groups.webservers}}"
      when: "hostvars[item].dbserver == {{inventory_hostname}}"
    

    【讨论】:

    • 这可行,但相当麻烦:首先我需要双向信息(例如,允许从数据库服务器上的 Web 服务器进行远程访问),所以我需要在每个方向添加 webserver=...数据库服务器,信息冗余,维护难度大。其次,在网络服务器和数据库服务器之间共享变量(例如数据库用户名)没有很好的方法,因为变量是全局定义的,每个组或每个播放。
    • 我认为您可以通过使用hostvars 来定位适当的网络服务器来避免冗余信息,而不必在您的清单中明确记录(例如,搜索具有dbserver=<this database server> 的网络服务器) .您绝对可以通过将数据库用户名声明为一个共同的角色来共享信息,并将其包含在您需要该信息的任何游戏中。
    • 感谢您的更新。我最终使用了不同的方法(请参阅我的答案),但我非常感谢您的意见!
    【解决方案2】:

    我最终使用了以下方法:每对服务器都有自己的组,组变量用于定义哪个服务器在哪个主机上运行:

    [test]
    test-host
    
    [test:vars]
    web_server = test-host
    db_server = test-host
    
    [production]
    web
    db
    
    [production:vars]
    web_server = web
    db_server = db
    

    然后将 Web 和数据库服务器的任务分配到不同的角色(web_serverdb_server)。然后我根据组变量在这些角色之间切换:

    - hosts: all
      roles:
         - { role: web_server, when: "web_server == inventory_hostname" }
         - { role: db_server, when: "db_server == inventory_hostname" }
    

    此设置使我可以轻松地为角色和对定义共享变量,并且还允许我轻松地仅定位一对(通过--limit)。

    【讨论】:

      猜你喜欢
      • 2020-12-28
      • 2017-05-19
      • 2011-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-01
      • 2015-08-16
      • 1970-01-01
      相关资源
      最近更新 更多