Nodejs 如何连接 mongodb 副本集?

Nodejs 如何连接 mongodb 副本集?

mongodb已经建立好了 副本集 两个数据库服务器 一个仲裁服务器 弱弱的问一句 请问应该怎么连接呢??

4 回复

Node.js 如何连接 MongoDB 副本集?

MongoDB 副本集是一种高可用性架构,它包含多个数据副本,其中一个为主节点(Primary),其余为从节点(Secondary)。主节点处理所有写操作,而从节点则用于读取和故障转移。为了确保应用程序能够在主节点故障时自动切换到从节点,你需要正确配置你的 Node.js 应用程序以连接到 MongoDB 副本集。

示例代码

首先,确保你已经安装了 mongodb 包。你可以使用 npm 来安装:

npm install mongodb

接下来,使用以下代码连接到 MongoDB 副本集:

const { MongoClient } = require('mongodb');

const uri = "mongodb://<PRIMARY_HOST>:<PRIMARY_PORT>,<SECONDARY_HOST>:<SECONDARY_PORT>/<DATABASE>?replicaSet=<REPLICA_SET_NAME>";

async function connect() {
    const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });

    try {
        await client.connect();
        console.log("Connected to MongoDB replica set");

        const db = client.db('<DATABASE>');
        const collection = db.collection('<COLLECTION>');

        // 进行数据库操作
        const result = await collection.find().toArray();
        console.log(result);

    } catch (error) {
        console.error("Error connecting to MongoDB:", error);
    } finally {
        await client.close();
    }
}

connect();

解释

  1. URI 构建

    • <PRIMARY_HOST><SECONDARY_HOST> 是你的 MongoDB 实例的主机名或 IP 地址。
    • <PRIMARY_PORT><SECONDARY_PORT> 是端口号。
    • <DATABASE> 是你要连接的数据库名称。
    • <REPLICA_SET_NAME> 是副本集的名称。
  2. MongoClient 配置

    • useNewUrlParser: trueuseUnifiedTopology: true 是必要的配置选项,用于确保与 MongoDB 的兼容性和性能。
  3. 连接逻辑

    • 使用 client.connect() 方法连接到 MongoDB。
    • 如果连接成功,你可以访问数据库和集合进行操作。
    • 使用 client.close() 方法在操作完成后关闭连接。

通过这种方式,你的 Node.js 应用程序可以自动处理主节点故障,并在需要时切换到从节点,从而保证高可用性和数据一致性。


网上不是有一步一步的那种教程吗?几个命令连一连啊。

我的一个模板可以给你参考下

module.exports = {
    "iomsg" : {
        "url": "mongodb://127.0.0.1:31000,127.0.0.1:31001,127.0.0.1:31002/iomsg",
        "options": {
            "uri_decode_auth": false,   // 转码验证字符
            "db": {
                "w": 2,                 // 写的复制服务器数
                "wtimeout": 500,        // 写的超时时间
                "j": true,              // 写等待日志磁盘同步
                "slaveOk": true         // 读负载均衡
            },
            "replSet": {
                "rs_name": "myset",     // 副本集名字
                "poolSize": 10,         // 每个服务器连接数
                "socketOptions": {
                    //"keepAlive": 2,
                    "connectTimeoutMS": 30000,
                    "socketTimeoutMS": 500
                }
            }
        },
        "collections": {
            "users": "users",
            "loggers": "loggers",
            "msgs": "msgs",
            "comments": "comments"
        }
    }
};
require('mongodb').MongoClient.connect(url, options, function (err, db) {
    // ...
});

要在Node.js中连接MongoDB副本集,你需要使用mongodb官方驱动程序。以下是连接到副本集的步骤和示例代码:

步骤

  1. 安装MongoDB Node.js驱动程序: 如果你还没有安装mongodb包,可以通过npm安装:

    npm install mongodb
    
  2. 连接到副本集: 使用MongoClient的connect方法连接到副本集。需要提供副本集中所有节点的地址以及副本集名称。

  3. 创建数据库操作: 连接成功后,你可以使用创建的客户端来执行数据库操作。

示例代码

const { MongoClient } = require('mongodb');

// MongoDB副本集的URL格式
// <username>:<password>@<node1-hostname>:<port>,<node2-hostname>:<port>,<arbiter-hostname>:<port>?replicaSet=<replicaSetName>
const url = 'mongodb://<username>:<password>@<node1-hostname>:27017,<node2-hostname>:27017,<arbiter-hostname>:27017?replicaSet=<replicaSetName>';

async function main() {
    const client = new MongoClient(url, { useNewUrlParser: true, useUnifiedTopology: true });

    try {
        await client.connect();
        console.log("Connected to MongoDB replica set successfully.");

        // 获取数据库和集合
        const db = client.db('<your-db-name>');
        const collection = db.collection('<your-collection-name>');

        // 示例:插入一条记录
        const result = await collection.insertOne({ name: 'John Doe' });
        console.log(`Inserted document with _id: ${result.insertedId}`);
        
        // 示例:查询记录
        const cursor = collection.find({});
        await cursor.forEach(doc => console.log(doc));
    } catch (error) {
        console.error("Error connecting to MongoDB:", error);
    } finally {
        await client.close();
    }
}

main().catch(console.error);

解释

  • URLurl变量包含副本集的所有节点信息及副本集名称。
  • 用户名和密码:如果你的副本集配置了认证,记得替换<username><password>为实际的认证凭据。
  • 数据库和集合dbcollection用于选择数据库和集合,你可以根据实际情况修改它们。
  • 插入和查询数据:示例代码展示了如何向集合中插入数据,并从集合中读取所有文档。

确保你已经在MongoDB副本集的配置文件中正确设置了副本集,并且所有节点都能正常通信。

回到顶部