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