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 分片架构配置的主要内容,如果未能解决你的问题,请参考以下文章