一、環境準備
1.本例使用3台Linux主機,IP地址如下:
點擊(此處)摺疊或開啟 Server A: 192.168.1.231
Server B: 192.168.1.232
Server C: 192.168.1.233
2.根據需要,開啟相應 主機 防火牆的相關連接埠。本次需要用到3台主機,所以開啟這3台主機的以下連接埠:
點擊(此處)摺疊或開啟 -A INPUT -m state --state NEW -m tcp -p tcp --dport 27017 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 27018 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 27019 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 20000 -j ACCEPT
二、搭建分布式叢集
運用MongoDB的複製集(Replica Sets)+分區(Sharding)就能實現MongoDB分布式高可用的叢集。
分區(sharding)能夠增加更多的機器來應對不斷增加的負載和資料,也不影響應用。
複製集(Replica Sets)能確保每個分區節點都具有自動備份、自動故障恢複能力。
1.叢集的環境
架構圖:
主機設計:
2.配置Replica Sets
建立資料目錄:
點擊(此處)摺疊或開啟 mkdir -p /data/{shard1-1,shard2-1,config} #在serverA上
mkdir -p /data/{shard1-2,shard2-2,config} #在serverB上
mkdir -p /data/{shard1-3,shard2-3,config} #在serverC上
2.1 配置 shard1 的 Replica Sets :
#在serverA上啟動shard1-1
點擊(此處)摺疊或開啟 ./mongod --fork --shardsvr --port 27018 --dbpath /data/shard1-1/ --logpath /data/shard1-1/shard1-1.log --logappend --replSet shard1 --directoryperdb
# 在 serverB 上啟動 shard1-2
點擊(此處)摺疊或開啟 ./mongod --fork --shardsvr --port 27018 --dbpath /data/shard1-2/ --logpath /data/shard1-2/shard1-2.log --logappend --replSet shard1 --directoryperdb
# 在 serverC 上啟動 shard1-3
點擊(此處)摺疊或開啟 ./mongod --fork --shardsvr --port 27018 --dbpath /data/shard1-3/ --logpath /data/shard1-3/shard1-3.log --logappend --replSet shard1 --directoryperdb
用 mongo 串連其中一台主機的 27018 連接埠的 mongod ,初始化複製集 shard1 :
./mongo --port 27018
點擊(此處)摺疊或開啟 >config={_id:'shard1',members:[
{_id:0,host:'192.168.1.231:27018',priority:2},
{_id:1,host:'192.168.1.232:27018',priority:1},
{_id:2,host:'192.168.1.233:27018',arbiterOnly:true}]
}
>rs.initiate(config)
2.2 配置shard2 的Replica Sets
#在serverA上啟動shard2-1
點擊(此處)摺疊或開啟 ./mongod --fork --shardsvr --port 27019 --dbpath /data/shard2-1/ --logpath /data/shard2-1/shard2-1.log --logappend --replSet shard2 --directoryperdb
# 在 serverB 上啟動 shard2-2
點擊(此處)摺疊或開啟 ./mongod --fork --shardsvr --port 27019 --dbpath /data/shard2-2/ --logpath /data/shard2-2/shard2-2.log --logappend --replSet shard2 --directoryperdb
# 在 serverC 上啟動 shard2-3
點擊(此處)摺疊或開啟 ./mongod --fork --shardsvr --port 27019 --dbpath /data/shard2-3/ --logpath /data/shard2-3/shard2-3.log --logappend --replSet shard2 --directoryperdb
用 mongo 串連其中一台主機 ( 建議在 ServerB 上 ) 的 27019 連接埠的 mongod ,初始化複製集 shard2 :
./ mongo --port 27019
點擊(此處)摺疊或開啟 >config={_id:'shard2',members:[
{_id:0,host:'192.168.1.231:27019',arbiterOnly:true},
{_id:1,host:'192.168.1.232:27019',priority:1},
{_id:2,host:'192.168.1.233:27019',priority:2}]
}
>rs.initiate(config)