溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

mongodb分片群集怎么配置?

發(fā)布時間:2020-05-25 14:09:51 來源:億速云 閱讀:186 作者:鴿子 欄目:系統(tǒng)運維

配置mongodb分片群集
Sharding cluster介紹
這是一種可以水平擴展的模式,在數(shù)據(jù)量很大時特給力,數(shù)據(jù)量很大時一般會采用這種架構(gòu)去構(gòu)建monodb系統(tǒng)。

要構(gòu)建一個 MongoDB Sharding Cluster,需要三種角色:
Shard Server: mongod 實例,用于存儲實際的數(shù)據(jù)塊,實際生產(chǎn)環(huán)境中一個shard server角色可由幾臺機器組個一個relica set承擔,防止主機單點故障
Config Server: mongod 實例,存儲了整個 Cluster Metadata,其中包括 chunk 信息。
Route Server: mongos 實例,前端路由,客戶端由此接入,且讓整個集群看上去像單一數(shù)據(jù)庫,前端應(yīng)用可以透明使用。

Sharding架構(gòu)圖:

實際環(huán)境架構(gòu)
本例架構(gòu)示例圖:

1.分別在10.10.1.[107~109]機器運行一個mongod實例(稱為mongod shard11,mongod shard12,mongod shard13)組織replica set1,作為cluster的shard1
2.分別在10.10.1.[107~109]機器運行一個mongod實例(稱為mongod shard21,mongod shard22,mongod shard23)組織replica set2,作為cluster的shard2
3.分別在10.10.2.[89~91]機器運行一個mongod實例(稱為mongod shard31,mongod shard32,mongod shard33)組織replica set3,作為cluster的shard3
4.分別在10.10.2.[89~91]機器運行一個mongod實例(稱為mongod shard41,mongod shard42,mongod shard43)組織replica set4,作為cluster的shard4
5.1.107、1.108、2.89機器運行一個mongod實例,作為3個config server
6.每臺機器運行一個mongs進程,用于客戶端連接
主機  IP  端口信息
Server1 10.10.1.107 mongod shard11:27017
mongod shard21:27018
mongod config1:20000
mongs1:30000
Server2 10.10.1.108 mongod shard12:27017
mongod shard22:27018
mongod config2:20000
mongs2:30000
Server3 10.10.1.109 mongod shard13:27017
mongod shard23:27018
mongs3:30000
Server4 10.10.2.89  mongod shard31:27017
mongod shard41:27018
mongod config3:20000
mongs4:30000
Server5 10.10.2.90  mongod shard32:27017
mongod shard42:27018
mongs5:30000
Server6 10.10.2.91  mongod shard33:27017
mongod shard43:27018
mongs6:30000

各節(jié)點hosts文件添加
#shard1
10.10.1.107 MongoDB_shard11.itings.com  
10.10.1.108 MongoDB_shard12.itings.com
10.10.1.109 MongoDB_shard13.itings.com

#shard2
10.10.1.107 MongoDB_shard21.itings.com  
10.10.1.108 MongoDB_shard22.itings.com 
10.10.1.109 MongoDB_shard23.itings.com 

#shard3
10.10.2.89  MongoDB_shard31.itings.com  
10.10.2.90  MongoDB_shard32.itings.com 
10.10.2.91  MongoDB_shard33.itings.com 

#shard4
10.10.2.89  MongoDB_shard41.itings.com  
10.10.2.90  MongoDB_shard42.itings.com 
10.10.2.91  MongoDB_shard43.itings.com 

#config1 
10.10.1.107 MongoDB_config1.itings.com  
10.10.1.108 MongoDB_config2.itings.com 
10.10.2.89  MongoDB_config3.itings.com 

#mongos
10.10.1.107 MongoDB_mongos1.itings.com  
10.10.1.108 MongoDB_mongos2.itings.com 
10.10.1.109 MongoDB_mongos3.itings.com 
10.10.2.89  MongoDB_mongos4.itings.com  
10.10.2.90  MongoDB_mongos5.itings.com 
10.10.2.91  MongoDB_mongos6.itings.com

軟件準備
1.安裝monodb軟件
wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.4.9.tgz
tar xvzf mongodb-linux-x86_64-2.4.9.tgz
mv mongodb-linux-x86_64-2.4.9 /usr/local/mongodb

安裝好后,目錄結(jié)構(gòu)如下:
tree mongodb-linux-x86_64-2.4.9
mongodb-linux-x86_64-1.6.2
|-- GNU-AGPL-3.0
|-- README
|-- THIRD-PARTY-NOTICES
-- bin<br/>|-- bsondump<br/>|-- mongo<br/>|-- mongod<br/>|-- mongodump<br/>|-- mongoexport<br/>|-- mongofiles<br/>|-- mongoimport<br/>|-- mongorestore<br/>|-- mongos<br/>|-- mongosniff<br/>-- mongostat
1 directory, 14 files

2.創(chuàng)建數(shù)據(jù)目錄
根據(jù)本例sharding架構(gòu)圖所示,在各臺sever上創(chuàng)建shard數(shù)據(jù)文件目錄
Server1:
mkdir -p  /data/mongodb/data/shard11
mkdir -p  /data/mongodb/data/shard21

Server2:
mkdir -p  /data/mongodb/data/shard12
mkdir -p  /data/mongodb/data/shard22

Server3:
mkdir -p  /data/mongodb/data/shard13
mkdir -p  /data/mongodb/data/shard23

Server4:
mkdir -p  /data/mongodb/data/shard31
mkdir -p  /data/mongodb/data/shard41

Server5:
mkdir -p  /data/mongodb/data/shard32
mkdir -p  /data/mongodb/data/shard42
Server6:
mkdir -p  /data/mongodb/data/shard33
mkdir -p  /data/mongodb/data/shard43

配置relica sets
1.配置replica sets:
Server1:
/usr/local/mongodb/bin/mongod  --shardsvr --replSet shard1 --port 27017 --dbpath /data/mongodb/data/shard11 --oplogSize 8192 --logpath /data/mongodb/data/shard11.log --logappend --fork

/usr/local/mongodb/bin/mongod  --shardsvr --replSet shard2 --port 27018 --dbpath /data/mongodb/data/shard21 --oplogSize 8192 --logpath /data/mongodb/data/shard21.log --logappend --fork

Server2:
/usr/local/mongodb/bin/mongod  --shardsvr --replSet shard1 --port 27017 --dbpath /data/mongodb/data/shard12 --oplogSize 8192 --logpath /data/mongodb/data/shard12.log --logappend --fork

/usr/local/mongodb/bin/mongod  --shardsvr --replSet shard2 --port 27018 --dbpath /data/mongodb/data/shard22 --oplogSize 8192 --logpath /data/mongodb/data/shard22.log --logappend --fork

Server3:
/usr/local/mongodb/bin/mongod  --shardsvr --replSet shard1 --port 27017 --dbpath /data/mongodb/data/shard13 --oplogSize 8192 --logpath /data/mongodb/data/shard13.log --logappend --fork

/usr/local/mongodb/bin/mongod  --shardsvr --replSet shard2 --port 27018 --dbpath /data/mongodb/data/shard23 --oplogSize 8192 --logpath /data/mongodb/data/shard23.log --logappend --fork

Server4:
/usr/local/mongodb/bin/mongod  --shardsvr --replSet shard3 --port 27017 --dbpath /data/mongodb/data/shard31 --oplogSize 8192 --logpath /data/mongodb/data/shard31.log --logappend --fork

/usr/local/mongodb/bin/mongod  --shardsvr --replSet shard4 --port 27018 --dbpath /data/mongodb/data/shard41 --oplogSize 8192 --logpath /data/mongodb/data/shard41.log --logappend --fork

Server5:
/usr/local/mongodb/bin/mongod  --shardsvr --replSet shard3 --port 27017 --dbpath /data/mongodb/data/shard32 --oplogSize 8192 --logpath /data/mongodb/data/shard32.log --logappend --fork

/usr/local/mongodb/bin/mongod  --shardsvr --replSet shard4 --port 27018 --dbpath /data/mongodb/data/shard42 --oplogSize 8192 --logpath /data/mongodb/data/shard42.log --logappend --fork

Server6:
/usr/local/mongodb/bin/mongod  --shardsvr --replSet shard3 --port 27017 --dbpath /data/mongodb/data/shard33 --oplogSize 8192 --logpath /data/mongodb/data/shard33.log --logappend --fork

/usr/local/mongodb/bin/mongod  --shardsvr --replSet shard4 --port 27018 --dbpath /data/mongodb/data/shard43 --oplogSize 8192 --logpath /data/mongodb/data/shard43.log --logappend --fork

初始化replica set
用mongo連接其中一個mongod,執(zhí)行:
/usr/local/mongodb/bin/mongo --host 10.10.1.107 --port 27017
config = {_id: 'shard1', members: [
{_id: 0, host: 'MongoDB_shard11.itings.com:27017'},
{_id: 1, host: 'MongoDB_shard12.itings.com:27017'},
{_id: 2, host: 'MongoDB_shard13.itings.com:27017'}]
}

rs.initiate(config);

/usr/local/mongodb/bin/mongo --host 10.10.1.107 --port 27018
config = {_id: 'shard2', members: [
{_id: 0, host: 'MongoDB_shard21.itings.com:27018'},
{_id: 1, host: 'MongoDB_shard22.itings.com:27018'},
{_id: 2, host: 'MongoDB_shard23.itings.com:27018'}]
}
rs.initiate(config);

初始化節(jié)點
/usr/local/mongodb/bin/mongo --host 10.10.2.89 --port 27017
config = {_id: 'shard3', members: [
{_id: 0, host: 'MongoDB_shard31.itings.com:27017'},
{_id: 1, host: 'MongoDB_shard32.itings.com:27017'},
{_id: 2, host: 'MongoDB_shard33.itings.com:27017'}]
}
rs.initiate(config);

/usr/local/mongodb/bin/mongo --host 10.10.2.89 --port 27018
初始化節(jié)點
config = {_id: 'shard4', members: [
{_id: 0, host: 'MongoDB_shard41.itings.com:27018'},
{_id: 1, host: 'MongoDB_shard42.itings.com:27018'},
{_id: 2, host: 'MongoDB_shard43.itings.com:27018'}]
}
rs.initiate(config);
配置三臺config server
Server1機器
mkdir -p  /data/mongodb/data/config
啟動configserver1
/usr/local/mongodb/bin/mongod --configsvr --dbpath /data/mongodb/data/config --port 20000 --logpath /data/mongodb/data/config.log --logappend --fork

Server2機器
mkdir -p  /data/mongodb/data/config
啟動configserver2
/usr/local/mongodb/bin/mongod --configsvr --dbpath /data/mongodb/data/config --port 20000 --logpath /data/mongodb/data/config.log --logappend --fork

Server4機器
mkdir -p  /data/mongodb/data/config
啟動configserver3
/usr/local/mongodb/bin/mongod --configsvr --dbpath /data/mongodb/data/config --port 20000 --logpath /data/mongodb/data/config.log --logappend --fork

配置mongs
所有機器都啟動mongos
/usr/local/mongodb/bin/mongos --configdb MongoDB_config1.itings.com:20000,MongoDB_config2.itings.com:20000,MongoDB_config3.itings.com:20000 --port 30000 --chunkSize 5 --logpath /data/mongodb/data/mongos.log --logappend --fork
#mongs不需要dbpath
Configuring the Shard Cluster
連接到其中一個mongos進程,并切換到admin數(shù)據(jù)庫做以下配置
1.連接到mongs,并切換到admin
/usr/local/mongodb/bin/mongo MongoDB_mongos1.itings.com:30000/admin

2.加入shards
db.runCommand( { addshard : "shard1/MongoDB_shard11.itings.com:27017,MongoDB_shard12.itings.com:27017,MongoDB_shard13.itings.com:27017",name:"s1"} );
db.runCommand( { addshard : "shard2/MongoDB_shard21.itings.com:27018,MongoDB_shard22.itings.com:27018,MongoDB_shard23.itings.com:27018",name:"s2"} );
db.runCommand( { addshard : "shard3/MongoDB_shard31.itings.com:27017,MongoDB_shard32.itings.com:27017,MongoDB_shard33.itings.com:27017",name:"s3"} );
db.runCommand( { addshard : "shard4/MongoDB_shard41.itings.com:27018,MongoDB_shard42.itings.com:27018,MongoDB_shard43.itings.com:27018",name:"s4"} );

獲得分片概要信息:
db.printShardingStatus();

3.可選參數(shù)
Name:用于指定每個shard的名字,不指定的話系統(tǒng)將自動分配
maxSize:指定各個shard可使用的最大磁盤空間,單位megabytes
樣例:
db.runCommand( { addshard : "shard1/MongoDB_shard11.itings.com:27017,MongoDB_shard12.itings.com:27017,MongoDB_shard13.itings.com:27017",name:"s1",maxSize: 512000} );

獲得分片概要信息:
db.printShardingStatus();
db.user.getShardDistribution();
db.runCommand( { listshards : 1 } );

查看各collection的狀態(tài)
db.printCollectionStats()

激活分片樣例
db.runCommand({"enablesharding" : "kaola_play"});
db.runCommand( { shardcollection : "kaola_play.user",key : {_id: 1} } );
附錄:mongodb運行模式介紹
?單機模式
?Replication模式,這又可分為Master-Slave Replication和Replica Sets
?Sharding模式

1.單機模式
這里有目前的mongodb 1.6.2版本作介紹,mongodb安裝后目錄結(jié)構(gòu)如下圖所示非常簡單,所占空間也不到100M

通過執(zhí)行bin/mongod –dbpath <數(shù)據(jù)文件目錄>就可以啟動mongodb實例(暫且也稱為實例),與mysql類似,一個mongodb實例里可以創(chuàng)建多個數(shù)據(jù)庫。同一臺主機也可以起多個mongodb實例

1.Replication模式
MongoDB提供在sever之間異步數(shù)據(jù)復制功能,用于failover和數(shù)據(jù)冗余。從1.6版本起多了replica sets功能,1.6版本之前只有Master/Slave replication結(jié)構(gòu)
?Mster-Slave Relication   跟mysql的M/S結(jié)構(gòu)很類似
?Relica Sets        1.6版本開始推出的新功能,能自動故障切換

關(guān)于Mster-Slave Relication和 Relica Sets,怎么選擇呢?
Which should I use?
?if using <v1.6 : master/slave  1.6版本之前,那就沒得選,只有M/S
?if need automatic fail-over and recovery (easy administration): replica sets  想做倒自動故障切換,那就用replica sets
?if using --auth (security) or --slavedelay : for now, master/slave  想指定slave延遲時間,就用M/S
?if using sharding : either, but replica sets are best for clusters that are not small  用sharding架構(gòu)時
?if risk averse : master/slave (replica sets are new to v1.6.0)  顧慮風險的話,用m/s

個人理解,從1.6版本推出relica sets開始,逐漸推薦用relica sets這種模式,能自動故障恢復,sharding模式中也會用到

2.Sharding模式
這是一種可以水平擴展的模式,在數(shù)據(jù)量很大時特給力,一般企業(yè)級應(yīng)用中都會采用這種架構(gòu)去構(gòu)建monodb系統(tǒng)。

要構(gòu)建一個 MongoDB Sharding Cluster,需要三種角色:
Shard Server: mongod 實例,用于存儲實際的數(shù)據(jù)塊,實際生產(chǎn)環(huán)境中一個shard server可由幾臺機器組個一個relica set承擔,防止主機單點故障
Config Server: mongod 實例,存儲了整個 Cluster Metadata,其中包括 chunk 信息。
Route Server: mongos 實例,前端路由,客戶端由此接入,且讓整個集群看上去像單一數(shù)據(jù)庫,前端應(yīng)用可以透明使用。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI