MongoDB数据库安装部署及优化使用
MongoDB简介
什么是MongoDB
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引,如果用一句话来概括的话:MongoDB是一个高可用、分布式、灵活模式的文档数据库,用于大容量数据存储。
关系型与非关系型
NoSQL not only sql NoSQL,指的是非关系型的数据库。 NoSQL有时也称作Not Only SQL的缩写是对不同于传统的关系型数据库的数据库管理系统的统称。 对NoSQL最普遍的解释是”非关联型的”,强调Key-Value Stores和文档数据库的优点,而不是单纯的RDBMS。 NoSQL用于超大规模数据的存储。 这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。 今天我们可以通过第三方平台可以很容易的访问和抓取数据。 用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。 我们如果要对这些用户数据进行挖掘,那SQL数据库已经不适合这些应用了 NoSQL数据库的发展也却能很好的处理这些大的数据。
Mongo和mysql数据对比
mysql | mongo |
---|---|
库 | 库 |
表 | 集合 |
字段 | key:value |
行 | 文档 |
mysql里的数据:
name | age | job | city |
---|---|---|---|
wangxiansen | 25 | CEO | |
zhangsan | 23 | CTO | |
lisi | 24 | CFO | BJ |
mongo里的数据:
{name:'wangxiansen',age:'25',job:'CEO'},
{name:'zhangsan',age:'23',job:'CTO'},
{name:'lisi',age:'24',job:'CFO',city:'BJ'}
MongoDB特点
高性能:
- Mongodb提供高性能的数据持久性
- 尤其是支持嵌入式数据模型减少数据库系统上的I/O操作
- 索引支持能快的查询,并且可以包括来嵌入式文档和数组中的键
丰富的语言查询:
- Mongodb支持丰富的查询语言来支持读写操作(CRUD)以及数据汇总,文本搜索和地理空间索引 ,使您可以按任意字段进行过滤和排序,无论它在文档中有多嵌套。
高可用性:
- Mongodb的复制工具,成为副本集,提供自动故障转移和数据冗余
水平可扩展性:
- Mongodb提供了可扩展性,作为其核心功能的一部分,分片是将数据分在一组计算机上
- 关系型数据库很难做分布式的原因就是多节点海量数据关联有巨大的性能问题。如果不考虑关联,数据分区分库,水平扩展就比较简单;
支持多种存储引擎:
- WiredTiger存储引擎和、MMAPv1存储引擎和InMemory存储引擎
mongo应用场景
游戏场景:使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、更新
物流场景:使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来。
社交场景:使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能
物联网场景:使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析
视频直播:使用 MongoDB 存储用户信息、礼物信息等,用户评论
电商场景:使用 MongoDB 商城上衣和裤子两种商品,除了有共同属性,如产地、价格、材质、颜色等外,还有各自有不同的属性集,如上衣的独有属性是肩宽、胸围、袖长等,裤子的独有属性是臀围、脚口和裤长等
安装部署MongoDB
规划目录
#软件所在目录
/opt/mongodb
#单节点目录
/opt/mongo_27017/{conf,log,pid}
#数据目录
/data/mongo_27017
下载并解压
yum install libcurl openssl-devel -y
#wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.14.tgz
tar zxf mongodb-linux-x86_64-rhel70-4.0.14.tgz -C /opt/
cd /opt/
ln -s mongodb-linux-x86_64-rhel70-4.0.14 mongodb
创建文件目录以及数据目录
mkdir -p /opt/mongo_27017/{conf,log,pid}
mkdir -p /data/mongo_27017
创建配置文件
cat >/opt/mongo_27017/conf/mongodb.conf<<EOF
systemLog:
destination: file
logAppend: true
path: /opt/mongo_27017/log/mongodb.log
storage:
journal:
enabled: true
dbPath: /data/mongo_27017
directoryPerDB: true
wiredTiger:
engineConfig:
cacheSizeGB: 0.5
directoryForIndexes: true
collectionConfig:
blockCompressor: zlib
indexConfig:
prefixCompression: true
processManagement:
fork: true
pidFilePath: /opt/mongo_27017/pid/mongod.pid
net:
port: 27017
bindIp: 127.0.0.1,10.1.1.11
EOF
配置文件解释
配置文件注解:
systemLog:
destination: file #Mongodb 日志输出的目的地,指定一个file或者syslog,如果指定file,必须指定
logAppend: true #当实例重启时,不创建新的日志文件, 在老的日志文件末尾继续添加
path: /opt/mongo_27017/logs/mongodb.log #日志路径
storage:
journal: #回滚日志
enabled: true
dbPath: /data/mongo_27017 #数据存储目录
directoryPerDB: true #默认,false不适用inmemoryengine
wiredTiger:
engineConfig:
cacheSizeGB: 1 #将用于所有数据缓存的最大小
directoryForIndexes: true #默认false索引集合storage.dbPath存储在数据单独子目录
collectionConfig:
blockCompressor: zlib
indexConfig:
prefixCompression: true
processManagement: #使用处理系统守护进程的控制处理
fork: true #后台运行
pidFilePath: /opt/mongo_27017/pid/mongod.pid #创建 pid 文件
net:
port: 27017 #监听端口
bindIp: 127.0.0.1,10.1.1.11 #绑定ip
启动mongo
/opt/mongodb/bin/mongod -f /opt/mongo_27017/conf/mongodb.conf
检查是否启动
ps -ef|grep mongo
netstat -lntp|grep 27017
进入mongo
/opt/mongodb/bin/mongo
配置登录mongo
写入环境变量
echo 'export PATH=/opt/mongodb/bin:$PATH' >> /etc/profile
source /etc/profile
关闭mongo
方法1:推荐
mongod -f /opt/mongo_27017/conf/mongodb.conf --shutdown
方法2: 只能是使用localhost方式登陆
mongo
use admin
db.shutdownServer()
方法3: system管理
https://www.boysec.cn/boy/5a2618fa.html#不建议以root身份运行
优化告警
内存不足
** WARNING: The configured WiredTiger cache size is more than 80% of available RAM.
See http://dochub.mongodb.org/core/faq-memory-diagnostics-wt
解决方法:
方法1: 加大机器内存
方法2: 调小配置文件里的缓存大小 cacheSizeGB: 0.5
没有开启访问控制
** WARNING: Access control is not enabled for the database.
Read and write access to data and configuration is unrestricted.
解决方法:
开启安全账户功能,见用户认证章节
不建议以root身份运行
** WARNING: You are running this process as the root user, which is not recommended.
解决方法:
方法1: 创建普通用户mongo,然后切换到mongo用户启动
方法2: 使用system方式登陆,指定运行用户为普通用户mongo
mongo的system启动文件:
cat >/usr/lib/systemd/system/mongod.service<<EOF
[Unit]
Description=MongoDB Database Server
Documentation=https://docs.mongodb.org/manual
After=network.target
[Service]
User=mongo
Group=mongo
ExecStart=/opt/mongodb/bin/mongod -f /opt/mongo_27017/conf/mongodb.conf
ExecStartPre=/usr/bin/chown -R mongo:mongo /opt/mongo_27017/
ExecStartPre=/usr/bin/chown -R mongo:mongo /data/mongo_27017/
PermissionsStartOnly=true
PIDFile=/opt/mongo_27017/pid/mongod.pid
Type=forking
# file size
LimitFSIZE=infinity
# cpu time
LimitCPU=infinity
# virtual memory size
LimitAS=infinity
# open files
LimitNOFILE=64000
# processes/threads
LimitNPROC=64000
# locked memory
LimitMEMLOCK=infinity
# total threads (user+kernel)
TasksMax=infinity
TasksAccounting=false
# Recommended limits for for mongod as specified in
# http://docs.mongodb.org/manual/reference/ulimit/#recommended-settings
[Install]
WantedBy=multi-user.target
EOF
创建普通用户mongo
pkill mongo
groupadd mongo -g 777
useradd mongo -g 777 -u 777 -M -s /sbin/nologin
id mongo
重新启动mongo
systemctl daemon-reload
systemctl start mongod.service
ps -ef|grep mongo
mongo
关闭大内存页
** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
We suggest setting it to 'never'
** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
We suggest setting it to 'never'
解决方法:改完要重启
echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
echo "never" > /sys/kernel/mm/transparent_hugepage/defrag
数据目录磁盘不是XFS格式
** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
解决方法:
把磁盘格式转成XFS
rlimits低
** WARNING: soft rlimits too low. rlimits set to 7266 processes, 100001 files. Number of processes should be at least 50000.5 : 0.5 times number of files.
解决方法:
cat > /etc/profile<<EOF
ulimit -f unlimited
ulimit -t unlimited
ulimit -v unlimited
ulimit -n 64000
ulimit -m unlimited
ulimit -u 64000
EOF
生效配置:
source /etc/profile
验证:
systemctl stop mongod
systemctl start mongod
mongo
关闭监控服务体验
---
Enable MongoDB's free cloud-based monitoring service, which will then receive and display
metrics about your deployment (disk utilization, CPU, operation statistics, etc).
The monitoring data will be available on a MongoDB website with a unique URL accessible to you
and anyone you share the URL with. MongoDB may use this information to make product
improvements and to suggest MongoDB products and deployment options to you.
To enable free monitoring, run the following command: db.enableFreeMonitoring()
To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---
解决方法:
db.disableFreeMonitoring()
相关文章
- NoSql数据库之MongoDB详解数据库
- MongoDB安装——快速简单轻松(mongodb安装包)
- :MongoDB管理小文件的简便方法(mongodb小文件)
- MongoDB实现外键约束:一种解决方案(mongodb外键)
- MongoDB基础入门:快速掌握NoSQL技术(mongodb基础教程)
- MongoDB:实现条件删除的新方法(mongodb条件删除)
- MongoDB数据库备份策略实施(mongodb备份命令)
- 迎接新世界:MongoDB数据库迁移(mongodb数据库迁移)
- Mongodb与Redis:密不可分的高效分布式存储技术(mongodb与redis)
- MongoDB数据库增删改查操作实践(mongodb的增删改查)
- MongoDB安装及配置要求(mongodb配置要求)
- Win7下安装MongoDB简易指南(win7安装mongodb)
- 库使用MongoDB轻松管理数据库(mongodb数据)
- 管理MongoDB权限管理:有效把控数据库安全(mongodb权限)
- 深入剖析:MongoDB中的数据倒序排列技巧(mongodb倒序)
- MongoDB鹰眼破解之路(mongodb破解)
- MongoDB 中删除数据表的方法(mongodb删除表)
- 记录MongoDB学习之路(mongodb笔记)
- MongoDB批量处理加速数据库操作(mongodb批处理)
- MongoDB与关系型数据库的比较分析(mongodb对比)
- Exploring the Power of MongoDB: The Definitive Guide to Upgrading Arrays(mongodb更新数组)
- Mongodb升序排列:优化数据检索的必备技能(mongodb升序)
- MongoDB脚本执行技巧:优化数据库操作步骤!(mongodb执行脚本)
- 探索免费 MongoDB 数据库方案(免费mongodb)