文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-06-29 06:18

关注

小编给大家分享一下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

解压可以看到

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

用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

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

在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集群

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

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

也可以直接连route观察数据

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

补充:

把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集群搭建过程的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-人工智能
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯