標籤:mongodb mongo mongodb replica set mongodb複本集
實驗性的搭建一個叢集做練手。
配置和環境:
win10(本機)和linux(CentOs7)內網伺服器各一台。
Mongodb3.07
目標:Replica set 複本集結構,一個primary一個slave,實現讀寫分離的同步資料集群。
一、本機和內網伺服器安裝mongo
可參考我的另外兩篇文章:
Mongodb在windows和linux平台的安裝配置(http://fykknd.blog.51cto.com/3175618/1716343)
Mongodb許可權管理(http://fykknd.blog.51cto.com/3175618/1716369)
二、叢集配置
一切開始前,有個準備工作,當時配置叢集時因為這個事兒耽誤了很長時間,百度google都沒結果,最後是問了一個營運的朋友才知道的。就是要先做一個key認證!!表示叢集間的機器是互相可靠的。
具體操作可參考官網說明,在文章末尾有連結地址。
# openssl rand -base64 741 > /usr/local/mongodb/mongodb-keyfile# chmod 600 /usr/local/mongodb/mongodb-keyfile
這兩步就是建立一個秘鑰檔案,用於叢集的機器使用。組建檔案後,把這個檔案複製到每個成員的對應目錄下,然後再啟動mongo。
作為叢集的一份子,啟動時要加一個Repl Set參數,就像一個團隊的名字一樣,表示是這個團隊的成員。先寫出啟動命令,然後進行說明。
# mongod --config /etc/mongo.conf --dbpath=/usr/local/mongodb/data/ --logpath=/usr/local/mongodb/logs/log.l --port=27017 --auth --fork --replSet rs0 --keyFile /usr/local/mongodb/mongodb-keyfile
這是命令列加參數方式啟動,也可以把參數寫在mongo.conf裡。(我這3.07版本是解壓直接用的,預設沒有設定檔,需要自己建立一個:/etc/mongo.conf)設定檔的寫法看官方文檔的說明(在文章最後連結裡),2.6以後的檔案寫法採用YAML方式。
參數說明:
--config 設定檔位置
--dbpath 資料存放位置
--logpath 日誌存放位置
--port 連接埠(可不寫)
--auth 以認證方式啟動
--fork 後台運行
--replSet 複本集名稱
--keyFile 秘鑰檔案位置
接下來配置叢集config變數(記得先進行認證操作,否則沒有許可權配置叢集,我使用root使用者進行的):
> config={ _id : ‘dbset‘, members : [ { _id : 1, host : ‘192.168.0.46‘ }, { _id : 2, host : ‘192.168.0.207:27017‘ } ]}
寫好config後,進行初始化:
> rs.initiate(config)
如果一切正常的話,可以用rs.status()查看目前叢集的狀態:
650) this.width=650;" src="http://s2.51cto.com/wyfs02/M02/76/77/wKioL1ZUE2XwQ54qAAA__mG3JXU242.png" title="rs.status" alt="wKioL1ZUE2XwQ54qAAA__mG3JXU242.png" />
狀態說明:
1.STARTUP:剛加入到複製集中,配置還未載入
2.STARTUP2:配置已載入完,初始化狀態
3.RECOVERING:正在恢複,不適用讀
4.ARBITER: 仲裁者
5.DOWN:節點不可到達
6.UNKNOWN:未擷取其他節點狀態而不知是什麼狀態,一般發生在只有兩個成員的架構,腦裂
7.REMOVED:移除複製集
8.ROLLBACK:資料復原,在復原結束時,轉移到RECOVERING或SECONDARY狀態
9.FATAL:出錯。查看日誌grep “replSet FATAL”找出錯原因,重新做同步
10.PRIMARY:主節點
11.SECONDARY:備份節點
添加或者刪除節點(需要在主節點上進行):
添加 rs.addArb("192.168.0.207");
刪除 rs.remove("192.168.0.207");
其實正常來說還應該有個仲裁節點,但目前伺服器數量不夠,所以嘗試用另一個外網機器做了下仲裁節點,於是遇到了修改config的配置問題。網上給的答案基本刪掉目前設定重新搞,其實有更簡便的方法,強行修改config配置(例如上面我沒有指定config中的priority參數,值是個整形。值越大越優先成為primary節點。前提是設定檔沒有指定誰是主節點,並且啟動參數裡也沒有--master參數)。例如新的config為:
> config={ _id : ‘dbset‘, members : [ { _id : 1, host :192.168.0.46, priority: 1 }, { _id : 2, host :192.168.0.207:27017, priority: 0 } ]}
此時rs.initiate(config)是無效的,需要執行:
> rs.reconfig(config);
那麼到底怎麼添加仲裁節點呢?很簡單:在config裡加一個節點,後面寫上arbiterOnly:true即可。比如:{_id:3, host:"192.168.0.207:27018", arbiterOnly:true},然後再重新reconfig即可。然而我並沒有成功,因為我是在207上啟動了兩個不同的連接埠類比的,但並未成功。附件貼上錯誤資訊,哪位大神指出下錯誤?感激不盡!
此外還可以查看叢集配置:rs.conf();
650) this.width=650;" src="http://s5.51cto.com/wyfs02/M02/76/77/wKioL1ZUFTrSzY3VAAAxHyPioE4357.png" title="rs.conf" alt="wKioL1ZUFTrSzY3VAAAxHyPioE4357.png" />
註:本文主要參考來源
mongoDB3.0.3 以上GUI 串連認證問題 http://www.bubuko.com/infodetail-984255.html
mongoDB 3.0 安全許可權存取控制 http://blog.csdn.net/gsying1474/article/details/47813059
淺析MongoDB使用者管理 http://www.jb51.net/article/53830.htm
mongo官網-key認證:https://docs.mongodb.org/manual/tutorial/enable-internal-authentication/
mongo官網-設定檔寫法:https://docs.mongodb.org/manual/reference/configuration-options/
mongodb強制一個成員為主:http://www.361way.com/mongodb-forced-primary/1704.html
Mongodb增加、移除Arbiter節點執行個體:http://www.jb51.net/article/59597.htm
本文出自 “技術成長點滴” 部落格,請務必保留此出處http://fykknd.blog.51cto.com/3175618/1716409
Mongodb的Replica Set 複本集叢集搭建