MongoDB加索引DB崩潰的問題


項目原因,最近在對MongoDB進行數據存儲優化
 
原有問題:
日志數據量比較大,存到一張表,需要手工定時刪除數據,且刪除數據時間按天算
數據會定時打包到HDFS,查詢時間很慢,需要優化
機器內存占用過大,副本集主節點內存占用超過90%,其他節點超過80%
 
解決方法:
對日志進行按天寫表,定時刪除歷史表
對日志表增加TTL索引,定時刪除過期數據
一次創建自動增加索引,索引查詢
 
 
本次問題來自增加索引,數據量大表的,增加索引方式,應該為后台增加[background: true],TTL TimeToLive 創建方式為增加expireAfterSeconds,單位為秒
語句如下:
 db.KafkaFpInfo.createIndex({"TrackTime":1},{background: true,expireAfterSeconds: 1728000})
1、執行語句后,發現主節點,已經看到索引生成進度日志,服務器內存正常,CPU從100%升級到300%左右;
2、看到主節點索引生成完成后,開始同步從節點
3、此時,主節點日志報錯,顯示兩個從節點心跳丟失;三副本,兩個節點丟失,副本集進入恢復模式,廢了
4、查看從節點機器進程,發現兩台MongoDB進程已經崩潰;嘗試啟動服務,發現跑索引,跑到10%時,服務返回超時
 
Job for mongodb.service failed because a timeout was exceeded. See "systemctl status mongodb.service" and "journalctl -xe" for details.

查看明細 "systemctl status mongodb.service"
mongodb.service start operation timed out. Terminating.
mongodb.service stop-final-sigterm timed out. Killing.

 

5、查看索引只跑到了10%,猜測是原因是索引未完成,就超時了,嘗試對服務增加超時配置;
TimeoutSec=0     # 單位是秒,0為不限制
 
cat /etc/systemd/system/mongodb.service
[Unit]

Description=mongodb_service
After=network.target remote-fs.target nss-lookup.target
[Service]
User=mongodbuser
Group=mongodbuser
# (open files)
LimitNOFILE=64000
Type=forking
ExecStart=/data/mongodb/mongobin/bin/mongod --config /etc/mongodb.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/data/mongodb/mongobin/bin/mongod --shutdown --config /etc/mongodb.conf
PrivateTmp=true
TimeoutSec=0     # 單位是秒,0為不限制

[Install]
WantedBy=multi-user.target

 

6、再次重啟從節點mongoDB服務,日志顯示索引生成中,直到報索引生成100%,啟動服務命令未再報超時,服務啟動成功。
 
正常情況下,該問題應該是解決了;但又有的如下的報錯:
“could not find member to sync from” 

 

猜測可能是同步出問題了。
嘗試關閉一個從節點的mongoDB服務,刪除該從節點的上數據。讓數據重新同步過來。
因數據比較大,啟動后IO持續比較高。  [用iotop 查看磁盤IO]
 
經過漫長的幾小時,這個從節點終於恢復了。
 

 

 


免責聲明!

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



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