Mysql
錯誤 2006 (HY000): MySQL 伺服器已消失… (HaProxy / Galera)
我在一個執行良好的多主設置中設置了一個由 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 client
和timeout server
太短了。對於訪問數據庫的 Web 伺服器來說,它們可能沒問題,因為連接只在需要時打開,並且每個頁面載入都會創建一個新連接。
要讓連接保持打開狀態 10 分鐘,請更改
timeout server 5000 timeout client 5000
到
timeout server 10m timeout client 10m
如果你願意,你可以走得更高。我有一個 7 小時超時的 RDS 集群,它工作得很好。