haproxy 高可用(並使用shell寫啟動腳本)
本次使用haproxy僅測試web端的高可用以及負載均衡,存在的問題是haproxy是單點,所以還需要借助keepalived對haproxy高可用,下次說明。
服務器:
*.*.*.*:haproxy
兩臺 http
需要掌握的是:
1.高可用和負載均衡;
2.系統日誌rsyslog;
3.動靜分離
一:haproxy簡介:
HAProxy提供高可用性、負載均衡以及基於TCP和HTTP應用的代 理,支持虛擬主機,它是免費、快速並且可靠的一種解決方案。HAProxy特別適用於那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。HAProxy運行在當前的硬件上,完全可以支持數以萬計的並發連接。並且它的運行模式使得它可以很簡單安全的整合進您當前的架構中, 同時可以保護你的web服務器不被暴露到網絡上。
HAProxy的優點:
1、HAProxy是支持虛擬主機的,可以工作在4、7層(支持多網段);
2、能夠補充Nginx的一些缺點比如Session的保持,Cookie的引導等工作;
3、支持url檢測後端的服務器;
4、它跟LVS一樣,本身僅僅就只是一款負載均衡軟件;單純從效率上來講HAProxy更會比Nginx有更出色的負載均衡速度,在並發處理上也是優於Nginx的;
5、HAProxy可以對Mysql讀進行負載均衡,對後端的MySQL節點進行檢測和負載均衡,不過在後端的MySQL slaves數量超過10臺時性能不如LVS;
6、HAProxy的算法較多,達到8種;
安裝:
#wget http://fossies.org/linux/misc/haproxy-1.6.9.tar.gz (這個需要先登陸到網頁查看haproxy版本,只有一個最新的版本)
#解壓
#tar -zxvf haproxy-1.6.9.tar.gz
#cd haproxy-1.6.9
#安裝
#make TARGET=linux3100 ARCH=x86_64 PREFIX=/root/haproxy #編譯
#make install PREFIX=/root/haproxy
#參數說明
TARGET=linux3100 #內核版本,
ARCH=x86_64 #系統位數
PREFIX=/root/haprpxy #/root/haprpxy為haprpxy安裝路徑
#touch /root/haproxy/conf/haproxy.cfg(此配置文件需要自己手動創建)
補充:
在Unix類操作系統上,rsyslog廣泛應用於系統日誌
先說haproxy的系統日誌設置; (註意這是centos7上面的,centos6上的文件配置不在這裏)
2. 開啟rsyslog記錄haproxy日誌功能
編輯“/etc/rsyslog.conf”打開如下配置項:
# Provides UDP syslog reception $ModLoad imudp $UDPServerRun 514
添加如下內容:
# Save haproxy log local0.* /var/log/haproxy.log
3. 修改“/etc/sysconfig/rsyslog”文件,內容如下
# Options for rsyslogd # Syslogd options are deprecated since rsyslog v3. # If you want to use them, switch to compatibility mode 2 by "-c 2"# See rsyslogd(8) for more details SYSLOGD_OPTIONS="-r -m 0 "
相關解釋說明:
-r:打開接受外來日誌消息的功能,其監控514 UDP端口;
-x:關閉自動解析對方日誌服務器的FQDN信息,這能避免DNS不完整所帶來的麻煩;
-m:修改syslog的內部mark消息寫入間隔時間(0為關閉),例如240為每隔240分鐘寫入一次"--MARK--"信息;
-h:默認情況下,syslog不會發送從遠端接受過來的消息到其他主機,而使用該選項,則把該開關打開,所有
接受到的信息都可根據syslog.conf中定義的@主機轉發過去
4. 配置haproxy
編輯haproxy配置文件,在全局變量中配置,也就是第二行;
log 127.0.0.1 local0
###重啟服務 service restart rsyslog ###查看日誌記錄 tailf /var/log/haproxy.log
下來手寫haproxy啟動腳本:
#!/bin/bash #set -e export LANG='zh_CN.UTF-8' source /etc/init.d/functions #PATH=$PATH:/root/haproxy/sbin dir=/root/haproxy name=haproxy DAEMON=$dir/sbin/$name CONFIG=$dir/conf/$name.cfg #PIDFILE=$dir/conf/$name.pid #aa=`ps -ef | grep haproxy | grep -v grep | awk '{print $2}'` test -x $DAEMON || exit 0 start() { $DAEMON -f $CONFIG >/dev/null a=$? if [ $a -eq 0 ]; then action "haproxy服務啟動正常" /bin/true fi } stop() { killall haproxy b=$? if [ $b -eq 0 ]; then action "haproxy服務關閉正常" /bin/true fi } restart() { [ ! -n $PIDFILE ] && start || stop start } case "$1" in start) start ;; stop) stop ;; restart) restart ;; *) echo "正確的參數,start|stop|restart" esac
下來時創建haproxy的配置文件:
vim /root/haproxy/conf/haproxy.cfg
global log 127.0.0.1 local0 maxconn 65536 chroot /root/haproxy pidfile /root/haproxy/conf/haproxy.pid #log #user haproxy #group haproxy daemon defaults mode http #默認的模式mode { tcp|http|health },tcp是4層,http是7層,health只會返回OK log global option dontlognull #不記錄健康檢查日誌信息 option httpclose #每次請求完畢後主動關閉http通道,haproxy不支持keep-alive,只能模擬這種模式的實現 retries 3 #三次連接失敗就認為是服務器不可用,也可以通過後面設置 maxconn 65536 timeout connect 70000 timeout client 70000 timeout server 70000 listen stats #監控 bind 0.0.0.0:1080 # 端口 stats uri /admin-status # 監控的uri stats auth admin:admin #用戶用:密碼 mode http option httplog frontend main bind *:80 acl web hdr(host) -i www.abc.com #acl後面是規則名稱,-i為忽略大小寫,後面跟的是要訪問的域名,如果訪問www.abc.com這個域名,就觸發web規則,。 acl img hdr(host) -i img.abc.com use_backend webserver if web #如果上面定義的web規則被觸發,即訪問www.abc.com,就將請求分發到webserver這個作用域 use_backend imgserver if img # default_backend dynamic #不滿足則響應backend的默認頁面 backend webserver mode http balance roundrobin server web1 192.168.116.135:80 check inter 2000 rise 2 fall 3 server web2 192.168.116.136:80 check inter 2000 rise 2 fall 3 #check inter 2000 是檢測心跳頻率 fall 3是3次失敗認為服務器不可用,weight代表權重 backend imgserver mode http #option httpchk /index.php balance roundrobin server img01 192.168.116.136:80 check inter 2000 fall 3 server img02 192.168.116.136:80 check inter 2000 fall 3 #backend dynamic # balance roundrobin # server test1 10.0.0.152:80 check maxconn 2000 # server test2 10.0.0.155:80 check maxconn 2000
執行結果如下:
當關閉135或者137上面的httpd服務後,就會請求另一個httpd服務。
將服務加入到系統中:
編輯/etc/init.d/haproxy添加:
#chkconfig 2345 20 80
#service haproxy
然後在外面執行命令:
#chkconfig --add haproxy
#chkconfig --list haproxy
下來就可以使用命令執行啟動和關閉了:
haproxy 高可用(並使用shell寫啟動腳本)