mongodb?linux下集群搭建過程

mongodb的集群結(jié)構(gòu)如上圖
網(wǎng)上有個(gè)mongo3.0的集群例子:
http://www.dhdzp.com/article/191388.htm
router提供入口,mongo客戶端通過router連入集群(本例只配置一個(gè)route集群)
Config Servers輔助記錄數(shù)據(jù)分片(一個(gè)集群)
Shard為數(shù)據(jù)分片集群(本例中配置兩個(gè),用于驗(yàn)證分片),
本例中,為每個(gè)集群(shard config)三個(gè)mongo實(shí)例
config與shard為同一個(gè)類型的進(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生成一個(gè)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啟動(dòng)config集群(3個(gè)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
啟動(dòng)成功后
用命令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);三個(gè)config mongo進(jìn)程會(huì)自動(dòng)選出一個(gè)primary,過一會(huì)再進(jìn)入shell就會(huì)發(fā)現(xiàn) shell提示變成primary
順便給config添加一個(gè)admin用戶,(一個(gè)集群只要在primary進(jìn)程添加一次,會(huì)自動(dòng)同步給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ù)
啟動(dòng)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
并用同樣的方法啟動(dòng)shard2集群,用于實(shí)驗(yàn)數(shù)據(jù)分片
對(duì)應(yīng)的目錄與分片名改成shard2
啟動(dòng)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)建一個(gè)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ù)避免測(cè)試時(shí)間過長(zhǎng)
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客戶端觀察兩個(gè)shard集群
會(huì)發(fā)現(xiàn)數(shù)據(jù)分流到兩個(gè)集群了

也可以直接連route觀察數(shù)據(jù)

補(bǔ)充:
把js存到文件里給shell執(zhí)行會(huì)比較方便
執(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mongodb 數(shù)據(jù)庫(kù)操作--備份 還原 導(dǎo)出 導(dǎo)入
mongodb數(shù)據(jù)備份和還原主要分為二種,一種是針對(duì)于庫(kù)的mongodump和mongorestore,一種是針對(duì)庫(kù)中表的mongoexport和mongoimport。2014-07-07
MongoDB db.serverStatus()輸出內(nèi)容中文注釋
這篇文章主要介紹了MongoDB db.serverStatus()輸出內(nèi)容中文注釋,本文收集了2個(gè)版本的中文注釋來講解,需要的朋友可以參考下2014-08-08
Mongodb數(shù)據(jù)庫(kù)兩種啟動(dòng)方法小結(jié)
MongoDB是一種開源的服務(wù)器端NoSQL數(shù)據(jù)庫(kù)管理系統(tǒng),它提供了一種靈活的框架,可以快速地存儲(chǔ)、處理和管理大量的數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于Mongodb數(shù)據(jù)庫(kù)兩種啟動(dòng)方法的相關(guān)資料,需要的朋友可以參考下2023-12-12
mongodb+php實(shí)現(xiàn)簡(jiǎn)單的增刪改查
這篇文章主要介紹了mongodb+php實(shí)現(xiàn)簡(jiǎn)單的增刪改查的相關(guān)資料,需要的朋友可以參考下2016-07-07
使用aggregate在MongoDB中查詢重復(fù)數(shù)據(jù)記錄的方法
這篇文章主要介紹了使用aggregate在MongoDB中查詢重復(fù)數(shù)據(jù)記錄的方法的相關(guān)資料,需要的朋友可以參考下2016-01-01

