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
方法二、修改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后即可永久生效.