NoSQL的產(chǎn)生就是為了解決大數(shù)據(jù)量毒费、高擴(kuò)展性牺陶、高性能、靈活數(shù)據(jù)模型辣之、高可用性掰伸。但是光通過主從模式的架構(gòu)遠(yuǎn)遠(yuǎn)達(dá)不到上面幾點(diǎn),由此MongoDB設(shè)計(jì)了副本集和分片的功能怀估。
mongodb官方已經(jīng)不建議使用主從模式了狮鸭,替代方案是采用副本集的模式:
那什么是副本集呢?
由圖可以看到客戶端連接到整個(gè)副本集多搀,不關(guān)心具體哪一臺機(jī)器是否掛掉歧蕉。主服務(wù)器負(fù)責(zé)整個(gè)副本集的讀寫,副本集定期同步數(shù)據(jù)備份康铭,一但主節(jié)點(diǎn)掛掉惯退,副本節(jié)點(diǎn)就會選舉一個(gè)新的主服務(wù)器,這一切對于應(yīng)用服務(wù)器不需要關(guān)心从藤。我們看一下主服務(wù)器掛掉后的架構(gòu):
官方推薦的副本集機(jī)器數(shù)量為至少3個(gè)催跪,如果已經(jīng)有掛掉一個(gè)節(jié)點(diǎn),再掛掉一個(gè)夷野,剩下的最后一個(gè)不會自動(dòng)成為新的主節(jié)點(diǎn)懊蒸。
1、準(zhǔn)備3個(gè)虛擬機(jī):192.168.4.198悯搔,192.168.4.199骑丸,192.168.4.200,都下載并解壓好Mongo包。并分別在三個(gè)虛擬機(jī)上創(chuàng)建數(shù)據(jù)庫存放文件夾通危。 /home/weixla/dada/db
2铸豁、分別以副本集模式啟動(dòng)三個(gè)虛擬器的MongoDB服務(wù),
/home/weixla/mongodb-3.4.0/bin/mongod -dbpath /home/weixla/data/ --replSet TestReplicaSet
可以看到控制臺上顯示副本集還沒有配置初始化信息黄鳍。
3推姻、初始化副本集
登錄任意一臺客戶端(這里登錄198那臺的客戶端),切換到admin數(shù)據(jù)庫
定義副本集配置變量框沟,其中_id為上面定義的副本集名稱
初始化副本集rs.initiate(config)
服務(wù)端打印大量日志藏古,目的就是通過選舉策略選出主節(jié)點(diǎn)和副節(jié)點(diǎn)
在客戶端查看副本集狀態(tài)rs.status()
4、測試數(shù)據(jù)復(fù)制
在主節(jié)點(diǎn)插入一條數(shù)據(jù)
連接副節(jié)點(diǎn)進(jìn)行查詢
mongodb默認(rèn)是從主節(jié)點(diǎn)讀寫數(shù)據(jù)的忍燥,副本節(jié)點(diǎn)上不允許讀(更不能寫入)拧晕,需要設(shè)置副本節(jié)點(diǎn)可以讀
這里測試結(jié)果達(dá)到預(yù)期一樣,在副本節(jié)點(diǎn)數(shù)據(jù)進(jìn)行了同步梅垄。
5厂捞、測試故障轉(zhuǎn)移
首先停掉主節(jié)點(diǎn),這里會打印大量日志队丝,大概是重新選舉相關(guān)操作靡馁。
查看副本集節(jié)點(diǎn)
再查看其它兩個(gè)節(jié)點(diǎn),這里201(就是199机久,IP被占用了)保持為副節(jié)點(diǎn)臭墨,200卻成為了主節(jié)點(diǎn)。
目前看起來支持完美的故障轉(zhuǎn)移了
轉(zhuǎn):http://blog.csdn.net/vellin/article/details/53897827膘盖、http://blog.csdn.net/vellin/article/details/53994014