Skip to content
LowesYang edited this page Nov 2, 2017 · 12 revisions

The solution is implemented in a form of PowerDNS Authoritative Server enhancement and consists of:

  1. Polaris health - takes in a configuration dictionary specifying pools of backend servers, associated health checks etc., builds a health state table, iterates over it periodically and issues health probes that get processed asynchronously by a pool of workers. State information is propagated into a shared memory(memcache). Runs as a daemon.

  2. Polaris PDNS - PowerDNS Remote Backend JSON-API plugin, performs DNS query distribution according to the health state(sync-ed periodically from memcache) and the load balancing algorithm selected.

Configuration example:

polaris-lb.yaml

pools:
    www-example:
        monitor: http
        monitor_params:
            use_ssl: true
            hostname: www.example.com
            url_path: /healthcheck?check_all=true
        lb_method: twrr 
        fallback: any
        members:
        - ip: 10.1.1.1
          name: www1-dc1
          weight: 3
        - ip: 172.16.1.1
          name: www2-dc2
          weight: 2
        - ip: 172.16.1.2
          name: www3-dc2
          weight: 3

globalnames:
    www.example.com:
        pool: www-example
        ttl: 1

polaris-topology.yaml

datacenter1:
    - 10.1.1.0/24
datacenter2:
    - 172.16.0.0/16

Updating the configuration(involves the Polaris health restart) does not impact the front-end DNS resolution and is seamless to the clients.

Clone this wiki locally