Mongodb部署

本文介绍了MongoDB的部署过程,包括MongoDB的特点、使用场景和安装步骤。同时,针对非正常关闭导致的启动失败问题,提供了详细的解决方法,包括删除mongod.lock文件、修复数据库和清理journal目录。此外,还提及了通过yum安装MongoDB的选项。
摘要由CSDN通过智能技术生成

Mongodb部署

一、Mongodb简介  官网地址:http://www.mongodb.org/   

1
2
3
4
MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能
最丰富,最像关系数据库的。它在许多场景下可用于替代传统的关系型数据库或键/值存储方式。它是由C++语言编写的一个基于分布式文件存储的开源数据库系统,它的目的在于为WEB应
用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系型数据库和非关系型数据库之间的产品,是非关系型数据库当中功能最丰富,最像关系型数据库的。它支持的数据结构
非常松散,会将数据存储为一个文档,数据结构由键值对(key=>value)组成,是类似于json的bson格式,字段值可以包含其它文档、数组和文档数组,因此可以存储比较复杂的数据类型。

二、Mongodb特点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
MongoDB特点是高性能、易部署、易使用,存储数据非常方便,最大的特点在于它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系型数据库单表
查询的绝大部分功能,而且还支持对数据建立索引。MongoDB的主要特点总结如下:
1)提供了一个面向集合的文档存储,易存储对象类型的数据,操作起来比较简单和容易的非关系型数据库
2)使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段。
3)支持动态查询。
4)支持完全索引,包含内部对象,可以在MongoDB记录中设置任何属性的索引来实现更快的排序。
5)支持复制和故障恢复。
6)使用高效的二进制数据存储,包括大型对象(如视频等)。
7)GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
8)自动处理碎片,以支持云计算层次的扩展性;如果负载的增加(需要更多的存储空间和更强的处理能力),它可以分布在计算机网络中的其它节点上,这就是所谓的分片。
9)支持RUBY,PYTHON,JAVA,C++,PHP,C #等多种语言。
10)文件存储格式为BSON(一种JSON的扩展),MongoDB支持丰富的查询表达式,查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象和数组。
11)MongoDB允许在服务端执行脚本,可以用JavaScript编写某个函数,直接在服务端执行,也可以吧函数的定义存储在服务端,下次直接调用即可。
12)可通过网络访问,可以通过本地u或者网络创建数据镜像,这使得MongoDB含有更强的扩展性。

Mongodb的不足之处

1
2
3
4
5
6
7
8
9
10
11
1)在集群分片中的数据分布不均匀
2)单机可靠性比较差
3)大数据量持续插入,写入性能有较大波动
4)不支持事务操作。所以事务要求严格的系统(如果银行系统)肯定不能用它。
5)磁盘空间占用比较大。空间占用大的原因如下:
   1-> 空间的预分配:为避免形成过多的硬盘碎片,mongodb 每次空间不足时都会申请生成一大块的硬盘空 间,而且申请的量从 64M、128M、256M 那样的指数递增,直到2G为单个文件
       的最大体积。随着数据量 的增加,你可以在其数据目录里看到这些整块生成容量不断递增的文件。
   2-> 字段名所占用的空间:为了保持每个记录内的结构信息用于查询,mongodb 需要把每个字段的 key-value 都以 BSON 的形式存储,如果 value 域相对于 key 域并不大,比如
       存放数值型的数据,则数据的 overhead 是最大的。一种减少空间占用的方法是把字段名尽量取短一些,这样占用 空间就小了,但这就要求在易读 性与空间占用上作为权衡了。
   3-> 删除记录不释放空间:这很容易理解,为避免记录删除后的数据的大规模挪动,原记录空间不删除,只 标记“已删除”即可,以后还可以重复利用。
   4-> 可以定期运行 db.repairDatabase()来整理记录,但这个过程会比较缓慢

三、Mongodb功能

1
2
3
4
5
6
7
1)面向集合的存储:适合存储对象及JSON形式的数据。
2)动态查询:Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
3)完整的索引支持:包括文档内嵌对象及数组。Mongo的查询优化器会分析查询表达式,并生成一个高效的查询计划。
4)查询监视:Mongo包含一个监视工具用于分析数据库操作的性能。
5)复制及自动故障转移:Mongo数据库支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目标是提供冗余及自动故障转移。
6)高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)
7)自动分片以支持云级别的伸缩性:自动分片功能支持水平的数据库集群,可动态添加额外的机器。

四、Mongodb使用场景

1
2
3
4
5
6
适用场景:
网站实时数据处理。它非常适合实时的插入、更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性;缓存,由于性能很高,它适合作为信息基础设施的缓存层。在系统重启之后,
由它搭建的持久化缓存层可以避免下层的数据源过载。高伸缩性的场景。非常适合由数十或数百台服务器组成的数据库,它的路线图中已经包含对MapReduce引擎的内置支持。
不适用场景:
要求高度事务性的系统。传统的商业智能应用。复杂的跨文档(表)级联查询。

五、Mongodb安装使用  官网下载地址:http://www.mongodb.org/downloads

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
1)安装mongodb
[root@data-server src] # cd /usr/local/src/
[root@data-server src] # tar -zvxf mongodb-linux-x86_64-rhel62-3.4.4
[root@data-server src] # mv mongodb-linux-x86_64-rhel62-3.4.4 /usr/local/mongodb
[root@data-server src] # cd /usr/local/mongodb           //Mongodb主目录
[root@data-server mongodb] # ll
总用量 120
drwxr-xr-x. 2 root root  4096 6月   3 14:51 bin
-rw-r--r--. 1 root root 34520 4月  21 06:19 GNU-AGPL-3.0
-rw-r--r--. 1 root root 16726 4月  21 06:19 MPL-2
-rw-r--r--. 1 root root  1359 4月  21 06:19 README
-rw-r--r--. 1 root root 55625 4月  21 06:19 THIRD-PARTY-NOTICES
[root@data-server mongodb] # mkdir /usr/local/mongodb/data        //Mongodb数据目录,可以存放在一个独立的大分区上
[root@data-server mongodb] # mkdir /usr/local/mongodb/log         //Mongodb日志目录
2)启动Mongodb
使用mongod命令建立一个mongodb数据库链接,端口号设置为10001,数据库的路径为 /usr/local/mongodb/data ,日志路径为 /usr/local/mongodb/log/mogodb .log
mongodb的启动程序放在后台执行,下面命令执行后,按ctrl+c
[root@data-server mongodb] # nohup /usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data/ --logpath=/usr/local/mongodb/log/mongo.log &
mongodb默认端口是27017
[root@data-server mongodb] # ps -ef|grep mongodb
root     14858 14518  1 15:01 pts /1     00:00:01  /usr/local/mongodb/bin/mongod  --dbpath= /usr/local/mongodb/data/  --logpath= /usr/local/mongodb/log/mongo .log
root     14887 14518  0 15:02 pts /1     00:00:00  grep  mongodb
[root@data-server bin] # netstat -tunlp|grep 14858
tcp        0      0 0.0.0.0:27017               0.0.0.0:*                   LISTEN      14858 /mongod
[root@data-server mongodb] # lsof -i:27017
COMMAND   PID USER   FD   TYPE DEVICE SIZE /OFF  NODE NAME
mongod  14858 root    7u  IPv4 145311      0t0  TCP *:27017 (LISTEN)
3)设置mongodb的环境变量
[root@data-server ~] # vim /etc/profile
.......
export  PATH=$PATH: /usr/local/mongodb/bin/
[root@data-server ~] # source /etc/profile
4)为了更方便的启动和关闭MongoDB,我们可以使用Shell写脚本,当然也可以加入到service中
    更好的方式是采用配置文件,把MongoDB需要的参数写入配置文件,然后在脚本中引用;
[root@data-server ~] # cat /usr/local/mongodb/mongodb.conf
#代表端口号,如果不指定则默认为27017
port=27017
#MongoDB数据文件目录
dbpath= /usr/local/mongodb/data
#MongoDB日志文件目录
logpath= /usr/local/mongodb/log/mongo .log
#日志文件自动累加
logappend= true
编写启动脚本
[root@data-server ~] # vim /etc/init.d/mongodb
#!/bin/bash
#
# mongod        Start up the MongoDB server daemon
#
# source function library
/etc/rc .d /init .d /functions
#定义命令
CMD= /usr/local/mongodb/bin/mongod
#定义配置文件路径
INITFILE= /usr/local/mongodb/mongodb .conf
start()
{
     #&表示后台启动,也可以使用fork参数
     $CMD -f $INITFILE &
     echo  "MongoDB is running background..."
}
stop()
{
     pkill mongod
     echo  "MongoDB is stopped."
}
case  "$1"  in
     start)
         start
         ;;
     stop)
         stop
         ;;
     *)
         echo  $ "Usage: $0 {start|stop}"
esac
[root@data-server ~] # chmod 755 /etc/init.d/mongodb
[root@data-server ~] # /etc/init.d/mongodb status
用法: /etc/init .d /mongodb  {start|stop}
[root@data-server ~] # /etc/init.d/mongodb stop
已终止
[root@data-server ~] # lsof -i:27017
[root@data-server ~] # /etc/init.d/mongodb start
MongoDB is running background...
[root@data-server ~] # lsof -i:27017
COMMAND   PID USER   FD   TYPE DEVICE SIZE /OFF  NODE NAME
mongod  15138 root    7u  IPv4 147713      0t0  TCP *:27017 (LISTEN)
通过 shell 连接 MongoDB 服务:(在客户机上连接本机mongodb:mongo 182.48.115.238:27017)
[root@data-server ~] # mongo
MongoDB shell version v3.4.4
connecting to: mongodb: //127 .0.0.1:27017
MongoDB server version: 3.4.4
Welcome to the MongoDB shell.
For interactive help,  type  "help" .
For  more  comprehensive documentation, see
   http: //docs .mongodb.org/
Questions? Try the support group
   http: //groups .google.com /group/mongodb-user
Server has startup warnings:
2017-06-03T15:17:54.695+0800 I STORAGE  [initandlisten]
2017-06-03T15:17:54.695+0800 I STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2017-06-03T15:17:54.695+0800 I STORAGE  [initandlisten] **          See http: //dochub .mongodb.org /core/prodnotes-filesystem
2017-06-03T15:17:55.699+0800 I CONTROL  [initandlisten]
2017-06-03T15:17:55.700+0800 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled  for  the database.
2017-06-03T15:17:55.700+0800 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2017-06-03T15:17:55.700+0800 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user,  which  is not recommended.
2017-06-03T15:17:55.700+0800 I CONTROL  [initandlisten]
2017-06-03T15:17:55.700+0800 I CONTROL  [initandlisten]
2017-06-03T15:17:55.700+0800 I CONTROL  [initandlisten] ** WARNING:  /sys/kernel/mm/transparent_hugepage/enabled  is  'always' .
2017-06-03T15:17:55.700+0800 I CONTROL  [initandlisten] **        We suggest setting it to  'never'
2017-06-03T15:17:55.700+0800 I CONTROL  [initandlisten]
2017-06-03T15:17:55.700+0800 I CONTROL  [initandlisten] ** WARNING:  /sys/kernel/mm/transparent_hugepage/defrag  is  'always' .
2017-06-03T15:17:55.700+0800 I CONTROL  [initandlisten] **        We suggest setting it to  'never'
2017-06-03T15:17:55.700+0800 I CONTROL  [initandlisten]
> help
   db.help()                    help on db methods
   db.mycoll.help()             help on collection methods
   sh.help()                    sharding helpers
   rs.help()                    replica  set  helpers
   help admin                   administrative help
   help connect                 connecting to a db help
   help keys                    key shortcuts
   help misc                    misc things to know
   help mr                      mapreduce
   show dbs                     show database names
   show collections             show collections  in  current database
   show  users                    show  users  in  current database
   show profile                 show most recent system.profile entries with  time  >= 1ms
   show logs                    show the accessible logger names
   show log [name]              prints out the last segment of log  in  memory,  'global'  is default
   use <db_name>                 set  current database
   db.foo. find ()                list objects  in  collection foo
   db.foo. find ( { a : 1 } )     list objects  in  foo where a == 1
   it                           result of the last line evaluated; use to further iterate
   DBQuery.shellBatchSize = x    set  default number of items to display on shell
   exit                          quit the mongo shell

-------------------------------------------------mongodb非正常关闭导致启动失败问题-------------------------------------------------

之前强制关闭了mongodb,后续再次启动的时候,发现报错:
[root@i-omxpbsuo ~]# /usr/local/mongodb/bin/mongod --logpath /usr/local/mongodb/log/system.log --logappend --dbpath /data/mongodb --directoryperdb --auth --journal --profile=1 --slowms=5 --fork 
forked process: 4853
all output going to: /usr/local/mongodb/log/system.log

查看日志

这是由于上次mongodb非正常关闭导致的。
解决办法:
1)删除数据目录/data/mongodb 下的 mongod.lock 
[root@i-omxpbsuo ~]# rm -rf /data/mongodb/mongod.lock

2)修复mongodb
[root@i-omxpbsuo ~]# /usr/local/mongodb/bin/mongod --logpath --dbpath /data/mongodb --repair 

3)删除/data/mongodb/journal 下的 j._4 文件(或者将journal下的文件清空)
[root@i-omxpbsuo ~]# rm -rf /data/mongodb/journal/*j._4

4)然后再次启动mongodb就ok了
[root@i-omxpbsuo ~]# /usr/local/mongodb/bin/mongod --logpath --dbpath /data/mongodb --directoryperdb --auth --journal --profile=1 --slowms=5 --fork &

1
2
3
4
5
6
7
8
9
10
---------------------------------------------------------
正确关闭mongod 的方法:进入mongo shell
> use admin
> db.shutdownServer()
也可以按照文档粗暴的杀掉它,它内部应该有KILL信号处理程序。
# killall mongod
请不要  kill  -9 ,会造成文件数据混乱丢失repair也无力回天。
---------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------
也可以采用yum的方式安装mongodb,操作记录如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值