MongoDB使用及规范介绍

安装部署说明 1. 软件获取

不做源码编译, 采用二进制格式安装(解压即可用)。软件可从官方下载 http://www.mongodb.org/downloads

2. 安装条件

主机环境应该为RAID10级别,如果硬盘不够可降级为RAID1或RAID5级别(RAID0不安全)。 RAID卡型号选取带有Cache功能的卡,如DELL的H700或H710P。

资源限制: 对应启动文件的参数, ulimit -n 值需大于 最大连接数+mongodb数据文件数, 暂定ulimit -n 16384

3. 安装方式

可以采用Binary方式安装,比如2.4.10版本,升级高版本需做好相关测试;Binary解压后的目录即为MongoDB的basedir目录, 单独存放于不同于数据文件所在的分区(比如/opt/目录)。数据目录不必初始化, 启动即初始。

目录结构说明:

/opt/mongodb-linux-x86_64-2.4.10/
├── bin                         # commands dir.
│   ├── bsondump
│   ├── mongo
│   ├── mongod
│   ├── mongodump
│   ├── mongoexport
│   ├── mongofiles
│   ├── mongoimport
│   ├── mongooplog
│   ├── mongoperf
│   ├── mongorestore
│   ├── mongos
│   ├── mongosniff
│   ├── mongostat
│   └── mongotop
├── GNU-AGPL-3.0
├── README
└── THIRD-PARTY-NOTICES

4. 数据目录

MongoDB数据存储于非根分区,/web(或/data)目录等,比如数据(库)存储路径/web/mongodb/nodeXXXX/data目录,XXXX为端口号四位的表示。

5. 启动和关闭

脚本套件结构说明: 获取: https://github.com/arstercz/mongodb_node_mgr

/web/mongodb/nodexxxx/
├── data                           # 数据目录
├── my.node.conf                   # 参数配置文件
├── node                           # 得到基本的管理信息,可用户操作启动、停止,依赖于参数配置文件my.node.cnf,且和后面的start,status,stop关联
├── noderc                         # 声明BASEDIR路径
├── start                          # 启动
├── status                         # 查看状态
├── stop                           # 停止
└── use                            # 默认连接到相应端口的本地库

启动关闭示例:

[root@cz-test1 ~]# cd /web/mongodb/node5700/
[root@cz-test1 node5700]# 
[root@cz-test1 node5700]# ./start
/web/mongodb/node5700/./data/mongod.lock has exists.
waiting node start  mongodb node on pid=675 port=5700   

[root@cz-test1 node5700]# ./use admin
MongoDB shell version: 2.4.10
connecting to: 127.0.0.1:5700/admin
>

[root@cz-test1 node5700]# ./stop
waiting mongodb node shutdown mongodb node off pid=675 port=5700

参数配置说明

1. 概述

所有参数配置信息集中到my.node.conf文件中,每个实例在各自node节点下生成相应的配置文件, 对一些需要经常设置的变量建议放到conf配置文件中(比如port, fork等),参数配置文件可简单分为必选项和可选项两大类。

2. 必选项

port = xxxx  # listen port

本地监听端口,默认0.0.0.0:xxxx, 监听端口默认27017, 本文中设置为5700端口。

dbpath = /web/mongodb/node5700/data  # location data stored.

数据路径信息

pidfilepath = /web/mongodb/node5700/data  # pidfile path

pid文件路径, 默认生成mongod.lock文件,里面存放pid值, 该lock亦用于区分实例是否占用。

fork = true  # run as deamon process.

守护模式启动

nohttpinterface = true  # disables the HTTP interface.

关闭http监听端口,默认为port+1000, 开启http可以查看状态信息

auth = true  # requires database authentication for users connecting from remote hosts.

开启认证, 所有连接的client端都需要认证

profile = 1  # log slow operations

记录慢查询操作,类似MySQL的slow-query-log

slowms = 300  # The threshold in milliseconds that be considered slow query.

查询超过多长时间会被记录,类似MySQL的slow-query-time

#sysinfo = true  # print some diagnostic system information, only mongod only outputs the page information and no database process will start.

用于诊断, 开启该选项,mongod进程不会启动。

nssize = 64   # specifies the default size for namespace files, unit: MB

数据命名空间的大小设置, mongod中,每个命名空间的数据都会分成若干组(防止单文件过大引起性能消耗),类似于MySQL中的分区表。

3. 可选项

maxConns = 10000  # max number of simultaneous connections.

最大连接数,不要超过系统的ulimit -n 值

syslog = ture  # log to rsyslogd instead a file.

日志信息写到rsyslogd 系统文件中, 易于loganalyzer的监控。

diaglog = 1  # log write operations.

记录写操作

nounixsocket = true

不创建用于本地连接的socket文件

directoryperdb = true  # stores each database’s files in its own folder in the data directory.

每个库一个目录,存储自己的数据, 类似MySQL的innodb_file_per_table。

#replication

master = true         

mongod以master模式开启, 在主从环境中作为master的实例需开启该选项。

slave = ture

mongod以slave模式开启, 在主从环境中作为slave的实例需开启该选项,切需指定source参数值(也可启动后手工添加到local信息中)

source = 10.0.21.5:5700

设置master的来源,包括ip和port。

oplogSize = 200  #unit MB

复制环境中更新数据的日志的大小,其类似MySQL的binlog,同时该文件以轮询方式更新(重复写),类似于MySQL的redo log。更新频繁的应用中确保该值够大,以免slave还未同步,oplog却被重写,默认为数据盘的5%大小。

管理

即便认证会增加很小的通讯消耗, 也建议mongod服务不允许程序直接连接, mongod的访问机制贯穿用户的创建,访问,备份和监控,增加访问权限后,后续的所有操作都需要认证。 备份和监控也可以考虑使用mongodb官方的api, 详见 https://mms.mongodb.com/learn-more, 类似于percona Cloud, 在本地端安装agent, 所有数据通过agent上传到mongodb的云平台,管理员可以通过web界面查看信息。

1. 认证

不同于MySQL, mongod通过以下命令(mongo shell下操作)创建用户:

use database             #use dbname即可创建dbname库,如果该库什么都没创建,退出后不存在该库。
db.addUser(userDocument) #为database库增加一个认证用户, 比如 db.addUser("username", "password", true),第三个参数true可选,增加该参数表示该用户为只读权限。

认证用户:

use database
db.auth("username","password")   #返回1认证成功

2. 数据和备份

数据的备份方式多样, 包括停止mongod服务,拷贝整个dbpath下的文件, mongodump导出所有数据,但导出过程中会阻断数据的更新(两种方式都类似于MySQL的MyISAM备份)。 线上备份通过mongodump在slave中进行操作:

$BASE_DIR/bin/mongodump --port 57XX -uroot -pxxxxxx -o $BACK_DIR/$PRE_DIR

3. 监控

nagios监控 https://github.com/mzupan/nagios-plugin-mongodb cacti监控 https://github.com/arstercz/mongodb-cacti-plugins