1

Я имею в виду сервер Couchbase в разделе стек приложений this, излагая требуемую архитектуру кластера Couchbase.Архитектура отказоустойчивости кластера Couchbase

Я заметил, что каждый из 5 узлов Couchbase на диаграмме имеет соответствующий веб-сервер. Я также знаю, что SDK Couchbase предназначены для установления соединения с одним узлом и сохраняют это соединение для всех запросов, за исключением событий с отказоустойчивостью.

Во-первых, я хочу подтвердить, что каждый из 5 веб-серверов на диаграмме установит одно соединение с одним из 5 узлов Couchbase. Я предполагаю, что результатом будет соотношение 1: 1; каждый веб-сервер будет подключаться к соответствующему узлу Couchbase, так что никакие 2 веб-сервера не будут устанавливать соединения с одним и тем же узлом Couchbase.

Если это так, то в случае сбоя узла Couchbase, считая, что узел не может быть восстановлен, следует ли удалить соответствующий веб-сервер? Это может показаться неинтуитивными, но здесь ситуация, как я понимаю:

  1. Couchbase узел # 1 умирает
  2. Веб-сервер # 1 (подключенный к Couchbase узел # 1) устанавливает подключение к следующему доступному узлу, Couchbase node # 2 (большинство SDK обрабатывают это, FAIA)
  3. У узла Couchbase # 2 теперь установлено 2 установленных соединения; с веб-сервера # 2 (его соответствующий сервер), а также теперь от веб-сервера # 1 (чей соответствующий Couchbase узел мертв)

Меня беспокоит то, что я заметил, эфемерные проблемы порт истощения с Couchbase сервера, при установлении более чем 1 подключение к одному узлу. This generally results in client timeouts:

Получить http://0.0.0.0:8091/pools: наберите TCP 0.0.0.0:8091: операции истекло из

Опять же, основываясь на этом, я должен также удалить соответствующий веб-сервер, когда узел Couchbase умирает, чтобы избегать множественных подключений к одному узлу Couchbase и возможного истощения портов в эфемерном режиме?

ответ

1

Между веб-сервером и узлом Couchbase нет связи 1: 1. Каждый веб-сервер имеет соединения с каждым узлом Couchbase. В Couchbase каждый узел кластера имеет процент от всего набора данных, а не полную копию. Couchbase автоматически обрывает данные, и эти осколки (vBuckets) распределяются равномерно по всему кластеру.

Поэтому, когда веб-сервер или сервер приложений будет читать/писать объект, он перейдет к соответствующему узлу в кластере, которому принадлежит виртуальная среда vBucket, в которой находится этот объект. В SDK Couchbase существует согласованный хеш, который принимает идентификатор каждого объекта, а выход хэша - это число от 1 до 1024. Есть 1024 активных vBuckets, и каждая реплика имеет еще один 1024. Таким образом, результатом этого согласованного является vBucket ID, в котором объект будет жить. Имеете смысл? Затем SDK быстро просматривает свою копию карты кластера (которая обновляется при изменении кластерной топологии в любой момент), на котором находится узел кластера, который переходит в оболочку, а затем переходит к взаимодействию с этим конкретным узлом непосредственно для этого объекта.

Таким образом, ваш сценарий сбоев не совсем корректен. Если узел кластера Couchbase терпит неудачу, недоступны только vBuckets, которые находятся на этом узле. Таким образом, только процент от всего набора данных.Если у вас включен автоматический сбой (по умолчанию отключен), то после тайм-аута, установленного в кластере, кластер автоматически выйдет из строя узла и ускорит репликацию vBuckets до активной, таким образом, вы вернетесь к 100% активному набору данных , Кластер жертвует этими репликами vBuckets в основном. Поскольку это изменение топологии, новая кластерная карта отправляется в ваши клиентские приложения с SDK, а live перемещается. Кроме того, вам нужно будет перебалансировать кластер, чтобы восстановить те, которые сейчас отсутствуют в реплике vBuckets, и вернуть вас к нормальной жизни.

Что касается вашего эфемерного истощения порта, как вы управляете своими соединениями с кластером? Вы повторно используете соединения или открываете новые соединения каждый раз, а затем не закрываете их? Вы хотите открывать соединения и повторно использовать их, а не просто продолжать открывать новые. Если вы каждый раз открываете новые, а не очищаете, вы наверняка исчерпаете свой порт, таким образом, дескрипторы файлов. Как я уже сказал, используйте их повторно.

Смежные вопросы