MongoDB 部署

2020-07-28 15:22:00 浏览数 (1)

MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是可以应用于各种规模的企业、各个行业以及 各类应用程序的开源数据库。作为一个适用于敏捷开发的数据库,MongoDB的数据模式可以随着应用程序的发 展而灵活地更新。与此同时,它也为开发人员 提供了传统数据库的功能:二级索引,完整的查询系统以及严格 一致性等等。 MongoDB能够使企业更加具有敏捷性和可扩展性,各种规模的企业都可以通过使用MongoDB来 创建新的应用,提高与客户之间的工作效率,加快产品上市时间,以及降低企业成本。

MongoDB是专为可扩展性,高性能和高可用性而设计的数据库。它可以从单服务器部署扩展到大型、复杂的多 数据中心架构。利用内存计算的优势,MongoDB能够提供高性能的数据读写操作。 MongoDB的本地复制和自 动故障转移功能使您的应用程序具有企业级的可靠性和操作灵活性。 MongoDB 是一个基于分布式文件存储的数据库。由 C 语言编写。旨在为 WEB 应用提供可扩展的高性能数 据存储解决方案。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能丰富,像关系数 据库的。 在高负载的情况下,添加更多的节点,可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB文档类似于JSON 对象。 字段值可以包含其他文档,数组及文档数组。

主要特点

MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。 你可以在MongoDB记录中设置任何属性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序。 你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。 如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点 上这就是所谓的分片。 Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。 MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。 Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。 Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函 数进行处理。 Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执 行MapReduce操作。 GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。 MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函 数的定义存储在服务端,下次直接调用即可。 MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C ,PHP,C#等多种语言。 MongoDB安装简单。

具体可参考官方文档 关于mongodb的功能特性 一、部署MongoDB

代码语言:javascript复制
#下载并解包
[root@mongodb ~]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.3.tgz
[root@mongodb ~]# tar zxf mongodb-linux-x86_64-rhel70-4.2.3.tgz 
[root@mongodb ~]# mv mongodb-linux-x86_64-rhel70-4.2.3/ /usr/local/mongo
代码语言:javascript复制
#添加环境变量
[root@mongodb ~]# echo 'export PATH=/usr/local/mongo/bin/:${PATH}' >> /etc/profile
[root@mongodb ~]# source /etc/profile
代码语言:javascript复制
#定义配置文件
[root@mongodb ~]# mkdir -p /data/mongodb/27017
#注意,mongodb.conf这个文件是自己创建的
[root@mongodb ~]# cat /data/mongodb/27017/mongodb.conf       # 主配置文件内容如下
systemLog:                       # 日志相关
 destination: file
 logAppend: true                       # 日志写入模式为追加
 path: /data/mongodb/27017/mongodb.log             # 定义日志文件
storage:                     # 定义存储相关
 dbPath: /data/mongodb/27017/                # 定义数据存储路径
 journal:
   enabled: true
processManagement:                 # 进程管理相关,fork表示预派生
 fork: true
net:
 port: 27017                   # 监听端口
 bindIp: 0.0.0.0             # 监听地址
代码语言:javascript复制
# 启动mongodb
# 创建系统用户并更改属主
[root@mongodb ~]# useradd mongodb -s /sbin/nologin 
[root@mongodb ~]# chown -R mongodb:mongodb /usr/local/mongo/ /data/mongodb/
# 使用普通用户启动
[root@mongodb ~]# su -s /bin/bash -c "mongod -f /data/mongodb/27017/mongodb.conf" mongodb 
about to fork child process, waiting until server is ready for connections.
forked process: 2326
child process started successfully, parent exiting
# 确定端口在监听
[root@mongodb ~]# ss -anput | grep 27017
tcp    LISTEN     0      128       *:27017                 *:*                   users:(("mongod",pid=2326,fd=11))

登录到mongodb

代码语言:javascript复制
[root@mongodb ~]# mongo --host 192.168.171.151 --port 27017

如果系统没有优化过相关配置,那么在第一次登录时大多会报以下warning事项(如果不是使用普通用户启动,还会多报一个用户相关的warning):

现在开始解决这些warning。 禁止内存巨大页

代码语言:javascript复制
[root@mongodb ~]# echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled
[root@mongodb ~]# echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag
# 写入以下文件并添加执行权限,以防止重启后失效
[root@mongodb ~]# tail -2 /etc/rc.d/rc.local            # # 写入下面两行配置
echo 'never' >/sys/kernel/mm/transparent_hugepage/enabled
echo 'never' >/sys/kernel/mm/transparent_hugepage/defrag
[root@mongodb ~]# chmod  x /etc/rc.d/rc.local 

WARNING: Access control is not enabled for the database

代码语言:javascript复制
[root@mongodb ~]# mongo              # 登录到mongodb,默认为本机的27017端口
# 创建用户
> use admin 
switched to db admin
> db.createUser(
...   {
...       user:"myUserAdmin",
...       pwd:"123.com",
...       roles:[{role:"userAdminAnyDatabase",db:"admin"}]
...   }
... )
Successfully added user: {
> db.shutdownServer()          # 关闭数据库
# 启动mongodb的选项中增加“--auth”选项。开启认证模式
[root@mongodb ~]# su -s /bin/bash -c "mongod --auth -f /data/mongodb/27017/mongodb.conf" mongodb
[root@mongodb ~]# mongo
MongoDB shell version v4.2.3
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("6d7e4bbc-1efa-40cb-98c9-8e01136ea98e") }
MongoDB server version: 4.2.3
> show databases              # 在认证之前不会查看到什么信息
> use admin                     # 必须进入admin库进行认证,否则会认证失败
switched to db admin 
> db.auth('myUserAdmin','123.com')        # 使用刚才新建的用户进行认证
1
> show databases                 # 即可查看到库信息
admin   0.000GB
config  0.000GB
local   0.000GB

mongodb基础指令 查看所有数据库

代码语言:javascript复制
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB

切换数据库

代码语言:javascript复制
> use admin

显示所有表

代码语言:javascript复制
> show collections

显示数据库状态信息

代码语言:javascript复制
> db.stats()

显示集合表状态信息

代码语言:javascript复制
> db.numbers.stats()

停止数据库

代码语言:javascript复制
> db.shutdownServer()

获取数据库操作命令

代码语言:javascript复制
> db.help

获取表操作命令

代码语言:javascript复制
> db.foo.help

mongodb概念可参考

0 人点赞