Mysql

錯誤 2006 (HY000): MySQL 伺服器已消失… (HaProxy / Galera)

  • October 21, 2015

我在一個執行良好的多主設置中設置了一個由 3 個 MariaDB 伺服器組成的集群。我為 HaProxy 添加了第四台伺服器來進行負載平衡和循環,這樣我們就可以有一點冗餘,這也可以工作,除了 1 個問題。

我登錄到執行以下查詢的 HaProxy 伺服器上的 MySQL 客戶端:

show variables like 'server_id';

我得到了結果,但是如果我等待 5 秒或更長時間並再次執行查詢,我會收到以下錯誤:

ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    52
Current database: *** NONE ***

在那之後,我得到了一個不同的 server_id 的結果,這表明負載平衡正在工作。這導致的問題是,當我嘗試從我的 Spring/Java 應用程序連接時,我可以在短時間內執行查詢並且連接斷開。我想如果我可以在 HaProxy 伺服器上解決它,那將解決我遇到的其他問題。

編輯:添加 HAPROXY.CFG

global
   log 127.0.0.1 local0 notice
   chroot /var/lib/haproxy
   pidfile /var/run/haproxy.pid
   user haproxy
   group haproxy
   maxconn 4096
   daemon

defaults
   log global
   retries 2
   timeout connect 3000
   timeout server 5000
   timeout client 5000

listen mysql-cluster
   bind 0.0.0.0:3306
   mode tcp
   option tcpka
   option mysql-check user haproxy_check
   balance roundrobin
   server mysql-1 192.168.10.241:3306 check inter 1000 rise 3 fall 1
   server mysql-2 192.168.10.242:3306 check inter 1000 rise 3 fall 1
   server mysql-3 192.168.10.243:3306 check inter 1000 rise 3 fall 1

listen stats
   bind 192.168.10.211:8080
   mode http
   stats enable
   stats uri /
   stats realm Strictly\ Private
   stats auth USER:PASSWORD

對於空閒的長時間執行的會話,例如mysql在命令行上執行,您的timeout clienttimeout server太短了。

對於訪問數據庫的 Web 伺服器來說,它們可能沒問題,因為連接只在需要時打開,並且每個頁面載入都會創建一個新連接。

要讓連接保持打開狀態 10 分鐘,請更改

timeout server 5000
timeout client 5000

timeout server 10m
timeout client 10m

如果你願意,你可以走得更高。我有一個 7 小時超時的 RDS 集群,它工作得很好。

文件有更多關於超時客戶端超時伺服器和用於時間說明符的簡寫的詳細資訊。

引用自:https://serverfault.com/questions/730403