oneproxy-monitor支持動態更新配置,保證前端業務不被中斷

    oneproxy系列產品在被使用的過程當中,有部分同志要求增長在線更新配置的要求。爲了知足這個要求,通過研究在oneproxy-monitor上面實現了在線更新配置的要求,從而保證前端業務不被中斷更新配置或者重啓的效果。下面是在線更新配置的活動圖。本項目中實現的在線更新配置的方法主要利用Linux的reuseport功能,而Linux的reuseport功能須要內核版本的支持。內核版本至少須要在2.6.32-431版本以及之上。若是內核版本不支持reuseport,則若是已經存在運行的oneproxy,則再次啓動的時候會報錯"port already in use"的錯誤,而且新啓動的程序會退出,舊的程序不會受到影響。前端

    一樣若是配置文件,配置的有問題,在加載階段解析錯誤,則一樣新程序退出。經過下面的活動圖能夠得知,本方法有兩個關鍵點:1. 必須存在pid文件。2. 鏈接到oneproxy上面的鏈接必須在合理的時間退出。git

1. pid文件

    爲了在啓動的時候判斷是否存在老的進程,本方法是經過pid文件來判斷的,pid文件的命名格式爲:xxxx_oneproxy_pid.pid.其中xxxx是進程id,這個由程序自動獲取而且增長到配置中指定的pid文件名的前面。例如:進程的id爲:6543, 配置文件中經過pidfile選項配置pid文件的名稱爲oneproxy_pid.pid,則最後生成的pid文件名稱爲6543_oneproxy_pid.pid.文件中保存的是6543.github

2. oneproxy退出時機

 爲了避免轉移舊oneproxy上面已經存在的鏈接,就不能直接退出oneproxy,oneproxy必須等到accept到的客戶端的鏈接都作完後才退出。這個就須要客戶端保證每一個鏈接的有合理的退出時機,不然oneproxy會一直等待,知道鏈接退出爲止。固然在等待中的oneproxy是不會處理新鏈接的。由於在接收到信號的時候已經中止了accept客戶端的鏈接。sql

 

3. 功能的使用

oneproxy_monitor中已經實現此功能,使用此功能不須要額外的配置,只須要在與老進程所在的相同目錄下啓動便可。多線程

4. 測試狀況

    目前在oneproxy_monitor框架下面開發的oneproxy-for-sqlserveroneproxy-for-postgresql進行測試。經過jdbc編寫的多線程短鏈接的方式測試了oneproxy-for-sqlserver, 經過pgbench每次創建鏈接的方式測試了oneproxy-for-postgresql.框架

    pgbench和jdbc端都感受不到中間件已經重啓。sqlserver

相關文章
相關標籤/搜索