devgateway.pacemaker

Ansible的Pacemaker角色

该角色通过导出配置(CIB)、调整XML并重新加载来配置Pacemaker集群。该角色是幂等的,并支持检查模式。

它已被重新设计为配置单个元素(集群默认设置、资源、组、约束等),而不是整个集群和所有服务的状态。这使您可以专注于特定资源,而不会干扰其他部分。

要求

该角色是在Scientific Linux 7上编写和测试的。它也可能在其他发行版上运行,请分享您的经验。

任务

使用tasks_from Ansible指令来指定您想要配置的内容。

属性中的布尔值(由Pacemaker本身解析)不必加引号。但是,资源代理可能期待类似布尔值的参数为整数、字符串等。这些值必须加引号。

tasks_from: main

设置节点,配置集群属性和资源默认设置。

pcmk_cluster_name

集群名称(可选)。

默认:hacluster

pcmk_password

集群用户的明文密码(可选)。如果省略,将从执行批次中第一台主机的ansible_machine_id派生。该密码只在节点的初始身份验证中使用。

默认:ansible_machine_id | to_uuid

pcmk_user

用于身份验证PCS节点的系统用户(可选)。PCS将对所有节点进行相互身份验证。

默认:hacluster

pcmk_cluster_options

包含集群范围选项的字典(可选)。

pcmk_votequorum

包含投票法定人数选项的字典(可选)。请参见votequorum(5)。接受布尔值。

pcmk_resource_defaults

资源默认设置的字典(可选)。

tasks_from: resource

配置一个简单的资源。

pcmk_resource

描述简单(原始)资源的字典。包含以下成员:

  • id:资源标识符;简单资源必需;
  • classprovidertype:资源代理描述符;当typeservice时,provider可以省略;
  • options:资源特定属性的可选字典,例如IPaddr2的地址和子网掩码;
  • op:可选的操作列表;每个操作是一个字典,包含必需的nameinterval成员,以及可选的任意成员;
  • meta:可选的元属性字典。

tasks_from: group

配置资源组。

pcmk_group

包含两个成员的字典:

  • id是组标识符;
  • resources是一个字典,其中键是资源ID,值与pcmk_resource的格式相同(资源的id是可选的)。

tasks_from: constraint

配置一个约束。

pcmk_constraint

定义单个约束的字典。以下成员是必需的:

  • type:可以是locationcolocationorder之一;
  • score:约束得分(有符号整数,INFINITY-INFINITY)。

根据type的值,以下成员也是必需的:

  • location需要rscnode
  • colocation需要rscwith-rsc
  • order需要firstthen

字典可能包含其他成员,例如symmetrical

示例剧本

活动-活动的chrooted BIND DNS服务器

---
- name: 配置DNS集群
  hosts: dns-servers
  tasks:
  
    - name: 设置集群
      include_role:
        name: devgateway.pacemaker
      vars:
        pcmk_password: hunter2
        pcmk_cluster_name: named
        pcmk_cluster_options:
          stonith-enabled: false

    - name: 配置IP地址资源
      include_role:
        name: devgateway.pacemaker
        tasks_from: resource
      vars:
        pcmk_resource:
          id: dns-ip
          class: ocf
          provider: heartbeat
          type: IPaddr2
          options:
            ip: 10.0.0.1
            cidr_netmask: 8
          op:
            - name: monitor
              interval: 5s

    - name: 配置克隆的BIND资源
      include_role:
        name: devgateway.pacemaker
        tasks_from: advanced-resource
      vars:
        pcmk_resource:
          type: clone
          id: dns-clone
          resources:
            named:
              class: service
              type: named-chroot
              op:
                - name: monitor
                  interval: 5s

    - name: 设置约束
      include_role:
        name: devgateway.pacemaker
        tasks_from: constraint
      vars:
        pcmk_constraint:
          type: order
          first: dns-ip
          then: dns-clone

活动-活动的Squid代理

---
- name: 配置Squid集群
  hosts: proxy-servers
  tasks:
  
    - name: 设置集群
      include_role:
        name: devgateway.pacemaker
      vars:
        pcmk_password: hunter2
        pcmk_cluster_name: squid
        pcmk_cluster_options:
          stonith-enabled: false

    - name: 配置IP地址资源
      include_role:
        name: devgateway.pacemaker
        tasks_from: resource
      vars:
        pcmk_resource:
          id: squid-ip
          class: ocf
          provider: heartbeat
          type: IPaddr2
          options:
            ip: 192.168.0.200
            cidr_netmask: 24
          op:
            - name: monitor
              interval: 5s

    - name: 配置克隆的Squid资源
      include_role:
        name: devgateway.pacemaker
        tasks_from: advanced-resource
      vars:
        pcmk_resource:
          id: squid
          type: clone
          resources:
            squid-service:
              class: service
              type: squid
              op:
                - name: monitor
                  interval: 5s

    - name: 设置约束
      include_role:
        name: devgateway.pacemaker
        tasks_from: constraint
      vars:
        pcmk_constraint:
          type: order
          first: squid-ip
          then: squid

Nginx、Web应用程序和主从Postgres

集群运行两个具有同步复制的Postgres节点。无论主节点在哪,都会运行一个虚拟IP地址,NAT指向它。Nginx和Web应用程序在同一节点上运行,但不在其他节点上,以节省资源。基于Clusterlabs Wiki的示例

---
- hosts:
    - alpha
    - bravo
  tasks:
  
    - name: 设置带Postgres主/从的Pacemaker
      include_role:
        name: devgateway.pacemaker
      vars:
        pcmk_pretty_xml: true
        pcmk_cluster_name: example
        pcmk_password: hunter2
        pcmk_cluster_options:
          no-quorum-policy: ignore
          stonith-enabled: false
        pcmk_resource_defaults:
          resource-stickiness: INFINITY
          migration-threshold: 1

    - name: 配置简单资源
      include_role:
        name: devgateway.pacemaker
        tasks_from: resource
      loop_control:
        loop_var: pcmk_resource
      loop:
        - id: coolapp
          class: service
          type: coolapp
        - id: nginx
          class: service
          type: nginx
        - id: virtual-ip
          class: ocf
          provider: heartbeat
          type: IPaddr2
          options:
            ip: 10.0.0.23
          meta:
            migration-threshold: 0
          op:
            - name: start
              timeout: 60s
              interval: 0s
              on-fail: restart
            - name: monitor
              timeout: 60s
              interval: 10s
              on-fail: restart
            - name: stop
              timeout: 60s
              interval: 0s
              on-fail: restart

    - name: 配置主/从Postgres
      include_role:
        name: devgateway.pacemaker
        tasks_from: advanced-resource
      vars:
        pcmk_resource:
          id: postgres
          type: master
          meta:
            master-max: 1
            master-node-max: 1
            clone-max: 2
            clone-node-max: 1
            notify: true
          resources:
            postgres-replica-set:
              class: ocf
              provider: heartbeat
              type: pgsql
              options:
                pgctl: /usr/pgsql-9.4/bin/pg_ctl
                psql: /usr/pgsql-9.4/bin/psql
                pgdata: /var/lib/pgsql/9.4/data
                rep_mode: sync
                node_list: "{{ ansible_play_batch | join(' ') }}"
                restore_command: cp /var/lib/pgsql/9.4/archive/%f %p
                master_ip: 10.0.0.23
                restart_on_promote: "true"
                repuser: replication
              op:
                - name: start
                  timeout: 60s
                  interval: 0s
                  on-fail: restart
                - name: monitor
                  timeout: 60s
                  interval: 4s
                  on-fail: restart
                - name: monitor
                  timeout: 60s
                  interval: 3s
                  on-fail: restart
                  role: Master
                - name: promote
                  timeout: 60s
                  interval: 0s
                  on-fail: restart
                - name: demote
                  timeout: 60s
                  interval: 0s
                  on-fail: stop
                - name: stop
                  timeout: 60s
                  interval: 0s
                  on-fail: block
                - name: notify
                  timeout: 60s
                  interval: 0s

    - name: 设置约束
      include_role:
        name: devgateway.pacemaker
        tasks_from: constraint
      loop_control:
        loop_var: pcmk_constraint
      loop:
        - type: colocation
          rsc: virtual-ip
          with-rsc: postgres
          with-rsc-role: Master
          score: INFINITY
        - type: colocation
          rsc: nginx
          with-rsc: virtual-ip
          score: INFINITY
        - type: colocation
          rsc: coolapp
          with-rsc: virtual-ip
          score: INFINITY
        - type: order
          first: postgres
          first-action: promote
          then: virtual-ip
          then-action: start
          symmetrical: false
          score: INFINITY
        - type: order
          first: postgres
          first-action: demote
          then: virtual-ip
          then-action: stop
          symmetrical: false
          score: 0

另见

版权

版权2015-2019,开发网关。根据GPL v3+授权。

安装
ansible-galaxy install devgateway.pacemaker
许可证
Unknown
下载
203