2016-08-16 125 views
0

我正在嘗試爲3個不同節點的percona數據庫配置ha-proxy。我的配置變爲如下 -使用haproxy進行percona負載均衡

backend mysql_backend 
mode tcp 
option tcplog 
balance leastconn 
option httpchk default-server port 9200 inter 5s downinter 10s rise 3 fall 2 maxconn 256 
server percona1 percona-1:3306 check port <port_num> inter 12000 rise 3 fall 3 maxconn 450 
server percona2 percona-2:3306 check port <port_num> inter 12000 rise 3 fall 3 maxconn 450 backup 
server percona3 percona-3:3306 check port <port_num> inter 12000 rise 3 fall 3 maxconn 450 backup 

在上述結構中,*maxconn 450*指定將被髮送到這個服務器1即percona1併發連接的最大數目。現在有趣的事情在我心中彈出,如果

  1. 連接數達到450,另一個要求呢?將451st請求排隊或將它轉發到percona2/percona3(這是一個備份服務器,如果percona1失敗,但是這裏percona1沒有失敗但達到極限)

  2. Percona1(my.conf)配置比如它一次可以處理多達250個連接,但是從代理服務器,它可以像代理服務器中配置的那樣獲得250個以上的450個連接。

我的問題是在上述情況下會發生什麼?

我已經閱讀文檔,但是我知道任何明確的信息。幫助將不勝感激。

回答

1

我猜你正在談論Percona XtraDb集羣,因爲以這種方式使用HAproxy和3個獨立的MySQL實例會導致災難(如果它們是單獨的實例,現在重新架構!!)。下面是你的問題的答案:

  1. 如果配置maxconn爲450,451st連接將排隊並等待打開連接到服務器。 (documentation非常清楚)*需要注意的一點是您應該檢查HAproxy進程的ulimit -n以確保它具有超過1350(450 * 3個節點)的連接限制*
  2. 我是不能完全肯定我理解的問題,但如果你指的是max_connections參數mysqld那麼你應該設置參數比HAProxy的maxconn值稍高爲特定的服務器來避免超時
+0

非常感謝@jtobs爲您的關注。是的,我說的是Percona XtraDB Cluster(服務器版本:5.6.29)。 1. Haproxy的全局部分定義爲4000,因此這不是問題。我的問題是node1上451st連接請求會發生什麼情況,因爲node2和node3設置爲** backup **服務器,並且node1已達到其限制並且無法接受更多請求。第451個連接將排隊,將被轉發到node2 ??對於問題2 - 我指的是mysqld的_max_connections_參數。 – RIPAN

+0

和@jtobs我當然想知道後果。如果我像上面那樣進行配置(所有這些都是單獨的實例),會出現什麼問題。請在此問題上進行教育。 – RIPAN

+0

@ripan我想不出爲什麼你將它們設置爲「備份」的很多原因。如果你的工作主要是讀取,那麼使用所有可用的資源。你還指定了一個「平衡」規則,但是如果只有一個節點被設置爲w/o備份,那麼負載均衡就毫無意義。關於第451連接,它將排隊等待server1,不會轉發給其他人。另外,除非你指定'allbackup',否則只使用1個備份服務器。關於後果的更大談話,本論壇不是爲此目的設計的;我會建議測試或聘請專家。祝你好運!! – jtobs