Какой узел couchbase будет обслуживать запрос?

У меня есть сервис NodeJS, который общается с кластером couchbase для получения данных. Кластер couchbase имеет 4 узла (работающих на ip1, ip2, ip3, ip4), и сервис также работает на тех же 4 серверах. На всех сервисах NodeJS моя строка подключения выглядит так:

couchbase://ip1,ip2,ip3,ip4

но всякий раз, когда я пытаюсь извлечь какой-либо документ из корзины X, консоль показывает, что узел на ip4 выполняет эту операцию. Независимо от того, какое приложение NodeJS делает запрос, один и тот же ip4 обслуживает весь запрос.

Я хочу, чтобы каждый сервер NodeJS использовал свой узел couchbase, чтобы потребление ОЗУ и ЦП на всех серверах было одинаковым, поэтому я менял порядок IP-адресов в строке подключения, но каждый раз, когда запрос обрабатывается одним и тем же ip4.

Я создал другое ведро и поместил свои данные в него и попытался получить его, но снова это пошло к тому же ip4. Может кто-нибудь объяснить, почему это происходит и может ли это вызвать высокую нагрузку на один из узлов?

1 ответ

Решение

Что вы подразумеваете под "я хочу, чтобы каждый сервер NodeJS использовал свой узел couchbase"? В Couchbase часть активного набора данных находится на каждом узле в кластере. Осколок автоматически. Когда у вас есть кластер, 1024 активных vBuckets (осколки) для каждого Bucket распределены по всем узлам кластера. Таким образом, с вашими 4 узлами будет 256 vBuckets на каждом узле. Учитывая согласованный алгоритм хеширования, используемый Couchbase SDK, он сможет по ключу определить, в какой vBucket этот объект входит и в сочетании с картой кластера, полученной из кластера, узнать, какой узел vBucket живет в кластере. Таким образом, приложение будет получать данные от каждого из узлов в кластере, если вы правильно настроили их, поскольку данные распределены равномерно.

В файловой системе в рамках Couchbase будет установлен инструмент CLI vbuckettool, который принимает в качестве аргументов objectID и clustermap. Все, что он делает, - это согласованный алгоритм хэширования + карта кластеров. Таким образом, вы можете предсказать, куда пойдет объект, даже если он еще не существует.

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

Другие вопросы по тегам