HAproxyphp
實驗環境:rhel6.5 selinux and iptables disabledhtml
實驗主機: 172.25.23.1 server1.example.com haproxy linux
172.25.23.4 server4.example.com web1web
172.25.23.5 server5.example.com web2redis
1.安裝軟件算法
rpm 包方式:vim
rpmbuild -tb haproxy-1.4.23.tar.gz服務器
rpm -ivh /root/rpmbuild/RPMS/x86_64/haproxy-1.4.23-1.x86_64.rpm併發
源碼方式:負載均衡
tar zxf haproxy-1.4.23.tar.gz
cd haproxy-1.4.23
make TARGET=linux26 ARCH=x86_64 USE_PCRE=1 PREFIX=/usr/local/haproxy install
下載壓縮包haproxy-1.4.24.tar.gz
[root@server1 ~]# rpmbuild -tb haproxy-1.4.24.tar.gz
[root@server1 ~]# yum install pcre-devel -y
[root@server1 ~]# rpmbuild -tb haproxy-1.4.24.tar.gz
[root@server1 ~]# cd rpmbuild/RPMS/x86_64/
[root@server1 ~]# rpm -ivh haproxy-1.4.24-1.x86_64.rpm
[root@server1 ~]# cd /etc/haproxy/
2.編譯配置文件
[root@server1 ~]# cp haproxy.cfg haproxy.cfg.bak #作備份
[root@server1 ~]# vim haproxy.cfg
---->
# this config needs haproxy-1.1.28 or haproxy-1.2.1
global
log 127.0.0.1 local0#指定日誌設備
#log 127.0.0.1 local1 notice
log loghost local0 info#指定日誌類型,還有 err warning debug
maxconn 4096#併發最大鏈接數量
chroot /usr/share/haproxy#jail 目錄
uid 99#用戶
gid 99#組
daemon#後臺運行
#debug
#quiet
defaults
log global
mode http#默認使用 http 的 7 層模式 tcp: 4 層
option httplog#http 日誌格式
option dontlognull#禁用空連接日誌
retries 3#重試 3 次失敗認爲服務器不可用
option redispatch#當 client 鏈接到掛掉的機器時,從新分配到健康的主機!
maxconn 2000
contimeout 5000#鏈接超時
clitimeout 50000#客戶端超時
srvtimeout 50000 #服務器端超時
stats uri /status#haproxy 監控頁面
listen westos *:80#監聽的實例名稱,地址和端口
balance roundrobin#負載均衡算法
server web1 172.25.23.4:80 check inter 2000 rise 2 fall 3
server web2 172.25.23.5:80 check inter 2000 rise 2 fall 3
#check inter 2000:檢測心跳頻率
#rise 2:表示 2 次正確認爲服務器可用
#fall 5:表示 5 次失敗認爲服務器不可用
[root@server1 ~]# mkdir /usr/share/haproxy
[root@server1 ~]# /etc/init.d/haproxy start
3.測試
在兩臺real server即web1 web2 上安裝httpd,建立測試頁而且啓動服務
測試訪問 172.25.23.1 會發現兩個測試頁輪詢顯示
健康檢查
defaults 模塊中加入 stats uri /status重啓服務
訪問 haproxy 監控頁面:http://172.25.23.1/status
4.監控頁面添加認證:
listen stats_auth 172.25.23.1:80
stats enable
stats uri /status #監控頁面地址
stats auth admin:westos #管理賬號和密碼
stats refresh 5s #刷新頻率
5.haproxy 日誌:
vim /etc/rsyslog.conf #接受 haproxy 日誌
13 $ModLoad imudp
14 $UDPServerRun 514
42*.info;mail.none;authpriv.none;cron.none;local0.none /var/log/messages
63 local0.* /var/log/haproxy.log#日誌文件位置
/etc/init.d/rsyslog restart
vim /etc/haproxy/haproxy.cfg
...
#log loghost local0 info#註釋掉該行
...
6.先後臺顯示健康檢查信息
vim /etc/haproxy/haproxy.cfg
...
frontend westos *:80
default_backendloop1
backend loop1
balance roundrobin
server web1 172.25.23.4:80 check inter 2000 rise 2 fall 3
server web2 172.25.23.5:80 check inter 2000 rise 2 fall 3
/etc/init.d/haproxy restart
訪問 172.25.23.1/status
7.
加了權重,而且當兩個real server都掛掉時,顯示本身的測試頁
修改本身的http監聽端口爲8080,避免和haproxy的80 端口衝突
vim /etc/haproxy/haproxy.cfg
...
frontend westos *:80
default_backendloop1
backend loop1
balance roundrobin
server web1 172.25.23.4:80 check inter 2000 rise 2 fall 3 weight 1
server web2 172.25.23.5:80 check inter 2000 rise 2 fall 3 weight 1
server backup 127.0.0.1:8080 backup
/etc/init.d/haproxy restart
8.ACL
vim /etc/haproxy/haproxy.cfg
...
frontend westos *:80
acl badhost src 172.25.23.250#拒絕172.25.23.250訪問,也能夠是一個網段
block if badhost
default_backendloop1
backend loop1
balance roundrobin
server web1 172.25.23.4:80 check inter 2000 rise 2 fall 3 weight 1
server web2 172.25.23.5:80 check inter 2000 rise 2 fall 3 weight 1
server backup 127.0.0.1:8080 backup
/etc/init.d/haproxy restart
在172.25.23.250上訪問172.25.23.1
9.經過錯誤代碼403重定向,定向到 http://172.25.23.1:8080
vim /etc/haproxy/haproxy.cfg
...
frontend westos *:80
acl badhost src 172.25.23.250#拒絕172.25.23.250訪問,也能夠是一個網段
block if badhost
errorloc 403 http://172.25.23.1:8080
default_backendloop1
backend loop1
balance roundrobin
server web1 172.25.23.4:80 check inter 2000 rise 2 fall 3 weight 1
server web2 172.25.23.5:80 check inter 2000 rise 2 fall 3 weight 1
server backup 127.0.0.1:8080 backup
/etc/init.d/haproxy restart
10.根據來源重定向
vim /etc/haproxy/haproxy.cfg
...
frontend westos *:80
acl badhost src 172.25.23.250#拒絕172.25.23.250訪問,也能夠是一個網段
#block if badhost
#errorloc 403 http://172.25.23.1:8080
redirect location http://172.25.23.1:8080 if badhost
default_backendloop1
backend loop1
balance roundrobin
server web1 172.25.23.4:80 check inter 2000 rise 2 fall 3 weight 1
server web2 172.25.23.5:80 check inter 2000 rise 2 fall 3 weight 1
server backup 127.0.0.1:8080 backup
/etc/init.d/haproxy restart
11.動靜分離
Server1
vim /etc/haproxy/haproxy.cfg
...
frontend westos *:80
acl badhost src 172.25.23.250#拒絕172.25.23.250訪問,也能夠是一個網段
#block if badhost
#errorloc 403 http://172.25.23.1:8080
#redirect location http://172.25.23.1:8080 if badhost
acl url_static path_beg -i /p_w_picpaths
acl url_static path_end -i .jpg$ .png$ .jpeg$ .gif$
use_backend loop2 if url_static
default_backendloop1
backend loop1
balance roundrobin
server web1 172.25.23.4:80 check inter 2000 rise 2 fall 3 weight 1
backend loop2
balance roundrobin
server web2 172.25.23.5:80 check inter 2000 rise 2 fall 3 weight 1
/etc/init.d/haproxy restart
Server 4 創建php測試頁
yum install php -y
/var/www/html 目錄下新建index.php測試頁
/etc/init.d/httpd restart
訪問172.25.23.1
Server5
mkdir /var/www/html/p_w_picpaths
get redhat.jpg
/etc/init.d/httpd restart
訪問 172.25.23.1/p_w_picpaths/redhat.jpg
172.25.23.1/status
12.讀寫分離
Server1
vim /etc/haproxy/haproxy.cfg
...
frontend westos *:80
acl badhost src 172.25.23.250#拒絕172.25.23.250訪問,也能夠是一個網段
#block if badhost
#errorloc 403 http://172.25.23.1:8080
#redirect location http://172.25.23.1:8080 if badhost
acl url_static path_beg -i /p_w_picpaths
acl url_static path_end -i .jpg$ .png$ .jpeg$ .gif$
acl read method GET
acl read method HEAD
acl write method PUT
acl write method POST
use_backend loop2 if write
default_backendloop1
backend loop1
balance roundrobin
server web1 172.25.23.4:80 check inter 2000 rise 2 fall 3 weight 1
backend loop2
balance roundrobin
server web2 172.25.23.5:80 check inter 2000 rise 2 fall 3 weight 1
/etc/init.d/haproxy restart
server4 server5
yum install -y php
cd /var/www/html
訪問 172.25.23.1