a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 數(shù)據(jù)庫 > MongoDB > 正文

Mongodb 副本集搭建問題總結(jié)及解決辦法

2020-10-29 18:47:49
字體:
供稿:網(wǎng)友

Mongodb 副本集搭建問題總結(jié)及解決辦法

Mongodb數(shù)據(jù)庫的副本集是由多臺服務器組成,基中一臺是主節(jié)點,其它為從節(jié)點,如果主節(jié)點宕機就自動切換到任意一個從節(jié)點。如果以前的主節(jié)點修復完成和正常運行就自動變成從節(jié)點,從節(jié)點不能查詢數(shù)據(jù)。也可以在一臺服務器裝多個Mongodb端口不一樣。

在我以往的認知中,一個系統(tǒng)一旦正式上線,多半不會輕易的遷移服務器,尤其是那種涉及到多個關(guān)聯(lián)應用,涉及到多臺硬件服務器的系統(tǒng),因為這種遷移將是牽一發(fā)而動全身的。

但是,卻仍然有這種情況存在,就如我這幾天主要負責的事,就是一個系統(tǒng)的全部服務器遷移中的部分機器遷移,還有一部分由別人負責。

這個系統(tǒng)涉及到flume數(shù)據(jù)采集,storm數(shù)據(jù)分析,rabbitmq消息分發(fā),ehcache緩存提升系統(tǒng)性能,MongoDB副本集存儲數(shù)據(jù),tomcat管理系統(tǒng)應用等,架構(gòu)基本如下:

而這里我主要負責的是rabbitmq、tomcat、ehcache、mongodb,這里邊tomcat、ehcache的安裝和配置都比較簡單,只是rabbitmq需要依賴于erlang。而erlang又需要依賴一些其他的東西,這些東西需要root權(quán)限執(zhí)行yum,而我們沒有root權(quán)限,于是稍微花了一點點功夫。

除此之外,mongodb副本集的再次搭建也稍微遇到了一點點問題,不過好在一切還是按照預料中發(fā)展的,以前沒遇到過的問題也通過經(jīng)驗猜想完美解決。

之所以mongodb副本集搭建會遇到一些問題,大部分原因是因為這次并非親自動手,而是由所帶的新人操作。
首先,按照我給的文檔他一步步的操作下去,結(jié)果在端口上,不知道是因為習慣還是因為什么,他所設置的端口并不是我們要求的端口。

那么這時候當我要求他改成要求的端口時,他有些茫然,不知道是應該把所有配置刪了重配,還是要怎樣。

由于時間關(guān)系,于是我給他提供了一個方案,就是直接使用配置優(yōu)先級的方式改掉端口。之前我寫過的副本集搭建的文檔中應該有說過優(yōu)先級怎么改,大體上是下邊三步:

config=rs.conf()config.members[0].priority=2rs.reconfig(config)

那么根據(jù)這個,我們設想的改端口應該是下邊這樣(下邊ip和端口只是隨便假設的,生產(chǎn)環(huán)境自然不能隨便透漏):

config=rs.conf()config.members[0].host="192.168.117.88:37017"rs.reconfig(config)

但是結(jié)果呢,在第三步的時候拋出異常,遺憾的是當時只為了解決問題而沒有截圖,忘記具體是什么異常了,但大體意思是說這個端口的成員不存在。
于是,我又給他提供了第二個方案,那就是先把三個成員中非主服務的任意一個從成員中刪除:

rs.remove("ip:port")

然后把這臺機的端口改為我們需要的37017,之后再使用增加成員的命令添加進來:

rs.add("ip:port")

然后就這樣操作三次后,三臺服務器的端口都成功修改成要求的端口。

這個過程中,當修改到主服務的時候,因為一開始設置了最高優(yōu)先級,因此需要把另外一臺先設置成更高的優(yōu)先級操作。
問題就這樣解決了,只不過事后我又想了想,似乎這種方案并非是最優(yōu)最簡潔的,因為當時沒有細想第一種方案中那個問題的原因,后來一想,多半是因為那臺機還是原端口沒有被重啟。

如果我們先把非主服務機器的端口都改好重啟,那么再次用第一種方案進行應該也是可行的,而且還會比第二種方案簡單,有機會了一定要試試。

本以為這樣就可以了,然后沒想到的是,當我們都遷移完成后,被告知那些機器都是測試服務網(wǎng)段的,要改成生產(chǎn)網(wǎng)段。
于是乎,所有的機器ip全部變了,以至于我們的mongodb副本集又要重新配置。

但是這一次比較麻煩的是,之前那次改端口是因為我至少可以保證有兩臺機還是正常運行的,可以操作rs命令,但是這一次ip一變,我三臺機都無法正常成為主服務,以至于rs命令失效。

幾番折騰,始終沒有想出好的方案,于是只好把data目錄下的內(nèi)容盡數(shù)刪除,然后真正的重新配置一遍。
然而,在這位新手的操作下,配置的過程中,把本該是如下的命令:

config={_id:”reptest”,members:[{_id:0,host:”192.168.0.160:57017”},{_id:1,host:”192.168.0.211:57017”},{_id:,host:”192.168.0.213:57017”}]}rs.initiate(config)

弄成了這樣:

config={_id:”reptest”,members:[{_id:0,host:”192.168.0.160:57017”},{_id:1,host:”192.168.0.211:57017”},{_id:,host:”192.168.0.213:57017”}]}rs.initiate()

也就是說這里他雖然給config賦值了,但是再加載的時候竟然沒有使用,這也怪了忘了告訴他之前發(fā)現(xiàn)的一個問題。

通常我們在window系統(tǒng)上操作Linux上的應用,都會使用crt或者putty這些工具,這兩個工具各有優(yōu)劣,而我發(fā)現(xiàn)當我們進入mongo shell中操作時,這兩個工具是有區(qū)別的,使用putty就可以回退,而crt就不能再mongodb shell中回退。

因此當他敲完rs.initiate(),想要回到括號里加上config時,已經(jīng)沒了回頭路,只能硬著頭皮回車。

而這時候,rs.initiate()只能執(zhí)行一次,接下來和我文檔中的操作不一樣了,又該怎么辦呢?

經(jīng)過上一個問題,這個問題貌似就很好解決的,怎么辦呢,我覺得還是可以使用rs.add和修改配置的方式解決,然后把這個想法告訴他,他照此操作后,果然一次搞定!

好了,這次的兩個問題基本就這樣解決了,不知其他朋友們,是否對這種情況還有更好的解決方案?歡迎留言解惑。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 日韩日韩日韩日韩日韩日韩日韩 | 亚洲精品一区二区三区中文字幕 | 在线免费观看成人 | 日本高清视频网站www | 涩涩片影院 | 久久精品国产亚洲精品 | 午夜艹| 精品久久香蕉国产线看观看亚洲 | 欧美一区二区三区在线视频 | 欧美久久久久久 | 91在线视频免费观看 | 一区二区精品在线 | 免费的黄色毛片 | 一区在线播放 | 亚洲精品电影在线观看 | 日韩欧美在线看 | 国产午夜精品一区二区 | 青青草一区二区 | 黄色网址免费大全 | 免费一区 | 国产精品久久久久久久久久久久久久 | 国产精品精品视频一区二区三区 | 亚洲二区在线观看 | 中文在线播放 | 性视频黄色 | 成人久久18 | 亚洲毛片在线 | 国产精品免费av | 国产69精品久久久久观看黑料 | 99日韩 | 男女精品网站 | 日韩中文字幕在线观看 | 日韩精品www| 人人射人人草 | av大片| 日韩不卡 | 国产亚洲欧美一区二区三区 | 四虎永久免费在线 | 精品91在线视频 | 日本电影黄色 | 欧美日韩一区二区三区视频 |