Hello,你们下午好。node
近几天的项目有点赶,因此耽误了更新。如今给你们分享下,在安装mongodb的过程当中,遇到的故障一则。其实很小白的问题,当时遇到这个问题的时候比较心慌,浪费了不少时间,跟你们分享下解决的思路吧。mongodb
先描述下个人环境,请参照前一篇博客,利用脚本初始化出4个节点(因为实验缘由,我使用了单台的服务器)。shell
首先咱们启动这四个初始化节点。(具体的文件配置,请参照前文,初始化的内容,这里仅用/etc/mongodb.conf为例)服务器
[root@1]# cat /etc/mongodb.conf
dbpath=/usr/local/mongodb-3.0.2/data
logpath=/usr/local/mongodb-3.0.2/logs/mongo.log
pidfilepath=/var/run/mongodb/mongodb.pid
unixSocketPrefix=/usr/local/mongodb-3.0.2/socket
directoryperdb=true
replSet=picture
shardsvr=true
logappend=true
port = 27017
maxConns=20000
oplogSize=30720
fork=true
nohttpinterface=true
nojournal=trueapp
[root@1]# mongod --config=/etc/mongodb.conf
about to fork child process, waiting until server is ready for connections.
forked process: 32560
child process started successfully, parent exiting
[root@1]# mongod --config=/etc/mongodb1.conf
about to fork child process, waiting until server is ready for connections.
forked process: 32574
child process started successfully, parent exiting
[root@1]# mongod --config=/etc/mongodb2.conf
about to fork child process, waiting until server is ready for connections.
forked process: 32588
child process started successfully, parent exiting
[root@1]# mongod --config=/etc/mongodb3.conf
about to fork child process, waiting until server is ready for connections.
forked process: 32602
child process started successfully, parent exitingsocket
[root@1]# ps -ef | grep mongo //咱们能够看到四个实例已经启动。下一步咱们将进行角色分配(即副本集搭建)
root 32560 1 0 15:43 ? 00:00:00 mongod --config=/etc/mongodb.conf
root 32574 1 0 15:43 ? 00:00:00 mongod --config=/etc/mongodb1.conf
root 32588 1 0 15:43 ? 00:00:00 mongod --config=/etc/mongodb2.conf
root 32602 1 0 15:43 ? 00:00:00 mongod --config=/etc/mongodb3.conf
root 32616 28203 0 15:46 pts/0 00:00:00 grep mongo
[root@1]# ui
[root@1]# mongo
MongoDB shell version: 3.0.2
connecting to: test
Server has startup warnings:
2016-01-25T15:43:46.645+0800 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2016-01-25T15:43:46.645+0800 I CONTROL [initandlisten]
2016-01-25T15:43:46.645+0800 I CONTROL [initandlisten]
2016-01-25T15:43:46.645+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2016-01-25T15:43:46.645+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2016-01-25T15:43:46.645+0800 I CONTROL [initandlisten]
2016-01-25T15:43:46.645+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2016-01-25T15:43:46.645+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2016-01-25T15:43:46.645+0800 I CONTROL [initandlisten]
2016-01-25T15:43:46.645+0800 I CONTROL [initandlisten] ** WARNING: soft rlimits too low. rlimits set to 65535 processes, 655350 files. Number of processes should be at least 327675 : 0.5 times number of files.
2016-01-25T15:43:46.645+0800 I CONTROL [initandlisten]
> use admin //首先切换到admindb,进行副本集配置
switched to db admin
> config = {_id: 'picture', members: [
... {_id: 0, host: '$IP:27017'},
... {_id: 1, host: '$IP:37017'},
... {_id: 2, host: '$IP:47017'},
... {_id: 3, host: '$IP:30000',arbiterOnly:true}] //此时配置将产生一个主节点,两个从节点,一个仲裁节点
... }
{
"_id" : "picture",
"members" : [
{
"_id" : 0,
"host" : "$IP:27017"
},
{
"_id" : 1,
"host" : "$IP:37017"
},
{
"_id" : 2,
"host" : "$IP:47017"
},
{
"_id" : 3,
"host" : "$IP:30000",
"arbiterOnly" : true
}
]
}
> rs.initiate(config);
{
"errmsg" : "exception: new file allocation failure", //你们能够看到初始化失败
"code" : 12520,
"ok" : 0
}this
查询下各个节点状态,悲剧了,长时间停留在STARTUP2状态spa
picture:OTHER> rs.status()
{
"set" : "picture",
"date" : ISODate("2016-01-25T07:51:15.665Z"),
"myState" : 5,
"members" : [
{
"_id" : 0,
"name" : "$IP:27017",
"health" : 1,
"state" : 5,
"stateStr" : "STARTUP2",
"uptime" : 449,
"optime" : Timestamp(0, 0),
"optimeDate" : ISODate("1970-01-01T00:00:00Z"),
"configVersion" : 1,
"self" : true
},
{
"_id" : 1,
"name" : "$IP:37017",
"health" : 1,
"state" : 5,
"stateStr" : "STARTUP2",
"uptime" : 154,
"optime" : Timestamp(0, 0),
"optimeDate" : ISODate("1970-01-01T00:00:00Z"),
"lastHeartbeat" : ISODate("2016-01-25T07:51:15.326Z"),
"lastHeartbeatRecv" : ISODate("2016-01-25T07:51:15.326Z"),
"pingMs" : 0,
"configVersion" : 1
},
{
"_id" : 2,
"name" : "$IP:47017",
"health" : 1,
"state" : 5,
"stateStr" : "STARTUP2",
"uptime" : 154,
"optime" : Timestamp(0, 0),
"optimeDate" : ISODate("1970-01-01T00:00:00Z"),
"lastHeartbeat" : ISODate("2016-01-25T07:51:15.326Z"),
"lastHeartbeatRecv" : ISODate("2016-01-25T07:51:15.324Z"),
"pingMs" : 0,
"configVersion" : 1
},
{
"_id" : 3,
"name" : "$IP:30000",
"health" : 1,
"state" : 7,
"stateStr" : "ARBITER",
"uptime" : 154,
"lastHeartbeat" : ISODate("2016-01-25T07:51:15.324Z"),
"lastHeartbeatRecv" : ISODate("2016-01-25T07:51:15.324Z"),
"pingMs" : 0,
"configVersion" : 1
}
],
"ok" : 1
}
picture:OTHER> //你们发现本节点状态为other,………… ,好久好久之后 依然如此。unix
咱们的解决思路是什么?
首先,想跟你们分享下mongodb的整个的启动和副本集初始化过程(能够关注下一章节的博客)。咱们知道 STARTUP是其中的一个阶段。
而后,出现问题。其实第一个想法就是看log。那么咱们看下log告诉咱们什么了。
【$IP:27017-log】
2016-01-25T15:48:41.275+0800 I REPL [conn1] replSetInitiate admin command received from client
2016-01-25T15:48:41.277+0800 I REPL [conn1] replSet replSetInitiate config object with 4 members parses ok
2016-01-25T15:48:41.278+0800 I NETWORK [initandlisten] connection accepted from $IP:38296 #2 (2 connections now open)
2016-01-25T15:48:41.279+0800 I NETWORK [initandlisten] connection accepted from $IP:38299 #3 (3 connections now open)
2016-01-25T15:48:41.279+0800 I NETWORK [initandlisten] connection accepted from $IP:38300 #4 (4 connections now open)
2016-01-25T15:48:41.280+0800 I REPL [ReplicationExecutor] New replica set config in use: { _id: "picture", version: 1, members: [ { _id: 0, host: "$IP:27017", arbiterOnly: false, buildIndexes: true, hidden: false, priority: 1.0, tags: {}, slaveDelay: 0, votes: 1 }, { _id: 1, host: "$IP:37017", arbiterOnly: false, buildIndexes: true, hidden: false, priority: 1.0, tags: {}, slaveDelay: 0, votes: 1 }, { _id: 2, host: "$IP:47017", arbiterOnly: false, buildIndexes: true, hidden: false, priority: 1.0, tags: {}, slaveDelay: 0, votes: 1 }, { _id: 3, host: "$IP:30000", arbiterOnly: true, buildIndexes: true, hidden: false, priority: 1.0, tags: {}, slaveDelay: 0, votes: 1 } ], settings: { chainingAllowed: true, heartbeatTimeoutSecs: 10, getLastErrorModes: {}, getLastErrorDefaults: { w: 1, wtimeout: 0 } } }
2016-01-25T15:48:41.280+0800 I REPL [ReplicationExecutor] This node is $IP:27017 in the config
2016-01-25T15:48:41.280+0800 I REPL [ReplicationExecutor] transition to STARTUP2
2016-01-25T15:48:41.280+0800 I REPL [conn1] ******
2016-01-25T15:48:41.280+0800 I REPL [conn1] creating replication oplog of size: 30720MB...
2016-01-25T15:48:41.281+0800 I STORAGE [FileAllocator] allocating new datafile /usr/local/mongodb-3.0.2/data/local/local.1, filling with zeroes...
2016-01-25T15:48:41.281+0800 I REPL [ReplicationExecutor] Member $IP:47017 is now in state STARTUP
2016-01-25T15:48:41.281+0800 I REPL [ReplicationExecutor] Member $IP:37017 is now in state STARTUP
2016-01-25T15:48:41.281+0800 I REPL [ReplicationExecutor] Member $IP:30000 is now in state STARTUP
2016-01-25T15:48:41.283+0800 I STORAGE [FileAllocator] done allocating datafile /usr/local/mongodb-3.0.2/data/local/local.1, size: 2047MB, took 0.002 secs
2016-01-25T15:48:41.283+0800 I STORAGE [FileAllocator] allocating new datafile /usr/local/mongodb-3.0.2/data/local/local.2, filling with zeroes...
2016-01-25T15:48:41.286+0800 I STORAGE [FileAllocator] done allocating datafile /usr/local/mongodb-3.0.2/data/local/local.2, size: 2047MB, took 0.002 secs
2016-01-25T15:48:41.286+0800 I STORAGE [FileAllocator] allocating new datafile /usr/local/mongodb-3.0.2/data/local/local.3, filling with zeroes...
2016-01-25T15:48:41.288+0800 I STORAGE [FileAllocator] done allocating datafile /usr/local/mongodb-3.0.2/data/local/local.3, size: 2047MB, took 0.002 secs
2016-01-25T15:48:41.288+0800 I STORAGE [FileAllocator] allocating new datafile /usr/local/mongodb-3.0.2/data/local/local.4, filling with zeroes...
2016-01-25T15:48:41.291+0800 I STORAGE [FileAllocator] done allocating datafile /usr/local/mongodb-3.0.2/data/local/local.4, size: 2047MB, took 0.002 secs
2016-01-25T15:48:41.291+0800 I STORAGE [FileAllocator] allocating new datafile /usr/local/mongodb-3.0.2/data/local/local.5, filling with zeroes...
2016-01-25T15:48:41.293+0800 I STORAGE [FileAllocator] done allocating datafile /usr/local/mongodb-3.0.2/data/local/local.5, size: 2047MB, took 0.002 secs
2016-01-25T15:48:41.293+0800 I STORAGE [FileAllocator] allocating new datafile /usr/local/mongodb-3.0.2/data/local/local.6, filling with zeroes...
2016-01-25T15:48:41.298+0800 I STORAGE [FileAllocator] done allocating datafile /usr/local/mongodb-3.0.2/data/local/local.6, size: 2047MB, took 0.004 secs
2016-01-25T15:48:41.298+0800 I STORAGE [FileAllocator] allocating new datafile /usr/local/mongodb-3.0.2/data/local/local.7, filling with zeroes...
2016-01-25T15:48:41.301+0800 I STORAGE [FileAllocator] done allocating datafile /usr/local/mongodb-3.0.2/data/local/local.7, size: 2047MB, took 0.002 secs
2016-01-25T15:48:41.301+0800 I STORAGE [FileAllocator] allocating new datafile /usr/local/mongodb-3.0.2/data/local/local.8, filling with zeroes...
2016-01-25T15:48:41.303+0800 I STORAGE [FileAllocator] done allocating datafile /usr/local/mongodb-3.0.2/data/local/local.8, size: 2047MB, took 0.002 secs
2016-01-25T15:48:41.304+0800 I STORAGE [FileAllocator] allocating new datafile /usr/local/mongodb-3.0.2/data/local/local.9, filling with zeroes...
2016-01-25T15:48:41.318+0800 I STORAGE [FileAllocator] FileAllocator: posix_fallocate //发现日志至此不动了
【$IP:37017-log】
2016-01-25T15:51:59.127+0800 I STORAGE [FileAllocator] FileAllocator: posix_fallocate failed: errno:28 No space left on device falling back
//Congratulations!!!!!~~~
没有空间!!咱们查看下系统的空间使用状况。
[root@1 logs]# df -TH
Filesystem Type Size Used Avail Use% Mounted on
/dev/vda1 ext4 22G 21G 0 100% /
tmpfs tmpfs 8.4G 0 8.4G 0% /dev/shm
/dev/vdb ext4 22G 21G 0 100% /
/dev/vdb ext4 529G 208M 502G 1% /data
[root@1 logs]#
就是这么简单的问题。这个是一位好朋友在运行了个人脚本以后,反馈给个人。分享给你们。
其实在实践中,可以遇到各类预期外的情况,很开心。
但愿你们能多多交流。
谢谢,反馈给我这个问题的张同窗~~撒花~~