MongoDB 持久化

复制

MongoDB复制是将数据同步在多个服务器的过程。

复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。

  • 保障数据的安全性

  • 数据高可用性 (24*7)

  • 灾难恢复

  • 无需停机维护(如备份,重建索引,压缩)

  • 分布式读取数据

MongoDB复制是主从结构:一主一从或一主多从

主从节点设置

  • 启动一个MongoDB服务,连接后使用命令rs.initiate()来启动一个新的副本集

    • 使用rs.conf()来查看副本集的配置,使用rs.status()命令查看副本集状态

  • 添加从节点:使用rs.add(HOST_NAME:PORT)方法来添加副本集的成员

    • 使用命令db.isMaster()判断当前运行的Mongo服务是否为主节点

MongoDB中只能通过主节点将Mongo服务添加到副本集中,主从在主机宕机后所有服务将停止,而副本集在主机宕机后,副本会接管主节点成为主节点,不会出现宕机的情况。

分片

分片:是另一种集群,当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量。这时就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据。

  • 复制所有的写入操作到主节点

  • 延迟的敏感数据会在主节点查询

  • 单个副本集限制在12个节点

  • 当请求量巨大时会出现内存不足。

  • 本地磁盘不足

  • 垂直扩展价格昂贵

下图展示了在MongoDB中使用分片集群结构分布:

img

上图中主要有如下所述三个主要组件:

  • Shard:

    用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个replica set承担,防止主机单点故障

  • Config Server:

    mongod实例,存储了整个 ClusterMetadata,其中包括 chunk信息。

  • Query Routers:

    前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。

备份和恢复

备份

mongodump命令可以导出所有数据到指定目录中

mongodump -h dbhost -d dbname -o dbdirectory
  • -h:MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017

  • -d:需要备份的数据库实例,例如:test

  • -o:备份的数据存放位置,例如:c:\data\dump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。

恢复

mongorestore 命令恢复备份的数据

mongorestore -h <hostname><:port> -d dbname <path>
  • --host <:port>, -h <:port>:

    MongoDB所在服务器地址,默认为: localhost:27017

  • --db , -d :

    需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2

  • --drop:

    恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!

  • <path>:

    mongorestore 最后的一个参数,设置备份数据所在位置,例如:c:\data\dump\test。

    你不能同时指定 <path> 和 --dir 选项,--dir也可以设置备份目录。

  • --dir:

    指定备份的目录

    你不能同时指定 <path> 和 --dir 选项。

监控

MongoDB中提供了mongostat 和 mongotop 两个命令来监控MongoDB的运行情况

mongostat

mongostat是mongodb自带的状态检测工具,在命令行下使用。它会间隔固定时间获取mongodb的当前运行状态,并输出;进入mongodb\bin执行mongostat命令

mongotop

mongotop也是mongodb下的一个内置工具,跟踪一个MongoDB的实例,查看哪些大量的时间花费在读取和写入数据。 mongotop提供每个集合的水平的统计数据。默认情况下,mongotop返回值的间隔为一秒

进入mongodb\bin执行mongotop命令,可以在后面指定间隔时间

posted @ 2020-12-20 17:22  huiyii  阅读(1700)  评论(0编辑  收藏  举报