MongoDB集群

MongoDB是一个高性能、开源的NoSQL数据库,广泛用于大数据应用和互联网应用中。为了提高数据的可靠性和扩展性,我们可以搭建MongoDB集群。MongoDB集群可以通过复制集和分片两种方式来实现。复制集提供数据的冗余备份和故障转移功能,而分片则将数据分割存储在多个MongoDB实例上,提高数据的负载能力。
复制集
复制集是MongoDB最简单的集群形式,由一个主节点和多个从节点组成。主节点负责处理写操作和读取操作,同时会将写操作同步给从节点。从节点只负责处理读取操作,当主节点宕机时可以选择出一个从节点作为新的主节点,从而实现故障转移。
部署步骤
- 启动主节点
- 连接主节点,并初始化复制集
- 启动从节点
- 将从节点加入复制集
- 查看复制集状态
运行结果
{
"set": "rs0",
"myState": 1,
"term": NumberLong(2),
"syncSourceHost": "",
"syncSourceId": -1,
"heartbeatIntervalMillis": NumberLong(2000),
"majorityVoteCount": 2,
"writeMajorityCount": 2,
"votingMembersCount": 2,
"optimes": {
"lastCommittedOpTime": {
"ts": Timestamp(1622486715, 1),
"t": NumberLong(2)
},
"lastCommittedWallTime": ISODate("2021-05-31T08:31:55.605Z"),
"readConcernMajorityOpTime": {
"ts": Timestamp(1622486715, 1),
"t": NumberLong(2)
},
"readConcernMajorityWallTime": ISODate("2021-05-31T08:31:55.605Z"),
"appliedOpTime": {
"ts": Timestamp(1622486715, 1),
"t": NumberLong(2)
},
"durableOpTime": {
"ts": Timestamp(1622486715, 1),
"t": NumberLong(2)
},
"lastAppliedWallTime": ISODate("2021-05-31T08:31:55.605Z"),
"lastDurableWallTime": ISODate("2021-05-31T08:31:55.605Z")
},
"lastStableRecoveryTimestamp": Timestamp(1622486705, 1),
"lastStableCheckpointTimestamp": Timestamp(1622486705, 1),
"electionCandidateMember": {
"attempts": NumberLong(0),
"lastEcho": ISODate("2021-05-31T08:31:54.605Z"),
"electionId": ObjectId("7fffffff0000000000000002")
},
"members": [
{
"_id": 0,
"name": "localhost:27017",
"health": 1,
"state": 1,
"stateStr": "PRIMARY",
"uptoDate": true,
"optime": {
"ts": Timestamp(1622486715, 1),
"t": NumberLong(2)
},
"optimeDate": ISODate("2021-05-31T08:31:55Z"),
"syncingTo": "",
"configVersion": 3,
"self": true,
"lastHeartbeatMessage": ""
},
{
"_id": 1,
"name": "localhost:27018",
"health": 1,
"state": 2,
"stateStr": "SECONDARY",
"uptoDate": true,
"optime": {
"ts": Timestamp(1622486715, 1),
"t": NumberLong(2)
},
"optimeDurable": {
"ts": Timestamp(1622486715, 1),
"t": NumberLong(2)
},
"optimeDate": ISODate("2021-05-31T08:31:55Z"),
"optimeDurableDate": ISODate("2021-05-31T08:31:55Z"),
"lastHeartbeatMessage": ""
}
],
"ok": 1,
"$clusterTime": {
"clusterTime": Timestamp(1622486715, 1),
"signature": {
"hash": BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId": NumberLong(0)
}
},
"operationTime": Timestamp(1622486715, 1)
}
分片
分片是MongoDB的水平扩展方式,将数据分散存储在多台主机上,从而提高数据的查询性能和负载能力。分片集群由三个部分组成:分片(Shard)、路由(Router)、配置服务器(Config Server)。
部署步骤
- 启动配置服务器
- 初始化配置服务器复制集
- 启动分片
- 初始化分片复制集
- 启动路由
- 将分片加入到路由中
运行结果
总结
MongoDB集群可以通过复制集和分片两种方式实现数据的高可用和横向扩展。复制集提供了数据的冗余备份和故障转移功能,适合小规模应用;而分片可以将数据分散存储在多台主机上,提高了数据的查询性能和负载能力,适合大规模应用。在搭建MongoDB集群时,一定要注意配置参数和监控集群状态,确保数据的安全和可靠性。