haproxy
Haproxy:是反向代理服務器的負載均衡,擁有不錯的服務器健康檢查功能,當其後端的的代理服務器出現故障時。Haproxy會自動去除該服務,故障服務後在自動運行該服務。HAProxy支持兩種主要的代理模式:"tcp"也即4層(大多用於郵件服務器、內部協議通信服務器等),和7層(HTTP)。在4層模式 下,HAProxy僅在客戶端和服務器之間轉發雙向流量。7層模式下,HAProxy會分析協議,並且能通過允許、拒絕、交換、增加、修改或者刪除請求 (request)或者回應(response)裏指定內容來控制協議,這種操作要基於特定規則。
可以用rpm安裝方式,也可以源碼編譯。
軟件下載:http://haproxy.1wt.eu/
rpm 包方式:
rpmbuild -tb haproxy-1.4.23.tar.gz
rpm -ivh /root/rpmbuild/RPMS/x86_64/haproxy-1.4.23-1.x86_64.rpm
此實驗是用源碼編譯:
實驗主機 server5 haproxy
Server6 web1
Server7 web2
需要的包:
haproxy-1.4.24.tar.gz
[root@server5 ~]# tar zxfhaproxy-1.4.24.tar.gz
編譯成二進制文件包。發現找不到rpmbuild說明沒有裝rpmbuild
[root@server5 ~]# yum install rpm-build -y
[root@server5 ~]# rpmbuild -tbhaproxy-1.4.24.tar.gz 編譯失敗,缺什麼程序就下什麼程序
[root@server5 ~]# yum install pcre-devel -y
[root@server5 ~]# rpmbuild -tbhaproxy-1.4.24.tar.gz
這樣就編譯成功。
編譯成的二進制文件一般都在 /root/rpmbuild/RPMS/x86_64裏
[root@server5 x86_64]# rpm -ivhhaproxy-1.4.24-1.x86_64.rpm
[root@server5 x86_64]# cd /etc/haproxy/
[root@server5 haproxy]# ls 生成一個haproxy配置文件
Haproxy.cfg
[root@server5 haproxy]# vim haproxy.cfg
1 #this config needs haproxy-1.1.28 or haproxy-1.2.1
2
3global
4 log 127.0.0.1 local0
5 log 127.0.0.1 local1 notice
6 #log loghost local0 info
7 maxconn 4096
8 chroot/usr/share/haproxy
9 uid 99
10 gid 99
11 daemon
12 #debug
13 #quiet
14
15defaults
16 log global
17 mode http
18 option httplog
19 option dontlognull
20 retries 3
21 option redispatch
22 maxconn 2000
23 contimeout 5000 連接超時
24 clitimeout 50000 客戶端連接超時
25 srvtimeout 50000 服務端連接超時
27listen westos *:80 監聽的實例名稱,地址和端口
28 balance roundrobin 負載均衡算法
29 server web1 172.25.137.6 check inter 2000 rise 2 fall 3
30 server web2 172.25.137.7 check inter 2000 rise 2 fall 3
check inter 檢測心跳 rise 2連接2次正確認爲服務器可用
fall 3 連接3次認爲連接失敗 web1只是一個名稱
Server6和server7的阿帕奇服務要開
當haproxy啓動失敗是沒有/usr/shre/haproxy這個目錄
[root@server5 share]# mkdir/usr/share/haproxy
再次啓動服務
這樣一個負載均衡就做出來了。
在配置文件還可以加
26 stats uri /status haproxy監控頁面
還要把阿帕奇的端口改爲8080,因爲haproxy用的是80端口
29 server web1 172.25.137.6 check inter 2000 rise 2 fall 3 weight 5
30 serverweb2 172.25.137.7 check inter 2000 rise 2 fall 3 weight 1
31 server backup 127.0.0.1:8080 backup
Weight 是權重,表現在頁面上是server6上刷5次之後在刷server7上刷一次。
後臺檢測當web1和2的服務都停止的時候本地就開始接管,當web1和2正常運行時他就不會出現在前臺頁面
當web1和2服務停止時
28 acl badhost src 172.25.137.250 只要是通過這個ip訪問都會被禁止。
29 block if badhost
Acl :訪問控制列表是用來控制端口進出數據包,acl適用於所有的路由協議,例如:IP,IPX等。
30 errorloc 403 http://172.25.137.5:8080 就上述的錯誤重定向在本地的http服務
[root@server5 haproxy]# vim /var/www/html/index.htm
[root@server5 haproxy]# /etc/init.d/httpd restart
爲了給用戶呈現一個美感有必要寫一個頁面。
動靜分離
Server6需要寫一個php測試頁(動態)
Vim /var/www/html/index.php
[root@server6 ~]# /etc/init.d/httpd restart
Server7 需要在/var/www/html/目錄裏見一個images目錄存照片文檔之類的。
[root@server7 html]# mkdir images
[root@server7 html]# ls
images index.html
吳彥祖.jpeg
[root@server7 html]# cd images/
[root@server7 images]# ls
[root@server7 images]# ls
32 acl url_static path_beg -i /images
33 acl url_static path_end -i .jpg$ .png$ .jpeg$ .gif$ 靜態服務器支持的圖片類型
35 use_backend group2 if url_static 如果是靜態就在group2上否則是group1
36 default_backend group1
[root@server5 haproxy]# /etc/init.d/haproxyreload
動態
靜態
讀寫分離:
Server6
需要這兩個php文件 在upload_file.php裏有限定上傳圖片的大小
Server7
[root@server7 upload]# yum install php -y
[root@server7 html]# ls
images index.html index.php upload_file.php 在upload_file.php裏有限定上傳圖片的大小
[root@server7 html]# mkdir upload 這個目錄是上傳圖片的保存位置
[root@server7 html]# chmod -R 777/var/www/html/upload
這是上傳保存的位置