±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚ±à³ÌÈËÉú,Ö÷ÒªÊÇÔÚ½øÐнڵãÑ¡¾ÙÖ®ºóµÄоÉPrimary½ÚµãµÄÊý¾Ý²»Í¬²½¡£ |
|
¸´ÖƼ¯¼ò½é
Mongodb¸´ÖƼ¯ÓÉÒ»×éMongodʵÀý£¨½ø³Ì£©×é³É£¬°üº¬Ò»¸öPrimary½ÚµãºÍ¶à¸öSecondary½Úµã£¬Mongodb
Driver£¨¿Í»§¶Ë£©µÄËùÓÐÊý¾Ý¶¼Ð´ÈëPrimary£¬Secondary´ÓPrimaryͬ²½Ð´ÈëµÄÊý¾Ý£¬ÒÔ±£³Ö¸´ÖƼ¯ÄÚËùÓгÉÔ±´æ´¢ÏàͬµÄÊý¾Ý¼¯¡£
¹Ù·½ÎĵµÉϵĸ´ÖƼ¯

PrimaryÑ¡¾Ù
¸´ÖƼ¯ÔÚ³õʼ»¯Ö®ºóÒª½øÐÐPriamryÑ¡¾Ù£¬ÔÚ»ñµÃ´ó¶àÊýµÄ³ÉԱͶƱ֮ºóµÄ½Úµã»á³ÉΪPriamry½Úµã£¬ÆäÓàµÄ³ÉΪSecondary½Úµã
³õʼ»¯¸´ÖƼ¯
config
= {
_id : "my_replica_set",
members : [
{_id : 0, host : "rs1.example.net:27017"},
{_id : 1, host : "rs2.example.net:27017"},
{_id : 2, host : "rs3.example.net:27017"},
]
}
rs.initiate(config) |
´ó¶àÊýµÄ¶¨ÒåΪN/2 + 1 NΪ¸´ÖƼ¯ÊýÁ¿¡£µ±¸´ÖƼ¯µÄ´æ»îµÄÊýÁ¿²»×ã´ó¶àÊýʱ£¬Õû¸ö¸´ÖƼ¯ÎÞ·¨Ñ¡³öPriamry
£¬¸´ÖƼ¯Ö»Ìṩ¶Á·þÎñ¡£
ÌØÊâµÄSecondary
PriamryµÄ×÷ÓÃÊǽ«×Ô¼ºµÄÊý¾Ýͬ²½¸øÆäËûµÄSecondary¡£²¢±£³Ö×îеÄÊý¾Ý
ÏÂÃæÊÇÒ»Ð©ÌØÊâµÄSecondaryµÄ½ÚµãµÄ½éÉÜ£¬ÕâЩ¼¸µãµÄÖ÷Òª×÷ÓÃÊÇÔÚPriamry½ÚµãÖ÷¶¯»ò±»¶¯Í˳öʱ£¬Ñ¡¾Ù³öеÄPriamry½Úµã
Arbiter
Arbiter½ÚµãÖ»²ÎÓëͶƱ£¬²»Äܱ»Ñ¡ÎªPrimary£¬²¢ÇÒ²»´ÓPrimaryͬ²½Êý¾Ý¡£
Arbiter±¾Éí²»´æ´¢Êý¾Ý£¬ÊǷdz£ÇáÁ¿¼¶µÄ·þÎñ
Arbiter±¾Éí²»´æ´¢Êý¾Ý£¬ÊǷdz£ÇáÁ¿¼¶µÄ·þÎñ
Priority0½ÚµãµÄÑ¡¾ÙÓÅÏȼ¶Îª0£¬²»»á±»Ñ¡¾ÙΪPrimary
Vote0
Mongodb 3.0À¸´ÖƼ¯³ÉÔ±×î¶à50¸ö£¬²ÎÓëPrimaryÑ¡¾ÙͶƱµÄ³ÉÔ±×î¶à7¸ö£¬ÆäËû³ÉÔ±£¨Vote0£©µÄvoteÊôÐÔ±ØÐëÉèÖÃΪ0£¬¼´²»²ÎÓëͶƱ¡£
Hidden
Hidden½Úµã²»Äܱ»Ñ¡ÎªÖ÷£¨PriorityΪ0£©£¬²¢ÇÒ¶ÔDriver²»¿É¼û¡£
Delayed
Delayed½Úµã±ØÐëÊÇHidden½Úµã£¬²¢ÇÒÆäÊý¾ÝÂäºóÓëPrimaryÒ»¶Îʱ¼ä£¨¿ÉÅäÖ㬱ÈÈç1¸öСʱ£©¡£
Ö÷Òª×÷ÓÃÊÇDelayedµÄ½ÚµãÊý¾Ý±ÈPriamryµÄÊý¾ÝÂäºó£¬ÕâÑùµ±PriamryµÄÊý¾Ý³öÏÖ´íÎóµÄʱºò£¬¿ÉÒÔͨ¹ýDelayed½ÚµãµÄÊý¾Ý½øÐлָ´
Êý¾ÝµÄͬ²½
ͬ²½µÄÔÀí
PrimaryÓëSecondaryÖ®¼äͨ¹ýoplogÀ´Í¬²½Êý¾Ý£¬PrimaryÉϵÄд²Ù×÷Íê³Éºó£¬»áÏòÌØÊâµÄlocal.oplog.rsÌØÊ⼯ºÏдÈëÒ»Ìõoplog£¬Secondary²»¶ÏµÄ´ÓPrimaryȡеÄoplog²¢Ó¦Óá£
µ±È»oplogµÄÊý¾ÝÒ²²»ÊÇÒ»Ö±ÔÚÔö¼Ó£¬µ±ÈÝÁ¿´ïµ½ÉÏÏÞʱ£¬»á½«×î¾ÉµÄÊý¾Ýɾ³ý¡£
oplogµÄ¸ñʽ
{
"ts" : Timestamp(1446011584, 2),
"h" : NumberLong("1687359108795812092"),
"v" : 2,
"op" : "i",
"ns" : "test.nosql",
"o" : { "_id" : ObjectId("563062c0b085733f34ab4129"),
"name" : "mongodb", "score"
: "100" }
} |
ts£º ²Ù×÷ʱ¼ä£¬µ±Ç°timestamp + ¼ÆÊýÆ÷£¬¼ÆÊýÆ÷ÿÃë¶¼±»ÖØÖÃ
h£º²Ù×÷µÄÈ«¾ÖΨһ±êʶ
v£ºoplog°æ±¾ÐÅÏ¢
op£º²Ù×÷ÀàÐÍ
1 i£º²åÈë²Ù×÷
2 u£º¸üвÙ×÷
3 d£ºÉ¾³ý²Ù×÷
4 c£ºÖ´ÐÐÃüÁÈçcreateDatabase£¬dropDatabase£©
5 n£º¿Õ²Ù×÷£¬ÌØÊâÓÃ;
ns£º²Ù×÷Õë¶ÔµÄ¼¯ºÏ
o£º²Ù×÷ÄÚÈÝ£¬Èç¹ûÊǸüвÙ×÷
o2£º²Ù×÷²éѯÌõ¼þ£¬½öupdate²Ù×÷°üº¬¸Ã×Ö¶Î
Ð޸ĸ´ÖƼ¯ÅäÖÃ
µ±ÐèÒªÐ޸ĸ´ÖƼ¯Ê±£¬±ÈÈçÔö¼Ó³ÉÔ±¡¢É¾³ý³ÉÔ±¡¢»òÕßÐ޸ijÉÔ±ÅäÖã¨Èçpriorty¡¢vote¡¢hidden¡¢delayedµÈÊôÐÔ£©£¬¿Éͨ¹ýreplSetReconfigÃüÁrs.reconfig()£©¶Ô¸´ÖƼ¯½øÐÐÖØÐÂÅäÖá£
ÀýÈçÏÂÃæµÄÀý×Ó
cfg
= rs.conf();
cfg.members[1].priority = 2;
rs.reconfig(cfg); |
Õâ¸öÀý×ÓµÄ×÷ÓÃÊǽ«¸´ÖƼ¯µÄµÚ¶þ¸ö³ÉÔ±µÄPriamryÉèÖÃΪ2
PrimaryÑ¡¾ÙµÄÑ¡¾Ùϸ½Ú
ÏÂÃæµÄ¼¸ÖÖÇé¿ö»áÒý¸´ÖƼ¯µÄUÐͰ²¾Ó
1.¸´ÖƼ¯±»reconfig
2.Secondary½Úµã¼ì²âµ½Primaryå´»úʱ£¬»á´¥·¢ÐÂPrimaryµÄÑ¡¾Ù
3.µ±ÓÐPrimary½ÚµãÖ÷¶¯stepDown£¨Ö÷¶¯½µ¼¶ÎªSecondary£©Ê±£¬Ò²»á´¥·¢ÐµÄPrimaryÑ¡¾Ù
PriamryµÄÑ¡¾ÙÊܵ½¶à¸öÒòËØµÄÓ°Ïì ÀýÈç µã¼äÐÄÌø ÓÅÏȼ¶ ×îеÄoplogʱ¼äµÄÆäËûµÄÒòËØ
½Úµã¼äÐÄÌø
¸´ÖƼ¯³ÉÔ±¼äĬÈÏÿ2s»á·¢ËÍÒ»´ÎÐÄÌøÐÅÏ¢£¬Èç¹û10sδÊÕµ½Ä³¸ö½ÚµãµÄÐÄÌø£¬ÔòÈÏΪ¸Ã½ÚµãÒÑå´»ú£»Èç¹ûå´»úµÄ½ÚµãΪPriAlt
text
mary£¬Secondary£¨Ç°ÌáÊǿɱ»Ñ¡ÎªPrimary£©»á·¢ÆðеÄPrimaryÑ¡¾Ù¡£
½ÚµãÓÅÏȼ¶
1.ÿ¸ö½Úµã¶¼ÇãÏòÓÚͶƱ¸øÓÅÏȼ¶×î¸ßµÄ½Úµã
2.ÓÅÏȼ¶Îª0µÄ½Úµã²»»áÖ÷¶¯·¢ÆðPrimaryÑ¡¾Ù Ò²¾ÍÊÇPriority0½Úµã
3.µ±Primary·¢ÏÖÓÐÓÅÏȼ¶¸ü¸ßSecondary£¬²¢ÇÒ¸ÃSecondaryµÄÊý¾ÝÂäºóÔÚ10sÄÚ£¬ÔòPrimary»áÖ÷¶¯½µ¼¶£¬ÈÃÓÅÏȼ¶¸ü¸ßµÄSecondaryÓгÉΪPrimaryµÄ»ú»á¡£
Optime
ÓµÓÐ×îÐÂoptime£¨×î½üÒ»ÌõoplogµÄʱ¼ä´Á£©µÄ½Úµã²ÅÄܱ»Ñ¡ÎªÖ÷¡£
ÍøÂç·ÖÇø
Ö»Óиü´ó¶àÊýͶƱ½Úµã¼ä±£³ÖÍøÂçÁ¬Í¨£¬²ÅÓлú»á±»Ñ¡Primary£»
¸´ÖƼ¯µÄ¶ÁдÉèÖÃ
Read Preference
ĬÈÏÇé¿öÏ£¬¸´ÖƼ¯µÄËùÓжÁÇëÇó¶¼·¢µ½Primary.
1.Driver (¿Í»§¶Ë)¿Éͨ¹ýÉèÖÃRead PreferenceÀ´½«¶ÁÇëÇó·Óɵ½ÆäËûµÄ½Úµã¡£
2.primary£º ĬÈϹæÔò£¬ËùÓжÁÇëÇó·¢µ½Primary
3.primaryPreferred£º PrimaryÓÅÏÈ£¬Èç¹ûPrimary²»¿É´ï£¬ÇëÇóSecondary
4.secondary£º ËùÓеĶÁÇëÇó¶¼·¢µ½secondary
5.secondaryPreferred£ºSecondaryÓÅÏÈ£¬µ±ËùÓÐSecondary²»¿É´ïʱ£¬ÇëÇóPrimary
6.nearest£º¶ÁÇëÇó·¢Ë͵½×î½üµÄ¿É´ï½ÚµãÉÏ£¨Í¨¹ýping̽²âµÃ³ö×î½üµÄ½Úµã£©
Write Concern
ĬÈÏÇé¿öÏ£¬PrimaryÍê³Éд²Ù×÷¼´·µ»Ø£¬µ«ÊÇDriver¿Éͨ¹ýÉèÖÃWrite ConcernÀ´ÉèÖÃд³É¹¦µÄ¹æÔò
ÀýÈç
db.products.insert(
{ item: "envelopes", qty : 100, type:
"Clasp" },
{ writeConcern: { w: majority, wtimeout: 5000
} }
) |
write concern¹æÔòÉèÖÃд±ØÐëÔÚ´ó¶àÊý½ÚµãÉϳɹ¦£¬³¬Ê±Ê±¼äΪ5s¡£
ÉÏÃæµÄÉèÖ÷½Ê½ÊÇÕë¶Ôµ¥¸öÇëÇóµÄ£¬Ò²¿ÉÒÔÐ޸ĸ±±¾¼¯Ä¬ÈϵÄwrite concern£¬ÕâÑù¾Í²»ÓÃÿ¸öÇëÇóµ¥¶ÀÉèÖÃ
cfg
= rs.conf()
cfg.settings = {}
cfg.settings.getLastErrorDefaults = { w: "majority",
wtimeout: 5000 }
rs.reconfig(cfg) |
Òì³£´¦Àí£¨rollback£©
ÕâÀïµÄÒì³£´¦ÀíÖ÷ÒªÊÇÔÚ½øÐнڵãÑ¡¾ÙÖ®ºóµÄоÉPrimary½ÚµãµÄÊý¾Ý²»Í¬²½¡£Òª½²¾ÉµÄPriamryµÄ½øÐлعö²¿·Ö£¬ÒÔ±£Ö¤Êý¾Ý¼¯ÓëеÄPriamryÒ»ÖÂ
|