公司最近有一個項目因爲用戶擔憂一臺單機沒法承擔最多用戶量的使用,要求上應用集羣。咱們根據應用狀況設計了應用集羣架構。html
架構圖以下:前端
部署應用集羣的特色:node
1. 前端代理負載均衡redis
因用戶環境基礎架構採用虛擬化集羣平臺,服務器均採用虛擬機實現,因此設計時採用單臺Haproxy來實現。bash
前端選用haproxy:有一最大的特色HTTP第7層鍵康狀態檢查,與咱們實際須要一致,因常常有應用壓力大,應用沒法響應的狀況,正好經過這一個特性進行健康狀態檢查,保證用戶透明訪問。以前有采用haporxy的主備模式作雙機主備應用集羣。主備模式也是haproxy的一大特色。服務器
本方案是採用負載均衡模式採用source模式。架構
2. 應用服務器會話複製負載均衡
配置jboss 應用會話複製功能,保證用戶登陸會話三臺服務器共享。socket
3. 共享存儲空間ide
共享存儲空間是集羣應用的一個必備的功能,這裏採用nfs來實現。用來實現代碼與附件等數據一致。
4. haproxy配置要點文件記錄以下:
(1) 取消將日誌記錄在/var/log/messages目錄中
默認會也將haproxy日誌記錄在/var/log/message中,要去掉。
# vi /etc/syslog.conf local3.* /var/log/haproxy.log local0.* /var/log/haproxy.log *.info;mail.none;authpriv.none;cron.none;local3.none /var/log/messages
(2) haproxy日誌切割
haproyx日誌切割腳本,沒有現成的,就專門寫了一個日誌切割腳原本實現天天的日誌切割,加入到計劃任務中,必定要su root -c 強制root權限執行。若是要保留訪問日誌,能夠修改腳本實現。
#!/bin/bash # author: koumm # desc: # date: 2013-01-31 # version: v1.0 # modify: # cut haproxy log mv /var/log/haproxy.log /var/log/haproxy.log.bak if [ -e /var/log/haproxy.log.bak ]; then logrotate -f /etc/logrotate.conf chown nobody:nobody /var/log/haproxy.log chmod +x /var/log/haproxy.log fi sleep 1 if [ -e /var/log/haproxy.log ]; then rm -rf /var/log/haproxy.log.bak fi
(3) haproxy配置文件記錄
global log 127.0.0.1 local0 maxconn 65535 chroot /usr/local/haproxy uid 99 gid 99 stats socket /usr/local/haproxy/HaproxSocket level admin daemon nbproc 1 pidfile /usr/local/haproxy/haproxy.pid #debug defaults log 127.0.0.1 local3 mode http option httplog option httplog clf option httpclose #option dontlognull option forwardfor option redispatch retries 2 maxconn 2000 balance source #balance roundrobin stats uri /haproxy-stats stats refresh 10s contimeout 5000 clitimeout 50000 srvtimeout 50000 listen APP_Cluster 0.0.0.0:80 mode http option httpchk GET /test.html HTTP/1.0\r\nHost:192.168.0.110 server 192.168.0.111_node1 192.168.0.111:80 weight 3 check inter 2000 rise 2 fall 1 server 192.168.0.112_node2 192.168.0.112:80 weight 3 check inter 2000 rise 2 fall 1 server 192.168.0.113_node3 192.168.0.113:80 weight 3 check inter 2000 rise 2 fall 1 listen stats_auth 0.0.0.0:91 mode http stats enable stats uri /admin stats realm "LOGIN" stats auth admin:123456 #stats hide-version stats refresh 10s stats admin if TRUE