前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mongoDB(一)生产环境基础实践

mongoDB(一)生产环境基础实践

作者头像
alexhuiwang
发布2020-09-24 11:22:44
6050
发布2020-09-24 11:22:44
举报
文章被收录于专栏:运维博客运维博客

mongoDB生产环境基础实践

环境准备

  • 操作系统: centos7
  • mongoDB软件版本: 4.0

单机安装

代码语言:javascript
复制
[root@centos7-node4 ~]# cd /opt/
[root@centos7-node4 opt]# https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.17.tgz
[root@centos7-node4 opt]# tar xf mongodb-linux-x86_64-4.0.17.tgz 
[root@centos7-node4 opt]# mv mongodb-linux-x86_64-4.0.17 /usr/local/mongodb
[root@centos7-node4 ~]# /usr/local/mongodb/bin/mongo --version   #查看版本
MongoDB shell version v4.0.17

单机单例模式配置与服务启动

  • 单机模式配置
代码语言:javascript
复制
[root@centos7-node4 ~]# mkdir /data/mongodb/27017/  -p   #创建数据目录
[root@centos7-node4 ~]# vim /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: true
net:
  port: 27017
  bindIp: 0.0.0.0
  • 单机模式启动
代码语言:javascript
复制
[root@centos7-node4 ~]# /usr/local/mongodb/bin/mongod -f /data/mongodb/27017/mongodb.conf    #直接启动
[root@centos7-node4 ~]# ls /data/mongodb/27017/   #验证数据文件是否存在
[root@centos7-node4 ~]# netstat -tanlp| grep 27017
[root@centos7-node4 ~]# ps -ef | grep mongod
  • 启动参数优化
    • 强烈建议使用xfs文件系统
    • 访问控制配置
    • 不推荐root启动
    • 大页内存要禁止
代码语言:javascript
复制
[root@centos7-node4 ~]# /usr/local/mongodb/bin/mongo 127.0.0.1:27017     #客户端连接
[root@centos7-node4 ~]# vim /etc/security/limits.conf     #优化参数
* - nofile 65535
* - nproc 65535
[root@centos7-node4 ~]# vim /etc/security/limits.d/20-nproc.conf 
* soft nproc 65535
[root@centos7-node4 ~]# echo "never" > /sys/kernel/mm/transparent_hugepage/enabled    # 关闭大页内存
[root@centos7-node4 ~]# echo "never" > /sys/kernel/mm/transparent_hugepage/defrag 
[root@centos7-node4 ~]# vim /etc/rc.local
echo 'never' >/sys/kernel/mm/transparent_hugepage/enabled
echo 'never' >/sys/kernel/mm/transparent_hugepage/defrag 
[root@centos7-node4 ~]# chmod +x /etc/rc.d/rc.local
### 需要先杀掉进程,然后再执行如下操作
[root@centos7-node4 ~]# useradd mongodb -s /sbin/nologin    #创建启动用户
[root@centos7-node4 ~]# chown -R mongodb:mongodb  /data/mongodb  /usr/local/mongodb/
[root@centos7-node4 ~]# su - mongodb -s /bin/bash     #切换用户
[mongodb@centos7-node4 ~]$ /usr/local/mongodb/bin/mongod -f /data/mongodb/27017/mongodb.conf

mongodb客户端的基础使用

基础概念

database # 数据库 collection # 集合,类似于表 filed #字段 document #每行的记录

mongo shell客户端的使用

代码语言:javascript
复制
> show dbs;     #查看数据库
### 优雅关闭数据库
> use admin
> db.shutdownServer()

基本使用

代码语言:javascript
复制
> use test    #有则切换,无则创建并切换
## 数据插入
> db.mytest.insert({"name":"test","age":22})    #在myest插入数据
> db.mytest.insert({name:"zahangsan1",age:29})
> db.mytest.insert({name:"zahangsan2",age:29})
## 数据查询
> db.mytest.find({"name":"test"})      #按条件查询数据
> show collections
> db.mytest.find()   #查询所有数据
### 数据删除
> db.mytest.remove({name:"zahangsan1"})    #删除指定数据
> db.mytest.remove({})      #清空数据
> db.mytest.drop()    #删除collections
> db.dropDatabase()    #删库跑路
### 数据更新
> use test
> db.mytest.insert({name:"test",age:11})
> db.mytest.insert({name:"test1",age:12})
> db.mytest.insert({name:"test2",age:13})
> db.mytest.update({name:"test"},{$set:{name:"demotest",age:21}})    #更新整条数据
> db.mytest.update({name:"test1"},{$set:{age: 99}})    #更新单个字段

mongoDB 集合的多种查询方式

  • 数据准备
代码语言:javascript
复制
use test
db.myuser.insert({name:"zhansan1",age:20})
db.myuser.insert({name:"zhansan2",age:30})
db.myuser.insert({name:"zhansan3",age:40})
db.myuser.insert({name:"zhansan4",age:50})
db.myuser.insert({name:"lisi1",age:22})
db.myuser.insert({name:"lisi2",age:32})
db.myuser.insert({name:"lisi3",age:42})
db.myuser.insert({name:"lisi4",age:52})
> db.myuser.find()   #查询数据
  • 操作
代码语言:javascript
复制
> db.myuser.find().pretty()       #json格式展示数据
> db.myuser.find().limit(2)       #限制查询2条
> db.myuser.find().skip(2).limit(2)   #跳过两条数据,然后限制查询2条【用于分页场景】
> db.myuser.find().sort({age:1})    #按年龄字段升序排列,-1是降序
> db.myuser.find({age:{$lt:30}})    # 数据条件比较
> db.myuser.find({$or:[{name:"zhansan1"},{name:"zhansan2"}]})    #多条件查询
> db.myuser.find({$and:[{name:"zhansan1"},{age:20}]})     #多条件查询,用户密码认证
> db.myuser.find({name:{$regex:"zhansan[2-4]"}})      #正则匹配
> db.myuser.find({name:{$regex:"zhansan*"}})

索引查询与建立

  • 插入500000条数据 > use test > for(i=0;i<500000;i++){ db.myuser.insert({name:"mytest"+i,age:i}) } > db.myuser.count() #查看行数
  • mongo有慢查询的概念,默认超过100ms会记录日志
代码语言:javascript
复制
> db.getProfilingStatus()
> db.myuser.find({age:9999}).explain(true)    #查看语句性能
> db.myuser.getIndexSpecs()    #查看index
> db.myuser.find({ "_id" : ObjectId("5e81bbcc42a3d24645ee2223")}).explain(true)   #跟age:9999对比
> db.myuser.ensureIndex({age:1})    #为age添加升序的索引
> db.myuser.find({age:9999}).explain(true)    #加快查询速度
> db.myuser.dropIndex({age:1})    #删除索引
> db.myuser.find({name:/9999/}).explain(true)    #即使创建索引,但是正则匹配也会出现慢查询
  • 建立唯一索引: 默认索引对应的数据不能重复
代码语言:javascript
复制
> use test
> db.dropDatabase()     #删除原先的数据库
> use test
> db.myuser.insert({userid:1})
> db.myuser.insert({userid:1})
> db.myuser.find()     #插入重复数据是追加的
> db.myuser.remove({})    #清空数据
> db.myuser.ensureIndex({userid:1},{unique:true})   #设置唯一索引

实时监控命令

代码语言:javascript
复制
### 插入测试数据
> use test
> for(i=1;i<300000;i++){
        db.myuser.insert({name:"mytest"+i,age:i})
}
[root@centos7-node4 ~]# /usr/local/mongodb/bin/mongostat -h 127.0.0.1:27017   #显示实时状态
  • 使用serverstatus获取相关数据信息
代码语言:javascript
复制
>db.serverStatus()
> db.serverStatus().network
> db.serverStatus().opcounters
> db.serverStatus().connections
  • 非交互式获取监控数据(结合监控脚本获取数据)
代码语言:javascript
复制
[root@centos7-node4 ~]# echo "db.serverStatus()" | /usr/local/mongodb/bin/mongo
[root@centos7-node4 ~]# echo "db.serverStatus().network" | /usr/local/mongodb/bin/mongo 
[root@centos7-node4 ~]# echo "db.serverStatus().opcounters" | /usr/local/mongodb/bin/mongo | grep insert |egrep -o "[0-9]+"    #获取监控数值
800023
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-04-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • mongoDB生产环境基础实践
    • 环境准备
      • 单机安装
        • 单机单例模式配置与服务启动
      • mongodb客户端的基础使用
        • 基础概念
        • mongo shell客户端的使用
        • 基本使用
      • mongoDB 集合的多种查询方式
        • 索引查询与建立
          • 实时监控命令
          相关产品与服务
          云数据库 MongoDB
          腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档