1. 程式人生 > >MongoDB 分片架構配置

MongoDB 分片架構配置

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 分片架構配置