一度同期させる
待ちましょうw
終わったかどうかは以下のような方法で確認できます。
$ mongo
$ rs.status()
repltry:PRIMARY> rs.status()
{
"set" : "repltry",
"date" : ISODate("2014-10-12T08:57:02Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "192.168.56.101:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 8184,
"optime" : Timestamp(1413096918, 284), //ここと
"optimeDate" : ISODate("2014-10-12T06:55:18Z"),
"electionTime" : Timestamp(1413096243, 1),
"electionDate" : ISODate("2014-10-12T06:44:03Z"),
"self" : true
},
{
"_id" : 1,
"name" : "192.168.56.102:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 7987,
"optime" : Timestamp(1413096918, 284), // ここが一緒であれば終わってます。
"optimeDate" : ISODate("2014-10-12T06:55:18Z"),
"lastHeartbeat" : ISODate("2014-10-12T08:57:01Z"),
"lastHeartbeatRecv" : ISODate("2014-10-12T08:57:00Z"),
"pingMs" : 0,
"syncingTo" : "192.168.56.101:27017"
},
{
"_id" : 2,
"name" : "192.168.56.103:27017",
"health" : 1,
"state" : 7,
"stateStr" : "ARBITER",
"uptime" : 7987,
"lastHeartbeat" : ISODate("2014-10-12T08:57:01Z"),
"lastHeartbeatRecv" : ISODate("2014-10-12T08:57:01Z"),
"pingMs" : 0
}
],
"ok" : 1
}
SecondaryのInitial Sync
Tutorialを見ると、以下の様なことを行えば良いようです。
a. Stop the member’s mongod instance. To ensure a clean shutdown, use the db.shutdownServer() method from the mongo shell or on Linux systems, the mongod --shutdown option.
b. Delete all data and sub-directories from the member’s data directory. By removing the data dbPath, MongoDB will perform a complete resync. Consider making a backup first.
1. 正規方法でMongoを止める。
2. データディレクトリを削除する。
そして起動すればいいんですね。
やってみましょう。
repltry:SECONDARY> use admin
switched to db admin
repltry:SECONDARY> db.shutdownServer()
2014-10-12T09:20:18.817+0000 DBClientCursor::init call() failed
server should be down...
2014-10-12T09:20:18.818+0000 trying reconnect to 127.0.0.1:27017 (127.0.0.1) failed
2014-10-12T09:20:18.819+0000 warning: Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refused
2014-10-12T09:20:18.819+0000 reconnect 127.0.0.1:27017 (127.0.0.1) failed failed couldn't connect to server 127.0.0.1:27017 (127.0.0.1), connection attempt failed
2014-10-12T09:20:18.836+0000 trying reconnect to 127.0.0.1:27017 (127.0.0.1) failed
2014-10-12T09:20:18.839+0000 warning: Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refused
2014-10-12T09:20:18.839+0000 reconnect 127.0.0.1:27017 (127.0.0.1) failed failed couldn't connect to server 127.0.0.1:27017 (127.0.0.1), connection attempt failed
repltry:PRIMARY> rs.status()
{
"set" : "repltry",
"date" : ISODate("2014-10-12T09:22:59Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "192.168.56.101:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 9741,
"optime" : Timestamp(1413096918, 284),
"optimeDate" : ISODate("2014-10-12T06:55:18Z"),
"electionTime" : Timestamp(1413096243, 1),
"electionDate" : ISODate("2014-10-12T06:44:03Z"),
"self" : true
},
{
"_id" : 1,
"name" : "192.168.56.102:27017",
"health" : 0,
"state" : 8,
"stateStr" : "(not reachable/healthy)",
"uptime" : 0,
"optime" : Timestamp(1413096918, 284),
"optimeDate" : ISODate("2014-10-12T06:55:18Z"),
"lastHeartbeat" : ISODate("2014-10-12T09:22:59Z"),
"lastHeartbeatRecv" : ISODate("2014-10-12T09:20:18Z"),
"pingMs" : 0,
"syncingTo" : "192.168.56.101:27017"
},
{
"_id" : 2,
"name" : "192.168.56.103:27017",
"health" : 1,
"state" : 7,
"stateStr" : "ARBITER",
"uptime" : 9544,
"lastHeartbeat" : ISODate("2014-10-12T09:22:59Z"),
"lastHeartbeatRecv" : ISODate("2014-10-12T09:22:59Z"),
"pingMs" : 0
}
],
"ok" : 1
}
ちゃんと死んでますね。
ではデータを消しましょう。
データの場所は /etc/mongod.conf のdbpathに記述されています。
$cat /etc/mongod.conf
logpath=/var/log/mongodb/mongod.log
logappend=true
fork=true
dbpath=/var/lib/mongo
pidfilepath=/var/run/mongodb/mongod.pid
$ sudo rm -rf * /var/lib/mongo/*
これでおkかと。
では起動しましょう。
$ sudo service mongod start
$ mongo
repltry:STARTUP2>
STARTUP2となっていますね。
これでinitial syncが始まります。
Primaryの方で見てみると
repltry:PRIMARY> rs.status()
{
"set" : "repltry",
"date" : ISODate("2014-10-12T09:33:22Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "192.168.56.101:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 10364,
"optime" : Timestamp(1413096918, 284),
"optimeDate" : ISODate("2014-10-12T06:55:18Z"),
"electionTime" : Timestamp(1413096243, 1),
"electionDate" : ISODate("2014-10-12T06:44:03Z"),
"self" : true
},
{
"_id" : 1,
"name" : "192.168.56.102:27017",
"health" : 1,
"state" : 5,
"stateStr" : "STARTUP2",
"uptime" : 16,
"optime" : Timestamp(0, 0),
"optimeDate" : ISODate("1970-01-01T00:00:00Z"),
"lastHeartbeat" : ISODate("2014-10-12T09:33:20Z"),
"lastHeartbeatRecv" : ISODate("2014-10-12T09:33:21Z"),
"pingMs" : 12,
"lastHeartbeatMessage" : "initial sync need a member to be primary or secondary to do our initial sync"
},
{
"_id" : 2,
"name" : "192.168.56.103:27017",
"health" : 1,
"state" : 7,
"stateStr" : "ARBITER",
"uptime" : 10167,
"lastHeartbeat" : ISODate("2014-10-12T09:33:21Z"),
"lastHeartbeatRecv" : ISODate("2014-10-12T09:33:21Z"),
"pingMs" : 0
}
],
"ok" : 1
}
repltry:PRIMARY> rs.status()
{
"set" : "repltry",
"date" : ISODate("2014-10-12T09:34:01Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "192.168.56.101:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 10403,
"optime" : Timestamp(1413096918, 284),
"optimeDate" : ISODate("2014-10-12T06:55:18Z"),
"electionTime" : Timestamp(1413096243, 1),
"electionDate" : ISODate("2014-10-12T06:44:03Z"),
"self" : true
},
{
"_id" : 1,
"name" : "192.168.56.102:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 55,
"optime" : Timestamp(1413096918, 284),
"optimeDate" : ISODate("2014-10-12T06:55:18Z"),
"lastHeartbeat" : ISODate("2014-10-12T09:34:00Z"),
"lastHeartbeatRecv" : ISODate("2014-10-12T09:34:01Z"),
"pingMs" : 0,
"syncingTo" : "192.168.56.101:27017"
},
{
"_id" : 2,
"name" : "192.168.56.103:27017",
"health" : 1,
"state" : 7,
"stateStr" : "ARBITER",
"uptime" : 10206,
"lastHeartbeat" : ISODate("2014-10-12T09:33:59Z"),
"lastHeartbeatRecv" : ISODate("2014-10-12T09:33:59Z"),
"pingMs" : 1
}
],
"ok" : 1
}
のようになっていました。
結構さくっと終わっちゃったので、早めにrs.status()を実行しないと見れません。
こんな感じでInitial Syncが出来るようです。
また色々と試してみようかなと思います。