MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它的特点是高性能、易部署、易使用,存储数据非常方便。公司在测试和生产环境使用了MONGODB数据库,日常在使用MONGODB数据库的过程中,遇到了一些问题,比较典型的三个问题现总结分享一下。

 

一、数据库最大连接数问题

当你在后台日志中,发现大量“connection refused because too many open connections: 819”信息时,一般跟你没有设置合适的最大连接数值有关。

默认情况下,在LINUX系统中,MONGODB默认连接数为819,你可以适当调大这个值,但注意这个值不是无限大,最多可设置成20000, 参见MONGODB的官方说明。

1.连接服务器,启动数据库

 ./mongod --fork --dbpath /usr/local/mongodb/data/replset/data --logpath=/usr/local/mongodb/logs/logs.info --replSet repset 

 注意:是后台启动,要加上fork

2.查看最大连接数

 

[root@DB192168129044 bin]# ./mongo

//再输入下面的
> db.serverStatus().connections;

 

显示结果
{ "current" : 3, "available" : 816 }

 

3.修改最大连接数

方法一、数据库启动时加--maxConns 10000参数来指定最大连接数

./mongod --maxConns=10000 --fork --dbpath /usr/local/mongodb/data/replset/data --logpath=/usr/local/mongodb/logs/logs.info --replSet repset 

 

方法二、修改mongodb.conf配置文件,在其中加一句maxConns = 20000保存退出后再启动MONGODB就好了。

[root@localhost mongodb]# vi mongodb.conf 

dbpath=/usr/local/mongodb/data
logpath=/usr/local/mongodb/mongodbdata/logs/mongodb.log
port=27017
maxConns=20000
logappend=true
auth=true
rest=true
httpinterface=true
fork=true
dbpath=/usr/local/mongodb/data
logpath=/usr/local/mongodb/mongodbdata/logs/mongodb.log
dbpath=/usr/local/mongodb/data
logpath=/usr/local/mongodb/mongodbdata/logs/mongodb.log
port=27017
maxConns=20000
dbpath=/usr/local/mongodb/data
logpath=/usr/local/mongodb/mongodbdata/logs/mongodb.log
port=27017
maxConns=20000
logappend=true
auth=true
rest=true
httpinterface=true
fork=true
replSet=repset/192.168.0.84:27017, 192.168.0.85:27017
keyFile=/usr/local/mongodb/key/keyFile0

 

 4.修改linux最大文件限制

查看最大连接数,看步骤2,如果还是819。那么考虑是不是linux系统的限制,Linux系统默认一个进程最大文件打开数目为1024。

当然这个问题也跟ulimit限制有关, 可以手动修改ulimit -n 来改动open file 的数目.

如果想使open file的值永久生效的话,请在/etc/security/limits.conf中添加以下四行, 数目根据系统情况具体修改.

#<domain>      <type>  <item>         <value>
#

#*               soft    core            0
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#@student        -       maxlogins       4

* soft nofile 102400
* hard nofile 102400

root soft nofile 102400
root hard nofile 102400

# End of file

 

然后在/etc/pam.d/login中添加“session    required     /lib64/security/pam_limits.so”

[root@localhost mongodb]# cat /etc/pam.d/login
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth       substack     system-auth
auth       include      postlogin
account    required     pam_nologin.so
account    include      system-auth
password   include      system-auth
# pam_selinux.so close should be the first session rule

session    required     /lib64/security/pam_limits.so
session    required     pam_selinux.so close
session    required     pam_loginuid.so
session    optional     pam_console.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open
session    required     pam_namespace.so
session    optional     pam_keyinit.so force revoke
session    include      system-auth
session    include      postlogin
-session   optional     pam_ck_connector.so

 

reboot后即可永久生效.

 

posted on 2017-06-06 13:38  白灰  阅读(9566)  评论(0编辑  收藏  举报