MongoDB 4.2分片叢集搭建及與3.4分片叢集搭建時的一些異同
作為忠實的MongoDB fan,有幸陪伴MongoDB的一路成長。目前,MongoDB 4.2版本已經發布,MongoDB 4.2版本的
分片叢集搭建,網上的資料也很多很全,但是,對於與MongoDB 3.6以下版本如3.4版本區別還是挺大,網上諸如4.2和3.4分片叢集的搭建對比比較少。這裡特此記錄下自己部署MongoDB3.4和MongoDB 4.2的一些區別。我的MongoDB 4.2分片叢集部署過程不是官方標準,僅僅拿來不同版本間分片叢集部署的一些區別,僅供參考。
1、配置資訊
關於MongoDB3.4和MongoDB4.2部署分片叢集的配置,我用的都是3臺機器,部署兩個資料分片、一個配置副本集,
三個mongos程式。各個機器的角色分配如下(以為MongoDB三臺主機均是透過VM克隆,主機名我沒修改,擔不妨礙分
片叢集的部署):
192.168.192.153 centos7 mongodb1 #firstset primary,secondset secondary,config selectself
192.168.192.154 mongodb2 #firstset ARBITER,secondset primary,config selectself
192.168.192.155 mongodb3 #firstset secondary,secondset ARBITER,config selectself
2、安裝目錄規劃
注意:相關的資料夾路徑需要事先建立並且設定好許可權,否則mongd程式將無法啟動
--basedir相同
--3.4
/home/mongo/mongodb3.4
--4.2
/home/mongo/mongodb4.2
--mongodb1
mkdir -p /opt/mongo/data/repset1
mkdir -p /opt/mongo/logs/firstset/
mkdir -p /opt/mongo/data/repset2
mkdir -p /opt/mongo/logs/secondset/
mkdir -p /opt/mongo/data/config/
mkdir -p /opt/mongo/logs/config/
mkdir -p /opt/mongo/logs/mongos/
--mongodb2
mkdir -p /opt/mongo/data/arbiter1
mkdir -p /opt/mongo/logs/arbiter1
mkdir -p /opt/mongo/data/repset2
mkdir -p /opt/mongo/logs/secondset/
mkdir -p /opt/mongo/data/config/
mkdir -p /opt/mongo/logs/config/
mkdir -p /opt/mongo/logs/mongos/
--mongodb3
mkdir -p /opt/mongo/data/repset1
mkdir -p /opt/mongo/logs/firstset/
mkdir -p /opt/mongo/data/arbiter2
mkdir -p /opt/mongo/logs/aribter2/
mkdir -p /opt/mongo/data/config/
mkdir -p /opt/mongo/logs/config/
mkdir -p /opt/mongo/logs/mongos/
3、MongoDB分片叢集的三個副本集啟動mongod例項
注意:為了方便對比,我這裡使用最少引數,直接命令列列出來使用到的引數
--3.4
#mongodb1
mongod --dbpath /opt/mongo/data/repset1 --port 10001 --replSet firstset --oplogSize 512 --rest --fork --logpath /opt/mongo/logs/firstset/firstset.log --logappend --nojournal --directoryperdb
mongod --configsvr --dbpath /opt/mongo/data/config --replSet csvr --port 20001 --fork --logpath /opt/mongo/logs/config/config.log --logappend
mongod --dbpath /opt/mongo/data/repset2 --port 30001 --replSet secondset --oplogSize 512 --rest --fork --logpath /opt/mongo/logs/secondset/secondset.log --logappend --nojournal --directoryperdb
#mongodb2
mongod --dbpath /opt/mongo/data/repset1 --port 10001 --replSet firstset --oplogSize 512 --rest --fork --logpath /opt/mongo/logs/firstset/firstset.log --logappend --nojournal --directoryperdb
mongod --configsvr --dbpath /opt/mongo/data/config --replSet csvr --port 20001 --fork --logpath /opt/mongo/logs/config/config.log --logappend
mongod --dbpath /opt/mongo/data/repset2 --port 30001 --replSet secondset --oplogSize 512 --rest --fork --logpath /opt/mongo/logs/secondset/secondset.log --logappend --nojournal --directoryperdb
#mongodb3
mongod --dbpath /opt/mongo/data/arbiter1 --port 10001 --replSet firstset --oplogSize 512 --rest --fork --logpath /opt/mongo/logs/dns_aribter1/aribter1.log --logappend --nojournal --directoryperdb
mongod --configsvr --dbpath /opt/mongo/data/config --replSet csvr --port 20001 --fork --logpath /opt/mongo/logs/config/config.log --logappend
mongod --dbpath /opt/mongo/data/arbiter2 --port 30001 --replSet secondset --oplogSize 512 --rest --fork --logpath /opt/mongo/logs/aribter2/aribter2.log --logappend --nojournal --directoryperdb
--4.2 #mongodb1 mongod --dbpath /opt/mongo/data/repset1 --port 10001 --shardsvr --replSet firstset --oplogSize 512 --bind_ip 0.0.0.0 --fork --logpath /opt/mongo/logs/firstset/firstset.log --logappend --journal --directoryperdb
mongod --dbpath /opt/mongo/data/repset2 --port 30001 --replSet secondset --oplogSize 512 --shardsvr --fork --bind_ip 0.0.0.0 --logpath /opt/mongo/logs/secondset/secondset.log --logappend --journal --directoryperdb
mongod --configsvr --dbpath /opt/mongo/data/config --replSet csvr --port 20001 --bind_ip 0.0.0.0 --fork --logpath /opt/mongo/logs/config/config.log --logappend
#mongodb2
mongod --dbpath /opt/mongo/data/arbiter1 --port 10001 --shardsvr --replSet firstset --oplogSize 512 --bind_ip 0.0.0.0 --fork --logpath /opt/mongo/logs/arbiter1/arbiter1.log --logappend --journal --directoryperdb
mongod --dbpath /opt/mongo/data/repset2 --port 30001 --replSet secondset --oplogSize 512 --shardsvr --fork --bind_ip 0.0.0.0 --logpath /opt/mongo/logs/secondset/secondset.log --logappend --journal --directoryperdb
mongod --configsvr --dbpath /opt/mongo/data/config --replSet csvr --port 20001 --bind_ip 0.0.0.0 --fork --logpath /opt/mongo/logs/config/config.log --logappend
#mongodb3
mongod --dbpath /opt/mongo/data/repset1 --port 10001 --shardsvr --replSet firstset --oplogSize 512 --bind_ip 0.0.0.0 --fork --logpath /opt/mongo/logs/firstset/firstset.log --logappend --journal --directoryperdb
mongod --dbpath /opt/mongo/data/arbiter2 --port 30001 --replSet secondset --oplogSize 512 --shardsvr --fork --bind_ip 0.0.0.0 --logpath /opt/mongo/logs/aribter2/aribter2.log --logappend --journal --directoryperdb
mongod --configsvr --dbpath /opt/mongo/data/config --replSet csvr --port 20001 --bind_ip 0.0.0.0 --fork --logpath /opt/mongo/logs/config/config.log --logappend
透過3.4和4.2的mongod例項啟動引數,發現:
a、3.4--rest在4.2中已經廢棄,4.2中會提示該引數不識別
b、3.4可以不開journal日誌,但是4.2中如果以replSet引數啟動,則必須開啟journal日誌,即使用引數--journal
c、3.4不要求mongod程式啟動使用--bind_ip繫結IP,但是,4.2的mongod程式必須指定--bind_ip限制mongod連線的ip,
否則,4.2的mongd程式啟動後將拒絕除127.0.0.1外的其他所有IP發起的連線請求
d、4.2叢集副本集分片叢集要求使用--shardsvr引數,否則,在mongos程式註冊副本集分片時將報錯並提示mongod必須
指定--shardsvr引數
4、兩個副本集初始化及配置庫副本集初始化
--分片1副本集,3.4可在任意節點進行分片1副本集的初始化,但是4.2分片1副本集初始化不能在仲裁節點進行,否則報錯
提示所在節點不可選舉,且4.2分片1副本集初始化在叢集哪個節點進行,哪個節點將成為主節點,priority引數和_id不起作
用。
#三個節點中規劃的分片1副本集資料主節點1,即mongodb1
mongo --port 10001
config={_id:"firstset",members:[]}
config.members.push({_id:0,host:"192.168.192.153:10001",priority:1})
config.members.push({_id:2,host:"192.168.192.154:10001",arbiterOnly:true})
config.members.push({_id:1,host:"192.168.192.155:10001",priority:2})
rs.initiate(config);
--分片2副本集,3.4可在任意節點進行分片1副本集的初始化,但是4.2分片2副本集初始化不能在仲裁節點進行,否則報錯
提示所在節點不可選舉,且4.2分片2副本集初始化在叢集哪個節點進行,哪個節點將成為主節點,priority引數和_id不起作
用。
#三個節點中規劃的分片2副本集資料主節點2,即mongodb2
mongo --port 30001
config={_id:"secondset",members:[]}
config.members.push({_id:0,host:"192.168. 192.153:30001" ,priority:1})
config.members.push({_id:1,host:"192.168. 192.154:30001" ,priority:2})
config.members.push({_id:2,host:"192.168. 192.155:30001",arbiterOnly:true})
rs.initiate(config);
--配置庫副本集3.4和4.2沒有區別,副本集內部會自動選舉副本集的主節點
#叢集任意節點
mongo --port 20001
rs.initiate( {
_id : "csvr",
configsvr: true,
members: [
{ _id: 0, host: "192.168.192.153:20001" },
{ _id: 1, host: "192.168.192.154:20001" },
{ _id: 2, host: "192.168.192.155:20001" }
]
});
5、啟動三個節點的mongos程式
--3.4
mongos --configdb 192.168.192.153:20001,192.168.192.154:20001,192.168.192.155:20001 --port 27017 --fork --logpath /opt/mongo/logs/mongos/mongos.log --logappend
--4.2
mongos --configdb csvr/192.168.192.154:20001,192.168.192.153:20001,192.168.192.155:20001 --bind_ip 0.0.0.0 --port 27017 --fork --logpath /opt/mongo/logs/mongos/mongos.log --logappend
mongos在3.4和4.2的啟動時區別是引數--bind_ip,3.4不指定--bind_id也不限制mongos程式的連線請求,但是3.4會拒絕
除127.0.0.1和--bind_ip指定的IP外的其他IP的請求
6、分片叢集的註冊
--3.4和4.2沒有區別
#叢集三個節點任意節點即可
mongo --port 27017
use admin
db.runCommand( { addShard : "firstset/192.168.192.153:10001,192.168.192.154:10001,192.168.192.155:10001" } )
db.runCommand( { addShard : "secondset/192.168.192.153:30001,192.168.192.154:30001,192.168.192.155:30001" })
7、設定分片庫和集合
mongo --port 27017
use admin
sh.enableSharding("testdb");
db.runCommand({"shardcollection":"testdb.test_collection","key":{"name":1}});
--批次插入資料
var arr=[];
for(var i=0;i<2000000;i++){
var uid = i;
var name = "mongodb"+i;
arr.push({"id":uid,"name":name});
}
db.users.insertMany(arr);
8、其他一些區別發現
a、3.4 在使用sh.status()時會自動詳細展示分片庫分片集合的資料分佈,但是4.2需要指定引數verbose
b、3.4檢視副本集副本資料時要執行rs.slaveOk(),4.2檢視副本集副本資料時要執行rs.secondaryOk();
關於mongodb 3.4和4.2其他使用或者特性上的區別,請讀者親自實驗慢慢發現吧~~
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29357786/viewspace-2731738/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MongoDB 分片叢集搭建MongoDB
- 搭建MongoDB分片叢集MongoDB
- MongoDB Sharding(二) -- 搭建分片叢集MongoDB
- 搭建高可用MongoDB叢集(四):分片MongoDB
- mongodb 分片叢集建立分片集合MongoDB
- MongoDB分片叢集新增分片(自用)MongoDB
- linux下Mongodb叢集搭建:分片+副本集LinuxMongoDB
- 【MongoDB】分片(sharding)+副本集(replSet)叢集搭建MongoDB
- MongoDB叢集之分片MongoDB
- 搭建 MongoDB分片(sharding) / 分割槽 / 叢集環境MongoDB
- mongodb 分片叢集設定MongoDB
- MongoDB分片叢集常用操作MongoDB
- mongodb副本叢集和分片叢集佈署MongoDB
- MongoDB分片叢集chunk的概念MongoDB
- mongodb 3.4 叢集搭建升級版 五臺叢集MongoDB
- 高可用mongodb叢集(分片+副本)MongoDB
- mongodb的分散式叢集(3、分片)MongoDB分散式
- 分片叢集元件元件
- 部署分片叢集
- Elasticsearch高階之-叢集搭建,資料分片Elasticsearch
- Mongodb分散式叢集副本集+分片MongoDB分散式
- MongoDB叢集設定集合分片生效及檢視集合分片情況MongoDB
- Redis叢集 - cluster叢集、資料分片Redis
- Docker 搭建叢集 MongoDBDockerMongoDB
- 4.2 叢集節點初步搭建
- zookeeper叢集及kafka叢集搭建Kafka
- Mongodb副本集+分片叢集環境部署記錄MongoDB
- MongoDB健壯叢集——用副本集做分片MongoDB
- MongoDB分片儲存的叢集架構實現MongoDB架構
- 管理 ES 叢集:分片設定及管理
- mysql學習筆記之快速搭建PXC叢集(Mycat分片)MySql筆記
- MongoDB高可用叢集搭建MongoDB
- mongodb叢集搭建及配置安全認證MongoDB
- mongodb分片搭建MongoDB
- MongoDB 分片叢集均衡器導致的效能下降MongoDB
- mongoDB研究筆記:分片叢集的工作機制MongoDB筆記
- 分片叢集平衡器Balancer
- redis叢集之分片叢集的原理和常用代理環境部署Redis