mongodb?linux下集群搭建過程
mongodb的集群結(jié)構(gòu)如上圖
網(wǎng)上有個mongo3.0的集群例子:
http://www.dbjr.com.cn/article/191388.htm
router提供入口,mongo客戶端通過router連入集群(本例只配置一個route集群)
Config Servers輔助記錄數(shù)據(jù)分片(一個集群)
Shard為數(shù)據(jù)分片集群(本例中配置兩個,用于驗證分片),
本例中,為每個集群(shard config)三個mongo實例
config與shard為同一個類型的進(jìn)程mongod
route則為mongos進(jìn)程
下載mongo二進(jìn)制壓縮包
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-5.0.6.tgz
解壓可以看到
用openssl生成一個key,用于mongo集群內(nèi)部數(shù)據(jù)通迅
openssl rand -base64 123 > keyfile
mongod配置為件(config與shard通用)
mongo_node.conf:
storage: engine: wiredTiger directoryPerDB: true journal: enabled: true systemLog: destination: file logAppend: true operationProfiling: slowOpThresholdMs: 10000 replication: oplogSizeMB: 10240 processManagement: fork: true security: authorization: "disabled"
mongos的配置文件(即圖中的route)
mongos.conf:
systemLog: destination: file logAppend: true processManagement: fork: true
啟動config集群(3個mongod進(jìn)程)
WORK_DIR=/home/???/go/mongodb/mongo_test KEYFILE=$WORK_DIR/key/keyfile cat $KEYFILE CONFFILE=$WORK_DIR/conf/mongo_node.conf cat $CONFFILE MONGOD=mongod echo $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
如下圖,進(jìn)入mongo的shell
在shell中輸入如下js代碼 設(shè)置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進(jìn)程會自動選出一個primary,過一會再進(jìn)入shell就會發(fā)現(xiàn) shell提示變成primary
順便給config添加一個admin用戶,(一個集群只要在primary進(jìn)程添加一次,會自動同步給secondary)
use admin db.createUser({ user:'admin',pwd:'123456', roles:[ {role:'clusterAdmin',db:'admin'}, {role:'userAdminAnyDatabase',db:'admin'}, {role:'dbAdminAnyDatabase',db:'admin'}, {role:'readWriteAnyDatabase',db:'admin'} ]})
同樣之后shard也做同樣的添加用戶操作,便于后繼觀察數(shù)據(jù)
啟動shard
WORK_DIR=/home/???/go/mongodb/mongo_test KEYFILE=$WORK_DIR/key/keyfile cat $KEYFILE CONFFILE=$WORK_DIR/conf/mongo_node.conf cat $CONFFILE MONGOD=mongod echo $MONGOD echo "start shard1 replicaset" $MONGOD --port 27001 --bind_ip_all --shardsvr --replSet shard1 --keyFile $KEYFILE --dbpath $WORK_DIR/shard1/sh1_n1/data --pidfilepath $WORK_DIR/shard1/sh1_n1/db.pid --logpath $WORK_DIR/shard1/sh1_n1/db.log --config $CONFFILE $MONGOD --port 27002 --bind_ip_all --shardsvr --replSet shard1 --keyFile $KEYFILE --dbpath $WORK_DIR/shard1/sh1_n2/data --pidfilepath $WORK_DIR/shard1/sh1_n2/db.pid --logpath $WORK_DIR/shard1/sh1_n2/db.log --config $CONFFILE $MONGOD --port 27003 --bind_ip_all --shardsvr --replSet shard1 --keyFile $KEYFILE --dbpath $WORK_DIR/shard1/sh1_n3/data --pidfilepath $WORK_DIR/shard1/sh1_n3/db.pid --logpath $WORK_DIR/shard1/sh1_n3/db.log --config $CONFFILE
用mongo --port 27001 --host 127.0.0.1進(jìn)入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集群,用于實驗數(shù)據(jù)分片
對應(yīng)的目錄與分片名改成shard2
啟動route
WORK_DIR=/home/???/go/mongodb/mongo_test KEYFILE=$WORK_DIR/key/keyfile cat $KEYFILE CONFFILE=$WORK_DIR/conf/mongos.conf cat $CONFFILE MONGOS=mongos echo $MONGOS echo "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進(jìn)入shell
或者這樣也可 mongo mongodb://admin:123456@127.0.0.1:25001
在mongo shell分別執(zhí)行以下兩行js
sh.addShard("shard1/127.0.0.1:27001") sh.addShard("shard2/127.0.0.1:27011")
創(chuàng)建一個mongo database與collection
并設(shè)置分片
use test sh.enableSharding("test") db.createCollection("test_shard") sh.shardCollection("test.test_shard", {_id:"hashed"}, false, { numInitialChunks: 4} )
在mongo shell用以下js添加數(shù)據(jù),可以修改循環(huán)次數(shù)避免測試時間過長
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集群
會發(fā)現(xiàn)數(shù)據(jù)分流到兩個集群了
也可以直接連route觀察數(shù)據(jù)
補充:
把js存到文件里給shell執(zhí)行會比較方便
執(zhí)行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());
到此這篇關(guān)于mongodb linux下集群搭建的文章就介紹到這了,更多相關(guān)mongodb集群搭建內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Morphia實現(xiàn)MongoDB按小時、按天聚合操作方法
這篇文章主要介紹了基于Morphia實現(xiàn)MongoDB按小時、按天聚合操作 ,實現(xiàn)思路是啟動定時任務(wù),對各用戶的設(shè)備狀態(tài)數(shù)據(jù)分別按照小時以及天進(jìn)行聚合,并存儲進(jìn)數(shù)據(jù)庫中供用戶后續(xù)查詢.需要的朋友可以參考下2019-07-07MongoDB安裝到windows服務(wù)的方法及遇到問題的完美解決方案
這篇文章主要介紹了MongoDB安裝到windows服務(wù)的方法及遇到問題的完美解決方案,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2016-11-11mongodb實現(xiàn)數(shù)組對象求和方法實例
這篇文章主要給大家介紹了關(guān)于mongodb實現(xiàn)數(shù)組對象求和的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01Mongodb聚合函數(shù)count、distinct、group如何實現(xiàn)數(shù)據(jù)聚合操作
Mongodb中自帶的基本聚合函數(shù)有三種:count、distinct和group。下面我們分別來講述一下這三個基本聚合函數(shù)及如何實現(xiàn)數(shù)據(jù)聚合操作,感興趣的朋友一起學(xué)習(xí)吧2016-05-05Ubuntu 14.04 安裝 MongoDB 及 PHP MongoDB Driver詳細(xì)介紹
這篇文章主要介紹了Ubuntu 14.04 安裝 MongoDB 及 PHP MongoDB Driver詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2016-10-10MongoDB使用自帶的命令行工具進(jìn)行備份和恢復(fù)的教程
這篇文章主要介紹了MongoDB使用自帶的命令行工具進(jìn)行備份和恢復(fù)的教程,我們只需要在命令行界面中用簡單的命令操作mongorestore和mongodump工具就可以實現(xiàn),需要的朋友可以參考下2016-06-06