千家信息网

linux下mongodb集群搭建过程的示例分析

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,小编给大家分享一下linux下mongodb集群搭建过程的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!mongo
千家信息网最后更新 2026年11月02日linux下mongodb集群搭建过程的示例分析

小编给大家分享一下linux下mongodb集群搭建过程的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

mongodb的集群结构如上图

网上有个mongo3.0的集群例子:

https://www.yisu.com/article/191388.htm

router提供入口,mongo客户端通过router连入集群(本例只配置一个route集群)

Config Servers辅助记录数据分片(一个集群)

Shard为数据分片集群(本例中配置两个,用于验证分片),

本例中,为每个集群(shard config)三个mongo实例

config与shard为同一个类型的进程mongod

route则为mongos进程

下载mongo二进制压缩包

https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-5.0.6.tgz

解压可以看到

用openssl生成一个key,用于mongo集群内部数据通迅

openssl rand -base64 123 > keyfile

mongod配置为件(config与shard通用)

mongo_node.conf:

storage:    engine: wiredTiger    directoryPerDB: true    journal:        enabled: true systemLog:    destination: file    logAppend: trueoperationProfiling:  slowOpThresholdMs: 10000replication:    oplogSizeMB: 10240processManagement:    fork: truesecurity:    authorization: "disabled"

mongos的配置文件(即图中的route)

mongos.conf:

systemLog:    destination: file    logAppend: true processManagement:    fork: true

启动config集群(3个mongod进程)

WORK_DIR=/home/???/go/mongodb/mongo_test KEYFILE=$WORK_DIR/key/keyfilecat $KEYFILECONFFILE=$WORK_DIR/conf/mongo_node.confcat $CONFFILEMONGOD=mongodecho $MONGOD$MONGOD --port 26001 --bind_ip_all --configsvr --replSet configReplSet --keyFile $KEYFILE --dbpath $WORK_DIR/config_cluster/conf_n1/data --pidfilepath $WORK_DIR/config_cluster/conf_n1/db.pid --logpath $WORK_DIR/config_cluster/conf_n1/db.log --config $CONFFILE $MONGOD --port 26002 --bind_ip_all --configsvr --replSet configReplSet --keyFile $KEYFILE --dbpath $WORK_DIR/config_cluster/conf_n2/data --pidfilepath $WORK_DIR/config_cluster/conf_n2/db.pid --logpath $WORK_DIR/config_cluster/conf_n2/db.log --config $CONFFILE $MONGOD --port 26003 --bind_ip_all --configsvr --replSet configReplSet --keyFile $KEYFILE --dbpath $WORK_DIR/config_cluster/conf_n3/data --pidfilepath $WORK_DIR/config_cluster/conf_n3/db.pid --logpath $WORK_DIR/config_cluster/conf_n3/db.log --config $CONFFILE

启动成功后

用命令mongo --port 26001 --host 127.0.0.1

如下图,进入mongo的shell

在shell中输入如下js代码 设置config集群

cfg={    _id:"configReplSet",     configsvr: true,    members:[        {_id:0, host:'127.0.0.1:26001'},        {_id:1, host:'127.0.0.1:26002'},         {_id:2, host:'127.0.0.1:26003'}    ]};rs.initiate(cfg);

三个config mongo进程会自动选出一个primary,过一会再进入shell就会发现 shell提示变成primary

顺便给config添加一个admin用户,(一个集群只要在primary进程添加一次,会自动同步给secondary)

use admindb.createUser({    user:'admin',pwd:'123456',    roles:[        {role:'clusterAdmin',db:'admin'},        {role:'userAdminAnyDatabase',db:'admin'},        {role:'dbAdminAnyDatabase',db:'admin'},        {role:'readWriteAnyDatabase',db:'admin'}]})

同样之后shard也做同样的添加用户操作,便于后继观察数据

启动shard

WORK_DIR=/home/???/go/mongodb/mongo_test KEYFILE=$WORK_DIR/key/keyfilecat $KEYFILECONFFILE=$WORK_DIR/conf/mongo_node.confcat $CONFFILEMONGOD=mongodecho $MONGODecho "start shard1 replicaset"$MONGOD --port 27001 --bind_ip_all --shardsvr --replSet shard1 --keyFile $KEYFILE --dbpath $WORK_DIR/shard1/sh2_n1/data --pidfilepath $WORK_DIR/shard1/sh2_n1/db.pid --logpath $WORK_DIR/shard1/sh2_n1/db.log --config $CONFFILE$MONGOD --port 27002 --bind_ip_all --shardsvr --replSet shard1 --keyFile $KEYFILE --dbpath $WORK_DIR/shard1/sh2_n2/data --pidfilepath $WORK_DIR/shard1/sh2_n2/db.pid --logpath $WORK_DIR/shard1/sh2_n2/db.log --config $CONFFILE$MONGOD --port 27003 --bind_ip_all --shardsvr --replSet shard1 --keyFile $KEYFILE --dbpath $WORK_DIR/shard1/sh2_n3/data --pidfilepath $WORK_DIR/shard1/sh2_n3/db.pid --logpath $WORK_DIR/shard1/sh2_n3/db.log --config $CONFFILE

用mongo --port 27001 --host 127.0.0.1进入mongo shell

cfg={    _id:"shard1",     members:[        {_id:0, host:'127.0.0.1:27001'},        {_id:1, host:'127.0.0.1:27002'},        {_id:2, host:'127.0.0.1:27003'}    ]}; rs.initiate(cfg);

同样用之前的添加用户的js

并用同样的方法启动shard2集群,用于实验数据分片

对应的目录与分片名改成shard2

启动route

WORK_DIR=/home/???/go/mongodb/mongo_test KEYFILE=$WORK_DIR/key/keyfilecat $KEYFILECONFFILE=$WORK_DIR/conf/mongos.confcat $CONFFILEMONGOS=mongosecho $MONGOSecho "start mongos route instances"$MONGOS --port=25001 --bind_ip_all --configdb configReplSet/127.0.0.1:26001,127.0.0.1:26002,127.0.0.1:26003 --keyFile $KEYFILE --pidfilepath $WORK_DIR/route/r_n1/db.pid --logpath $WORK_DIR/route/r_n1/db.log --config $CONFFILE$MONGOS --port 25002 --bind_ip_all --configdb configReplSet/127.0.0.1:26001,127.0.0.1:26002,127.0.0.1:26003 --keyFile $KEYFILE --pidfilepath $WORK_DIR/route/r_n2/db.pid --logpath $WORK_DIR/route/r_n2/db.log --config $CONFFILE$MONGOS --port 25003 --bind_ip_all --configdb configReplSet/127.0.0.1:26001,127.0.0.1:26002,127.0.0.1:26003 --keyFile $KEYFILE --pidfilepath $WORK_DIR/route/r_n3/db.pid --logpath $WORK_DIR/route/r_n3/db.log --config $CONFFILE

路由添加分片

用mongo --port 25001 --host 127.0.0.1 -u admin -p 123456进入shell

或者这样也可 mongo mongodb://admin:123456@127.0.0.1:25001

在mongo shell分别执行以下两行js

sh.addShard("shard1/127.0.0.1:27001")sh.addShard("shard2/127.0.0.1:27011")

创建一个mongo database与collection

并设置分片

use test sh.enableSharding("test")db.createCollection("test_shard")sh.shardCollection("test.test_shard", {_id:"hashed"}, false, { numInitialChunks: 4} )

在mongo shell用以下js添加数据,可以修改循环次数避免测试时间过长

var cnt = 0;for(var i=0; i<1000; i++){    var dl = [];    for(var j=0; j<100; j++){        dl.push({                "bookId" : "BBK-" + i + "-" + j,                "type" : "Revision",                "version" : "IricSoneVB0001",                "title" : "Jackson's Life",                "subCount" : 10,                "location" : "China CN Shenzhen Futian District",                "author" : {                      "name" : 50,                      "email" : "RichardFoo@yahoo.com",                      "gender" : "female"                },                "createTime" : new Date()            });      }      cnt += dl.length;      db.test_shard.insertMany(dl);      print("insert ", cnt);}

在windows下安装mongodb,利用自带的compass客户端观察两个shard集群

会发现数据分流到两个集群了

也可以直接连route观察数据

补充:

把js存到文件里给shell执行会比较方便

执行js命令如下:

mongo mongodb://admin:123456@127.0.0.1:25001 ./test.js

示例js代码:

print('=========WECOME=========='); conn = new Mongo("mongodb://admin:123456@192.168.2.129:25001");db = conn.getDB("testjs")sh.enableSharding("testjs")db.createCollection("testjs_col")sh.shardCollection("testjs.testjs_col", {_id:"hashed"}, false, { numInitialChunks: 4} )    var dl = [];    for(var j=0; j<10; j++){        dl.push({                "bookId" : "BBK-" + 0 + "-" + j,                "type" : "Revision",                "version" : "IricSoneVB0001",                "title" : "Jackson's Life",                "subCount" : 10,                "location" : "China CN Shenzhen Futian District",                "author" : {                      "name" : 50,                      "email" : "RichardFoo@yahoo.com",                      "gender" : "female"                },                "createTime" : new Date()            });    }    db.testjs_col.insertMany(dl);cursor = db.testjs_col.find();printjson(cursor.toArray());

以上是"linux下mongodb集群搭建过程的示例分析"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

集群 数据 进程 配置 示例 两个 用户 篇文章 观察 过程 分析 三个 代码 内容 命令 客户 客户端 文件 j++ 上图 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 南京欣网互联网络科技有限公司 广州紫鲸互联网科技有限公司 为想互联网科技怎么样 科技互联网龙头 科技互联网项目 金融科技 互联网金融 中国 科技 互联网 智网互联网科技 极限挑战互联网科技 无锡溥仪互联网科技有限公司 佩信高科技互联网 互联网科技项目计划书材料类 速维有品互联网信息科技(苏州)有限公司 畅思互联网科技 佛山市拉法互联网科技有限公司 元气玛特互联网科技公司是外包吗 厦门江牛科技互联网 西安有哪些互联网高科技企业 第三届互联网大会安防黑科技 互联网科技创业计划的风险分析 科技金融是不是互联网金融 互联网金融监管科技数据 汇久创客互联网科技 西藏七维空间互联网科技有限公司 厦门比较好的科技互联网公司 开一家科技互联网公司需要多少钱 上海钢联属于互联网科技股吗 广东工业互联网大赛深圳学泰科技 皮皮虾互联网科技有限公司 艺电能源互联网科技有限公司招聘
0