MongoDB集群

MongoDB集群

MongoDB集群

MongoDB是一个高性能、开源的NoSQL数据库,广泛用于大数据应用和互联网应用中。为了提高数据的可靠性和扩展性,我们可以搭建MongoDB集群。MongoDB集群可以通过复制集和分片两种方式来实现。复制集提供数据的冗余备份和故障转移功能,而分片则将数据分割存储在多个MongoDB实例上,提高数据的负载能力。

复制集

复制集是MongoDB最简单的集群形式,由一个主节点和多个从节点组成。主节点负责处理写操作和读取操作,同时会将写操作同步给从节点。从节点只负责处理读取操作,当主节点宕机时可以选择出一个从节点作为新的主节点,从而实现故障转移。

部署步骤

  1. 启动主节点
mongod --port 27017 --dbpath /data/db1 --replSet rs0
Bash
  1. 连接主节点,并初始化复制集
mongo --port 27017
> rs.initiate()
Bash
  1. 启动从节点
mongod --port 27018 --dbpath /data/db2 --replSet rs0
Bash
  1. 将从节点加入复制集
mongo --port 27018
> rs.add("localhost:27017")
Bash
  1. 查看复制集状态
mongo --port 27017
> rs.status()
Bash

运行结果

{
    "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)
}
SQL

分片

分片是MongoDB的水平扩展方式,将数据分散存储在多台主机上,从而提高数据的查询性能和负载能力。分片集群由三个部分组成:分片(Shard)、路由(Router)、配置服务器(Config Server)。

部署步骤

  1. 启动配置服务器
mongod --configsvr --replSet configReplSet --port 27019 --dbpath /data/configdb
Bash
  1. 初始化配置服务器复制集
mongo --port 27019
> rs.initiate()
Bash
  1. 启动分片
mongod --shardsvr --replSet shard1 --port 27020 --dbpath /data/shard1
mongod --shardsvr --replSet shard2 --port 27021 --dbpath /data/shard2
Bash
  1. 初始化分片复制集
mongo --port 27020
> rs.initiate()

mongo --port 27021
> rs.initiate()
Bash
  1. 启动路由
mongos --configdb localhost:27019 --port 27022
Bash
  1. 将分片加入到路由中
mongo --port 27022
> sh.addShard("shard1/localhost:27020")
> sh.addShard("shard2/localhost:27021")
Bash

运行结果

{
    "ok" : 1,
    "operationTime" : Timestamp(1622491025, 1),
    "$clusterTime" : {
        "clusterTime" : Timestamp(1622491025, 1),
        "signature" : {
            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
            "keyId" : NumberLong(0)
        }
    }
}
SQL

总结

MongoDB集群可以通过复制集和分片两种方式实现数据的高可用和横向扩展。复制集提供了数据的冗余备份和故障转移功能,适合小规模应用;而分片可以将数据分散存储在多台主机上,提高了数据的查询性能和负载能力,适合大规模应用。在搭建MongoDB集群时,一定要注意配置参数和监控集群状态,确保数据的安全和可靠性。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册