Нужна помощь в использовании экспресс-кассандры с настройкой Multi-DC - PullRequest
1 голос
/ 30 марта 2019

Привет, сообщество переполнения стека!

Мне нужна помощь в определении правильного способа установления соединений с помощью экспресс-модели cassandra orm в nodejs для моей настройки multi-dc (total dc = 2) cassandra.

В настоящее время мы используем только 1 постоянный ток с экспресс-кассандрой, поэтому для этого мы просто даем 2 начальных IP-адреса узлов в качестве точек контакта для экспресс-кассандры, как показано ниже

models.setDirectory(__dirname + '/models').bind(
  {
    clientOptions: {
      contactPoints: cassandraContactPoints,
      protocolOptions: { port: 9042 },
      keyspace: 'keyspace_name',
      queryOptions: { consistency: models.consistencies.one }
    },
    ormOptions: {
      defaultReplicationStrategy: {
        class: 'NetworkTopologyStrategy',
        replication_factor: 2,
      },
      createKeyspace: false,  
      dropTableOnSchemaChange: false
    }
  },
  function (err) {
    if (err) {
      throw err;
    } else {
      console.log('connection established');
      postDBConnection(models, 'keyspace name again');
    }
  }

Здесь следует отметить, что мы указываем cassandraContactPoints как массив всего из 2 узлов нашего существующего постоянного тока.

Поскольку мы продвигаемся вперед с отдельным DC для аналитических целей, я хотел бы знать, должны ли мы давать ip-адреса нового DC в том же массиве, т.е. cassandraContactPoints? Мы планируем использовать LOCAL_QUORAM и хотим, чтобы наши аналитические приложения использовали только аналитический постоянный ток для всех операций чтения и записи.

Я попытался прочитать исходные тексты для модулей экспресс-кассандры и «драйвера-кассандры», но не могу найти решение>

Любая помощь здесь будет очень признательна!

1 Ответ

2 голосов
/ 30 марта 2019

Предоставление точки контакта из другого DC - это , никогда не будет хорошей идеей - большинство драйверов (не помню, о драйвере Node.js) выполняют перетасовку точек контакта, поэтому он может сначала связаться узел в другом DC, и извлеките имя DC из информации этого узла, и будет думать, что этот DC является локальным для приложения, поэтому запросы LOCAL_QUORUM будут выполняться к Analytical DC, и это приведет к проблемам.

Вы можете сделать свой код более защищенным от подобных вещей, если вы явно зададите имя DC, локальное для вашего приложения, вместо того, чтобы обнаруживать его неявно в контактных точках. Подробности см. В документации к драйверу (в версии 4.0 разработчик должен указать имя локального DC !)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...