實戰MongoDB-Replication之Master-Slave

來源:互聯網
上載者:User

實戰MongoDB

Replica Set

 

MongoDB支援不同服務之間的非同步資料複製,來實現failover容錯移轉,故障切換,故障恢複) and redundancy資料冗餘)。

同一時間,只有一個服務節點primary或者master)支援寫入。

MongoDB支援兩種複製的模式:

 

介紹Master/Slave的官方地址:

http://www.mongodb.org/display/DOCS/Master+Slave

介紹Replica Set的官方地址:

http://www.mongodb.org/display/DOCS/Replica+Sets

 

今天實戰的是master-slave,也就是主從複製。

首先使用mongod啟動服務,關於啟動的參數可以從http://www.mongodb.org/display/DOCS/Command+Line+Parameters頁面找到相關的介紹。

其中關於主從複製的參數常用的是下面幾個:

--master,指明當前服務是主。

--slave,指明當前服務是從。

--source,指明主服務的地址,格式為server:port。

--only <db>,指明當前從只複製主的指定資料庫,資料庫名稱用db表明。

 

啟動服務可以從命令列一個一個參數的指定,也可以將參數存放在一個檔案中,然後啟動的時候指定這個檔案為服務的設定檔。後見的方法便於管理和維護,推薦使用。

 

首先配置主服務。

 
  1. port=30000 
  2. ddbpath=d:\mongodb\master1 
  3. directoryperdb=true 
  4. logpath=d:\mongodb\master1\log.log 
  5. logappend=true 
  6. master=true 
  7. bind_ip=192.168.0.111 

配置的參數如上所示,將上面的參數拷貝到一個檔案中,起名master1.conf】,然後使用下面的命令啟動主服務。

 

 
  1. d:\mongodb\bin\mongod --config=d:\mongodb\master1\master1.conf 

上面是windows裡面啟動的命令。

如果是ubuntu中使用,假設conf檔案存放在/home/andyshi/master1/目錄下,將conf檔案內容修改如下。

 

 
  1. port=30000 
  2. dbpath=/home/andyshi/master1 
  3. directoryperdb=true 
  4. logpath=/home/andyshi/master1/log.log 
  5. logappend=true 
  6. master=true 
  7. bind_ip=192.168.0.111 

使用下面的命令啟動主服務。

 

 
  1. mongod --conf=/home/andyshi/master1/master1.conf 

大家注意到了,主要區別就是目錄的地方,注意一下就可以了。

接下來就可以使用mongo這個用戶端測試我們配置的結果了,或者使用python+pymongo也可以測試,順便熟悉一下python+pymongo的使用。

我們的用戶端測試環境使用ubuntu+python2.7+pymongo2.1。

在終端中輸入

 

 
  1. mongo 192.168.0.111:30000

指定IP或者是名稱)和連接埠號碼,由於要進行寫入,需要連入主服務。嘗試寫入下面的資料。

 

 
  1. //切換到test資料庫 
  2. use test 
  3. //插入資料 
  4. db.book.insert({'author':'shiwenbin'}) 
  5. //查看插入是否成功 
  6. db.test.find() 

插入成功之後,這時候我們連上其中一個從服務,看看是否存在同樣的資料。

 

 
  1. mongo 192.168.0.111:30001 
  2.  
  3. use test 
  4. show collections 
  5. db.book.find() 

如果沒有問題,會發現30001這個從服務中同樣的位置也存在同樣的資料,說明複製成功,配置沒有問題。

建立主從關係之後,在主服務的local資料庫中會有一個slaves集合,存放的就是當前主服務的所有從服務。

相應的,在從服務的local資料庫中會有一個sources集合,存放的是當前slave的master資訊,也就是設定檔中的source參數指定的資訊。

查看集合可以先使用

 

 
  1. use local 

use命令切換到local資料庫,然後使用

 

 
  1. show collections 

show命令查看local資料庫的所有集合。

 

診斷功能

在master上使用

 

 
  1. db.printReplicationInfo() 

可以列印出第一次同步事件的時間,最後一次的同步事件時間,和當前的時間。

在slave上使用

 

 
  1. db.printSalveReplicationInfo() 

可以列印出master的地址和上一次同步的時間。

 

安全

如果啟動mongod服務的時候,指定了需要安全驗證使用auth)參數,那麼就需要在master和slave的local資料庫中都添加同樣的使用者。

 

 
  1. use local 
  2. db.addUser('user1','123.com') 

addUser命令有三個參數,第一個登陸帳號,第二個是密碼,第三個是是否唯讀,是選擇性參數,預設值是false。也就是說不指定readonly參數的話,添加的使用者是具有寫入權限的,通過指定readonly=true添加的使用者是唯讀使用者。

利用master-slave可以實現讀寫分離,寫走master,讀走slave。但是有一點遺憾就是,如果master掛了,就不能進行寫入操作了,只能從slave讀取資料。這時候需要手動的停掉一個slave,然後修改啟動參數,啟動為master,同時需要更新其他slave指向這個新的master。

本文出自 “突破中的IT結構師” 部落格,請務必保留此出處http://virusswb.blog.51cto.com/115214/792657

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.