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后即可永久生效.