MongoDB 分片架構配置
阿新 • • 發佈:2018-04-20
MongoDB 分片架構配置MongoDB分片架構
前面介紹了MongoDB主從架構和復制集架構的配置,但這兩種配置都有一個共同特性就是只有主節點能讀寫,從節點只能讀。如果主節點寫入的壓力較大,那麽還是會有性能瓶頸。
在Mongodb裏面存在另一種集群,就是分片技術,可以滿足MongoDB數據量大量增長的需求。當MongoDB存儲海量的數據時,一臺機器可能不足以存儲數據,也可能不足以提供可接受的讀寫吞吐量。
這時,我們就可以通過在多臺機器上分割數據,使得數據庫系統能存儲和處理更多的數據。
下圖展示是MongoDB的分片集群架構
上圖中主要有如下所述三個主要組件:
Shard: 用於存儲實際的數據塊,實際生產環境中一個shard server角色可由幾臺機器組個一個replica set承擔,防止主機單點故障
Config Server: mongod實例,存儲了整個 ClusterMetadata,其中包括 chunk信息。
Query Routers: 前端路由,客戶端由此接入,且讓整個集群看上去像單一數據庫,前端應用可以透明使用。
分片集群配置
創建config復制集:
註意:mongodb3.4版本開始要求config sever是復制集架構,而不能是單臺,防止單節點故障
config server的配置, 我這裏是在單機測試機上配置進行測試,dbpath、logpath、port改成不一樣
config server必須設置
configsvr = true
並且設置replSet復制集名稱,前面說了mongodb3.4開始要求config server是復制集架構,不能為單節點
# cat conf1.conf dbpath=/data/mongo/config1 configsvr = true logpath=/var/log/mongo/config/conf1.log logappend = true fork = true port = 27100 bind_ip=127.0.0.1 replSet = conf # cat conf2.conf dbpath=/data/mongo/config2 configsvr = true logpath=/var/log/mongo/config/conf2.log logappend = true fork = true port = 27101 bind_ip=127.0.0.1 replSet = conf
啟動config server兩個實例
mongod --config conf1.conf mongod --config conf2.conf
config server復制集初始化
> rs.initiate({ _id:"conf",members: [{_id:0, host:"127.0.0.1:27100"},{_id:1, host:"127.0.0.1:27101"}] } ) { "ok" : 1 } conf:PRIMARY> rs.status() { "set" : "conf", "date" : ISODate("2018-04-20T08:56:14.588Z"), "myState" : 1, "term" : NumberLong(1), "configsvr" : true, "heartbeatIntervalMillis" : NumberLong(2000), "optimes" : { "lastCommittedOpTime" : { "ts" : Timestamp(1524214563, 1), "t" : NumberLong(1) }, "readConcernMajorityOpTime" : { "ts" : Timestamp(1524214563, 1), "t" : NumberLong(1) }, "appliedOpTime" : { "ts" : Timestamp(1524214563, 1), "t" : NumberLong(1) }, "durableOpTime" : { "ts" : Timestamp(1524214563, 1), "t" : NumberLong(1) } }, "members" : [ { "_id" : 0, "name" : "127.0.0.1:27100", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 49, "optime" : { "ts" : Timestamp(1524214563, 1), "t" : NumberLong(1) }, "optimeDate" : ISODate("2018-04-20T08:56:03Z"), "infoMessage" : "could not find member to sync from", "electionTime" : Timestamp(1524214561, 1), "electionDate" : ISODate("2018-04-20T08:56:01Z"), "configVersion" : 1, "self" : true }, { "_id" : 1, "name" : "127.0.0.1:27101", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 24, "optime" : { "ts" : Timestamp(1524214563, 1), "t" : NumberLong(1) }, "optimeDurable" : { "ts" : Timestamp(1524214563, 1), "t" : NumberLong(1) }, "optimeDate" : ISODate("2018-04-20T08:56:03Z"), "optimeDurableDate" : ISODate("2018-04-20T08:56:03Z"), "lastHeartbeat" : ISODate("2018-04-20T08:56:13.193Z"), "lastHeartbeatRecv" : ISODate("2018-04-20T08:56:13.673Z"), "pingMs" : NumberLong(0), "syncingTo" : "127.0.0.1:27100", "configVersion" : 1 } ], "ok" : 1 }
MongoDB 分片架構配置