Мы используем TCP Google Cloud Loadbalancer для одного из наших сервисов.
Архитектура следующая: Есть TCP балансировщик нагрузки, на котором разрешен ряд портов на frontend и его backend экземпляры подключены и там экземпляры сервисов работают на том же порту, который открыт на LB.
Например: LB IP -1.1.1.1:(100-200)
т.е. диапазон портов открыт. Теперь на бэкенде запущено 3 инстанса и на них запущены службы на портах 100, 101 и 103.
Как пользователь, если вы хотите получить доступ к службе, работающей на порту 100, вы должны использовать LB IP:100 для доступа к службам. Но в последние несколько дней запрос отбрасывается. Однако если вы попытаетесь подключиться напрямую к экземпляру IP:100, служба будет работать нормально. Поэтому я не могу определить точную причину. Запросы также основаны на TCP, тогда почему LB отбрасывает их.
Пожалуйста, подскажите мне некоторые варианты. Примечание: Есть ли способ проверить журналы LB из GCloud или консоли ???
Публикация собственного ответа OP для лучшей наглядности:
Моя проблема была не из-за LB.
Мой LB использует циклический алгоритм, он просто передавал запрос без проверки состояния внутреннего сервера. Только один из моих серверов был работает, поэтому половина запросов отбрасывается.
Я только что настроил еще один экземпляр в той же LB, и возникла проблема. решено.
Этот вид решения является самым «сырым» и не обеспечивает никакой отказоустойчивости. Если какой-либо сервер выйдет из строя, некоторые запросы будут удалены, а сервис будет понижен.
Самое простое решение избежать этого — создать группу управляемых экземпляров и использовать проверки работоспособности, чтобы проверить, все ли виртуальные машины запущены, а затем создать балансировщик нагрузки. .