mongodb副本集常見問題


 

 

 

總有人問起配置ReplicaSet不成功,總結了一下基本上的可能性就幾種,檢查步驟如下:

假設三台機器的IP分別是

A: 192.168.1.2 a.test.com
B:192.168.1.3 b.test.com
C: 192.168.1.4 c.test.com

1. mongod有在運行嗎?

雖然這是個很低級的問題,但是還是要不厭其煩地說一句,請先檢查是否真的運行了mongod。

# ps awx | grep mongod
 7393 ?        Sl    42:32 /usr/bin/mongod -f /etc/mongod.conf <--正在運行的mongod進程
24663 pts/1    S+     0:00 grep mongod

2. bind_ip不正確

如果是從YUM源安裝,CentOS默認bind_ip配置為127.0.0.1,所以是絕對不可能從其他機器連上的。驗證辦法為:

netstat -pln | grep mongod

如果綁定地址為:0.0.0.0:27017或192.168.1.2(局域網IP):27017則沒有問題。

如需修改,編輯/etc/mongod.conf中

bind_ip=192.168.1.2

再重啟mongod即可。

注意:在生產環境下不建議使用bind_ip=0.0.0.0,因為這樣極易向公網暴露mongodb服務,造成不安全隱患。這也是為什么默認bind_ip是127.0.0.1的原因——讓配置人員必須關注一下這個配置。

3. 防火牆未打開端口

經過以上步驟后,在正常情況下在任意一台機器上應該可以連接其他兩台機器的27017端口。比如在A上時

mongo 192.168.1.3
mongo 192.168.1.4

應該都是可以順利連接的,如果不行,那應該檢查一下防火牆是否有在運作並阻止了你的訪問。

這是一個關於iptables的基本操作問題,請查閱iptables相關使用方法,在此不再贅述。

4. 使用域名添加成員時請注意

跟步驟3一樣的原因,因為任意兩台實例必須能夠互相連接,所以如果使用域名,應該確保使用到的域名在各個結點上都能夠正常解析。在本例中三個實例都必須能夠正常解析a/b/c.test.com到對應的機器

ping a.test.com
ping b.test.com
ping c.test.com

同時可見為什么不允許使用localhost/127.0.0.1作為地址添加進去,因為大家都會把localhost/127.0.0.1解析為自己,導致混亂。

5. keyfile配置問題

replica set成員必須使用同一個keyfile,內容可以隨自己意願。注意這個文件可以放在任意地方,但是權限必須是600,所屬用戶必須是啟動mongod的用戶

比如如果用service啟動mongod,則該文件應該屬於mongod:mongod;如果是用root用戶啟動,則該文件應該屬於root:root。配置錯誤的情況下是會在日志中看到一個錯誤的。

以上是近期遇到的常見情況,隨時補充。

 

6. 從庫都宕機后,不能提供服務了:

注意:在副本集的環境中,要是所有的Secondary都宕機了,只剩下Primary。最后Primary會變成Secondary,不能提供服務。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM