MongoDBµÄ±¸·ÝÆäʵËãÊÇÒ»¸ö»ù±¾²Ù×÷£¬×î½ü×ÜÊÇÓÐÈËÎÊÆð£¬¿´À´ºÜ¶àÈ˶ÔÕâÀﻹ²»Ì«ÊìϤ¡£ÎªÁ˱ÜÃâÒ»´ÎÓÖÒ»´ÎµØÖظ´½âÊÍ£¬ÌØ×ܽá³Éһƪ²©¿Í¹©ºóÀ´Õß²éÔÄ¡£ÈçÓв»¾¡ÕýÈ·Ö®´¦ÇëÖ¸Õý¡£
1. ÄÚ½¨·½·¨
1.1 ¸´ÖÆÊý¾Ý¿âÎļþ
²»Óöà×ö½âÊÍ£¬¼¸ºõ¶ÔÈκÎÊý¾Ý¿â¶¼ÓÐÓ㬼òµ¥´Ö±©¡£µ«Ïñ¶àÊýÊý¾Ý¿âÒ»Ñù£¬Õâ¸ö²Ù×÷±ØÐëÔÚmongodʵÀýÍ£Ö¹µÄÇé¿öϽøÐвÅÄܱ£Ö¤ÄãµÃµ½µÄÊÇÕýȷ״̬ϵÄÊý¾Ý¿â¡£·ñÔòÔÚ±¸·Ý¹ý³ÌÖÐÈç¹ûÓÐд²Ù×÷£¬¿ÉÄÜÔì³É±¸·Ýµ½µÄ¿â´¦ÓÚ·ÇÕý³£×´Ì¬¶ø²»¿ÉʹÓᣱØÐëÍ£Ö¹Êý¾Ý¿âÕâÒ»µã¾ÍÔì³ÉÁËÕâ¸ö·½·¨µÄ¿ÉÓÃÐԷdz£µÍ£¬Ê¹Óó¡¾°ÓÐÏÞ¡£
1.2 mongodump/mongorestore
ÎÒ²»´òËãϸ˵ÕâÁ½¸öÃüÁîÈçºÎʹÓã¬ÒòΪ½éÉÜÕâÁ½¸öÃüÁîµÄÎÄÕÂÍøÉÏÒѾһ´ó¶ÑÁË£¬´ó¼Ò¿ÉÒÔÇáËɴӱ𴦻òÕß¹Ù·½ÎĵµÖÐÕÒµ½ËµÃ÷¡£²»Ïëϸ˵µÄÁíÒ»¸öÔÒòÒ²ÊÇÏ£Íû¿´µ½ÕâÀïµÄ¶ÁÕßÄܹ»Ñø³É¶ÀÁ¢½â¾öÎÊÌâµÄÄÜÁ¦£¬²»Òª¶ÔËùνµÄ¡°¸ßÊÖ¡±²úÉúÒÀÀµ£¬Óöµ½ÎÊÌâ¶ÀÁ¢Ë¼¿¼¶ÀÁ¢½â¾ö£¬Õ⽫ÊÇÄã½ñºóµÄµÀ·Éϱز»¿ÉÉٵļ¼ÄÜÖ®Ò»¡£
ÏÂÃæ½éÉÜһЩ±ðÈË˵µÃÏà¶ÔÉٵĶ«Î÷¡£
1.2.1 ³ýÁËmongodump/mongorestoreÖ®Í⻹ÓÐÒ»¶Ô×éºÏÊÇmongoexport/mongoimport
Çø±ðÔÚÄÄÀ
1.mongoexport/mongoimportµ¼Èë/µ¼³öµÄÊÇJSON¸ñʽ£¬¶ømongodump/mongorestoreµ¼Èë/µ¼³öµÄÊÇBSON¸ñʽ¡£
2.JSON¿É¶ÁÐÔÇ¿µ«Ìå»ý½Ï´ó£¬BSONÔòÊǶþ½øÖÆÎļþ£¬Ìå»ýСµ«¶ÔÈËÀ༸ºõûÓпɶÁÐÔ¡£
3.ÔÚһЩmongodb°æ±¾Ö®¼ä£¬BSON¸ñʽ¿ÉÄÜ»áËæ°æ±¾²»Í¬¶øÓÐËù²»Í¬£¬ËùÒÔ²»Í¬°æ±¾Ö®¼äÓÃmongodump/mongorestore¿ÉÄܲ»»á³É¹¦£¬¾ßÌåÒª¿´°æ±¾Ö®¼äµÄ¼æÈÝÐÔ¡£µ±ÎÞ·¨Ê¹ÓÃBSON½øÐÐ¿ç°æ±¾µÄÊý¾ÝÇ¨ÒÆµÄʱºò£¬Ê¹ÓÃJSON¸ñʽ¼´mongoexport/mongoimportÊÇÒ»¸ö¿ÉÑ¡Ïî¡£¿ç°æ±¾µÄmongodump/mongorestore¸öÈ˲¢²»ÍƼö£¬ÊµÔÚÒª×öÇëÏȼì²éÎĵµ¿´Á½¸ö°æ±¾ÊÇ·ñ¼æÈÝ£¨´ó²¿·ÖʱºòÊǵģ©¡£
4.JSONËäÈ»¾ßÓÐ½ÏºÃµÄ¿ç°æ±¾Í¨ÓÃÐÔ£¬µ«ÆäÖ»±£ÁôÁËÊý¾Ý²¿·Ö£¬²»±£ÁôË÷Òý£¬ÕË»§µÈÆäËû»ù´¡ÐÅÏ¢¡£Ê¹ÓÃʱӦ¸Ã×¢Òâ¡£
×ÜÖ®£¬ÕâÁ½Ì×¹¤¾ßÔÚʵ¼ÊʹÓÃÖи÷ÓÐÓÅÊÆ£¬Ó¦¸Ã¸ù¾ÝÓ¦Óó¡¾°Ñ¡ÔñʹÓ㨺ÃÏñ¸úû˵һÑù£©¡£µ«ÑϸñµØËµ£¬mongoexport/mongoimportµÄÖ÷Òª×÷Óû¹Êǵ¼Èë/µ¼³öÊý¾ÝʱʹÓ㬲¢²»ÊÇÒ»¸öÕæÕýÒâÒåÉϵı¸·Ý¹¤¾ß¡£ËùÒÔÕâÀïÒ²²»Õ¹¿ª½éÉÜÁË¡£
1.2.2 mongodumpÓÐÒ»¸öÖµµÃÒ»ÌáµÄÑ¡ÏîÊÇ--oplog
×¢ÒâÕâÊÇreplica set»òÕßmaster/slaveģʽרÓã¨standaloneģʽÔËÐÐmongodb²¢²»ÍƼö£©¡£
--oplog use oplog for taking a point-in-time snapshot |
¿´Ó¢ÎÄ˵Ã÷ºÃÅ£BµÄÑù×Ó£¬point-in-time¿ìÕÕŶ£¬ÎÒµÚÒ»´Î¿´µ½Õâ¾ä»°µÄʱºòµÄÀí½âÊÇËü¿ÉÒÔÈÃÊý¾Ý¿â»Øµ½Õâ¶Îʱ¼äÖеÄÈÎÒâÒ»¸öʱ¼äµãµÄ״̬£¬ÃÀÁ˺ÃÒ»Õó¡£µ«Êµ¼ÊÉϲ¢²»ÊÇ¡£ËüµÄʵ¼Ê×÷ÓÃÊÇÔÚµ¼³öµÄͬʱÉú³ÉÒ»¸öoplog.bsonÎļþ£¬´æ·ÅÔÚÄ㿪ʼ½øÐÐdumpµ½dump½áÊøÖ®¼äËùÓеÄoplog¡£Õâ¸ö¶«Î÷¾ßÌåÓÐʲôÓÃÏÈÂô¸ö¹Ø×Ó¡£ÓÃͼÐÎÀ´ËµÃ÷ÏÂoplog.bsonµÄ¸²¸Ç·¶Î§:

ΪÁ˺óÃæµÄ½²½â²»ÖÁÓÚ°ÑÈË˵ÔΣ¬½øÒ»²½ËµÃ÷֮ǰÏȽâÊÍÒ»ÏÂʲôÊÇoplog¼°ÆäÏà¹Ø¸ÅÄî¡£¹Ù·½ÌṩµÄÎĵµÆäʵÒѾºÜÈ«ÃæµØ×öÁ˽âÊÍ£¬µã»÷²é¿´ÖÐÎÄÎĵµ»òÓ¢ÎÄÎĵµ¡£
¼òµ¥µØËµ£¬ÔÚreplica setÖÐoplogÊÇÒ»¸ö¶¨Èݼ¯ºÏ£¨capped collection£©£¬ËüµÄĬÈÏ´óСÊÇ´ÅÅ̿ռäµÄ5%£¨¿ÉÒÔͨ¹ý--oplogSizeMB²ÎÊýÐ޸ģ©£¬Î»ÓÚlocal¿âµÄdb.oplog.rs£¬ÓÐÐËȤ¿ÉÒÔ¿´¿´ÀïÃæµ½µ×ÓÐЩʲôÄÚÈÝ¡£ÆäÖмǼµÄÊÇÕû¸ömongodʵÀýÒ»¶Îʱ¼äÄÚÊý¾Ý¿âµÄËùÓбä¸ü£¨²åÈë/¸üÐÂ/ɾ³ý£©²Ù×÷¡£µ±¿Õ¼äÓÃÍêʱмǼ×Ô¶¯¸²¸Ç×îÀϵļǼ¡£ËùÒÔ´Óʱ¼äÖáÉÏ¿´£¬oplogµÄ¸²¸Ç·¶Î§´ó¸ÅÊÇÕâÑùµÄ£º

Æä¸²¸Ç·¶Î§±»³Æ×÷oplogʱ¼ä´°¿Ú¡£ÐèҪעÒâµÄÊÇ£¬ÒòΪoplogÊÇÒ»¸ö¶¨Èݼ¯ºÏ£¬ËùÒÔʱ¼ä´°¿ÚÄܸ²¸ÇµÄ·¶Î§»áÒòΪÄ㵥λʱ¼äÄڵĸüдÎÊý²»Í¬¶ø±ä»¯¡£ÏëÒª²é¿´µ±Ç°µÄoplogʱ¼ä´°¿ÚÔ¤¼ÆÖµ£¬¿ÉÒÔʹÓÃÒÔÏÂÃüÁ
test:PRIMARY> rs.printReplicationInfo() configured oplog size: 1561.5615234375MB <--¼¯ºÏ´óС log length start to end: 423849secs (117.74hrs) <--Ô¤¼Æ´°¿Ú¸²¸Çʱ¼ä oplog first event time: Wed Sep 09 2015 17:39:50 GMT+0800 (CST) oplog last event time: Mon Sep 14 2015 15:23:59 GMT+0800 (CST) now: Mon Sep 14 2015 16:37:30 GMT+0800 (CST) |
oplogÓÐÒ»¸ö·Ç³£ÖØÒªµÄÌØÐÔ¡ª¡ªÃݵÈÐÔ£¨idempotent£©¡£¼´¶ÔÒ»¸öÊý¾Ý¼¯ºÏ£¬Ê¹ÓÃoplogÖмǼµÄ²Ù×÷ÖØ·Åʱ£¬ÎÞÂÛ±»ÖطŶàÉٴΣ¬Æä½á¹û»áÊÇÒ»ÑùµÄ¡£¾ÙÀýÀ´Ëµ£¬Èç¹ûoplogÖмǼµÄÊÇÒ»¸ö²åÈë²Ù×÷£¬²¢²»»áÒòΪÄãÖØ·ÅÁËÁ½´Î£¬Êý¾Ý¿âÖо͵õ½Á½ÌõÏàͬµÄ¼Ç¼¡£ÕâÊÇÒ»¸öºÜÖØÒªµÄÌØÐÔ£¬Ò²ÊǺóÃæÕâЩ²Ù×÷µÄ»ù´¡¡£
»Øµ½Ö÷ÌâÉÏÀ´£¬¿´¿´oplog.bsonµ½µ×ÓÐʲô×÷Óá£Ê×ÏÈÒªÃ÷°×µÄÒ»¸öÎÊÌâÊÇÊý¾ÝÖ®¼ä»¥ÏàÓÐÒÀÀµÐÔ£¬±ÈÈ缯ºÏAÖдæ·ÅÁ˶©µ¥£¬¼¯ºÏBÖдæ·ÅÁ˶©µ¥µÄËùÓÐÃ÷ϸ£¬ÄÇôֻÓÐÒ»¸ö¶©µ¥ÓÐÍêÕûµÄÃ÷ϸʱ²ÅÊÇÕýÈ·µÄ״̬¡£¼ÙÉèÔÚÈÎÒâÒ»¸öʱ¼äµã£¬AºÍB¼¯ºÏµÄÊý¾Ý¶¼ÊÇÍêÕû¶ÔÓ¦²¢ÇÒÓÐÒâÒåµÄ£¨¶Ô·Ç¹ØÏµÐÍÊý¾Ý¿âÒª×öµ½Õâµã²¢²»ÈÝÒ×£¬ÇÒ¶ÔÓÚMongoDBÀ´ËµÕâÑùµÄÊý¾Ý½á¹¹²¢·ÇºÏÀí¡£µ«´Ë´¦ÎÒÃǼÙÉèÕâ¸öÌõ¼þ³ÉÁ¢£©£¬ÄÇôÈç¹ûA´¦ÓÚʱ¼äµãx£¬¶øB´¦ÓÚxÖ®ºóµÄÒ»¸öʱ¼äµãyʱ£¬¿ÉÒÔÏëÏóAºÍBÖеÄÊý¾Ý¼«ÓпÉÄܲ»¶ÔÓ¦¶øÊ§È¥ÒâÒå¡£
ÔÙ»ØÀ´¿´mongodumpµÄ²Ù×÷¡£mongodumpµÄ½øÐйý³ÌÖв¢²»»á°ÑÊý¾Ý¿âËøËÀÒÔ±£Ö¤Õû¸ö¿â¶³½áÔÚÒ»¸ö¹Ì¶¨µÄʱ¼äµã£¬ÕâÔÚÒµÎñÉϳ£³£ÊDz»ÔÊÐíµÄ¡£ËùÒÔ¾ÍÓÐÁËdumpµÄ×îÖÕ½á¹ûÖÐA¼¯ºÏÊÇ10µãÕûµÄ״̬£¬¶øB¼¯ºÏÔòÊÇ10µãÁã1·ÖµÄ״̬ÕâÖÖÇé¿ö¡£ÕâÑùµÄ±¸·Ý¼´Ê¹»Ö¸´»ØÈ¥£¬¿ÉÒÔÏëÏóµÃµ½µÄ½á¹û¿ÖÅÂÒâÒåÓÐÏÞ¡£ÄÇôÉÏÃæÕâ¸öoplog.bsonµÄÒâÒå¾ÍÔÚÕâÀïÌåÏÖ³öÀ´ÁË¡£Èç¹ûÔÚdumpÊý¾ÝµÄ»ù´¡ÉÏ£¬ÔÙÖØ×öÒ»±éoplogÖмǼµÄËùÓвÙ×÷£¬ÕâʱµÄÊý¾Ý¾Í¿ÉÒÔ´ú±ídump½áÊøÊ±ÄǸöʱ¼äµã£¨point-in-time£©µÄÊý¾Ý¿â״̬¡£
Õâ¸ö½áÂÛ³ÉÁ¢µÄÖØÒªÌõ¼þ¾ÍÊÇÃݵÈÐÔ£ºÒÑ´æÔÚµÄÊý¾Ý£¬ÖØ×öoplog²»»áÖØ¸´£»²»´æÔÚµÄÊý¾ÝÖØ×öoplog¾Í¿ÉÒÔ½øÈëÊý¾Ý¿â¡£ËùÒÔµ±×öÍê½ØÖ¹µ½Ä³¸öʱ¼äµãµÄoplogʱ£¬Êý¾Ý¿â¾Í»Ö¸´µ½Á˽ØÖ¹ÄǸöʱ¼äµãµÄ״̬¡£
À´¿´¿´mongorestoreµÄÑ¡Ïî¡£¸úoplogÏà¹ØµÄÑ¡ÏîÓÐ--oplogReplayºÍ--oplogLimit¡£µÚÒ»¸öÑ¡Ïî¹ËÃû˼Ò壬¿ÉÒÔÖØ·Åoplog.bsonÖеIJÙ×÷ÄÚÈÝ¡£µÚ¶þ¸öÑ¡Ïî
ºóÃæÔÙ×ö½éÉÜ¡£ÏÈÀ´¿´Ò»¸öÀý×Ó£º
Ê×ÏÈÎÒÃÇÄ£ÄâÒ»¸ö²»¶ÏÓвåÈë²Ù×÷µÄ¼¯ºÏfoo£¬
use test for(var i = 0; i < 100000; i++) { db.foo.insert({a: i}); } |
È»ºóÔÚ²åÈë¹ý³ÌÖÐÄ£ÄâÒ»´Îmongodump²¢Ö¸¶¨--oplog¡£
mongodump -h 127.0.0.1 --oplog |
×¢Òâ--oplogÑ¡ÏîÖ»¶ÔÈ«¿âµ¼³öÓÐЧ£¬ËùÒÔ²»ÄÜÖ¸¶¨-dÑ¡Ïî¡£ÒòΪÕû¸öʵÀýµÄ±ä¸ü²Ù×÷¶¼»á¼¯ÖÐÔÚlocal¿âÖеÄoplog.rs¼¯ºÏÖС£
¸ù¾ÝÉÏÃæËù˵£¬´Ódump¿ªÊ¼µÄʱ¼äϵͳ½«¼Ç¼ËùÓеÄoplogµ½oplog.bsonÖУ¬ËùÒÔÎÒÃǵõ½ÕâЩÎļþ£º
yaoxing ~ $ ll dump/ total 440 -rw-r--r-- 1 yaoxing yaoxing 442470 Sep 14 17:21 oplog.bson drwxr-xr-x 2 yaoxing yaoxing 4096 Sep 14 17:21 test |
ÆäÖÐtestÊÇÎÒÃǸղÅʹÓõÄÊý¾Ý¿â£¬oplog.bsonÊǵ¼³öÆÚ¼ä½øÐеÄËùÓвÙ×÷¡£Èç¹û¶Ôoplog.bsonÖеÄÄÚÈÝºÃÆæ£¬¿ÉÒÔÓÃbsondump¹¤¾ßÀ´²é¿´ÆäÖеÄÄÚÈÝ£¬ÀýÈ磺
{"h":{"$numberLong":"2279811375157953332"},"ns":"test.foo",
"o":{"_id":{"$oid":"55f834ae6b530b5854f9d6ee"},"a":7784.0},"op":"i","ts":{"$timestamp":{"t":1442329774,"i":3248}},"v":2} |
´Óoplog.bsonÖÐÎÒÃÇÌôÑ¡µÚÒ»ÌõºÍ×îºóÒ»ÌõÄÚÈݳöÀ´¹Û²ì
{"h":{"$numberLong":"2279811375157953332"},"ns":"test.foo","
o":{"_id":{"$oid":"55f834ae6b530b5854f9d6ee"},"a":7784.0},"op":"i","ts":{"$timestamp":{"t":1442329774,"i":3248}},"v":2} ... {"h":{"$numberLong":"-1177358680665374097"},"ns":"test.foo",
"o":{"_id":{"$oid":"55f834b26b530b5854f9fa5e"},"a":16856.0},"op":"i","ts":{"$timestamp":{"t":1442329778,"i":1361}},"v":2} |
ºì×Ö²¿·Ö¿ÉÒÔ¿´³ö£¬´Ó¿ªÊ¼½øÐÐmongodumpʱ£¬Ñ»·½øÐе½i=7784£¬¶øµ½Õû¸ö²Ù×÷½áÊøÊ±£¬Ñ»·½øÐе½i=16856¡£ÔÙ¿´Ò»ÏÂtest/foo.bsonÖÐÊý¾ÝµÄ×îºóÒ»Ìõ
{"_id":{"$oid":"55f834ae6b530b5854f9d73d"},"a":7863.0} |
¿ÉÒÔ·¢ÏÖ£¬×îÖÕdump³öµÄÊý¾Ý¼È²»ÊÇ×ʼµÄ״̬£¬Ò²²»ÊÇ×îºóµÄ״̬£¬¶øÊÇÖмäij¸öËæ»ú״̬¡£ÕâÕýÊÇÒòΪ¼¯ºÏ²»¶Ï±ä»¯Ôì³ÉµÄ¡£
ÄÇôʹÓÃmongorestoreÀ´»Ö¸´£º
yaoxing ~ $ mongorestore -h 127.0.0.1 --oplogReplay dump 2015-09-19T01:22:20.095+0800 building a list of dbs and collections to restore from dump dir 2015-09-19T01:22:20.095+0800 reading metadata for test.foo from 2015-09-19T01:22:20.096+0800 restoring test.foo from 2015-09-19T01:22:20.248+0800 restoring indexes for collection test.foo from metadata 2015-09-19T01:22:20.248+0800 finished restoring test.foo (7864 documents) 2015-09-19T01:22:20.248+0800 replaying oplog 2015-09-19T01:22:20.463+0800 done |
×¢Òâºì×ÖµÄÁ½¾ä£¬µÚÒ»¾ä±íʾtest.foo¼¯ºÏÖлָ´ÁË7864¸öÎĵµ£»µÚ¶þ¾ä±íÊ¾ÖØ·ÅÁËoplogÖеÄËùÓвÙ×÷¡£ËùÒÔÀíÂÛÉÏfooÓ¦¸ÃÓÐ16857¸öÎĵµ£¨7864¸öÀ´×Ôfoo.bson£¬Ê£ÏµÄÀ´×Ôoplog.bson£©¡£Ñé֤һϣº
test:PRIMARY> db.foo.count() 16857 |
Õâ¾ÍÊÇ´øoplogµÄmongodumpµÄÕæÕý×÷Óá£
1.2.3 ´Ó±ð´¦¶øÀ´µÄoplog
´ÏÃ÷ÈçÄã¿ÉÄÜÒѾÏëµ½£¬¼ÈÈ»dump³öµÄÊý¾ÝÅäºÏoplog¾Í¿ÉÒÔ°ÑÊý¾Ý¿â»Ö¸´µ½Ä³¸ö״̬£¬ÄÇÊDz»ÊÇÓµÓÐÒ»·Ý´Óij¸öʱ¼äµã¿ªÊ¼±¸·ÝµÄdumpÊý¾Ý£¬ÔÙ¼ÓÉÏ´Ódump¿ªÊ¼Ö®ºóµÄoplog£¬Èç¹ûoplog×ã¹»³¤£¬ÊDz»ÊǾͿÉÒÔ°ÑÊý¾Ý¿â»Ö¸´µ½ÆäºóµÄÈÎÒâ״̬ÁË£¿Êǵģ¡ÊÂʵÉÏreplica
setÕýÊÇÒÀÀµoplogµÄÖØ·Å»úÖÆÔÚ¹¤×÷¡£µ±secondaryµÚÒ»´Î¼ÓÈëreplica setʱ×öµÄinitial
sync¾ÍÏ൱ÓÚÊÇÔÚ×ömongodump£¬´ËºóÖ»ÐèÒª²»¶ÏµØÍ¬²½ºÍÖØ·Åoplog.rsÖеÄÊý¾Ý£¬¾Í´ïµ½ÁËsecondaryÓëprimaryͬ²½µÄÄ¿µÄ¡£
¼ÈÈ»oplogÒ»Ö±¶¼ÔÚoplog.rsÖдæÔÚ£¬ÎÒÃÇΪʲô»¹ÐèÒªÔÚmongodumpʱָ¶¨--oplogÄØ£¿ÐèÒªµÄʱºò´Óoplog.rsÖÐÄò»¾ÍÍêÁËÂ𣿴ð°¸Êǿ϶¨µÄ£¬Äãȷʵ¿ÉÒÔÖ»dumpÊý¾Ý£¬²»ÐèÒªoplog¡£ÔÚÐèÒªµÄʱºò¿ÉÒÔÔÙ´Óoplog.rsÖÐÈ¡¡£µ«Ç°ÌáÊÇoplogʱ¼ä´°¿Ú£¨ÍüÁËʱ¼ä´°¿Ú¸ÅÄîµÄÇëÍùǰ·£©±ØÐëÄܹ»¸²¸ÇdumpµÄ¿ªÊ¼Ê±¼ä¡£
Ã÷°×ÁËÕâ¸öµÀÀí£¬ÀíÂÛÉÏÖ»ÒªÎÒÃǵÄmongodump×öµÃ×㹻Ƶ·±£¬ÊÇ¿ÉÒÔ±£Ö¤Êý¾Ý¿âÄܹ»»Ö¸´µ½¹ýÈ¥µÄÈÎÒâÒ»¸öʱ¼äµãµÄ¡£MMS£¨ÏÖÔÚ½ÐCloud
Manager£©µÄ¸¶·Ñ±¸·ÝÒ²ÕýÊÇÔÚÀûÓÃÕâ¸öÔÀí¹¤×÷¡£¼ÙÉèoplogʱ¼ä´°¿ÚÓÐ24Сʱ£¬ÄÇôÀíÂÛÉÏÖ»ÒªÎÒÔÚÿ24СʱÄÚÍê³ÉÒ»´Îdump£¬¼´¿É±£Ö¤dumpÖ®ºóµÄ24СʱµÄpoint-in-timeÊý¾Ý»Ö¸´¡£ÔÚoplogʱ¼ä´°¿Ú¿ìÒª»¬³ö24СʱµÄʱºò£¬Ö»Òª¼°Ê±Íê³ÉÏÂÒ»´Îdump£¬¾ÍÓÖ¿ÉÒÔÓÐ24СʱµÄ°²È«ÆÚ¡£
À´×ö¸ö²âÊÔ¡£ÈÔȻʹÓÃÇ°ÃæµÄ·½·¨Ä£ÄâÒ»¶Îʱ¼äµÄÊý¾Ý¿â²åÈë²Ù×÷£º
use test for(var i = 0; i < 100000; i++) { db.foo.insert({a: i}); } |
ͬʱ×öÒ»´Îmongodump²¢²»´ø--oplog:
yaoxing ~/dump $ mongodump -h 127.0.0.1 2015-09-24T00:06:11.929+0800 writing test.system.indexes to dump/test/system.indexes.bson 2015-09-24T00:06:11.929+0800 done dumping test.system.indexes (1 document) 2015-09-24T00:06:11.929+0800 writing test.foo to dump/test/foo.bson 2015-09-24T00:06:11.963+0800 done dumping test.foo (11162 documents) |
¿É¼ûÎÒÃǵ¼³öÁËi=11162ʱµÄ״̬¡£µÈ²åÈëÍê³Éºó£¬ÀíÂÛÉÏÎÒÃǵÄfoo¼¯ºÏÓ¦¸ÃÓÐ100000Ìõ¼Ç¼
> use test switched to db test > db.foo.count() 100000 |
ÏÖÔÚ¼ÙÉèÎÒ½øÐÐÁËÒ»´ÎÎó²Ù×÷£º
> db.foo.remove({}) WriteResult({ "nRemoved" : 100000 }) |
¸ü²ÒµÄÊÇÎÒÖ®ºóÓÖÍùfooÀïÃæ²åÈëÁËÒ»ÌõÊý¾Ý
> db.foo.insert({a: 100001}); WriteResult({ "nInserted" : 1 }) |
ÏÖÔÚÔõÑùÈÃʱ¼äµ¹Á÷£¬»Øµ½ÔÖÄÑǰµÄ×´Ì¬ÄØ£¿ÓÉÓÚÔÚÔÖÄÑǰÎÒÃÇÓйýÒ»´Îdump£¬Òò´ËÏÖÔÚÖ»ÒªÔÚoplogʱ¼ä´°¿Ú»¹Äܸ²¸Çµ¼³öʱ¼ä֮ǰ°ÑoplogÇÀ¾È³öÀ´¾ÍºÃÁË£º
yaoxing ~ $ mongodump -h 127.0.0.1 -d local -c oplog.rs 2015-09-24T00:09:41.040+0800 writing local.oplog.rs to dump/local/oplog.rs.bson 2015-09-24T00:09:41.525+0800 done dumping local.oplog.rs (200003 documents) |
Ϊʲô»áÓÐ200003Ìõ¼ÇÂ¼ÄØ£¿Çë×ÔÐÐʹÓÃbsondump¹¤¾ß²é¿´·¢ÉúÁËʲôÊÂÇé¡£
´ÓÇ°Ãæ½²µÄ¿ÉÖª£¬Ê¹ÓÃmongodump¼Óoplog.bson£¨Çë×¢ÒâÎļþλÖ㩼´¿É»Ö¸´Êý¾Ý¿â¡£ÕâÀïµÄdump/local/oplog.rs.bsonÆäʵ¾ÍÊÇÎÒÃÇÐèÒªµÄoplog.bson¡£Òò´Ë°ÑËüÖØÃüÃûºó·Åµ½ºÏÊʵÄλÖã¬Ò»¸öÄ£Äâ³öÀ´µÄ»Ö¸´»·¾³¾Í×¼±¸ºÃÁË
yaoxing ~/dump $ ll total 18464 -rw-r--r-- 1 yaoxing yaoxing 18900271 Sep 24 00:09 oplog.bson drwxr-xr-x 2 yaoxing yaoxing 4096 Sep 24 00:06 test |
µ«ÊÇÕâ¸öoplog.bson¿ÉÊǰüº¬ÁËËùÓÐÔÖÄѲÙ×÷µÄ°¡£¬Èç¹ûÈ«Åָ̻´»ØÈ¥£¬¾ÍµÈÓÚÊÇÏÈÈÃʱ¹âµ¹Á÷£¬ÔÙ¿´±¯¾çÖØÑÝÒ»±é¡£ÐͼËéÁË¡¡ÕâʱºòÄãÐèÒªÒ»¸öÐÂÅóÓÑ£¬¾ÍÊÇÉÏÃæÌáµ½µÄ--oplogLimit¡£ËüÓë--oplogReplayÒ»ÆðʹÓÃʱ£¬¿ÉÒÔÏÞÖÆÖØ·Åµ½µÄʱ¼äµã¡£ÄÇÃ´ÖØÒªµÄÎÊÌâ¾ÍÊÇÈçºÎÕÒµ½ÔÖÄÑ·¢ÉúµÄʱ¼äµãÁË¡£ÈÔÈ»ÊÇbsondump¡£Èç¹ûÄã¶ÔLinuxÃüÁîÊìϤ£¬¿ÉÒÔÔڹܵÀÖÐÖ±½Ó²Ù×÷¡£Èç¹û²»ÐУ¬ÄǾÍÏÈdumpµ½ÎļþÖУ¬ÔÙÓÃÎı¾±à¼Æ÷´ò¿ªÂýÂýÕÒºÃÁË¡£ÎÒÃÇÐèÒªÕÒµÄÄÚÈÝÊÇ"op":"d"£¬Ëü±íʾ½øÐÐÁËÒ»´Îɾ³ý²Ù×÷¡£¿ÉÒÔ·¢ÏÖ£¬oplog.bsonÖÐÓÐ100000´Îɾ³ý²Ù×÷£¬Êµ¼ÊÉÏÊÇÒ»ÌõÒ»Ìõ°Ñ¼Ç¼ɾ³ýµô£¬ÕâÒ²ÊÇΪʲôremove({})²Ù×÷»áÕâôÂý¡£Èç¹û¶ÔÒ»¸ö¼¯ºÏ½øÐÐdrop()¾Í»á¿ìµÃ¶à£¬Ëü½øÐеIJÙ×÷Çë¶ÁÕß×Ô¼º³¢ÊÔ¡£
yaoxing ~/dump $ bsondump oplog.bson | grep "\"op\":\"d\"" | head {"b":true,"h":{"$numberLong":"5331406427126597755"},"ns":"test.foo",
"o":{"_id":{"$oid":"5602cdf1befd4a4bfb4d149b"}},"op":"d","ts":{"$timestamp":{"t":1443024507,"i":1}},"v":2} ... |
´ËÌõ¼Ç¼ÖÐÎÒÃÇÐèÒªµÄÊǺìÉ«µÄ$timestamp²¿·Ö£¬Ëü´ú±íµÄ·¢ÉúÕâ¸ö²Ù×÷µÄʱ¼ä£¬Ò²ÕýÊÇÎÒÃǵÄ--oplogLimitÐèÒª´«ÈëµÄʱ¼ä£¬Ö»ÊǸñʽÉÔÉÔÓб䣺
yaoxing ~ $ mongorestore -h 127.0.0.1 --oplogReplay --oplogLimit "1443024507:1" dump/ 2015-09-24T00:34:09.533+0800 building a list of dbs and collections to restore from dump dir 2015-09-24T00:34:09.534+0800 reading metadata for test.foo from 2015-09-24T00:34:09.534+0800 restoring test.foo from 2015-09-24T00:34:09.659+0800 restoring indexes for collection test.foo from metadata 2015-09-24T00:34:09.659+0800 finished restoring test.foo (11162 documents) 2015-09-24T00:34:09.659+0800 replaying oplog 2015-09-24T00:34:11.548+0800 done |
ÆäÖÐ1443024507¼´ÊÇ$timestampÖеÄ"t"£¬1¼´ÊÇ$timestampÖеÄ"i"¡£ÕâÑùÅäÖúóoplog½«»áÖØ·Åµ½Õâ¸öʱ¼äµãÒÔǰ£¬¼´ÕýºÃ±Ü¿ªÁ˵ÚÒ»Ìõɾ³ýÓï¾ä¼°ÆäºóÃæµÄ²Ù×÷£¬Êý¾Ý¿âÍ£ÁôÔÚÔÖÄÑǰ״̬¡£Ñé֤һϣº
rs0:PRIMARY> db.foo.count() 100000 |
1.3 С½á
½áºÏÉÏÊõ֪ʶ£¬ÎÒÃÇ¿ÉÒÔ×ܽáһЩmongodbµÄ±¸·Ý×¼Ôò£¨Ö»Õë¶Ôreplica»òmaster/slave£©£¬Âú×ãÕâЩ׼Ôò£¬MongoDB¾Í¿ÉÒÔ½øÐÐpoint-in-time»Ö¸´²Ù×÷£º
ÈÎÒâÁ½´ÎÊý¾Ý±¸·ÝµÄʱ¼ä¼ä¸ô£¨µÚÒ»´Î±¸·Ý¿ªÊ¼µ½µÚ¶þ´Î±¸·Ý½áÊø£©²»Äܳ¬¹ýoplogʱ¼ä´°¿Ú¸²¸Ç·¶Î§¡£
ÔÚÉÏ´ÎÊý¾Ý±¸·ÝµÄ»ù´¡ÉÏ£¬ÔÚoplogʱ¼ä´°¿ÚûÓл¬³öÉϴα¸·Ý½áÊøµÄʱ¼äµãǰ½øÐÐÍêÕûµÄoplog±¸·Ý¡£Çë³ä·Ö¿¼ÂÇoplog±¸·ÝÐèÒªµÄʱ¼ä£¬È¨ºâ·þÎñÆ÷¿Õ¼äÇé¿öÈ·¶¨oplog±¸·Ý¼ä¸ô¡£
ʵ¼ÊÓ¦ÓÃÖеÄ×¢ÒâÊÂÏ
¿¼Âǵ½oplogʱ¼ä´°¿ÚÊǸö±ä»¯Öµ£¬Çë¹Ø×¢oplogʱ¼ä´°¿ÚµÄ¾ßÌåʱ¼ä¡£
ÔÚ¿¿½üoplogʱ¼ä´°¿Ú»¬¶¯³öÓÐЧʱ¼ä֮ǰ±ØÐëÒªÓÐ×ã¹»µÄʱ¼ädump³öÐèÒªµÄoplog.rs£¬ÇëÔ¤Áô×ã¹»µÄʱ¼ä£¬²»Òª¶¥Âúʱ¼ä´°¿ÚÔÙ±¸·Ý¡£
µ±ÔÖÄÑ·¢Éúʱ£¬µÚÒ»¼þÊÂÇé¾ÍÊÇҪֹͣÊý¾Ý¿âµÄдÈë²Ù×÷£¬ÒÔÍùoplog»¬³öʱ¼ä´°¿Ú¡£ÌرðÊÇÏñÉÏÊöÕâÑùµÄremove({})²Ù×÷£¬Ë²¼ä¾Í»á²åÈë´óÁ¿d¼Ç¼´Ó¶øµ¼ÖÂoplogѸËÙ»¬³öʱ¼ä´°¿Ú¡£
2. ÍâÖ÷½·¨
1. MMS/Cloud Manager
ÒÔǰ½Ð×öMMS£¬¼à¿Ø¹¦ÄÜÃâ·Ñ£¬±¸·Ý¹¦ÄÜÊÕ·Ñ£»Ç°Á½¸öÔ¸üÃûΪCloud Manager²¢¿ªÊ¼¶Ô¼à¿Ø¹¦ÄÜÊÕ·Ñ£¬ÁíÍâÔö¼ÓÒ»¸öÔËά×Ô¶¯»¯»úÆ÷ÈË£¬Í¦Éµ¹Ï»¯µÄ£¬ÓÐÐËȤ¿ÉÒÔÍæÍæ¡£²»¹ý¼ÈÈ»ÊÕ·Ñ£¬ÎÒÏàÐÅÎÒ¹ú¹úÇé¾ö¶¨ÁË¿ÉÄÜûÓм¸¸ö¹«Ë¾»áÔ¸ÒâʹÓá£Òò´Ë²»×öÖØµã½éÉÜ£¬Ö»ÒªÖªµÀËüÄÜÌṩÈÎÒâʱ¼äµãµÄÊý¾Ý»Ö¸´¾Í¿ÉÒÔÁË£¬¹¦ÄÜÇ¿´ó£¬ÍÁºÀ¹«Ë¾»¶ÓʹÓá£
2. ´ÅÅÌ¿ìÕÕ
³£¼ûµÄÈçLVM¿ìÕÕ£¬ÊÇ¿ÉÒÔÓÃÀ´±¸·ÝMongoDBµÄ£¬µ«±ØÐ뿪ÆôMongoDBµÄJournal²¢ÇÒJournal±ØÐëºÍÊý¾ÝÎļþÔÚÒ»¸ö¾íÉÏ¡£»°ËµÓ¦¸Ã¶àÊýÈ˶¼ÊÇ¿ªÆôJournalµÄ°É£¿Ã»ÓÐJournalµÄ»°¶ÏµçÊǻᶪʧ×î¶à60sµÄÊý¾ÝµÄ¡£
¿ìÕÕÆäʵÊÇÒ»¸ö½Ïmongodump/mongorestoreÀ´µÃ¸ü¿ìµÄ±¸·Ý·½Ê½£¬Ï൱ʵÓ㬵«Ö»ÄÜÌṩµ½±¸·Ýʱ¼äµãµÄÊý¾Ý»Ö¸´£¬×÷ÓÃÓÐÏÞ¡£²»Õ¹¿ªÏ¸Ëµ£¬ÓÐÐËȤ¿ÉÒÔ²éÔĹٷ½Îĵµ¡£ÀíÂÛÉÏ˵£¬¿ìÕÕµ±È»Ò²¿ÉÒÔ½áºÏoplogÖØ·ÅÀ´´ïµ½point-in-timeÊý¾Ý»Ö¸´µÄ¡£µ«ÊDZ¾ÈËûÓÐÇ×ÉíʵÑ飬ÓÐÐËȤµÄÅóÓÑ¿ÉÒÔÍæÍæ²¢×ö¸ö½éÉÜ¡£
|