【Mongodb】 Replica set 的選舉策略之一
首先介紹一下在replica set裡分為三種節點型別:
1 primary 負責client的讀寫。
2 secondary 作為熱備節點,應用Primary的oplog讀取的操作日誌,和primary保持一致,不提供讀寫操作!
secondary有兩種型別:
1)normal secondary 隨時和Primay保持同步,
2)delayed secondary 延時指定時間和primary保持同步,防止誤操作.
3 arbiter.它不負責任何讀寫,只作為一個仲裁者,負責primary down的時候剩餘節點的選舉操作.
在Replica Set 如果主庫down了,要進行故障切換,叢集的選舉策略:
當primary當了之後,剩下的節點會選擇一個primary節點,仲裁節點也會參與投票,避免僵局出現(如果沒有仲裁節點,對於兩節點的replica set 從節點down,主節點會變為secondary,導致整個replica set 不可用)選擇依據為:優先順序最高的且資料新鮮度最新的!
primary 節點使用心跳來跟蹤叢集中有多少節點對其可見。如果達不到1/2,活躍節點會自動降級為secondary。這樣就能夠防止上面說的僵局狀態或者當網路切割後primary已經與叢集隔離的時候!
來自官方文件的例子:
初始狀況:
server-a: secondary oplog: ()
server-b: secondary oplog: ()
server-c: secondary oplog: ()
主庫寫入資料
server-a: primary oplog: (a1,a2,a3,a4,a5)
server-b: secondary oplog: ()
server-c: secondary oplog: ()
secondary庫應用資料
server-a: primary oplog: (a1,a2,a3,a4,a5)
server-b: secondary oplog: (a1)
server-c: secondary oplog: (a1,a2,a3)
…
主庫server-adown
…
server-b: secondary oplog: (a1)
server-c: secondary oplog: (a1,a2,a3)
...
server-b: secondary oplog: (a1)
server-c: primary oplog: (a1,a2,a3) // c 具有最新的資料被選擇為primary庫
...
server-b: secondary oplog: (a1,a2,a3)
server-c: primary oplog: (a1,a2,a3,c4)
...
server-a 恢復或者起來
...
server-a: recovering oplog: (a1,a2,a3,a4,a5) --做資料恢復
server-b: secondary oplog: (a1,a2,a3)
server-c: primary oplog: (a1,a2,a3,c4)
…應用從server-c中的資料,此時 資料a4,a5丟失
server-a: recovering oplog: (a1,a2,a3,c4)
server-b: secondary oplog: (a1,a2,a3,c4)
server-c: primary oplog: (a1,a2,a3,c4)
新的主庫server-c進行資料寫入。
server-a: secondary oplog: (a1,a2,a3,c4)
server-b: secondary oplog: (a1,a2,a3,c4)
server-c: primary oplog: (a1,a2,a3,c4,c5,c6,c7,c8)
…
server-a: secondary oplog: (a1,a2,a3,c4,c5,c6,c7,c8)
server-b: secondary oplog: (a1,a2,a3,c4,c5,c6,c7,c8)
server-c: primary oplog: (a1,a2,a3,c4,c5,c6,c7,c8)
從上面的過程中可以看出server-c 變為主庫,其他節點則應用從server-c的日誌。資料a4,a5 丟失。
當選出新的primary之後,此資料庫的資料就會被假定為整個叢集中的最新資料,對其他節點(原來的活躍節點)的操作都會回滾,即便之前的主庫已經恢復工作了。為了完成回滾,所有節點連線新的主庫後都要重新進行同步。此過程如下:
這些節點會檢視自己的oplog日誌,找到還沒應用的主庫操作,然後向主庫請求這些操作影響的文件的最新副本,進行資料同步。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-710132/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【Mongodb】Replica Set 的選舉策略之三MongoDB
- 【Mongodb】 Replica set 的 選舉策略之二MongoDB
- 【Mongodb】如何建立mongodb的replica setMongoDB
- mongodb 3.0 replica set 配置MongoDB
- [MONGODB]: WHEN ARBITER REQUIRED FOR REPLICA SETMongoDBUI
- 【Mongodb】 Replica set 的讀寫分離MongoDB
- 【Mongodb】ReplicaSet的選舉策略之三MongoDB
- MongoDB Replica Set 副本集實踐MongoDB
- MongoDB搭建Replica Set複製集MongoDB
- mongodb replica set 和 nodejs中使用mongoose連線replicaMongoDBNodeJS
- docker 下部署mongodb Replica Set 叢集DockerMongoDB
- mongodb複製集(replica set)搭建及管理MongoDB
- 【MongoDB】高可用方案之副本集(Replica Set)MongoDB
- 【Mongodb】 replica set 新增和刪除節點。MongoDB
- MongoDB副本集replica set (二)--副本集環境搭建MongoDB
- 【Mongodb】 replica set 兩種新增節點方法的日誌分析MongoDB
- MongoDB系列-解決面試中可能遇到的MongoDB複製集(replica set)問題MongoDB面試
- 小丸子學MongoDB系列之——部署Replica Set+Sharded ClusterMongoDB
- MongoDB的選舉過程MongoDB
- mongodb replica sets 測試MongoDB
- mongodb叢集shard_replica的搭建方法MongoDB
- MongoDB 複製集模式Replica SetsMongoDB模式
- Simple Automated Backups for MongoDB Replica SetsMongoDB
- MongoDB系列二:Replica Sets安裝與配置MongoDB
- 用通俗易懂的方法解釋MongoDB的選舉機制MongoDB
- 【Mongodb】Mongodb sharding 管理之一MongoDB
- Keepalived中Master和Backup角色選舉策略薦AST
- mongodb複製集(replica sets)+分片(sharding)環境搭建MongoDB
- 演算法--列舉策略演算法
- 利用Mongodb的複製集搭建高可用分片,Replica Sets + Sharding的搭建過程MongoDB
- MongoDB系列三:Replica Sets在生產環境中安裝配置的注意事項MongoDB
- Java列舉的策略設計模式 -DEVJava設計模式dev
- MongoDB寫入資料策略MongoDB
- 副本集選舉
- MongoDB新的均衡策略和自動合併MongoDB
- MySQL遠端備份策略舉例MySql
- ZooKeeper 工作、選舉 原理
- 【分散式】Zookeeper的Leader選舉分散式