- 668.82 KB
- 2022-05-16 15:31:36 发布
- 1、本文档共5页,可阅读全部内容。
- 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
- 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
- 文档侵权举报电话:19940600175。
实验8:MongoDB的复制集操作实验口的:(1)掌握MongoDB的复制集的构建。(2)掌握MongoDB的复制集自动故障转移。实验要求:实验一:创建复制集集群(1)在MongoDB目录中新建文件夹打开新建名称zV修改日期类型bin2018/4/2519:47文件夹dataO2018/4/2519:48文彳核datal2018/4/2623:37文怦data22018/4/2623:38文帳此电脑>game(E:)>MongoDBRS大小•dataO目录中的文件夹结构如下:址缺和I廷U7T匕电脑>game(E:)>MongoDBRS>dataO>名称修改日期类型config2018/4/2519:47文件夹db2018/4/2720:20文件夹1log2018/4/2623:48文件夹组织新建施>game(E:)>MongoDBRS>dataO>config修改日期mongo.config癸型打卄大小2018/4/2623:40CONFIG文件1KB£E:MongoDBRSdataOconfigmongo.config・Notepad++文件(F)«®(E)捜炭⑸视图(V)編码(N)语吉(L)iSS(T)工具(O)宏(M)运行(R)插件(P)W(W)?aongo.configQnongo.config^回mongo,configt3Snongo4CM)0.batd3回nongo4001.batc3|@nongodRSl.batO回dbpath=E:MongoDBRSdataOdb2logpath=E:MongoDBRSdataOlogMongoDB•log3journal=true4port=40000〔replSet=rsO
此电脑>game(E:)>MongoDBRS>dataO>log名称修改日期大小MongoDB.log2018/4/2623:48文本文档2KBdb目录为空•datal目录中的文件夹结构如下:E:MongoDBRSdata1configmongo.config-Notepad++文件(F)编姮(E)搜索(S)视图(V)编码(N)语言(L)设胃(T)工具(0)宏(M)运行(R)插件(P)@0(W)?亘"12345mongo・configtj|副£购矗lAUl•知4刎堪星1吕F屋国3I冋留剣⑥回山®CIdbpath=E:MongoDBRSdat^dblogpath=E:MongoDBRSdatallogMongoDB・logjournal=trueport=40^Q_lreplSet="0十」7T:电脑>game(E:)>MongoDBRS>datal>log名称修改日期MongoDB.logdb目录为空•data2目录中的文件夹结构如下:2018/4/2623:48文本文档:电脑>game(E:)>MongoDBRS>data2>名称/X修改日期类型config2018/4/2623:38文停db2018/4/2623:55文件夹log2018/4/2623:49文件夹比电脑>game(E:)>MongoDBRS>datal>名称八修改日期config2018/4/2623:37文磁1db2018/4/2720:20文彳钱log2018/4/2623:48文件夹如X2Zujy1,脑>game(E:)>MongoDBRS>datal>config名称八修改日期大小mongo.config2018/4/2623:40CONFIG文件1KB
>game(E:)>MongoDBRS>data2>config称八修改日期类型大小Imongo.config2018/4/2623:41CONFIG文件1KBE:MongoDBRSdata2configmongo.config•Notepad4•+件(F)铝辑(E)關⑸孵(V)钢(N)语言(L)iSB(T)工具(O)宏(M)运行(R)掲牛(P)窗口㈣?mongo,configQ12345新建打卄选择dbpath=E:MongoDBRSdablogpath=E:MongoDBRSdata2logMongoDB・logjournal=trueport=^0002iBreplSet=rsO此电脑>game(E:)>MongoDBRS>data2>log名称修改日期大小MongoDB」og2018/4/2623:49文本文档2KBdb目录为空•新建如下几个bat文件(用丁•启动不同的MongoDB实例):组织新建打开选杼1脑>game(E:)>MongoDBRS名称"修改日期类型大小bin2018/4/2519:47文件夹dataO2018/4/2519:48文件夹datal2018/4/2623:37文帳data22018/4/2623:38文际□GNU-AGPL-3.02018/2/2814:270文件34KB」mongo4000.bat2018/4/2623:46Windows批处理…1KBEmongo4001.bat2018/4/2623:48Windows批处理…1KBnmongo4002.bat2018/4/2623:49Windows批处理…1KB—mongodRSO.bat2018/4/2623:43Windows批处理…1KBFilmongodRS1.bat2018/4/2623:48Windows批处埋・・1KB]mongodRS2.bat2018/4/2623:49Windows批处理…1KB□MPL-22018/2/2814:27文件17KBREADME2018/2/2814:27文件3KB□THIRD-PARTY-NOTICES2018/2/2814:27文件36KBEJmongodRS0.bat2018/4/2623:43Windows批处理…1KB[JE:MongoDBRSmongodRSO.bat-Notepad*—文件(F)编辑(E)披察⑸视图(V)编码(N)语言(L)设置(T)TRO)S(M)运行(R)播件(P)窗口(W)?0呂曰电宅尬©1£當&1;>匕|・勺|4-i巨;1■囤国创囹#回馴空_BnongodRSO.batQ|-configE:MongoDBRSdatmO"config"mongo•config
EJmongodRSI.bat2018/4/2623:48Windows批处理…1KBtLfE:MongoDBRSmongodRS1.bat・Notepad++文件(F)刽8(E)搜索(S)视图(V)為码(N)语言(L)设置(T)工具(O)宏(M)运行(R)插件(P)囱口(W)?墮亘里卫龜禺IRUI•钏弋H覃圍■冋国回回国回雪|空l_inongodRSl.batSj1[mongod-configE:MongoDBRSdatalconfigmongo•configmongodRS2.bat2018/4/2623:49WindowsfttAbB…1KB打E:MongoDBRSmongodRS2.bat・Notepad++文件(F)«S(E)搜索⑸视圏(V)编码(N)语言(L)iSS(T)工貝(O)宏(M)运行(R)插件(P)窘口(W)?dig旦©玳豐-t4|CBS|^n回国回申u_I■]nongodRS2.bat£3|1mongod-configE:MongoDBRSdata2configmongo.configmongo4000.bat2018/4/2623:46Windows批4E:MongoDBRSmongo4000.bat・Notepad++文件(F)绸辑(E)搜索⑸视图(V)编码(N)语言(L)iSS(T)工具(O)&long-jdRSS.batj回mongo4000.batQ1mongo——port40000mongo4001.bat2018/4/2623:48』E:MongoDBRSmongo4001.bat・Notepad*文件(F)编辑(E)搜索(S)视圉(V)编码(N)语言(L)设置(T)Ifo.粒舌尬禽I靑骗矗Inui命%丨戈戾Sjnongo4001.batQ|1[monqo—port40001叵]mongo4002.bat2018/4/2623:49Windows批处理…1KB[JfE:MongoDBRSmongo4002.bat•Notepad++a.文件(F)编辑(E)搜索(S)视图(V)絢码(N)语言(L)设萱(T)工具(O)宏(M)运行(R)插件(P)电甬尬鈕i占的矗m丨胡%(i电迅imu厚園圍f日nongo4002.bat田|--port40002•分别启动三个不同的MongoDB实例表示不同的节点先运行I~mongodRS0.bat再运行2018/4/2623:43••Windows批处理...1KBE]mongo4000.bat2018/4/2623:46Windows批处理...1KB另外两个节点一样顺序启动。
WINDOWNyMem)?cmdrxr::MongoDBRS>mongo一port40000longoDBshel1version:3.2.19-15-g88a553287aronnectingto:^info2心theset,>rs.*me*:*1("ok":1status0s():OTHER〉rs.conversion■1CAWiNOOWSsyitem3Zcmdexe□XMongoDBshel1version:3.2.19-15-g88a553287a{connectingto:127.0.0.1:40002/testt>rs・statusO[{"set:rsO*,FYsetdate*jnyStaterm*synciihearti>rs・initiate(厂•创建复制集集群初始化主节点09C:WINDOWSsystem32cmd.exe—□1:MongoDBRS>mongo--port40000MongoDBshellversion:3.2.19-15~g88a553287aconnectingto:127.0.0.1:40000/test"info2":"noconfigurationspecified.UsingadefauItconfigurationf(theset"me":"leinhard-PC:40000","ok":1rsO:OTHER〉rs.conf()_id:rsO,:version":1,”^protocolVersionz,:NumberLong(1),"members":{〃_id":0,"host":"leinhard-PC:40000",:arbiterOnly"”:false,"buildindexes":true,"hidden":false,priority:1,〃Hftags:{•s0:OTHER〉rs.conf0_id:rsO,:version":1,:pro「oco[Verpion":NumberLong(l),"members":~["{:0,"host":"leinhard-PC:40000^,:arbiterOnly::false,"bu订dlndexes":true,"hidden":false,"priority":1,"tags":{L”"slaveDelay":NumberLong(0),"votes":1}]
""settings^:{”"chainingAllowed":true,^heartbeatIntervalMi11is":2000,^hcartbeatTimeoutSecs^:10,^electionTimeoutMillis^:10000,^getLastErrorModes*:{创建副节点与投票节点注意:机器名要与主节点的一样,这里是“Leinhard・PC”,根据实际实验环境更改rsO:PRIMARY〉rs.add("Leinhard-PC:40001"){:1}■⑷rsO:PRIMARY>rs.addArb("Leinhard-PC:40002"){"ok":1}—这时集群已经建立完毕,memberK有3个成语^sO:PR1MARY>rs.statusOL"set":"rsO","date":ISODateC2018-04-26T15:53:58.172Z"),^myState^:1,"ternT:NumberLong(l),^heartbeatlntervalMillis^:NumberLong(2000),"members":[{"_id":0,"name":"leinhard-PC:40000","health":1,state:1,"stateStr":"PRIMARY","uptime":489,"optime":{"ts":Timestamp(1524758019,1),"t":NumberLong(1)},"optimeDate":ISODate("2018-04-26T15:53:39Z"),"electionTime":Timestamp(1524757840,1),"electionDate":ISODate("2018-04-26T15:50:40Z"),"configVersion":3,"self":true},{:i,name:Leinhard-PC:40001,"health":1,"state":2,"stateStr":"SECONDARY",uptime:68,"optime":"ts":Timestamp(1524758019,1),"t":NumberLong(1)},"optimeDate":ISODate("2018-04-26T15:53:39Z"),"lastHeartbeat":ISODateC2018-04-26T15:53:57.151Z"),,zlastHeartbeatRecv^:ISODate("2018-04-26T15:53:56.180Z"pingMs":NumberLong(0),"syncingTo":"leinhard-PC:40000","configVersion":3),{lid":2,"name":"Leinhard-PC:40002","health":1,
"state":7,"stateStr":"ARBITER","uptime":15,"lastHeartbeat":ISODate("2018-04-26T15:53:57.156Z"),"lastHeartbeatRecv":ISODateC2018-04-26T15:53:57.642Z"pingMs":NumberLong(0),"configVersion":3}],"ok":1
分别在另外两个节点输入rs・status(),可以看见对应节点状态与类型。E:MongoDBRS>mongo--port40001rs.status()MongoDBshellversion:3.2.19~15-g88a553287aconnectingto:127.0.0.l:40001/testset:rsO,"date":IS0Date(〃2018-04-26T15:56:00・220Z"),z,m^State^^2,z,TernTllTTlumBerLong(1),"syncingTo":^leinhard-PC:40000,z,z,heartbeatintervalMillisz,:NumberLong(2000),^members^:E:MongoDBRS>mongo--port40002MongoDBshellversion:3.2.19-15-g88a553287aconnectingto:127.0.0.1:40002/test>rs.status(){set:rsO,"date":ISODateC2018-04-26T15:55:16.673Z,z),〃term^"TOmDerLong(1),,zheartbeatIntervalMi11is":NumberLong(2000),"members":[{〃"〃.A实验二:数据同步主节点新建数据库students,在其中scores集合中加入一个文档。rsO:PRIMARY〉showdbslocal0.OOOGBrsO:PRIMARY>showcollectionsrsO:PRIMARY〉usestudentsswitchedtodbstudentsrsO:PRIMARY〉db.scores,insert({*stuid*:19"subject■:"omih"."score*:99});WriteResult({*nlnserted*:1})rsQ:PRIMARY>uselocalswitchedtodblocaltsO:PRIMARY〉db.oplog.rs.findO•{£Timestamp(1524757839.1)9:Numbex-Long(*-4780972517419069953*),"v":2.:"ns":“^msg*:^initiatingset*}){:Timestamp仃524757840.2)."t*:NumberLong(1),"h*:NumberLongC858605796634076247•人"、广:2,n,ns:■o:(msg:newprimary)){*ts":Timestamp(1524757969.1)>"t":NumberLong(1)."h":NumberLongC3472827550686183053*),"、广:2.【】"・::{"msg":*Reconfigscl".sion*:2}}(:Timestamp仃524758019.1)9:NumberLong(1).:NumberLong(*-5445128466804124619*),:2.n.ns•o:(msgReconfigset.version:3J}{*ts*:Timestamp(1524831447t1).:NumberLong(2),:NumberLong(*-794426895067248010*)f:2.n"・"ns":"・"o":{"msg":"newprimary*}
{*ts*:Timestamp(1524844292.^1),/t*:NumberLong(2):NumberLong(*7135742572156572729*)."v":2,c",:^students・$cmd*t:{^create*:^scores*}{*ts":Timestamp仃524844292.2),"t*:NumberLong(2),"h":NumberLongC,4594122675516732431-)t"v":2.i:^students,scores*,:{:Objec11ci(*5ae3470489d100652b2d1448*).*stuid*:lt"subject/二^score*:99}}fsO:PRIMARY〉.先观察一下local数据库中oplog.rs集合中的文档情况,再观察副节点的数据库情况,注意:SECONDARY是不允许读写的,要使用rs.slaveOk()获得读写权限,可以看出主节点的student数据库已经同步到副节点中。rsO:SECONDARY>rs.slaveOkOrsO:SECONDARY>showdbslocal0.OOOGBstudents0.OOOGBrsO:SECONDARY>.实验三:故障转移故障1:副节点宕机S8C:WINDOWSSystem32cmd.exe-□XC:WIND0WSsystem32>mongod-configE:MongoDBRSdatalconfigmongo.conf2018-04-26T23:48:45.594+0800ICONTROL[main]logfileZ,E:MongoDBRSUdtallogMongoDB.log"exists;movedto,ZE:MongoDBRSdatallogMongoDB.log.201o-04-26T15~48-45".关闭副节点MongoDB实例后在主节点观察复制集集群状态
”sO:PRIMARY〉rs.status0set:rsO,"date":ISODate("2018-04-27T16:06:56.461Z"),"mySt^te":1,"term":NumberLong(2),""heartbeatIntervalMi11is,z:NumberLong(2000),"members":["_id〃:0,"name":"leinhard^PC:40000","health":1,state:1,"stateStr":"PRIMARY:"uptime":87667,"optime":{},"optimeDate":ISODateC2018-04-27T15:51:32Z"),"electionTime":Timestamp(1524831446,1),"electionDate":ISODate(〃2018-04-27丁12:17:26Z"),"configVersion":3,"self":true〃ts":Timestamp(1524844292,2),"t":NumberLong(2)},lid":1,"name":"Leinhard^PC:40001","health":0,:state":8,””"stateStr"^"(notreachable/healthy)",uptime:0,ts":Timestamp(0,0),"optime":{在主节点student数据库中score集合中再插入一条记录rsO:PRIMARY>db.scores,insert({"stuid":2,"subject":"English","score":100});^VriteResult({"nlnserted":1})然后在主节点观察复制集集群状态lembers:L{lid":0,:*1einhard-PC:40000*,^health*:1.*state*:1,"stateStr":"PRIMARY:*uptirae*:87892.*optime*:Mts*:Timestamp仃524844292.2)r:NumberLong(2)^optimeDate^:ISUDate「201804?7T15:51j32ZJ•比制卩点的时间戡*electionTime*:"济^electionDate"jIS0Date(*2018-04-27T12:17:26Z*),*configVersion*:3.*self*:truelief:1.*name*£*LeinhardPC:40001"."health":0.:state":8.*stateStr*:*(notreachable/healthy)^uptime*:0.*optime*:{*ts*:Timestamp(0,0)f蠲t":NumberLong(~1)}.^optimeDatp":⑴“吁严”⑷刃01^lastHeartbeat*:ibODate(■SUTWTRTTTFTTt^39.878Z*),*lastHeartboatRecv*:ISODate(*20180427T16:06:06.088Z*).■・.vr■■重启副节点MongoDB实例
|SmongodRS1.bat在主节点观察复制集集群状态rsO:PRIMARY>rs.status()lid":0,"name":"leinhard-PC:40000","health":1,state:1,気2肌「・"PRIMARY","uptime":8828&"optime":{"ts":Timestamp(1524844292,2),"t":NumberLong(2)e:ilinestampkii),"electionDate":ISODate("2018-04-27T12:17:26Z,z),"g^timeDat/]ISODate("2018-04-27T15:51j32Z"),同步了"configVersion":3,"self":true:1,"name":"Leinhard-PC:40001","health":1,^stateStr:"SECONDARY",/"uptime":14,/"optime":{/"ts":Timestamp(1524844292,2),/"t":NumberLong(2)J},卩"optg評些e":ISODate(〃201比0羊-?7T]空5]:3?Z〃),”^lastHeartbeatRecv":ISODate(z,2018-04-27T16:17:13.565Zz,),"pingMs":NumberLong(0),"configVersion":3在副节点上>uselocalswitchedtodblocal>db.oplog・rs.find()・pretty()刚刚在副节点宕机的情况下新建的文档已经被同步到副节点上〃ts〃:Timestamp(1524844292,2),:NumberLong(2),〃h〃:NumberLong(“4594122675516732431"),v:2,〃〃〃•〃〃op〃:1,”〃ns〃:〃students.scores:o:{〃_id〃:0bjectId(,z5ae3470489dl00652b2dl448"),
“stuid”:1,"subject":"math",〃〃ccscore:99
故障2:主节点宕机secondary支3亲«即primaryarbiterHeartbeatsecondary■■■arbiter关掉主节点的实例后,在副节点查看集群状态
"health":1,state:1,一"stateStr":〃PRIMARY",令—"uptime":777,"optime":{"ts":Timestamp(1524846582,"t":NumberLong(3)"self":true原副节点已经变为主节点1),},:optimeDate::ISODate("2018-04-27T16:29:42Z〃),”"infoMessage":"couldnotfindmembertosyncfrom"","electionTime":Timestamp(1524846581,1),"electionDate":ISODate("2018-04-27T16:29:41Z"),"configVersion":3,匚id":2,"name":"Leinhard-PC:40002","health":1,state:7,"stateStr":“ARBITER:"uptime":768,"lastHeartbeat":ISODateC2018-04-27T16:29:51.462Z"),"lastHeartbeatRecv":ISODateC2018-04-27T16:29:47.175Z"pingMs":NumberLong(0),"configVersion":3
重启主节点的实例后,在主节点查看集群状态KImongodRSO.bat•sO:SECONDARY〉rs.status()”HHxvHset:rsO,"date":IS0Date("2018-04-27T16:33:32.522Z"),:mySt^te":2,"temT:NumberLong(3),:syncingTo":"Leinhard-PC:40001",z,heartbeatIntervalMi11is":NumberLong(2000),"members":[lid":0,"leinhard-PC:40000",原主节点已经变为副节点health:1,/state:2."stateStr:"SECONDARY:uptime"ts":Timestamp(1524846582,1),"t":NumberLong(3)"optime"},"optimeDate":ISODate("2018-04-27T16:29:42Z"),"syncingTo":"Leinhard-PC:40001","configVersion":3,"self":truelid":1,"name":"Leinhard-PC:40001","health":1,state:R^stateStr:"PRIMARY",:zi,"uptirff?"optime"ts":Timestamp(1524846582,1),注意的是,MongoDB的复制集合一般只允许读写主节点上的数据库,所以当主节点变更后,要注意异常处理与写关注读参考的设置。脅户端fl序dnversecondarysecondary