Couchbase Server NodeJS SDK Cluster.openbucket Занимает 58 секунд, чтобы открыть соединение

Я использую NodeJS SDK. В следующем примере я открываю ведро для вставки одной записи. Я поместил каждый метод в обещание заставить их запускаться один за другим (последовательно), чтобы я мог измерить время выполнения каждого метода.

Моя ОС: Ubuntu 16.04

'use strict';

const couchbase = require('couchbase');
const cluster = new couchbase.Cluster('couchbase://localhost');
const uuid = require('uuid/v4');

console.time('auth');
cluster.authenticate('administrator', 'adminadmin');
console.timeEnd('auth');

function open() {
    return new Promise((resolve, reject) => {
        console.time('open');

        let bucket = cluster.openBucket('test', function (err) {
            if (err) {
                console.error(err);
                reject(err);
            }            
            resolve(bucket);
        });
    });
}

function insert(bucket, obj) {
    return new Promise((resolve, reject) => {
        console.time('upsert');

        bucket.upsert(`uuid::${blog.name}`, blog, function (err, result) {            
            if (err) {
                console.log(err);
                reject(err);                
            }
            resolve(bucket);
        });
    });
}

function dc(bucket) {    // disconnect
    return new Promise((resolve, reject) => {       
        console.time('dc');

        bucket.disconnect();
        resolve('ok');
    });
}

// data to insert
let blog = {
    id: uuid(),
    name: 'Blog A',
    posts: [
        {
            id: uuid(),
            title: 'Post 1',
            content: 'lorem ipsum'
        }
    ]
};

open().then((bucket) => {
    console.timeEnd('open');

    insert(bucket, blog).then((bucket) => {        
        console.timeEnd('upsert');

        dc(bucket).then((res) => {            
            console.timeEnd('dc');
            console.log(res);
        });
    });
});

Выход:

auth: 0.237ms
open: 58117.771ms <--- this shows the problem
upsert: 57.006ms
dc: 0.149ms
ok

Я бегал SDK-доктор. Это дало мне две строки, которые стоит упомянуть:

  1. "ПРЕДУПРЕЖДЕНИЕ. Строка подключения указывает только один хост. Вы должны рассмотреть возможность добавления дополнительных статических узлов из вашего кластера в этот список, чтобы повысить отказоустойчивость ваших приложений ".
  2. "INFO: не удалось получить информацию о кластере (код состояния: 401)"

и резюме это:

Сводка: [WARN] Строка подключения указывает только один хост. Вы должны рассмотреть возможность добавления дополнительных статических узлов из вашего кластера в этот список, чтобы улучшить отказоустойчивость ваших приложений

Кто-нибудь, пожалуйста, помогите?

1 ответ

Решение

Согласно этому ответу на форуме Couchbase, казалось, что мои DNS-серверы не были настроены должным образом.

Похоже, что ваши DNS-серверы могут быть настроены неправильно. Как часть обычной процедуры начальной загрузки, мы пытаемся разрешить записи SRV для предоставленного имени хоста. Похоже, что у ваших DNS-серверов истекает время при попытке сделать это, что вызывает существенную задержку при подключении. Быстрый способ проверить эту теорию - добавить дополнительное имя хоста в список начальной загрузки, чтобы исключить строку подключения из нашей политики DNS-SRV (например, используйте: couchbase://localhost,invalidhostname).

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