MYSQL 中間件 爲何選擇 PROXYSQL VS MHA

MYSQL 的中間件其實也很多,但實際上用的比較廣的(非分庫分表)的選擇點基本上會落到 PROXYSQL 和 MyRouter 兩個中間件中,1使用的人數多,2 豐富的文檔和至關多的案例mysql


實際上proxysql 能夠算是一個支持普遍的中間件,下面是其支持的產品線sql


本着沒有使用就沒有發言權的原則,如下內容僅僅是針對proxysql 中間件的使用的一些特色和優勢來闡述
數據庫

從官方網址 https://proxysql.com/  下載最新的 proxysql rpm包後,直接yum -y install 包 安裝後。同時也要保證你的proxysql 主機安裝了MYSQL的客戶端。後端

啓動proxysql  service proxysql start    , 對於proxysql 的配置基本上分爲如下幾個部分安全


1 MHA 方式服務器


1  登錄到PROXYSQL 的管理端 mysql -u admin -padmin -h 127.0.0.1 -P6032 --prompt='Admin> ' 
微信

2  進入後,實際上看到的databases 和咱們常規理解的是有區別的,PROXYSQL是架設在業界使用最普遍的sqllite 數據庫基礎上的產品,雖然支持MYSQL的客戶端,語法,但實際上後臺數據的存儲都是基於sqllite數據庫的。網絡

3  配置簡單,針對一個需求簡單的MHA,如何再也不使用VIP而是經過PROXYSQL來進行對應用透明的切換。架構

   3.1  輸入MySQL的主從節點   mysql_servers性能

   3.2  配置用戶               mysql_users

   3.3  配置檢測切換方式  mysql_replication_hostgroups


作完這幾部,一個基於MHA 最簡單的PROXYSQL 方式的集羣就完成了。


優勢:去掉了VIP 的遷移的腳本,相關的穩定性大幅度提升,總體的架構的複雜性也下降了。


原理:

PROXYSQL 經過判斷默認 write組的連通性,咱們能夠作一下相關的實驗來證明在MHA的狀態下


1  到底proxysql 是怎麼來判斷數據庫到底在線仍是不在線

2  到底怎麼來判斷哪一個是讀庫,或者當庫變爲能夠寫的庫時,進行相關的訪問


答案就在下圖, proxysql  在 1- 2秒會經過查看當前服務器的read_only 來判斷當前的服務器是否應該在寫的組,而且在1 分鐘內會對所在的宿主服務器進行一個鏈接性的判斷。




咱們如下圖做爲一個例證,目前101的read_only 設置爲ON,而102 的 read_only 設置OFF ,也就是目前有兩臺MYSQL  主 102 從 101



咱們能夠將101 的 read_only 設置爲OFF 看看會出現什麼效果,能夠看到寫組中的 600組,多了101 這臺機器。

若是出現這樣的狀況就可能會引發數據不一致的狀況,因此要保證在同一個時間只能有一個寫庫,只能有一個機器的 read_only = off 其餘的集羣的機器的read_only必須是on.


上方是官方文檔,描述了

1 connect  鏈接的後端的成功和失敗的,信息將存儲在 mysql_server_connect_log 中

select * from mysql_server_connect_log;


2 查看proxysql 與 mysql之間的鏈接的狀況,經過 connect_success_time_us來看當前的網絡連通的狀況(能夠反映一部分)

下面是一些相關的關鍵的與監控有關的基本參數

1  mysql-monitor_enabled 是否打開監控

2  mysql-monitor_connect_timeout   鏈接超時的時間 600毫秒

3  mysql-monitor_ping_max_failures   嘗試鏈接失敗最大容忍數

4  mysql-monitor_ping_timeout 鏈接超時時間



判斷一個節點是否存活,以上面兩個方式來決定,因此若是你的網絡延遲,或者某方面不穩定,能夠調整某些參數已更適應與當前的設定。

5  mysql-monitor_read_only_max_timeout_count 設定當前read_only最大的超時的次數

6  mysql-monitor_replication_lag_interval 監控主從之間的數據傳輸差別,若是在設置了讀寫分離,這會讓讀寫分離中若是主從差別太大的狀況下,禁止將查詢發送到延時較大的物理庫中。


說到這裏,必定會有同窗問一個問題,我不怕主機宕機,或者MYSQL服務沒法提供服務,我怕的是

1  因爲網絡緣由,形成主庫從庫網絡沒法進行通訊,形成切庫,而後網絡又恢復了,此時就會出現一個問題,會有兩個機器目前存在 read_only = off 的狀態。那個人數據是否在繼續寫入的時候回不安全。


2  因爲主庫的緣由,OOM 切庫,而後主庫又起來了,此時也是 read_only = off  > 1



咱們來看一下結果如何。


操做步驟

1  斷開primary 的網絡  102

2  等待切庫  

3  切庫完畢  主庫 101

4  恢復primary 網絡  101  102  read_only = off

5  ??????  寫入數據 到底會怎樣


圖1 的狀況是 5  鏈接到PROXYSQL 而後刪除了一個數據庫



結果若是是 101 和上圖狀況一致,則說明proxysql 解決了同時出現兩個read_only = off 的狀況


出現其餘狀況,則說明出現問題。


從上圖能夠看到,結果是正常的也是咱們想要的。


題目中的新想法是來自於proxysql 自己的一些監控和信息,若是將proxysql的一些監控信息利用好,則對於總體監控MHA 集羣有部分幫助,若是配合ZABBIX 則能夠繪製出一些有關的鏈接性能或其餘的一些圖形。



本文分享自微信公衆號 - AustinDatabases(AustinDatabases)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索