MongoDB 分片架构配置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 分片架构配置的主要内容,如果未能解决你的问题,请参考以下文章

Mongodb集群架构之分片架构

mongodb分片部署

『MongoDB』MongoDB高可用部署架构——分片集群篇(Sharding)

mongodb高可用配置之分片集群

mongodb高可用配置之分片集群

MongoDB——MongoDB分片集群(Sharded Cluster)