====== ReplicaSets ====== mkdir -p /data/mongo{1,2,3}/{db,logs} ==== 直接 ==== /usr/bin/mongod --replSet replset --journal --port 27017 --logappend --logpath /data/mongo1/logs/mongod.log --pidfilepath=/data/mongo1/logs/mongod.pid --dbpath=/data/mongo1/db --fork --rest /usr/bin/mongod --replSet replset --journal --port 27018 --logappend --logpath /data/mongo2/logs/mongod.log --pidfilepath=/data/mongo2/logs/mongod.pid --dbpath=/data/mongo2/db --fork --rest /usr/bin/mongod --replSet replset --journal --port 27019 --logappend --logpath /data/mongo3/logs/mongod.log --pidfilepath=/data/mongo3/logs/mongod.pid --dbpath=/data/mongo3/db --fork --rest ==== 設定ファイル作成 ==== # vi /data/mongo1/mongod.conf replSet = replset journal = true port = 27017 logappend = true logpath = /data/mongo1/logs/mongod.log pidfilepath = /data/mongo1/logs/mongod.pid dbpath = /data/mongo1/db fork = true rest = true # sed -e "s/mongo1/mongo2/" /data/mongo1/mongod.conf > /data/mongo2/mongod.conf # vi /data/mongo2/mongod.conf :%s/27017/27018/g # sed -e "s/mongo1/mongo3/" /data/mongo1/mongod.conf > /data/mongo3/mongod.conf # vi /data/mongo3/mongod.conf :%s/27017/27019/g /usr/bin/mongod --config /data/mongo1/mongod.conf /usr/bin/mongod --config /data/mongo2/mongod.conf /usr/bin/mongod --config /data/mongo3/mongod.conf ===== 新規構築 Ver ===== # mongo MongoDB shell version: 2.2.2 connecting to: test > config = {_id:'replset',members: ... [ ... {_id:0, host:'localhost:27017', priority:1}, ... {_id:1, host:'localhost:27018', priority:1}, ... {_id:2, host:'localhost:27019', priority:1}, ... ]} { "_id" : "replset", "members" : [ { "_id" : 0, "host" : "localhost:27017", "priority" : 1 }, { "_id" : 1, "host" : "localhost:27018", "priority" : 1 }, { "_id" : 2, "host" : "localhost:27019", "priority" : 1 } ] } > rs.initiate(config) { "info" : "Config now saved locally. Should come online in about a minute.", "ok" : 1 } replset:STARTUP2> rs.status() { "set" : "replset", "date" : ISODate("2013-01-29T05:15:12Z"), "myState" : 1, "members" : [ { "_id" : 0, "name" : "localhost:27017", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 469, "optime" : Timestamp(1359436451000, 1), "optimeDate" : ISODate("2013-01-29T05:14:11Z"), "self" : true }, { "_id" : 1, "name" : "localhost:27018", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 51, "optime" : Timestamp(1359436451000, 1), "optimeDate" : ISODate("2013-01-29T05:14:11Z"), "lastHeartbeat" : ISODate("2013-01-29T05:15:11Z"), "pingMs" : 3 }, { "_id" : 2, "name" : "localhost:27019", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 51, "optime" : Timestamp(1359436451000, 1), "optimeDate" : ISODate("2013-01-29T05:14:11Z"), "lastHeartbeat" : ISODate("2013-01-29T05:15:11Z"), "pingMs" : 61 } ], "ok" : 1 } replset:PRIMARY> use testdb switched to db testdb replset:PRIMARY> db.testcol.insert( { "key1": "string", "key2": 123 } ) replset:PRIMARY> db.testcol.insert( { "key1": "integer", "key2": 456 } ) replset:PRIMARY> db.testcol.find() { "_id" : ObjectId("51075bbca90ac28dac68e0f5"), "key1" : "string", "key2" : 123 } { "_id" : ObjectId("51075bd7a90ac28dac68e0f6"), "key1" : "integer", "key2" : 456 } replset:PRIMARY> exit bye # mongo --port 27018 MongoDB shell version: 2.2.2 connecting to: 127.0.0.1:27018/test replset:SECONDARY> show dbs local 4.201171875GB testdb 0.203125GB replset:SECONDARY> use testdb switched to db testdb replset:SECONDARY> db.testcol.find() error: { "$err" : "not master and slaveOk=false", "code" : 13435 } replset:SECONDARY> db.getMongo().setSlaveOk() replset:SECONDARY> show collections system.indexes testcol replset:SECONDARY> db.testcol.find() { "_id" : ObjectId("51075bbca90ac28dac68e0f5"), "key1" : "string", "key2" : 123 } { "_id" : ObjectId("51075bd7a90ac28dac68e0f6"), "key1" : "integer", "key2" : 456 } replset:SECONDARY> db.getMongo().slaveOk = false false replset:SECONDARY> exit bye # mongo MongoDB shell version: 2.2.2 connecting to: test replset:PRIMARY> use admin switched to db admin replset:PRIMARY> db.shutdownServer() Mon Jan 28 21:26:19 DBClientCursor::init call() failed Mon Jan 28 21:26:19 query failed : admin.$cmd { shutdown: 1.0 } to: 127.0.0.1:27017 server should be down... Mon Jan 28 21:26:19 trying reconnect to 127.0.0.1:27017 Mon Jan 28 21:26:19 reconnect 127.0.0.1:27017 failed couldn't connect to server 127.0.0.1:27017 > exit bye # ps aux | grep mongo root 5101 0.5 3.1 9582360 32512 ? Sl 21:07 0:06 /usr/bin/mongod --replSet replset --journal --port 27018 --logappend --logpath /data/mongo2/logs/mongod.log --pidfilepath=/data/mongo2/logs/mongod.pid --dbpath=/data/mongo2/db --fork root 5148 0.5 3.1 9586480 32480 ? Sl 21:07 0:05 /usr/bin/mongod --replSet replset --journal --port 27019 --logappend --logpath /data/mongo3/logs/mongod.log --pidfilepath=/data/mongo3/logs/mongod.pid --dbpath=/data/mongo3/db --fork root 5726 0.0 0.0 61212 748 pts/0 S+ 21:26 0:00 grep mongo # mongo --port 27018 MongoDB shell version: 2.2.2 connecting to: 127.0.0.1:27018/test replset:SECONDARY> rs.status() { "set" : "replset", "date" : ISODate("2013-01-29T05:27:40Z"), "myState" : 2, "syncingTo" : "localhost:27019", "members" : [ { "_id" : 0, "name" : "localhost:27017", "health" : 0, "state" : 8, "stateStr" : "(not reachable/healthy)", "uptime" : 0, "optime" : Timestamp(1359436759000, 1), "optimeDate" : ISODate("2013-01-29T05:19:19Z"), "lastHeartbeat" : ISODate("2013-01-29T05:26:18Z"), "pingMs" : 0, "errmsg" : "socket exception [CONNECT_ERROR] for localhost:27017" }, { "_id" : 1, "name" : "localhost:27018", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 1217, "optime" : Timestamp(1359436759000, 1), "optimeDate" : ISODate("2013-01-29T05:19:19Z"), "errmsg" : "syncing to: localhost:27019", "self" : true }, { "_id" : 2, "name" : "localhost:27019", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 795, "optime" : Timestamp(1359436759000, 1), "optimeDate" : ISODate("2013-01-29T05:19:19Z"), "lastHeartbeat" : ISODate("2013-01-29T05:27:40Z"), "pingMs" : 0 } ], "ok" : 1 } ====== シンプルVer ====== rs.initiate({ _id: "replset", members: [ { _id: 0, host: "localhost:27017" }, { _id: 1, host: "localhost:27018" }, ] }) rs.add('localhost:27019') rs.addArb('localhost:27019') rs.status(); rs.remove('localhost:27019') ====== 追加 Ver ====== # mongo MongoDB shell version: 2.2.2 connecting to: test Welcome to the MongoDB shell. For interactive help, type "help". For more comprehensive documentation, see http://docs.mongodb.org/ Questions? Try the support group http://groups.google.com/group/mongodb-user > config = {_id: 'replset', members: [ {_id:0, host:'localhost:27017'} ]} { "_id" : "replset", "members" : [ { "_id" : 0, "host" : "localhost:27017" } ] } > rs.initiate(config) { "info" : "Config now saved locally. Should come online in about a minute.", "ok" : 1 } > rs.status() { "set" : "replset", "date" : ISODate("2013-01-29T07:13:05Z"), "myState" : 1, "members" : [ { "_id" : 0, "name" : "localhost:27017", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 567, "optime" : Timestamp(1359443566000, 1), "optimeDate" : ISODate("2013-01-29T07:12:46Z"), "self" : true } ], "ok" : 1 } replset:PRIMARY> rs.add( {_id:1, host:'localhost:27018'} ) { "ok" : 1 } replset:PRIMARY> rs.status() { "set" : "replset", "date" : ISODate("2013-01-29T07:16:32Z"), "myState" : 1, "members" : [ { "_id" : 0, "name" : "localhost:27017", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 774, "optime" : Timestamp(1359443636000, 1), "optimeDate" : ISODate("2013-01-29T07:13:56Z"), "self" : true }, { "_id" : 1, "name" : "localhost:27018", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 156, "optime" : Timestamp(1359443636000, 1), "optimeDate" : ISODate("2013-01-29T07:13:56Z"), "lastHeartbeat" : ISODate("2013-01-29T07:16:31Z"), "pingMs" : 0 } ], "ok" : 1 } replset:PRIMARY> use testdb switched to db testdb replset:PRIMARY> db.testcol.insert( { "key1": "string", "key2": 123 } ) replset:PRIMARY> db.testcol.insert( { "key1": "integer", "key2": 456 } ) replset:PRIMARY> db.testcol.find() { "_id" : ObjectId("51077831f418a1407ef827b5"), "key1" : "string", "key2" : 123 } { "_id" : ObjectId("51077836f418a1407ef827b6"), "key1" : "integer", "key2" : 456 } replset:PRIMARY> rs.add( {_id:2, host:'localhost:27019'} ) { "ok" : 1 } replset:PRIMARY> exit bye # mongo --port 27019 MongoDB shell version: 2.2.2 connecting to: 127.0.0.1:27019/test replset:SECONDARY> db.getMongo().setSlaveOk() replset:SECONDARY> use testdb switched to db testdb replset:SECONDARY> db.testcol.find() { "_id" : ObjectId("51077831f418a1407ef827b5"), "key1" : "string", "key2" : 123 } { "_id" : ObjectId("51077836f418a1407ef827b6"), "key1" : "integer", "key2" : 456 } replset:SECONDARY> db.getMongo().slaveOk = false false replset:SECONDARY> exit bye ====== その他 ====== replset:PRIMARY> db.isMaster() { "setName" : "replset", "ismaster" : true, "secondary" : false, "hosts" : [ "localhost:27017", "localhost:27019", "localhost:27018" ], "primary" : "localhost:27017", "me" : "localhost:27017", "maxBsonObjectSize" : 16777216, "localTime" : ISODate("2013-01-29T07:28:27.607Z"), "ok" : 1 } ====== その他 ====== replset:PRIMARY> config=rs.conf() { "_id" : "replset", "version" : 3, "members" : [ { "_id" : 0, "host" : "localhost:27017" }, { "_id" : 1, "host" : "localhost:27018" }, { "_id" : 2, "host" : "localhost:27019" } ] } replset:PRIMARY> config.members[2].host = "127.0.0.1:27019" 127.0.0.1:27019 replset:PRIMARY> config { "_id" : "replset", "version" : 3, "members" : [ { "_id" : 0, "host" : "localhost:27017" }, { "_id" : 1, "host" : "localhost:27018" }, { "_id" : 2, "host" : "127.0.0.1:27019" } ] } replset:SECONDARY> rs.reconfig(config) { "ok" : 1 } replset:PRIMARY> rs.status() { "set" : "replset", "date" : ISODate("2013-01-29T07:38:48Z"), "myState" : 1, "members" : [ { "_id" : 0, "name" : "localhost:27017", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 2110, "optime" : Timestamp(1359445059000, 1), "optimeDate" : ISODate("2013-01-29T07:37:39Z"), "self" : true }, { "_id" : 1, "name" : "localhost:27018", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 99, "optime" : Timestamp(1359445059000, 1), "optimeDate" : ISODate("2013-01-29T07:37:39Z"), "lastHeartbeat" : ISODate("2013-01-29T07:38:47Z"), "pingMs" : 0, "errmsg" : "syncing to: localhost:27017" }, { "_id" : 2, "name" : "127.0.0.1:27019", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 101, "optime" : Timestamp(1359445059000, 1), "optimeDate" : ISODate("2013-01-29T07:37:39Z"), "lastHeartbeat" : ISODate("2013-01-29T07:38:47Z"), "pingMs" : 0, "errmsg" : "syncing to: localhost:27017" } ], "ok" : 1 } ====== WEBコンソール ====== ポート+1000番でWEBコンソールが見れる。 起動時に「--rest」オプションを定義していれば、WEBコンソールでReplica Setsのステータスが見れる。 i.g. http://localhost:28017