mongodb基礎整理篇————副本概念篇[外篇]( 三 )


config = rs.config()config.members[0].priority=1.5rs.reconfig(config)

mongodb基礎整理篇————副本概念篇[外篇]

文章插圖
我們可以看到前面是27018,現在變成了27017了 。
根據上面結論得出:優先級最高的節點,才是合法繼承人 。
如果你想在從節點上讀取數據,但是有一個從節點只是用來做備份的 , 機器性能很差的話,你不希望客戶端去訪問這臺機器怎么辦?
你可以設置該節點隱藏 。
config.members[0].hidden=true這樣去設置 。
其原理也很簡單,就是客戶端獲取副本集信息的時候是調用db.isMaster() 來查看 。
如果設置了 , 那么isMaster() 是不包含該隱藏的信息的 。
所以客戶端就不會去訪問這個副本集了 。
然后如果副本集只是作為備份的話,那么其實是不需要索引的 , 那么可以設置:
{"buildIndexs":false},這樣從節點就不會創建索引了,同樣它的優先級也應該設置為0,這樣就不會選為主節點了 。
破爛之道這個破爛之道,并不是指垃圾的意思 。
而是節約成本的方式,個人稱為破爛之道 。
從上面我們知道副本集肯定是3個和以上 。
但是有些數據庫很大 , 比如16T左右的話,如果購買的是云服務器,成本也是不低的 。
這個時候公司認為要節約成本,那么其他這個時候只需要一個作為副本集作為備份就好 。
這個時候就可以加入仲裁者這種方式 。
mongodb 支持一種特殊類型的副本成員,叫做仲裁者 。
作用就是參與選舉,但是不會選擇自己作為主節點 。
仲裁者并不保存數據,也不會為客戶端提供服務;它只是為了幫助具有兩個成員的副本集滿足大多數的條件 。
設置仲裁者的方式:
rs.addArb("localhost:27021")或者:
rs.add({"_id":4,"host":"localhost:27021","arbiterOnly":true})仲裁者一般只有一個,因為仲裁者是為了絕大多數 , 來打破平衡的,防止偶數的情況,這是唯一的作用 。
仲裁者缺點 , 那就是如果一個數據從節點完全掛了,無法恢復,要啟動一個新的數據節點去替換掉舊的 。
那么這個時候主節點負荷會很重,因為不僅要將數據復制為從節點,還需要處理應用程序的讀寫負荷 。
結下一節副本集的原理 。

推薦閱讀