1.MongoDB引入讀寫分離之後,重啟服務時間變長,可以看到如下列印:
your mercy for graceful operations on workers is 60 seconds
搜尋相關資料發現可以通過設定最大逾時時間來降低服務重啟時間,uWSGI預設重新載入逾時時間是60s,可以通過設定worker-reload-mercy來改變,我們先來看看uWSGI官方文檔描述:
reload-mercy
argument: required_argument
parser: uwsgi_opt_set_int
help: set the maximum time (in seconds) we wait for workers and other processes to die during reload/shutdown
worker-reload-mercy
argument: required_argument
parser: uwsgi_opt_set_int
help: set the maximum time (in seconds) a worker can take to reload/shutdown (default is 60)
reload-mercy是控制整個uWSGI執行個體的逾時
worker-reload-mercy是控制單個worker的逾時
因此把uWSGI啟動的設定檔加上:
worker-reload-mercy = 1
雖然服務重啟時間變短了,但是發現部署服務的時候,有些worker會無法啟動,或者隨著時間推移worker無法重啟,進程都死掉。後來通過分析uWSGI配置參數,找到lazy-apps這個參數,看看官方文檔描述:
lazy-apps
argument: no_argument
parser: uwsgi_opt_true
help: load apps in each worker instead of the master
載入apps的時候都是各個worker自己負責載入,而不是通過master fork出來,添加此參數之後,服務重啟時間變長的問題也沒有了,服務可以很快進行重啟,各個worker也不會出現死掉的情況。到目前為止也沒搞清楚具體為什麼,有清楚的同學告知一聲。
2.MongoDB複製集串連的時候官方文檔描述只需要填寫一個MongoDB執行個體地址即可,但實測發現這種方式存在一個問題,如果填寫的MongoDB執行個體不可用,此時重啟服務,服務就無法串連到MongoDB複製叢集,因此,建議串連複製叢集的時候,多寫幾個MongoDB執行個體地址,盡量寫全,這樣即使有執行個體不可用了,也可以通過其它執行個體拿到整個叢集的資訊
註明:MongoDB Client用的是pymongo2.7版本