当前位置: 首页 > article >正文

深入浅出MongoDB(三)

深入浅出MongoDB(三)

文章目录

    • 深入浅出MongoDB(三)
      • 复制
      • 副本集设置
      • 分片
      • 分片实例
      • 备份与恢复
      • 监控
      • ObjectId

复制

  1. 复制时将数据同步在多个服务器的过程,提供了数据的冗余备份,在多个服务器上存储数据副本,提高了数据的高可用,可以保证数据的安全性,可以从硬件故障和服务中断中恢复数据。

  2. 复制报站个数据的安全性、高可用、灾难恢复、无需停机维护、分布式读取数据。

  3. 复制原理是复制至少需要两个节点,一个主节点处理客户端请求,其余的是从节点复制主节点上的数据。主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证主从数据一致。

  4. 副本集的特征是N个节点的集群,任意节点都可以作为主节点,所有写入操作都在主节点上,自动故障转移和恢复。

副本集设置

使用同一个mongodb实现主从配置。

  1. 关闭正在运行的mongodb服务器,通过--replSet选项启动mongodb。
# 启动实例rs0
mongod --port 27017 --dbpath 'D:\mongodb\data' --replSet rs0
# 启动新的副本集
rs.initiate()
# 查看副本及配置
rs.conf()
# 查看副本集状态
rs.status()
  1. 添加成员
# 把已经启动的mongodb服务添加到副本集
rs.add("mongod1.net:27017")
# 只能通过主节点把mongo服务添加到副本集中,判断当前是否为主节点
db.isMaster()

分片

  1. 由于复制所有的写入操作到主节点,延迟的敏感数据会在主节点查询,单个副本集限制在12个节点,当请求量巨大时会出现内存不足,本地磁盘不足等,所以需要使用分片。
  2. 分片集群由以下组件构成
    在这里插入图片描述
  • sharded:每个分片包含分片数据的一个子集。每个分片必须作为副本集部署。
  • mongos:充当查询路由,为客户端应用和分片集群之间提供了接口,采用对冲读取以最小化延迟。
  • config servers:配置服务器为集群存储元数据和配置设置。配置服务器必须作为副本集部署。

分片实例

  1. 分片结构
shard server 1:27015
shard server 2:27016
shard server 3:27017
shard server 4:27018
config server: 27100
Router: 40000
  1. 启动shard server,以shard server 1为例
mkdir -p /mongodb/shard/s0
mkdir -p /mongodb/shard/log
mongod --port 27015 --dbpath=/mongodb/shard/s0 
--logpath=/mongodb/shard/log/s0.log --logappend --fork
  1. 启动config server
mkdir -p /mongodb/shard/config
mongod --port 27100 --dbpath=/mongodb/shard/config 
--logpath=/mongodb/shard/log/config.log --logappend --fork
  1. 启动router
# chunkSize用来指定chunk大小,单位是MB,默认200MB
mongos --port 40000 --configdb localhost;27100 --fork --logpath=/mongodb/shard/log/router.log --chunkSize 500
  1. 配置分片,登录到mongos,添加shard
mongo admin --port 40000
db.runCommand({addshard:"localhost:27015"})
......
# 设置分片存储的数据库
db.runCommand({enablesharding:"test"})
db.runCommand({shardcollection:"test.log", key:{id:1, time:1}})

备份与恢复

  1. 使用mongodump命令来备份数据,可以导出所有数据到指定目录中,能通过参数指定导出的数据量级转存的服务器。
# -h指定服务器地址,-d指定备份的数据库实例,-o指定备份的数据存放目录
> mongodump -h dbhost -d dbname -o dbdirectory [-port port_number --dbpath DB_PATH --out BACKUP_DIRECTORY --collection COLLECTION]
  1. 使用mongorestore命令来恢复备份的数据。
# -h指定服务器地址,-d需要回复的数据库实例,--directoryperdb备份数据所在位置,--drop先删除当前数据然后恢复备份数据
> mongorestore -h dbhost -d dbname --directoryperdb dbdirectory

监控

  1. mongodb提供了mongostat和mongotop两个命令来监控mongodb的运行情况。
  2. mongostat是自带的命令行状态监测工具,会间隔固定时间获取mongodb的运行状态并输出。如果我们发现数据库突然变慢或者有其他问题,可以通过该工具查看mongodb的状态。
  3. mongotop也是内置工具,提供了方法用来跟踪一个mongodb实例,提供每个集合的水平的统计数据。

ObjectId

  1. ObjectId对象Id是一个12字节的BSON类型数据,前4个字节表示时间戳,接下来的3个字节是机器标识码,紧接的两个字节由进程id(PID)组成,最后三个字节是随机数。
  2. mongodb中存储的文档必须有一个"_id"键,这个键的值可以使任何类型的,默认是一个ObjectId对象。在一个集合里面中每个文档都有唯一的"_id"值,来确保集合里面每个文档都能被唯一标识。

http://www.kler.cn/news/328202.html

相关文章:

  • Linux gadget 模拟触控屏 支持多点触控
  • 【监控体系搭建三】Docker部署PrometeusGrafana
  • Linux网络命令:用于管理和查询系统名称解析器(DNS)的实用工具resolvectl详解
  • 【湖南步联科技身份证】 身份证读取与酒店收银系统源码整合———未来之窗行业应用跨平台架构
  • TypeScript 设计模式之【状态模式】
  • JavaScript Set基础与实战应用
  • 基于大数据的健身器材销售数据分析及可视化系统
  • Python:lambda 函数详解 以及使用
  • 如何在本地和远程删除 Git 分支
  • SQL,将多对多的关联记录按行输出
  • Qt Creator安卓环境配置【筑基篇】
  • 数据结构-4.1.特殊矩阵的压缩存储
  • 【STM32单片机_(HAL库)】4-3-2【定时器TIM】测量按键按下时间1——编程实现捕获功能
  • 在Unity编辑器中实现组件的复制与粘贴:完整指南
  • Vue3学习(六)Vue3 + ts几种写法
  • 深入工作流调度的内核
  • 等保测评:企业数字安全的坚实盾牌
  • [Docker学习笔记]利用Dockerfile创建镜像
  • 无人机之编队控制篇
  • 速盾:cdn是怎么加速视频的?
  • C++第3课——保留小数点、比较运算符、逻辑运算符、布尔类型以及if-else分支语句(含视频讲解)
  • JAVA连接HDFS操作
  • docker(1) --- win11环境配置
  • React Native使用高德地图
  • vscode 的terminal 输出打印行数限制设置
  • 深度学习之贝叶斯分类器
  • camunda + oracle 启动报错 解决方法
  • Nginx的命令行控制
  • NLP:BERT的介绍并使用该模型计算文本相似度
  • VS2013 运行Qt生成的.exe报错