Назад | Перейти на главную страницу

Совместное гнездо единорога

Возможно ли иметь сокет unix в сети? Возможно ли, чтобы несколько серверов приложений, на которых запущен единорог, использовали один и тот же общий сокет?

Настройка, которую я хотел бы достичь, будет выглядеть так:

        nginx
          ↓
 Unicorn     Unicorn

Конфигурация nginx:

upstream github {
    server unix:/shared/unicorn.sock;
}

Конфигурация единорога (x2)

listen '/shared/unicorn.sock'

Я знаю, что можно сделать что-то вроде:

upstream unicorns {
  server 192.168.1.100:5000;
  server 192.168.1.101:5000;
}

Однако я думаю, что это не идеально, потому что вы не получаете преимуществ от Unicorn, выполняющего собственную балансировку нагрузки, и вам нужно заранее указать IP-адреса.

Несколько лет назад GitHub написал в блоге об их настройке Unicorn, где я думаю, они описывают аналогичную установку, но неясно, как этого добиться.

Сокеты Unix работают только в этой системе. Сокет в сети называется TCP-соединением. Способ сделать это - заставить Unicorn прослушивать TCP-сокет и настроить nginx для использования их в качестве восходящего потока (как вы упомянули). Unicorn не имеет распределенной балансировки нагрузки; вам нужен nginx для балансировки нагрузки.