實戰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表明。
啟動服務可以從命令列一個一個參數的指定,也可以將參數存放在一個檔案中,然後啟動的時候指定這個檔案為服務的設定檔。後見的方法便於管理和維護,推薦使用。
首先配置主服務。
- port=30000
- ddbpath=d:\mongodb\master1
- directoryperdb=true
- logpath=d:\mongodb\master1\log.log
- logappend=true
- master=true
- bind_ip=192.168.0.111
配置的參數如上所示,將上面的參數拷貝到一個檔案中,起名master1.conf】,然後使用下面的命令啟動主服務。
- d:\mongodb\bin\mongod --config=d:\mongodb\master1\master1.conf
上面是windows裡面啟動的命令。
如果是ubuntu中使用,假設conf檔案存放在/home/andyshi/master1/目錄下,將conf檔案內容修改如下。
- port=30000
- dbpath=/home/andyshi/master1
- directoryperdb=true
- logpath=/home/andyshi/master1/log.log
- logappend=true
- master=true
- bind_ip=192.168.0.111
使用下面的命令啟動主服務。
- mongod --conf=/home/andyshi/master1/master1.conf
大家注意到了,主要區別就是目錄的地方,注意一下就可以了。
接下來就可以使用mongo這個用戶端測試我們配置的結果了,或者使用python+pymongo也可以測試,順便熟悉一下python+pymongo的使用。
我們的用戶端測試環境使用ubuntu+python2.7+pymongo2.1。
在終端中輸入
- mongo 192.168.0.111:30000
指定IP或者是名稱)和連接埠號碼,由於要進行寫入,需要連入主服務。嘗試寫入下面的資料。
- //切換到test資料庫
- use test
- //插入資料
- db.book.insert({'author':'shiwenbin'})
- //查看插入是否成功
- db.test.find()
插入成功之後,這時候我們連上其中一個從服務,看看是否存在同樣的資料。
- mongo 192.168.0.111:30001
-
- use test
- show collections
- db.book.find()
如果沒有問題,會發現30001這個從服務中同樣的位置也存在同樣的資料,說明複製成功,配置沒有問題。
建立主從關係之後,在主服務的local資料庫中會有一個slaves集合,存放的就是當前主服務的所有從服務。
相應的,在從服務的local資料庫中會有一個sources集合,存放的是當前slave的master資訊,也就是設定檔中的source參數指定的資訊。
查看集合可以先使用
- use local
use命令切換到local資料庫,然後使用
- show collections
show命令查看local資料庫的所有集合。
診斷功能
在master上使用
- db.printReplicationInfo()
可以列印出第一次同步事件的時間,最後一次的同步事件時間,和當前的時間。
在slave上使用
- db.printSalveReplicationInfo()
可以列印出master的地址和上一次同步的時間。
安全
如果啟動mongod服務的時候,指定了需要安全驗證使用auth)參數,那麼就需要在master和slave的local資料庫中都添加同樣的使用者。
- use local
- 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