2014-10-03 305 views
1

我已經安裝MariaDB的加萊拉集羣,我已經測試過,並在以下服務器上工作正常: DB1 192.169.0.1 DB2 192.169.0.2 DB3 192.169.0.3HAProxy的狀態顯示DOWN

它們都運行在CentOS-6.5和MariaDB版本是10.0

我的目標是使用HAproxy來執行負載平衡。我已經安裝和一個單獨的服務器

db4 192.168.0.4 

與安裝在其上沒有集羣設置或MariaDB的,僅HAProxy的上配置HAProxy的。問題是,HAproxy似乎沒有工作,即進行負載平衡。它開始OK,我可以通過網絡界面訪問:

http://192.168.0.4:9000/haproxy 

但對於服務器的狀態表明他們下來,即使他們實際上是建立和運行在各自的機器上。該HAProxy的配置如下:

global 
log 127.0.0.1 local0 notice 
user haproxy 
group haproxy 

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

listen mariadb-cluster 
bind 0.0.0.0:3306 
mode tcp 
option mysql-check user haproxy 
balance roundrobin 
server db1 192.168.0.1:3306 check 
server db2 192.168.0.2:3306 check 
server db4 192.168.0.3:3306 check 

listen webinterface 
bind 0.0.0.0:9000 
mode http 
stats enable 
stats uri /haproxy 
stats realm Strictly\ Private 
stats auth admin:password 

DB1,DB2,DB3和DB4是每個服務器的主機名剛。所以當我在第一臺服務器上運行命令#hostname時,它會顯示db1。

+0

你打開3306端口的HAProxy的服務器上? – zypro 2016-04-26 08:48:18

回答

1

我相信你已經檢查了日誌,在那裏你可以看到連接進入和正在或未被引導到它們應該連接的節點/服務器。

我不知道它是否是一個錯字,但我相信你已經包含了db4(haproxy機器)作爲節點,對吧?它應該是DB3)

檢查,如果你還可以從HAProxy的計算機訪問端口3306到每個節點分貝

如果沒有,請檢查您是否對檢查過程中定義的HAProxy的用戶有mysql的權限。如果沒有,請登錄到您的節點服務器,然後:

mysql> GRANT USAGE ON *.* TO 'haproxy'@'%'; 

(爲安全起見,你應該約束「%」到HAProxy的運行IP地址(ES))

我有一個類似配置添加到您的設備上,但增加了選項,可以爲每個節點添加節點權重和最大連接數。我更喜歡用「leastcon」而不是「round robin」,所以請評估它是否符合你的目的。

haproxy.cfg

global 
    log   127.0.0.1 local0 
    chroot  /var/lib/haproxy 
    pidfile  /var/run/haproxy.pid 
    maxconn  512 
    user  haproxy 
    group  haproxy 
    daemon 
    stats socket /var/lib/haproxy/stats mode 666 

defaults 
     log  global 
     mode http 
     option tcplog 
     option dontlognull 
     retries 3 
     option redispatch 
     maxconn 1024 
     timeout connect  3s 
     timeout client  50s 
     timeout server  50s 
     timeout check  10s 

listen website_cluster 0.0.0.0:3306 
     mode tcp 
     balance leastconn 
     option tcpka 
     option httpchk 
     option mysql-check user haproxy 
     stick store-request src 
     stick-table type ip size 200k expire 30m 
     server db1 192.168.0.1:3306 weight 40 check port 3306 inter 5000 rise 1 fall 3 maxconn 120 
     server db2 192.168.0.2:3306 weight 30 check port 3306 inter 5000 rise 1 fall 3 maxconn 75 
     server db3 192.168.0.3:3306 weight 30 check port 3306 inter 5000 rise 1 fall 3 maxconn 75 

在MariaDB的站點也有一個教程,也可能幫助你獲得通過:here

0

我也遇到了這個問題,只有將近一整天發現HAPROXY有2種後端平衡/健康檢查模式。第4層檢查在OSI第4層上運行,而第7層在應用層上運行。我使用的是option mysql-check,它檢查第7層,並且需要mysql-client安裝在HAPROXY服務器/節點上。我沒有HAPROXY機器/容器(碼頭)上的任何Mysql客戶端軟件包。然後我將選項檢查轉換爲option tcp-check它工作正常。這裏是我的haproxy.cfg

global 
    log haproxy-logger local0 notice 
    fuser haproxy 
    group haproxy 
    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 mysql-check user haproxy_check 
    option tcp-check 
    balance roundrobin 
    server mysql1 mysql1:3306 check 
    server mysql2 mysql2:3306 check weight 2 
listen mysql-clusterstats 
    bind 0.0.0.0:8080 
    mode http 
    stats enable 
    stats uri/
    stats realm Strictly\ Private 
    stats auth status:mypass 

全碼最後通過將其固定到4層負載均衡

+0

我有完全相同的問題,並且從mysql-check到tcp-check的更改確實解決了問題。但是我的配置與你的配置有點不同,我的haproxy與mariadb服務器在同一個節點上運行,其中mysql客戶端也被安裝了,所以對我來說原因還不清楚。順便說一句,正如我測試,如果我根本不啓用檢查,問題也會消失(儘管禁用健康檢查在生產中不是個好主意)。 – bruin 2016-12-20 04:04:15

+0

做了更多的測試。爲了使用mysql-check,我的問題是我沒有爲haproxy_check帳戶設置空密碼。設置密碼後,mysql-check也可以正常工作。值得注意的是,我還遇到了有關mysql.user表複製的另一個問題,即當我從一個節點創建haproxy_check帳戶時,它不會自動複製到其餘節點。事實證明,我需要使用不同的SQL語句來完成此操作,或者至少驗證所有節點上的帳戶信息都是相同的。經測試,以下兩個命令是「可複製的」: – bruin 2016-12-20 07:50:09

+0

1. create user:CREATE USER [email protected]'10.0.0.%'; 2.授予權限:授予使用權\ *。\ *到'haproxy_check'@'10.0.0.%'IDENTIFIED BY''使用授予選項; FLUSH PRIVILEGES;順便說一下,我在CentOS 7.2上使用了MariaDB v10.1.19和HAProxy v1.5.14。 – bruin 2016-12-20 07:51:00