MongoDB常见操作及集群搭建

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
日志服务 SLS,月写入数据量 50GB 1个月
简介: 本文阅读大概需要13分钟。

简介


MongoDB是一个基于分布式文件存储的数据库。由C++语言编写;旨在为WEB应用提供可扩展的高性能数据存储解决方案。

特点

高性能、易部署、易使用,存储数据非常方便。

功能特性

  1. 面向集合存储,易存储对象类型的数据
  2. 模式自由
  3. 支持动态查询
  4. 支持完全索引,包含内部对象
  5. 支持查询
  6. 支持复制和故障恢复
  7. 使用高效的二进制数据存储,包括大型对象(如视频等)
  8. 自动处理碎片,以支持云计算层次的扩展性
  9. 支持RUBY,PYTHON,JAVA,C++,PHP等多种语言
  10. 文件存储格式为BSON(一种JSON的扩展)
  11. 可通过网络访问

基本操作


安装

  1. curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz
  2. tar -zxvf mongodb-linux-x86_64-3.0.6.tgz                              
  3. mv  mongodb-linux-x86_64-3.0.6/ /usr/local/mongodb

添加到 PATH 路径中:

  1. export PATH=/usr/local/mongodb/bin:$PATH

参数说明

基本配置

  1. --quiet     # 安静输出
  2. --port arg     # 指定服务端口号,默认端口27017
  3. --bind_ip arg     # 绑定服务IP,若绑定127.0.0.1,则只能本机访问,不指定默认本地所有IP
  4. --logpath arg     # 指定MongoDB日志文件,注意是指定文件不是目录
  5. --logappend     # 使用追加的方式写日志
  6. --pidfilepath arg     # PID File 的完整路径,如果没有设置,则没有PID文件
  7. --keyFile arg     # 集群的私钥的完整路径,只对于Replica Set 架构有效
  8. --unixSocketPrefix arg     # UNIX域套接字替代目录,(默认为 /tmp)
  9. --fork     # 以守护进程的方式运行MongoDB,创建服务器进程
  10. --auth     # 启用验证
  11. --cpu     # 定期显示CPU的CPU利用率和iowait
  12. --dbpath arg     # 指定数据库路径
  13. --diaglog arg     # diaglog选项 0=off 1=W 2=R 3=both 7=W+some reads
  14. --directoryperdb     # 设置每个数据库将被保存在一个单独的目录
  15. --journal     # 启用日志选项,MongoDB的数据操作将会写入到journal文件夹的文件里
  16. --journalOptions arg     # 启用日志诊断选项
  17. --ipv6     # 启用IPv6选项
  18. --jsonp     # 允许JSONP形式通过HTTP访问(有安全影响)
  19. --maxConns arg     # 最大同时连接数 默认2000
  20. --noauth     # 不启用验证
  21. --nohttpinterface     # 关闭http接口,默认关闭27018端口访问
  22. --noprealloc     # 禁用数据文件预分配(往往影响性能)
  23. --noscripting     # 禁用脚本引擎
  24. --notablescan     # 不允许表扫描
  25. --nounixsocket     # 禁用Unix套接字监听
  26. --nssize arg (=16)     # 设置信数据库.ns文件大小(MB)
  27. --objcheck     # 在收到客户数据,检查的有效性,
  28. --profile arg     # 档案参数 0=off 1=slow, 2=all
  29. --quota     # 限制每个数据库的文件数,设置默认为8
  30. --quotaFiles arg     # number of files allower per db, requires --quota
  31. --rest     # 开启简单的rest API
  32. --repair     # 修复所有数据库run repair on all dbs
  33. --repairpath arg     # 修复库生成的文件的目录,默认为目录名称dbpath
  34. --slowms arg (=100)     # value of slow for profile and console log
  35. --smallfiles     # 使用较小的默认文件
  36. --syncdelay arg (=60)     # 数据写入磁盘的时间秒数(0=never,不推荐)
  37. --sysinfo     # 打印一些诊断系统信息
  38. --upgrade     # 如果需要升级数据库

Replicaton 参数

  1. --fastsync     # 从一个dbpath里启用从库复制服务,该dbpath的数据库是主库的快照,可用于快速启用同步
  2. --autoresync     # 如果从库与主库同步数据差得多,自动重新同步,
  3. --oplogSize arg     # 设置oplog的大小(MB)

主/从参数

  1. --master     # 主库模式
  2. --slave     # 从库模式
  3. --source arg     # 从库 端口号
  4. --only arg     # 指定单一的数据库复制
  5. --slavedelay arg     # 设置从库同步主库的延迟时间

Replica set(副本集)选项

  1. --replSet arg     # 设置副本集名称

  2. Sharding(分片)选项
  3. --configsvr     # 声明这是一个集群的config服务,默认端口27019,默认目录/data/configdb
  4. --shardsvr     # 声明这是一个集群的分片,默认端口27018
  5. --noMoveParanoia     # 关闭偏执为moveChunk数据保存

上述参数都可以写入 mongod.conf 配置文档里例如:

  1. dbpath = /data/mongodb
  2. logpath = /data/mongodb/mongodb.log
  3. logappend = true
  4. port = 27017
  5. fork = true
  6. auth = true

启动方式

命令行

  1. mongod --dbpath /data/mongodbtest/single/data/

配置文件

  1. mongod -f mongodb.conf

说明:这两种方式都是前台启动mongodb进程,如果session窗口关闭,则mongodb进程也随之关闭。而mongdb还有一种后台Daemon方式启动,只需要添加"--fork"参数即可。值得注意的是,用到了"--fork"参数就必须启用"--logpath"参数。

  1. mongod --dbpath=/data/mongodbtest/single/data --fork --logpath=/data/mongodbtest/single/mongodb.log

image.png

daemon方式启动的fork参数也可以配置配置文件mongodb.conf中,内容如下所示:

  1. port=27017  
  2. dbpath=/data/mongodbtest/single/
  3. logpath=/data/mongodbtest/single/mongodb.log  
  4. logappend=true  
  5. fork=true

关闭

在后台运行,如果想要关闭它的话,需要给他发送shutdownServer()。

image.png


搭建


单实例模式

说明:这种配置只是适合开发,生产不适用,因为单个节点挂掉,整个业务中断。

image.png

建立mongodb测试文件夹

  1. #存放整个mongodb文件  
  2. mkdir -p /data/mongodbtest/single  
  3. #存放mongodb数据文件  
  4. mkdir -p /data/mongodbtest/single/data  

  5. #进入mongodb文件夹  
  6. cd  /data/mongodbtest/single


启动单实例

  1. mongod  --dbpath /data/mongodbtest/single/data --fork --logpath=/data/mongodbtest/single/mongodb.log

image.png

mongodb默认自带了web访问接口:http://192.168.1.103:28017


image.png

副本集模式

说明:mongodb官方已经不建议使用主从模式,替换方案采用副本集模式。

主从模式其实就是一个单副本的应用,没有很好的扩展性和容错性。而副本集具有多个副本保证了容错性,就算一个副本挂掉了还有很多副本存在,并且解决了上面第一个问题“主节点挂掉了,整个集群内会自动切换”。

mongodb副本集的设计图:

image.png

由图可以看到客户端连接到整个副本集,不关心具体哪一台机器是否挂掉。主服务器负责整个副本集的读写,副本集定期同步数据备份,一但主节点挂掉,副本节点就会选举一个新的主服务器,这一切对于应用服务器不需要关心。

我们看一下主服务器挂掉后的设计图:

image.png


配置步骤

准备三台机子:192.168.1.103 192.168.1.131 192.168.1.140

其中192.168.1.103作为主节点 192.168.1.131 192.168.1.140作为副本节点。

分别在每台机子建立mongodb的文件夹

  1. #存放整个mongodb文件
  2. mkdir -p /data/mongodb/replset
  3. #存放mongodb数据文件
  4. mkdir -p /data/mongodb/replset/data

在每台机器上启动mongodb


命令行启动


  1. mongod --dbpath /data/mongodb/replset/data --replSet repset --fork --logpath=/data/mongodb/mongodb.log


配置文件mongodb.conf启动


  1. dbpath=/data/mongodb/replset/data
  2. logpath=/data/mongodb/mongodb.log  
  3. logappend=true  
  4. fork=true
  5. journal=true
  6. oplogSize=2048
  7. smallfiles=true
  8. replSet=repset


启动命令:mongod -f mongodb.conf


image.png


初始化副本集

在三台机器上任意一台机器登陆mongodb;打开mongo终端。

  1. use admin
  2. config = { _id:"repset",members:[{_id:0,host:"192.168.1.103:27017"},{_id:1,host:"192.168.1.131:27017"},{_id:2,host:"192.168.1.140:27017"}]}
  3. rs.initiate(config);
  4. rs.status(); #查看集群节点的状态


结果说明

"health" : 1, #代表机器正常 "stteStr" : "PRIMARY", #代表是主节点,可读写,其中有以下几下状态:

  1. STARTUP:刚加入到复制集中,配置还未加载
  2. STARTUP2:配置已加载完,初始化状态
  3. RECOVERING:正在恢复,不适用读
  4. ARBITER: 仲裁者
  5. DOWN:节点不可到达
  6. UNKNOWN:未获取其他节点状态而不知是什么状态,一般发生在只有两个成员的架构,脑裂
  7. REMOVED:移除复制集
  8. ROLLBACK:数据回滚,在回滚结束时,转移到RECOVERING或SECONDARY状态
  9. FATAL:出错。查看日志grep “replSet FATAL”找出错原因,重新做同步
  10. PRIMARY:主节点
  11. SECONDARY:备份节点


image.png


测试副本集数据复制功能

在主节点192.168.1.131 上连接到终端:

  1. mongo 127.0.0.1

建立test 数据库

  1. use test

往testdb表插入数据

  1. db.testdb.insert({"name":"zhangsan"})


image.png

在副本节点 192.168.1.103、192.168.1.140 上连接到mongodb查看数据是否复制过来。

  1. mongo 192.168.1.103:27017

使用test 数据库。

  1. repset:SECONDARY> use test;
  2. repset:SECONDARY> show tables;

mongodb默认是从主节点读写数据的,副本节点上不允许读,需要设置副本节点可以读。

  1. repset:SECONDARY> db.getMongo().setSlaveOk();

可以看到数据已经复制到了副本集。

repset
:
SECONDARY
>
 db
.
testdb
.
find
();

image.png



测试副本集故障转移功能

先停掉主节点131,查看103、140的选票结果。

image.png

在140节点查看

image.png

再重新启动节点131

image.png

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
9月前
|
JSON NoSQL MongoDB
实时计算 Flink版产品使用合集之要将收集到的 MongoDB 数据映射成 JSON 对象而非按字段分割,该怎么操作
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
6月前
|
存储 NoSQL 算法
MongoDB保姆级指南(中):从副本集群、分片集群起航,探索分布式存储的趋势!
本文一起来聊聊MongoDB集群,顺带以MongoDB集群为起点,共同探讨一下分布式存储的发展趋势~
702 15
|
7月前
|
DataWorks NoSQL fastjson
DataWorks操作报错合集之DataX进行MongoDB全量迁移的过程中,DataX的MongoDB Reader插件在初始化阶段找不到Fastjson 2.x版本的类库,该怎么办
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
7月前
|
自然语言处理 运维 NoSQL
MongoDB集群同步
实现 MongoDB Cluster-to-Cluster 即集群同步的工具是:mongosync 详情可参考如下官方文档: https://www.mongodb.com/zh-cn/docs/cluster-to-cluster-sync/current/quickstart/ 以上这个地址的文档一看就是机器翻译的,可能有不恰当的地方,但基本可参考使用。 以下是本次在某项目地配置集群同步的简要步骤,可参考使用。
115 6
|
6月前
|
存储 运维 NoSQL
轻松上手:逐步搭建你的高可用MongoDB集群(分片)
【8月更文挑战第13天】在数据激增的背景下,传统单机数据库难以胜任。MongoDB作为流行NoSQL数据库,采用分片技术实现水平扩展,有效处理海量数据。分片将数据分散存储,提高并发处理能力和容错性,是高可用架构基石。构建MongoDB集群需理解shard、config server和router三组件协同工作原理。通过具体实例演示集群搭建流程,包括各组件的启动及配置,确保数据高可用性和系统稳定性。合理规划与实践可构建高效稳定的MongoDB集群,满足业务需求并支持未来扩展。
182 0
|
8月前
|
存储 NoSQL Linux
【MongoDB】下载安装、指令操作
【MongoDB】下载安装、指令操作
226 1
|
8月前
|
分布式计算 DataWorks NoSQL
DataWorks操作报错合集之从MongoDB同步数据到MaxCompute(ODPS)时,出现报错,该怎么解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
DataWorks操作报错合集之从MongoDB同步数据到MaxCompute(ODPS)时,出现报错,该怎么解决
|
8月前
|
存储 负载均衡 NoSQL
MongoDB的架构设计基于三种集群模式
【6月更文挑战第5天】MongoDB的架构设计基于三种集群模式
277 3
|
8月前
|
存储 NoSQL 数据挖掘
深入探索MongoDB聚合操作:解析数据之美
深入探索MongoDB聚合操作:解析数据之美
252 1