由於數據存儲使用MongoDB集群,在對外訪問的時候,地址是Mongos的地址,在使用的過程中沒有發現任何問題,配置如下:
<mongo:mongo host="${mongodb.hostname}" port="${mongodb.port}"> <mongo:options connections-per-host="${mongodb.port}" threads-allowed-to-block-for-connection-multiplier="${mongodb.threads-allowed-to-block-for-connection-multiplier}" connect-timeout="${mongodb.connect-timeout}" max-wait-time="${mongodb.max-wait-time}" auto-connect-retry="${mongodb.auto-connect-retry}" socket-keep-alive="${mongodb.socket-keep-alive}" socket-timeout="${mongodb.socket-timeout}" slave-ok="${mongodb.slave-ok}" write-number="${mongodb.write-number}" write-timeout="${mongodb.write-timeout}" write-fsync="${mongodb.write-fsync}" /> </mongo:mongo>
但是,經過測試幾輪性能測試以后,發現在大並發的時候Mongos機器負載過高,而其他存儲Mongod機器負載很小,於是讓我們解決該問題。
經過幾番分析,原來由以下原因:
1、Mongos、config server、mongod三個進程都部署在一台機子。
2、沒有考慮使用多個Mongos來均攤外部請求。
於是,另外部署幾個Mongos,使用同一個配置庫,問題解決,具體配置如下:
<mongo:mongo id="mongo" replica-set="${mongodb.replica-set}"> <mongo:options connections-per-host="${mongodb.port}" threads-allowed-to-block-for-connection-multiplier="${mongodb.threads-allowed-to-block-for-connection-multiplier}" connect-timeout="${mongodb.connect-timeout}" max-wait-time="${mongodb.max-wait-time}" auto-connect-retry="${mongodb.auto-connect-retry}" socket-keep-alive="${mongodb.socket-keep-alive}" socket-timeout="${mongodb.socket-timeout}" slave-ok="${mongodb.slave-ok}" write-number="${mongodb.write-number}" write-timeout="${mongodb.write-timeout}" write-fsync="${mongodb.write-fsync}" /> </mongo:mongo>
其中,replica-set格式:ip1:port,ip2:port,...