如何连接到我的Datastax Cassandra数据库?

roejwanj  于 2022-12-23  发布在  Cassandra
关注(0)|答案(4)|浏览(250)

我希望你一切都好。我目前正在使用一个cassandra数据库,我几乎完成了它。目前我正在部署我的服务,发生了一个错误。为了在我的nestjs后端最好地使用cassandra,我使用框架https://github.com/ifaim/nestjs-express-cassandra这在后端与框架https://github.com/masumsoft/express-cassandra一起工作(这是积极更新和大量使用)。但现在的问题是,根据datastax(我的cassandra db托管在那里)的文档,我必须存款一个secureConnectBundle才能连接到我的数据库。

然而,我在网上找到的关于这个的例子很少,一般来说,我找到了更多的例子来说明如何在没有secureConnectBundle的情况下连接到你的datastax数据库。到目前为止,我没有成功,所以我在这里问。我真的希望我不必改变框架,因为这可能意味着这个项目的结束。

export const cassandraOptions: ExpressCassandraModuleOptions = {
  clientOptions: {
    contactPoints: [
      'e68eb980-c5c3-47fa-a423-472652519805-europe-west1.db.astra.datastax.com',
    ],
    protocolOptions: { port: 9042 },
    keyspace: 'partii',
    queryOptions: {
      fetchSize: 100,
      consistency: 1,
    },
    authProvider: new auth.PlainTextAuthProvider('X', 'X'),
  },
  ormOptions: {
    createKeyspace: false,
    defaultReplicationStrategy: {
      class: 'SimpleStrategy',
      replication_factor: 1,
    },
    migration: 'safe',
  },
};
py49o6xq

py49o6xq1#

您似乎正在使用DataStax Astra DB。DataStax Astra DB没有连接到Cassandra默认的9042端口,而是连接到29042端口。然而,即使是正确的,您仍然必须沿着SSL信息,手动获得正确的信息是棘手的。这就是为什么推荐参考安全连接包是简单的途径。
你是对的,这里似乎没有任何例子说明如何在Express Cassandra上使用Astra DB。好消息是Express Cassandra看起来像是在下面使用了Cassandra nodejs驱动程序。这意味着客户端选项很可能是相同/相似的。尝试如下操作:

export const cassandraOptions: ExpressCassandraModuleOptions = {
  clientOptions: {
    cloud: { secureConnectBundle: 'path/to/secure-connect-bundle.zip' },
    credentials: { username: 'clientid', password: 'secret' }
 },
 ormOptions: {
   createKeyspace: false,
   defaultReplicationStrategy: {
     class: 'SimpleStrategy',
     replication_factor: 1,
   },
   migration: 'safe',
 },
};

如果这不起作用,也许可以用上面使用的authProvider替换credentials行。

3hvapo4f

3hvapo4f2#

您只能通过DevOps API或GUI创建密钥空间。您可能需要按照here提供的示例进行操作。

s5a0g9ez

s5a0g9ez3#

在此期间,我决定手动设置SSL连接,它工作正常。现在我只需要修复错误。
apollo.model.tablecreation.dbschemaquery:检索数据库表“NoHostAvailableError”的模式时出错:尝试查询的所有主机均失败。尝试的第一个主机,34.79.132.94:29080:错误[ERR_TLS_CERT_ALTNAME_INVALID]:主机名/IP与证书的别名不匹配:IP:34.79.132.94不在证书列表中:。请参阅内部错误。

sr4lhrrt

sr4lhrrt4#

问题解决了。

import {
  auth,
  ExpressCassandraModuleOptions,
} from '@iaminfinity/express-cassandra';
// get fs to read the certificate
import * as fs from 'fs';
// get path to resolve the certificate path
import * as path from 'path';

export const cassandraOptions: () => ExpressCassandraModuleOptions = () => {
  const sslOptions = {
    rejectUnauthorized: true,
    cert: fs.readFileSync(path.resolve(__dirname, '../src/database/cert')),
    key: fs.readFileSync(path.resolve(__dirname, '../src/database/key.pem')),
    ca: fs.readFileSync(path.resolve(__dirname, '../src/database/ca.crt')),
  };

  return {
    clientOptions: {
      contactPoints: [
        'host',
      ],
      protocolOptions: { port: 29042 },
      keyspace: 'partii',
      queryOptions: {
        fetchSize: 100,
        consistency: 1,
      },
      sslOptions: {
        ...sslOptions,
        host: '34.79.236.16',
        checkServerIdentity: function (host, cert) {
          return undefined;
        },
      },
      authProvider: new auth.PlainTextAuthProvider(
        'id',
        'secret',
      ),
    },
    ormOptions: {
      createKeyspace: false,
      defaultReplicationStrategy: {
        class: 'SimpleStrategy',
        replication_factor: 1,
      },
      migration: 'alter',
    },
  };
};

相关问题