安装部署mongoDB
案例环境:
主机 |
操作系统 |
IP地址 |
Mongodb |
CentOS 6.5 |
192.168.1.1 |
软件包:https://www.jianguoyun.com/p/DW4qkukQ9vb_BhiAs28
##安装启动MongoDB
1)首先需要安装相关软件包
yum -y groupinstall "Development tools"
yum -y install openssl openssl-devel
tar zxf mongodb-linux-x86_64-rhel62-4.0.2.tgz
mv mongodb-linux-x86_64-rhel62-4.0.2 /usr/local/mongodb
2)创建MongoDB的数据存储目录/data/mogodb1,日志存储目录/data/logs,以及日志文件/data/logs/mongodb/mongodb1.log
mkdir -p /data/mongodb1
mkdir -p /data/logs/mongodb
touch /data/logs/mongodb/mongodb1.log
chmod -R 777 /data/logs/mongodb/mongodb1.log
当MongoDB处于频繁访问的状态时,如果shell启动进程所占用的资源设置过低的话,将会产生错误导致无法连接到MongoDB实例。需设置ulimit -n和ulimit -u的值大于20000。
ulimit -n 25000
ulimit -u 25000
3)创建MongoDB配置文件,定义启动所需相关参数
cd /usr/local/mongodb/bin/
vim mongodb.conf
#!/bin/bash
port=27017 //默认服务器端口号
dbpath=/data/mongodb1 //数据存储目录
logpath=/data/logs/mongodb/mongodb1.log //日志文件
logappend=true //使用追加的方式写日志
fork=true //后台运行
maxConns=5000 //最大同时连接数,默认2000
storageEngine=mmapv1 //指定存储引擎为内存映射文件
需要注意:在之前编写MongoDB启动所需的配置文件时,要指定storageEngine为内存映射文件,才会出现.ns文件,如果没有添加storageEngine=mmapv1这行,会被记录为.wt文件。
4)添加防火墙规则
iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 27017 -j ACCEPT
service iptables save
5)设置内核参数,关闭NUMA
echo 0 >/proc/sys/vm/zone_reclaim_mode //当某个节点可用内存不足时系统会从其他节点分配内存
sysctl -w vm.zone_reclaim_mode=0 //永久设置
##启动MongoDB
/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/bin/mongodb.conf
netstat -anpt | grep mongod
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 33475/mongod
##停止MongoDB的方法
ps aux | grep mongod
root 33475 0.3 10.0 1537520 100864 ? Sl 04:29 0:00 /usr/local/mongodb/bin/mongod --config /usr/local/mongodb/bin/mongodb.conf
kill -2 33475
或者
/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/bin/mongodb.conf –shutdown
##设置为开机自动启动
vim /etc/rc.local
rm -rf /data/mongodb1/mongod.lock
/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/bin/mongodb.conf
##尝试访问MongoDB
/usr/local/mongodb/bin/mongo 就是MongoDB的客户端
/usr/local/mongodb/bin/mongo
##进入MongoDB之后也可以这样关闭mongoDB
use admin;
db.shutdownServer();
##启动多实例
在单台服务器资源充分的情况下,可以使用多实例,以便充分使用服务器资源。
cd /usr/local/mongodb/bin/
cp mongodb.conf mongodb2.conf
vim /usr/local/mongodb/bin/mongodb2.conf
#!/bin/bash
port=27018 //定义第二个实例服务端口号
dbpath=/data/mongodb2 //定义第二个实例数据存储目录
logpath=/data/logs/mongodb/mongodb2.log //定义第二个实例日志文件
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
创建相关目录
mkdir /data/mongodb2
touch /data/logs/mongodb/mongodb2.log
chmod -R 777 /data/logs/mongodb/mongodb2.log
cd /usr/local/mongodb/bin/
./mongod -f mongodb.conf
./mongod -f mongodb2.conf
netstat -anpt | grep mongod
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 2708/./mongod
tcp 0 0 127.0.0.1:27018 0.0.0.0:* LISTEN 2729/./mongod
##为了便于运维人员管理,编写一个MongoDB数据库的控制脚本
vim /etc/init.d/mongod
#!/bin/bash
# chkconfig: - 99 20
PROG="/usr/local/mongodb/bin/mongod"
CONFIG=$1
CONF="/usr/local/mongodb/bin/$CONFIG.conf"
case "$2" in
start)
$PROG -f $CONF
;;
stop)
$PROG -f $CONF --shutdown
;;
restart)
$0 stop
$0 start
;;
*)
echo "用法: $0 {start|stop|restart}"
exit 2
esac
exit 0
chmod +x /etc/init.d/mongod
chkconfig --add mongod
service mongod mongodb start
service mongod mongodb2 start
##mongo数据库的相关操作
/usr/local/mongodb/bin/mongo
> show dbs; //查看当前实例下的数据库
> show databases; //兼容关系型数据库MySQL命令
> use local; //切换数据库local
> show collections; //查看数据库local的集合
> show tables; //兼容关系型数据库MySQL命令
MongoDB的数据目录是/data/mongodb1,存储所有的MongoDB的数据文件。
ls -lh /data/mongodb1
> help
其中常用的基本操作如下表所示:
操作 |
作用 |
show dbs |
查看当前实例下的数据库列表 |
show users |
显示目录 |
use |
切换当前数据库 |
db.help() |
显示数据库操作命令 |
show collections |
显示当前数据库中的集合 |
db.mycoll.help() |
显示集合操作命令,mycoll是当前数据库下叫做mycoll的集合 |
db.foo.find() |
对当前数据库中foo集合进行数据查找 |
> show dbs;
admin 0.078GB
config 0.078GB
local 0.078GB
> use test; //切换数据库test
> db.user.insert({"uid":1}) //user集合中插入一条数据
WriteResult({ "nInserted" : 1 })
> show dbs; //同样的,插入数据的同时,test也同样被创建
admin 0.078GB
config 0.078GB
local 0.078GB
test 0.078GB
> db.user.insert({"uid":2,"uname":"zhangsan","isvip":true,"sex":null,"favorite":["apple","banana",1,2,3],"regtime":new Date()}) //插入不同类型的数据
> db.user.find() //查看插入到user集合中的数据
> db.user.findOne({"uid":2}) //查找其中uid=2的数据
> a=db.user.findOne({"uid":2})
> typeof(a.uid)
number
在Mongodb中数据类型没有MySQL那么多,无论是整型、短整型、长整型,浮点型,在Mongodb中都是64为的浮点数,均为number类型,简单,不需要区分。