程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> mongodb基礎系列—主從復制具體搭建以及解說

mongodb基礎系列—主從復制具體搭建以及解說

編輯:DB2教程

距離上次的mongodb有一段日子了,當時說好了要盡快更新這塊,但是由於各種事情,就暫時擱置下來。回頭看看自己第一篇博客,竟然是半年以前,oh,my god,我和我的小伙伴們都驚呆了。

不過還是鼓起勇氣,go on……

以前博客中,也曾介紹過java操作mongodb的事例,那麼這篇博客就不再介紹命令行下增刪改查了。因為mongodb集成了shell命令,同時對javascript也有很好的集成,在命令行下就可以操作簡單的javascript。

比如for 循環。 for(var i=0;i<3;i++){db.my.insert({name:"test",age:18})} 其中my是自定義集合collection。你可以試試,肯定沒問題,若有問題,直接call me

之所以不過多介紹這塊,因為在控制台下可以直接查看其api,並且mongodb有方法補全功能哦,類似java ide環境,再次方便了我們。

在控制台下,按一次tab鍵,mongodb可以自動補全,這就是shell命令的好處。同時,在控制台下,直接敲相應的方法,不要加括號,即可打印其api哦。比如db.my.update;快試試哦。

OK,轉到今天的主題。

主從復制:master-slave模式。通俗的來說,主服務器copy到從服務器中,從而保證了兩者同步一致。這樣的好處就不言而喻喽,若主服務器壞了,哈哈,莫怕,從服務器中還有哩。但是從服務器中有歸有哈,卻不能自動轉正哈。【咋感覺有點像小妾呢,O(∩_∩)O】

不過啊,先不說他的缺點,來看看他的優點,人呢,就不能太貪,一口可不能吃個胖子哦。

主從復制,自動保持同步,這樣就不用咱們手動維護喽。以前原來的項目,咋保證數據的安全呢?首先insert到這個數據庫中,因為當時數據很重要,所以需要備份,然後insert success後,再insert another database中。所以在測試insert功能時,就可以去喝杯咖啡~\(≧▽≦)/~啦
 手動測試一下這個功能。
\

1.准備階段:因為一個服務器,所以建兩個文件夾來模擬:master文件夾、slave文件夾。注意開啟兩個不同的端口。

2.啟動主節點:mongod --dbpath E:\E:\mastersavle\master --port 10000 --master
啟動從節點:mongod --dbpath E:\E:\mastersavle\master\slave --port 10001 --slave --source localhost:10000

注意是兩個控制台哦。

啟動效果如下:
\

3.再開啟一個窗口,連接10000主服務器。然後我們插入一條數據,然後看效果。

默認是連接test服務器,那麼使用類似mysql的use 切換數據庫。 use my; 注意:執行這條語句,若存在my數據庫,則直接切換,若不存在,則隱含創建一個,此時你查看文件夾下,則看不到,因為是隱含,只有你insert數據後,才可以看到這個my數據庫。

db.my.insert({name:"test"});插入一條數據,同時創建了my集合(表),可以通過db;命令查看當前數據庫。通過db.showtables;或者db.showcollections;查看該數據庫下的表。system.index默認有這個表,這是存放索引的表,稍後有時間我們再討論這塊。

4.主服務器中插入後,我們看看從數據庫中的效果:
\

注意:從服務器中只可以查詢,不可以insert、delete、update。

5.其實我們所做的操作,mongodb都給我們記錄了oplog,保存在特殊數據庫中local的oplog.$main集合中。注意:local數據庫中只保存更改數據庫狀態的操作,insert、delete、update.查詢操作find()是不會跟我們記錄的。

查看oplog記錄:【後期另一種主從復制模式也是保存在此集合中】
\

6.介紹oplog.$main集合的數據結構,這些都代表什麼意思,我們又是如何找到有用的信息呢?為什麼我們要了解這塊呢?

因為復制機制,就是通過查看oplog信息來維護數據庫同步一致。

如上圖,這個集合中,有屬性key :ts,op,n,o

其實:ts:代表的是8字節的 時間戳,由4字節unix timestamp + 4字節自增計數表示這個值很重要,在選舉(如master宕機時)新primary時,會選擇ts最大的那個secondary作為新primary。【後面我們介紹另一種主從模式復本集中就會用到】

op:1 字節的操作類型,例如i表示insert,d表示delete。【如上圖中,我們在日志中查看op 是i,正是我們剛插入的一條信息】

ns:操作所在的namespace。【namespace是當前數據.當前集合。使用db.my.insert則是默認創建my集合】

o:操作所對應的 document,即當前操作的內容(比如更新操作時要更新的的字段和值【上圖正是我們insert的一條具體信息】)

o2: 在執行更新操作時的where條件,僅限於 update時才有該屬性【下圖則會展示此屬性】

其中op,可以是如下幾種情形之一:

"i": insert

"u": update

"d": delete

"c": db cmd

"db": 聲明當前數據庫 (其中ns 被設置成為=>數據庫名稱+ '.')

"n":  no op,即空操作,其會定期執行以確保時效性

7.展示日志記錄中op其他值,比如刪除、更新。【前提我們在主服務器中執行這些操作】

op:d 刪除操作。o:具體刪除那一條。因為_id是唯一的。
\

op:u 更新操作。o:具體更新那一條記錄,o2:更新那個字段。
\

哎,絮絮叨叨了N長,下篇博客再更新另一種主從復制模式吧:副本集。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved