Методы балансировки#

Алгоритмы балансировки#

Алгоритм

Описание

default

Запросы распределяются на первый сервер, отвечающий критериям, заданным в правиле. Используется по умолчанию.

round_robin

Запросы распределяются по серверам последовательно.

Взвешенный round_robin

Запросы распределяются по серверам c учетом весов серверов (weighted).

Далее будут поддерживаться и другие методы балансировки. Подробное описание параметров конфигурации GSLB см. в статье Параметры конфигурации.

Проверки работоспособности#

Модуль GSLB получает данные о состоянии апстрим-серверов от локального балансировщика нагрузки Angie ADC. Предварительно необходимо настроить проверки работоспособности на локальном балансировщике.

Примечание

На данный момент используются только данные о доступности серверов ({'<IP-address>': {'state': 'up'}}). В следующих релизах будут учитываться и другие параметры проверок работоспособности.

Серверы временно удаляются из пула балансировки, если не прошли проверку. Также учитываются данные по времени ответа сервера, полученные во время проверок работоспособности. Если проверки работоспособности для сервера не заданы в конфигурации GSLB, сервер будет всегда считаться рабочими.

Рекомендуется включать проверки работоспособности для всех серверов, участвующих в балансировке, чтобы запросы перенаправлялись только на рабочие серверы. Исключение может составлять резервный сервер, используемый для ответа в случае, когда все остальные серверы не прошли проверки.

Примеры#

1. Балансировка на первый доступный сервер
options:
  ttl: 1

zones:
  default.example.org:
    rules:
      - rule: default

rules:
  default:
    type: default
    servers:
      - server: lb1-dc1-health
      - server: lb1-dc2-health

servers:
  lb1-dc1-health:
    addresses:
      - 172.22.11.1
    healthpeers: "http://172.22.11.1/api/http/upstreams/srv1/peers"
    healthinterval: 1s
    healthtimeout: 1s

  lb1-dc2-health:
    addresses:
      - 172.22.21.1
    healthpeers: "http://172.22.21.1/api/http/upstreams/srv1/peers"
    healthinterval: 1s
    healthtimeout: 1s

В этом примере:

  • Зона default.example.com использует правило default, определенное в блоке rules.

  • Для серверов заданы проверки работоспособности.

  • Запросы будут перенаправляться на первый сервер, прошедший проверки (если проверки работоспособности не будут заданы, то запросы будут всегда перенаправлены на первый сервер в списке).

2. Балансировка round-robin с проверками работоспособности
options:
  ttl: 1

zones:
  www.example.org:
    rules:
      - rule: rr
        servers:
          - group: www

  test.example.com:
    rules:
      - rule: rr

rules:
  rr:
    type: round_robin
    servers:
      - server: www1
      - server: www2

groups:
  www:
    servers:
      - server: www3
      - server: www4

servers:
  www1:
    addresses:
      - 172.22.0.10
    healthpeers: "http://172.22.0.10/api/http/upstreams/examplecom/peers"
    healthinterval: 10s
    healthtimeout: 2s

  www2:
    addresses:
      - 172.22.1.10
    healthpeers: "http://172.22.1.10/api/http/upstreams/examplecom/peers"
    healthinterval: 15s
    healthtimeout: 3s

  www3:
    addresses:
      - 172.22.0.10
    healthpeers: "http://172.22.0.10/api/http/upstreams/exampleorg/peers"
    healthinterval: 10s
    healthtimeout: 2s

  www4:
    addresses:
      - 172.22.1.10
    healthpeers: "http://172.22.1.10/api/http/upstreams/exampleorg/peers"
    healthinterval: 15s
    healthtimeout: 3s

В этом примере:

  • Зоны www.example.org и test.example.com используют правило rr, определенное в блоке rules.

  • Для зоны www.example.org переопределена группа серверов, которая будет использоваться в правиле rr.

  • Для всех серверов заданы проверки работоспособности.

  • Запросы будут распределяться последовательно на указанные серверы с учетом проверок работоспособности.

3. Балансировка round-robin с учетом весов серверов
options:
  ttl: 1

zones:
  wrr.example.org:
    rules:
      - rule: wrr

rules:
  wrr:
    type: round_robin
    weighted: true
    servers:
      - server: www1
      - server: www2

servers:
  www1:
    addresses:
      - 172.22.0.10
    weight: 1

  www2:
    addresses:
      - 172.22.0.11
    weight: 2

В этом примере:

  • Зона wrr.example.com использует правило wrr-servers (взвешенный round-robin), определенное в блоке rules. Если вес для сервера не указан, то при проверке конфигурации будет выдана ошибка.

  • Серверы получают нагрузку в соответствии со своими весами (www2 будет использоваться примерно в два раза чаще, чем www1).

4. Балансировка round-robin с проверками работоспособности и бэкап-сервером
options:
  ttl: 1

zones:
  multi.example.org:
    rules:
      - rule: rr-health
      - rule: fallback

rules:
  rr-health:
    type: round_robin
    servers:
      - server: lb1-dc1-health
      - server: lb1-dc2-health

  fallback:
    servers:
      - server: fallback

servers:
  lb1-dc1-health:
    addresses:
      - 172.22.11.1
    healthpeers: "http://172.22.11.1/api/http/upstreams/srv1/peers"
    healthinterval: 1s
    healthtimeout: 1s

  lb1-dc2-health:
    addresses:
      - 172.22.21.1
    healthpeers: "http://172.22.21.1/api/http/upstreams/srv1/peers"
    healthinterval: 1s
    healthtimeout: 1s

  fallback:
     addresses:
      - 172.22.31.1
      - 172.22.31.2

В этом примере:

  • Зона multi.example.org использует правила rr-health и fallback, определенные в блоке rules.

  • Для серверов lb1-dc1-health и lb1-dc2-health заданы проверки работоспособности. Запросы будут распределяться последовательно на указанные серверы при прохождении проверок работоспособности.

  • При непрохождении проверок серверами lb1-dc1-health и lb1-dc2-health запросы будут распределяться на резервный сервер fallback, у которого прописано два адреса. При этом оба прописанных адреса будут выдаваться в ответе одновременно.