集群的配置 (本測試放于同一臺機器進行配置,所以IP地址一樣,如果是在不同的服務器上更換IP便可以)
1、目錄結構
拷貝兩份mongodb到/home/scotte.ye/mongo1和/home/scotte.ye/mongo2
2、開啟mongodb
主:
#cd /home/scotte.ye/mongo1/bin
#./mongod --master -port=10111 -dbpath=/home/data/10111 -nohttpinterface &
#
這樣主服務器就開啟了,幾個關鍵參數的說明(當然也可以自己查看幫助,./mongod --help):
--master:標識當前開啟的mongodb是作為主服務器的
-port:當前服務器的監聽服務端口。默認27017
-dbpath:批當前程序運行的日志保存路徑。默認/data/db。注這個路徑mongodb不人自己創建,所以一定要自己手工來創建,否則程序不能正常啟動。
-nohttpinterface:不開啟網頁接口,也就是不能通過網頁的形式查看服務器運行狀態。默認是會在28017端口開啟一個網頁服務提供用戶查看服務器狀態。因為當前都在同一個機器上,所以如果開啟這個兩個會產生沖突,所以不能開啟。
從:
#cd /home/scotte.ye/mongo1/bin
#./mongod --slave --source=192.168.35.106:10111 -port=10112 -dbpath=/home/data/10112 -nohttpinterface &
#
這是開啟一個從服務器,多個從也是按相同的方式來開啟。幾個關鍵的參數說明:
--slave:指明當前開啟的為從服務器。
--source:標明當前從服務器要連接的主服務器的端口和IP
其它參數同主,所以不再贅述。
集群特點
1、只有主服務器允許寫入,其它從服務器只能讀取。
2、從服務器啟動的時候馬上就會和主服務器進行數據同步,所以不要擔心后起的從服務器不會和主服務器同步之前的數據,也不要我們自己手動操作。
集群的主從切換
1、主機宕機,slave頂替
- 停止slave的mongod進程
- 刪除slave目錄下的local.*文件
- 以--master的模式啟動B
2、切換Master/Slave(原來的master是正常運行的)
- 用fsync命令暫停master的寫操作 //確保切換的時候主從數據同步
- 關閉slave服務
- 清空slave目錄下的local.*文件
- 用--master重啟slave為master
- 在原來的slave也就是現在的master上面執行一次寫操作,生成oplog,獲取第一個同步點,因為slave與master的數據同步是通過oplog來實現的。所以這一步很重要,一定要完成。
- 關閉現master服務,同時slave也會生成新的local.*文件
- 關閉原master,用現master上面的local.*文件替換原master上面的local.*.因為文件比較大,所以最好是壓縮拷貝
- 再用--master選項重啟新master服務
- 再用--slave的模式重啟原master服務,注意還要加一個-fastsync選項。這個和用fsync來暫停master有關
如果原來的master不是正常的,那么這個時候可以跳過第一步,拷貝新master的文件到原master重啟服務就可以了。
3、更新主服務器位置
假設原來從主機的啟動方式如下:
$ mongod --slave --source 192.168.35.106:10111
此時如果想更換主服務器的地址,可以通過下面的方式:
- 重啟mongod服務,不要加-slave 和 -source選項:$ mongod
- 啟動shell執行如下操作:
-
- > use local
- switched to db local
- >db.sources.update({host:"192.168.356.106:10111"},{$set:{host:"192.168.35.106:10112"}})
- 接著再重啟服務器:
- $ ./mongod --slave --source=192.168.35.106:10112
- $ # or
- $ ./mongod --slave