mongoDB 集群模式記錄
replica set
(復(fù)制集)
-
replica set
是一組存儲(chǔ)了相同數(shù)據(jù)的 mongod 實(shí)例 - 包含數(shù)個(gè)數(shù)據(jù)節(jié)點(diǎn)和一個(gè)仲裁節(jié)點(diǎn)(可選,不超過(guò)1個(gè))
- 數(shù)據(jù)節(jié)點(diǎn)其中有1個(gè)主節(jié)點(diǎn)坎缭、其他的為副節(jié)點(diǎn)
- 寫(xiě)請(qǐng)求全部走主節(jié)點(diǎn);缺省情況下沉御,讀請(qǐng)求也走主節(jié)點(diǎn),通過(guò)配置荆针,可以使副節(jié)點(diǎn)接收讀請(qǐng)求
- 仲裁節(jié)點(diǎn)不存儲(chǔ)數(shù)據(jù)梅鹦,其作用是主持選舉
- 建議:一個(gè)
replica set
部署奇數(shù)個(gè)數(shù)據(jù)節(jié)點(diǎn) 或 偶數(shù)個(gè)數(shù)據(jù)節(jié)點(diǎn)+1個(gè)仲裁節(jié)點(diǎn) - 一個(gè)
replica set
建議的最小部署單元是3個(gè)節(jié)點(diǎn) - 一個(gè)
replica set
最多包含50個(gè)成員,最多包含7個(gè)有投票權(quán)的成員
sharded cluster
(分片集群)
Sharding 提供了對(duì)數(shù)據(jù)進(jìn)行分布式存儲(chǔ)的辦法之斯。
一個(gè) sharded Cluster
包括以下組件:
-
shard
:分片數(shù)據(jù),每個(gè)shard
都能以replica set
的形式部署 -
mongos
:查詢路由(客戶端通過(guò) mongos 訪問(wèn)集群) -
config servers
:存儲(chǔ)著元數(shù)據(jù)和集群的配置信息遣铝,必須以replica set
的形式部署
集群安裝
系統(tǒng)配置
- 關(guān)閉透明巨頁(yè)佑刷,具體參考官網(wǎng)文檔
- 修改
Max processes
設(shè)置,具體參考 soft rlimits too low. - 按系統(tǒng)版本下載對(duì)應(yīng)的 mongo 發(fā)布包
部署步驟
部署 config server
config server
必須以 replica set
的形式部署酿炸。
此處測(cè)試用瘫絮,在 host1
上部署三個(gè) config server
實(shí)例,分別監(jiān)聽(tīng) 27017填硕,27018麦萤,27019 端口。
啟動(dòng)三個(gè)實(shí)例后廷支,執(zhí)行 mongo 連上任意一個(gè):
在 mongo shell 里執(zhí)行:
rs.initiate(
{
_id : "configset",
members: [
{ _id : 0, host : "host1:27017" },
{ _id : 1, host : "host1:27018" },
{ _id : 2, host : "host1:27019" }
]
}
)
這里的 _id 為 config server
的 replica set
的名稱频鉴。
成功返回后執(zhí)行
rs.status()
可以觀察 replica set
的狀態(tài),一主二從說(shuō)明選主成功恋拍。
創(chuàng)建 Shard Replica Sets
在 host1、host2藕甩、host3 上部署一個(gè) replica set
(1上一個(gè)仲裁節(jié)點(diǎn)施敢、2上一個(gè)數(shù)據(jù)節(jié)點(diǎn),3上一個(gè)數(shù)據(jù)節(jié)點(diǎn))
執(zhí)行 mongo 連上任意一個(gè):
在 mongo shell 里執(zhí)行:
rs.initiate(
{
_id : "shard1",
members: [
{ _id : 0, host : "host2:27017" },
{ _id : 1, host : "host3:27017" },
{ _id : 2, host : "host1:27020", arbiterOnly : true }
]
}
)
之后可以執(zhí)行 rs.status()
觀察 replica set
的狀態(tài)狭莱,一主一從一仲裁說(shuō)明選主成功僵娃。
部署 mongos
在 host4 上部署4個(gè) mongos 實(shí)例,分別監(jiān)聽(tīng) 27017腋妙,27018默怨,27019,27020 端口骤素。
執(zhí)行 mongo 連上任意一個(gè):
sh.addShard( "shard1/host2:27017")
sh.addShard( "shard1/host3:27017")
sh.addShard( "shard1/host1:27020")
客戶端連接 mongo 集群
按前述結(jié)構(gòu)部署集群時(shí)匙睹,客戶端只需連接 mongos,無(wú)需關(guān)心后部的詳情济竹。
構(gòu)建的 mongoConnectionString 如下:
mongodb://host4:27017,host4:27018,host4:27019,host4:27020/dbname
如需開(kāi)啟讀寫(xiě)分離痕檬,設(shè)置 readPreference
參數(shù)即可, 如下:
mongodb://host4:27017,host4:27018,host4:27019,host4:27020/dbname?readPreference=secondaryPreferred
監(jiān)控工具
Ops Manager
- 官方出品,企業(yè)版自帶送浊,社區(qū)版自行下載
- 監(jiān)控功能免費(fèi)梦谜,其余需要付費(fèi)
Nosql client
- 用法類似(Ops Manager),配置更簡(jiǎn)單
附錄
1. 配置服務(wù)器 配置參考
sharding:
clusterRole: configsvr
replication:
replSetName: configset
systemLog:
destination: file
path: "/path/to/log/mongod.log"
logAppend: true
processManagement:
fork: true
pidFilePath: "/path/to/mongo.pid"
net:
port: 27017
storage:
dbPath: "/path/to/data/"
2. 分片數(shù)據(jù)節(jié)點(diǎn) 配置參考
sharding:
clusterRole: shardsvr
replication:
replSetName: shardset1
systemLog:
destination: file
path: "/path/to/log/mongod.log"
logAppend: true
processManagement:
fork: true
pidFilePath: "/path/to/mongo.pid"
net:
port: 27017
storage:
dbPath: "/path/to/log/data/"
3. 分片仲裁節(jié)點(diǎn) 配置參考
sharding:
clusterRole: shardsvr
replication:
replSetName: shard1
systemLog:
destination: file
path: "/path/to/log/mongod.log"
logAppend: true
processManagement:
fork: true
pidFilePath: "/path/to/mongo.pid"
net:
port: 27017
storage:
dbPath: "/path/to/data/"
journal:
enabled: false
4. 查詢路由 配置參考
sharding:
configDB: "configset/host1:27017,host1:27018,host1:27019"
systemLog:
destination: file
path: "/path/to/log/mongos.log"
logAppend: true
processManagement:
fork: true
pidFilePath: "/path/to/mongos.pid"
net:
port: 27017