Mongodb sharding转换一个副本集为分片集群
发布日期:2025-04-14 14:20:23 浏览次数:7 分类:精选文章

本文共 3100 字,大约阅读时间需要 10 分钟。

MongoDB副本集和分片集群部署指南

在实际应用中,MongoDB副本集和分片集群是确保数据高可用性和水平扩展的重要手段。本文将详细介绍如何部署副本集和分片集群的完整流程。

副本集部署

部署第一个副本集

  • 创建数据目录

    创建以下目录结构:

    /data/example/firstset1/data/example/firstset2/data/example/firstset3

    使用命令:

    mkdir -p /data/example/firstset1 /data/example/firstset2 /data/example/firstset3
  • 启动三个MongoDB实例

    在不同的终端窗口启动以下命令:

    mongod --dbpath=/data/example/firstset1 --port 10001 --replSet firstset --oplogSize 700 --rest --fork --logpath=/data/example/firstset1/firstset1.log --logappend --nojournal --directoryperdb

    同样启动其他两个实例,分别使用端口10002和10003。

  • 初始化副本集

    连接任意一个MongoDB实例,执行以下命令:

    mongo mongo01:10001/admin

    输入以下配置并运行:

    var config = {    "_id": "firstset",    "members": [        { "_id": 0, "host": "mongo01:10001" },        { "_id": 1, "host": "mongo01:10002" },        { "_id": 2, "host": "mongo01:10003" }    ]};rs.initiate(config);

    初始化成功后会显示信息,确认副本集已创建。

  • 插入测试数据

    使用MongoDB Shell执行以下命令:

    use mydb;for (let i = 0; i < 100000; i++) {    const name = animal[Math.floor(Math.random() * animal.length)];    const userId = i;    const boolean = [true, false][Math.floor(Math.random() * 2)];    const createdAt = new Date();    const number = Math.floor(Math.random() * 10001);    db.test_collection.insert({        name: name,        user_id: userId,        boolean: boolean,        added_at: createdAt,        number: number    });}

    这将向test_collection中插入100万条测试数据。

  • 部署第二个副本集

  • 创建数据目录

    创建以下目录结构:

    /data/example/secondset1/data/example/secondset2/data/example/secondset3

    使用命令:

    mkdir -p /data/example/secondset1 /data/example/secondset2 /data/example/secondset3
  • 启动三个MongoDB实例

    在不同的终端窗口启动以下命令:

    mongod --dbpath=/data/example/secondset1 --port 30001 --replSet secondset --oplogSize 700 --rest --fork --logpath=/data/example/secondset1/secondset1.log --logappend --nojournal --directoryperdb

    同样启动其他两个实例,分别使用端口30002和30003。

  • 初始化副本集

    连接任意一个MongoDB实例,执行以下命令:

    mongo mongo01:30001/admin

    输入以下配置并运行:

    db.runCommand({    "replSetInitiate": {        "_id": "secondset",        "members": [            { "_id": 0, "host": "mongo01:30001" },            { "_id": 1, "host": "mongo01:30002" },            { "_id": 2, "host": "mongo01:30003" }        ]    }});
  • 将副本集加入分片集群

    运行以下命令将副本集添加到分片集群:

    db.runCommand({    addShard: "secondset/mongo01:30001,mongo01:30002,mongo01:30003"});

    成功添加后会显示确认信息。

  • 分片集群部署

    配置服务器部署

  • 创建数据文件保存目录

    创建以下目录结构:

    /data/example/config1/data/example/config2/data/example/config3

    使用命令:

    mkdir -p /data/example/config1 /data/example/config2 /data/example/config3
  • 启动配置服务器

    在不同的终端窗口启动以下命令:

    mongod --configsvr --dbpath=/data/example/config1 --port 20001 --fork --logpath=/data/example/config1/config1.log --logappend

    同样启动其他两个配置服务器,分别使用端口20002和20003。

  • 启动分片主节点

    在新的终端窗口启动以下命令:

    mongos --configdb mongo01:20001,mongo01:20002,mongo01:20003 --port 27017 --chunkSize 1 --fork --logpath=/data/example/mongos.log --logappend
  • 添加分片

  • 连接分片主节点

    运行以下命令连接分片主节点:

    mongo mongo01:27017/admin
  • 添加第一个分片

    运行以下命令将第一个副本集添加为分片:

    db.runCommand({    addShard: "firstset/mongo01:10001,mongo01:10002,mongo01:10003"});
  • 验证分片添加

    运行以下命令确认分片是否已成功添加:

    db.runCommand({ listShards: 1 });

    输出结果应显示所有分片信息。

  • 总结

    通过以上步骤,可以成功部署MongoDB的副本集和分片集群,确保数据的高可用性和系统的水平扩展。副本集用于数据的主从复制,分片集群则通过将数据分布到多个分片上,提升查询性能和系统的扩展能力。

    上一篇:mongodb 与 c++ 的配合使用
    下一篇:MongoDB Replica Sets + Sharding 实战

    发表评论

    最新留言

    关注你微信了!
    [***.104.42.241]2025年05月19日 16时57分34秒