日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Mongodb】如何创建mongodb的replica set

發(fā)布時間:2025/7/14 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Mongodb】如何创建mongodb的replica set 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Replica sets 在主從復(fù)制上做的擴展,增加了故障自動切換和自動修復(fù)成員節(jié)點。下面從技術(shù)上介紹如何搭建mongodb的replica set (個人覺得,搭建mongodb本身沒有多少干貨,重要是如何災(zāi)難規(guī)劃)

1 建立復(fù)制集群節(jié)點的數(shù)據(jù)存放目錄

mkdir -p /opt/mongodata/r1

mkdir -p /opt/mongodata/r2

mkdir -p /opt/mongodata/r3

2 在三個窗口分別執(zhí)行如下命令:

./mongod --dbpath /opt/mongodata/r1 --port 27018 ?--rest --replSet myset

./mongod --dbpath /opt/mongodata/r2 --port 27019 ?--rest --replSet myset

./mongod --dbpath /opt/mongodata/r3 --port 27020 ?--rest --replSet myset

3 在第四個窗口執(zhí)行如下命令:

[mongodb@rac4 bin]$?./mongo 127.0.0.1:27018?init.js

MongoDB shell version: 2.0.1

connecting to: 127.0.0.1:27018/test

init.js 內(nèi)容如下:

[mongodb@rac4 bin]$ cat init.js?

rs.initiate({

? ? _id : "myset",

? ? members : [

? ? ? ? {_id : 0, host : "10.250.7.220:27018"},

? ? ? ? {_id : 1, host : "10.250.7.220:27019"},

? ? ? ? {_id : 2, host : "10.250.7.220:27020"}

? ? ]

})

啟動3個服務(wù)節(jié)點,從log日志可以看到,三個節(jié)點相互協(xié)商,選擇端口為27018的一個節(jié)點作為Primary,另外兩個自動作為Secondary節(jié)點。

Mon Oct 31 20:27:53 [conn2] replSet info saving a newer config version to local.system.replset

Mon Oct 31 20:27:53 [conn2] replSet saveConfigLocally done

Mon Oct 31 20:27:53 [conn2] replSet replSetInitiate config now saved locally. ?Should come online in about a minute.

Mon Oct 31 20:27:53 [conn2] command admin.$cmd command: { replSetInitiate: { _id: "myset", members: [ { _id: 0.0, host: "10.250.7.220:27018" }, { _id: 1.0, host: "10.250.7.220:27019" }, { _id: 2.0, host: "10.250.7.220:27020" } ] } } ntoreturn:1 reslen:112 12095ms

Mon Oct 31 20:27:53 [conn2] end connection 127.0.0.1:15252

Mon Oct 31 20:27:53 [rsStart] replSet STARTUP2

Mon Oct 31 20:27:53 [rsHealthPoll] replSet info 10.250.7.220:27019 is down (or slow to respond): still initializing

Mon Oct 31 20:27:53 [rsHealthPoll] replSet member 10.250.7.220:27019 is now in state DOWN

Mon Oct 31 20:27:53 [rsHealthPoll] replSet info 10.250.7.220:27020 is down (or slow to respond): still initializing

Mon Oct 31 20:27:53 [rsHealthPoll] replSet member 10.250.7.220:27020 is now in state DOWN

Mon Oct 31 20:27:53 [rsSync] replSet SECONDARY

Mon Oct 31 20:27:55 [initandlisten] connection accepted from 10.250.7.220:44134 #3

Mon Oct 31 20:27:59 [rsHealthPoll] replSet info member 10.250.7.220:27019 is up

Mon Oct 31 20:27:59 [rsHealthPoll] replSet member 10.250.7.220:27019 is now in state STARTUP2

Mon Oct 31 20:27:59 [rsMgr] not electing self, 10.250.7.220:27019 would veto

Mon Oct 31 20:28:01 [initandlisten] connection accepted from 10.250.7.220:44137 #4

Mon Oct 31 20:28:05 [rsMgr] replSet info electSelf 0

Mon Oct 31 20:28:05 [rsMgr] replSet PRIMARY

Mon Oct 31 20:28:07 [rsHealthPoll] replSet member 10.250.7.220:27019 is now in state RECOVERING

Mon Oct 31 20:28:10 [initandlisten] connection accepted from 10.250.7.220:44141 #5

Mon Oct 31 20:28:10 [initandlisten] connection accepted from 10.250.7.220:44142 #6

Mon Oct 31 20:28:11 [slaveTracking] build index local.slaves { _id: 1 }

Mon Oct 31 20:28:11 [slaveTracking] build index done 0 records 0.001 secs

Mon Oct 31 20:28:13 [rsHealthPoll] replSet info member 10.250.7.220:27020 is up

Mon Oct 31 20:28:13 [rsHealthPoll] replSet member 10.250.7.220:27020 is now in state STARTUP2

Mon Oct 31 20:28:14 [conn6] end connection 10.250.7.220:44142

Mon Oct 31 20:28:14 [conn5] end connection 10.250.7.220:44141

Mon Oct 31 20:28:15 [initandlisten] connection accepted from 10.250.7.220:44144 #7

Mon Oct 31 20:28:15 [rsHealthPoll] replSet member 10.250.7.220:27019 is now in state SECONDARY

Mon Oct 31 20:28:15 [rsHealthPoll] replSet member 10.250.7.220:27020 is now in state RECOVERING

Mon Oct 31 20:28:28 [initandlisten] connection accepted from 127.0.0.1:59232 #8

從客戶端進入數(shù)據(jù)庫:

[mongodb@rac4 bin]$ ./mongo 127.0.0.1:27018

MongoDB shell version: 2.0.1

connecting to: 127.0.0.1:27018/test

PRIMARY> rs.status() ?--查看replica set狀態(tài)的命令

{

? ? ? ? "set" : "myset",

? ? ? ? "date" : ISODate("2011-10-31T12:29:17Z"),

? ? ? ? "myState" : 1,

? ? ? ? "members" : [

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? "_id" : 0,

? ? ? ? ? ? ? ? ? ? ? ? "name" : "10.250.7.220:27018",

? ? ? ? ? ? ? ? ? ? ? ? "health" : 1,

? ? ? ? ? ? ? ? ? ? ? ??"state" : 1,

? ? ? ? ? ? ? ? ? ? ? ? "stateStr" : "PRIMARY",

? ? ? ? ? ? ? ? ? ? ? ? "optime" : {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "t" : 1320064073000,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "i" : 1

? ? ? ? ? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? ? ? ? ? "optimeDate" : ISODate("2011-10-31T12:27:53Z"),

? ? ? ? ? ? ? ? ? ? ? ? "self" : true

? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? "_id" : 1,

? ? ? ? ? ? ? ? ? ? ? ? "name" : "10.250.7.220:27019",

? ? ? ? ? ? ? ? ? ? ? ? "health" : 1,

? ? ? ? ? ? ? ? ? ? ????"state" : 2,

? ? ? ? ? ? ? ? ? ? ? ? "stateStr" : "SECONDARY",

? ? ? ? ? ? ? ? ? ? ? ? "uptime" : 78,

? ? ? ? ? ? ? ? ? ? ? ? "optime" : {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "t" : 1320064073000,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "i" : 1

? ? ? ? ? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? ? ? ? ? "optimeDate" : ISODate("2011-10-31T12:27:53Z"),

? ? ? ? ? ? ? ? ? ? ? ? "lastHeartbeat" : ISODate("2011-10-31T12:29:16Z"),

? ? ? ? ? ? ? ? ? ? ? ? "pingMs" : 0

? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? "_id" : 2,

? ? ? ? ? ? ? ? ? ? ? ? "name" : "10.250.7.220:27020",

? ? ? ? ? ? ? ? ? ? ? ? "health" : 1,

? ? ? ? ? ? ? ? ??? ? ??"state" : 2,

? ? ? ? ? ? ? ? ? ? ? ? "stateStr" : "SECONDARY",

? ? ? ? ? ? ? ? ? ? ? ? "uptime" : 64,

? ? ? ? ? ? ? ? ? ? ? ? "optime" : {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "t" : 1320064073000,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "i" : 1

? ? ? ? ? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? ? ? ? ? "optimeDate" : ISODate("2011-10-31T12:27:53Z"),

? ? ? ? ? ? ? ? ? ? ? ? "lastHeartbeat" : ISODate("2011-10-31T12:29:16Z"),

? ? ? ? ? ? ? ? ? ? ? ? "pingMs" : 1

? ? ? ? ? ? ? ? }

? ? ? ? ],

? ? ? ? "ok" : 1

}

狀態(tài)中關(guān)鍵數(shù)據(jù)位

state:1表示該host是當(dāng)前可以進行讀寫,2:不能讀寫

health:1表示該host目前是正常的,0:異常

下面會進行從庫的讀測試,會出現(xiàn)error: { "$err" : "not master and slaveok=false", "code" : 13435 }

PRIMARY>?rs.conf() --查看replica set配置的命令

{

? ? ? ? "_id" : "myset",

? ? ? ? "version" : 1,

? ? ? ? "members" : [

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? "_id" : 0,

? ? ? ? ? ? ? ? ? ? ? ? "host" : "10.250.7.220:27018"

? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? "_id" : 1,

? ? ? ? ? ? ? ? ? ? ? ? "host" : "10.250.7.220:27019"

? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? "_id" : 2,

? ? ? ? ? ? ? ? ? ? ? ? "host" : "10.250.7.220:27020"

? ? ? ? ? ? ? ? }

? ? ? ? ]

}

PRIMARY>?db.isMaster();--查看是否是主庫的命令,當(dāng)然可以從提示符中看出primary

{

? ? ? ? "setName" : "myset",

? ? ??? "ismaster" : true, ?##是primary

? ? ? ? "secondary" : false,

? ? ? ? "hosts" : [

? ? ? ? ? ? ? ? "10.250.7.220:27018",

? ? ? ? ? ? ? ? "10.250.7.220:27020",

? ? ? ? ? ? ? ? "10.250.7.220:27019"

? ? ? ? ],

? ? ? ? "primary" : "10.250.7.220:27018",

? ? ? ? "me" : "10.250.7.220:27018",

? ? ? ? "maxBsonObjectSize" : 16777216,

? ? ? ? "ok" : 1

}

分別登錄其他兩個mongodb 服務(wù):

[mongodb@rac4 bin]$?./mongo 127.0.0.1:27019

MongoDB shell version: 2.0.1

connecting to: 127.0.0.1:27019/test

SECONDARY>?

SECONDARY>?

SECONDARY> db.isMaster();

{

? ? ? ? "setName" : "myset",

? ? ? ??"ismaster" : false,

? ? ? ? "secondary" : true,

? ? ? ? "hosts" : [

? ? ? ? ? ? ? ? "10.250.7.220:27019",

? ? ? ? ? ? ? ? "10.250.7.220:27020",

? ? ? ? ? ? ? ? "10.250.7.220:27018"

? ? ? ? ],

? ? ? ? "primary" : "10.250.7.220:27018",

? ? ? ? "me" : "10.250.7.220:27019",

? ? ? ? "maxBsonObjectSize" : 16777216,

? ? ? ? "ok" : 1

}

SECONDARY>

[mongodb@rac4 bin]$?./mongo 127.0.0.1:27020

MongoDB shell version: 2.0.1

connecting to: 127.0.0.1:27020/test

SECONDARY>?

SECONDARY> db.isMaster();

{

? ? ? ? "setName" : "myset",

? ? ? ? "ismaster" : false,

? ? ? ? "secondary" : true,

? ? ? ? "hosts" : [

? ? ? ? ? ? ? ? "10.250.7.220:27020",

? ? ? ? ? ? ? ? "10.250.7.220:27019",

? ? ? ? ? ? ? ? "10.250.7.220:27018"

? ? ? ? ],

? ? ? ? "primary" : "10.250.7.220:27018",

? ? ? ? "me" : "10.250.7.220:27020",

? ? ? ? "maxBsonObjectSize" : 16777216,

? ? ? ? "ok" : 1

}?

至此搭建成功。。

對主庫進行寫操作,從庫查看:

[mongodb@rac4 bin]$?./mongo 127.0.0.1:27020

MongoDB shell version: 2.0.1

connecting to: 127.0.0.1:27020/test

PRIMARY> use test

switched to db test

PRIMARY>?

PRIMARY> db.yql.insert({val:"this is a message on 27020 primary !"});

PRIMARY>?

主庫日志:

Mon Oct 31 21:03:46 [FileAllocator] allocating new datafile /opt/mongodata/r3/test.ns, filling with zeroes...

Mon Oct 31 21:03:46 [FileAllocator] done allocating datafile /opt/mongodata/r3/test.ns, size: 16MB, ?took 0.256 secs

Mon Oct 31 21:03:46 [FileAllocator] allocating new datafile /opt/mongodata/r3/test.0, filling with zeroes...

Mon Oct 31 21:03:48 [clientcursormon] mem (MB) res:35 virt:2726 mapped:1248

Mon Oct 31 21:03:50 [FileAllocator] done allocating datafile /opt/mongodata/r3/test.0, size: 64MB, ?took 4.488 secs

Mon Oct 31 21:03:50 [conn6] build index test.yql { _id: 1 }

Mon Oct 31 21:03:50 [conn6] build index done 0 records 0 secs

Mon Oct 31 21:03:50 [conn6] insert test.yql 4759ms

Mon Oct 31 21:03:50 [FileAllocator] allocating new datafile /opt/mongodata/r3/test.1, filling with zeroes...

Mon Oct 31 21:03:51 [conn8] getmore local.oplog.rs query: { ts: { $gte: new Date(5669632022159556609) } } cursorid:6257712144272734285 nreturned:1 reslen:146 5031ms

Mon Oct 31 21:03:51 [conn5] getmore local.oplog.rs query: { ts: { $gte: new Date(5669632022159556609) } } cursorid:423878080662643430 nreturned:1 reslen:146 5631ms

Mon Oct 31 21:03:54 [FileAllocator] done allocating datafile /opt/mongodata/r3/test.1, size: 128MB, ?took 3.818 secs

從庫日志,可以看出 從庫從主庫應(yīng)用日志,復(fù)制數(shù)據(jù)文件的過程。

Mon Oct 31 20:49:27 [clientcursormon] mem (MB) res:19 virt:2693 mapped:1232

Mon Oct 31 20:54:27 [clientcursormon] mem (MB) res:19 virt:2693 mapped:1232

Mon Oct 31 20:59:27 [clientcursormon] mem (MB) res:19 virt:2693 mapped:1232

Mon Oct 31 21:03:51 [FileAllocator] allocating new datafile /opt/mongodata/r2/test.ns, filling with zeroes...

Mon Oct 31 21:03:54 [FileAllocator] done allocating datafile /opt/mongodata/r2/test.ns, size: 16MB, ?took 3.396 secs

Mon Oct 31 21:03:54 [FileAllocator] allocating new datafile /opt/mongodata/r2/test.0, filling with zeroes...

Mon Oct 31 21:04:00 [FileAllocator] done allocating datafile /opt/mongodata/r2/test.0, size: 64MB, ?took 5.79 secs

Mon Oct 31 21:04:00 [rsSync] build index test.yql { _id: 1 }

Mon Oct 31 21:04:00 [rsSync] build index done 0 records 0 secs

Mon Oct 31 21:04:00 [FileAllocator] allocating new datafile /opt/mongodata/r2/test.1, filling with zeroes...

Mon Oct 31 21:04:03 [FileAllocator] done allocating datafile /opt/mongodata/r2/test.1, size: 128MB, ?took 2.965 secs

Mon Oct 31 21:04:37 [clientcursormon] mem (MB) res:17 virt:2853 mapped:1312

Mon Oct 31 21:04:41 [conn6] end connection 127.0.0.1:44672

如前面介紹rs.status()時所說,state:1表示該host是當(dāng)前可以進行讀寫,2:不能讀寫

{

? "_id" : 1,

? "name" : "10.250.7.220:27019",

? "health" : 1,

??"state" : 2, ?-- 從庫的state為 2 ,此時是不可讀寫的。

? "stateStr" : "SECONDARY",

? "uptime" : 78,

? "optime" : {

? "t" : 1320064073000,

? "i" : 1

?},

?在從庫進行讀操作,會報錯。

[mongodb@rac4 bin]$ ./mongo 127.0.0.1:27019

MongoDB shell version: 2.0.1

connecting to: 127.0.0.1:27019/test

SECONDARY> use test

switched to db test

SECONDARY> db.yql.find();

error: { "$err" : "not master and slaveok=false", "code" : 13435 }


? ? ?本文轉(zhuǎn)自yzy121403725 51CTO博客,原文鏈接:http://blog.51cto.com/lookingdream/1795016,如需轉(zhuǎn)載請自行聯(lián)系原作者




總結(jié)

以上是生活随笔為你收集整理的【Mongodb】如何创建mongodb的replica set的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。