У меня 20 серверов в одном месте, и я хотел бы выполнить балансировку нагрузки. В любом случае может доходить до 100. Есть ли какой-нибудь известный способ сделать это? Я также хотел бы иметь какой-то механизм, который при запросах клиентов, например, service.example.com, он будет использовать тот же сервер до тех пор, пока машина не будет выведена из кластера из-за сбоя. Клиент делает DNS-запрос каждую минуту, и предположим, что TTL записи DNS сверху вниз составляет 30-60 секунд, в то время как другие могут быть примерно 24 часа или около того, поэтому каждый сеанс может быть действителен до 24 часов после первоначального запроса, а затем клиент будет переключиться на другой сервер.
Я считаю, что балансировщики нагрузки L4-L7 совершенно бесполезны, так как я думаю, что мог бы использовать только DNS.
Протоколы представляют собой TCP-соединения, основанные только на двоичном коде, а также HTTP-соединения.
Я думал, что для двоичного соединения (например, без какого-либо протокола) я мог бы использовать циклический перебор в DNS, поэтому каждый раз, когда я запрашиваю DNS, я получал разные ответы.
Для HTTP это то, чего я не знаю. Мог бы поставить, может быть, HAProxy и все, но насчет DNS не уверен.
Однажды я подумал о следующем методе. Отправьте клиента на некий "master.example.com", который является HTTP-сервером, который выполняет только перенаправления, которые генерируют полное доменное имя с уникальным идентификатором, что означает, что это похоже на идентификатор сеанса. Таким образом, это полное доменное имя всегда будет соответствовать одному и тому же IP-адресу и может использоваться только для запрашиваемого IP-адреса в течение следующих 24 часов или навсегда, пока сервер не будет выключен.
Это выглядит так:
http://redirect.example.com/resource => http://67hkkdbvh.example.com/resource
Теперь сеанс выглядит так:
1st minute: http://67hkkdbvh.example.com/resource/1 TTL 60s
2nd minute: http://67hkkdbvh.example.com/resource/2 TTL 60s
Если 67hkkdbvh умрет, клиент снова запрашивает перенаправление.
Теперь я не уверен, как я могу использовать HAProxy, чтобы помочь с этим ???
Конечно ты мог использовать DNS, но я предпочитаю использовать правильные балансировщики нагрузки (я использую Zeus Traffic Manager - теперь называемые Riverbed Stingrays - и Cisco ACE), они не только отлично масштабируются, но и вы можете настроить их для проверки фактических ответов сервера, а не просто пингов или ничего, поэтому вы можете вывести их из эксплуатации, не внося изменений. Но не бесплатно.
Похоже, вы хотите воспроизвести точный способ работы балансировщика нагрузки, поэтому реальный вопрос: что балансировщик нагрузки делает / не делает то, что вы хотите / не хотите?
ты пытался взглянуть на haproxy? кажется, что stackexchange использует это. это в HA-кластере может быть гораздо более элегантным решением, которое предоставит вам возможность аварийного переключения.