HAproxy的負載均衡,以及基於TCP和HTTP的應用程式代理
HAProxy是一個使用C語言編寫的自由及開放原始碼軟體[1],其提供高可用性、負載均衡,以及基於TCP和HTTP的應用程式代理。 HAProxy特別適用於那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。HAProxy執行在當前的硬體上,完全可以支援數以萬計的 併發連線。並且它的執行模式使得它可以很簡單安全的整合進您當前的架構中,同時可以保護你的web伺服器不被暴露到網路上。
##首先我們要有一個安裝包 haproxy-1.6.11.tar.gz yum install -y rpm-build ##原始碼編譯軟體 cd /pub##這裡面有你的安裝包 rpmbuild -tb haproxy-1.6.11.tar.gz yum install prce-devel gcc openssl-devel #解決依賴性
rpmbuild -tb haproxy-1.6.11.tar.gz #重新編譯,成功之後進行下步操作
cd ##切換到/root cd rpmbuild ls cd RPMS ls cd x86_84 ls rpm -qpl haproxy-1.6.11.x86_64.rpm ##檢視安裝haproxy會生成的檔案,沒有主配置檔案,需要將壓縮包解壓獲取
rpm -ivh haproxy-1.6.11.x86_64.rpm ##安裝haproxy
cd /pub tar zxf haproxy-1.6.11.tar.gz ls cd haproxy-1.6.11 ls cd examples/ ls cp content-sw-sample.cfg /etc/haproxy/ cd /etc/haproxy ls #此時有 content-sw-sample.cfg 檔案,我們需要給他改名字,因為在haproxy啟動指令碼中讀取的配置檔案是/etc/haproxy/haproxy.cfg mv content-sw-sample.cfg haproxy.cfg ls##此時應該改名字成功
vim haproxy.cfg ##我們可以看見他有使用者組和使用者id,所以我們要給他建立使用者和使用者組, groupadd -g 200 haproxy useradd -g 200 -u 200 haproxy id haproxy
vim /etc/security/limits.conf ##因為我們進配置檔案看到他的最大連線數為10000,所以要改 haproxy - nofile 10000
vim haproxy.cfg # This is a sample configuration. It illustrates how to separate static objects # traffic from dynamic traffic, and how to dynamically regulate the server load. # # It listens on 192.168.1.10:80, and directs all requests for Host 'img' or # URIs starting with /img or /css to a dedicated group of servers. URIs # starting with /admin/stats deliver the stats page. #
global #全域性定義 maxconn 10000 ##最大連線數 stats socket /var/run/haproxy.stat mode 600 level admin log 127.0.0.1 local0 ##本機日誌 uid 200 gid 200 chroot /var/empty daemon defaults ##我門把後端和前端共用的條件放在預設條件下 mode http log global option httplog option dontlognull monitor-uri /monitoruri maxconn 8000 timeout client 30s
stats uri /admin/stats option prefer-last-server retries 2 option redispatch timeout connect 30s timeout server 30s # The public 'www' address in the DMZ frontend public bind 172.25.17.11:80 name clear # use_backend static if { hdr_beg(host) -i img } # use_backend static if { path_beg /img /css } default_backend dynamic backend dynamic balance roundrobin server dynsrv1 172.25.17.12:80 check inter 1000 ##後端伺服器 server dynsrv2 172.25.17.13:80 check inter 1000
/etc/init.d/haproxy start /etc/initd/haproxy reload 2和3的httpd服務均要開啟 ##在瀏覽器輸入172.25.17.11,出現論調
haproxy有8種均衡演算法分別如下: roundrobin, 簡單的輪詢 static-rr, 根據權重 leastconn, 最少連線者先處理 source, 根據請求源IP uri, 根據請求的URI url_param, 根據請求的URl引數 hdr(name), 根據HTTP請求頭來鎖定每一次HTTP請求 rdp-cookie(name), 很據cookie(name)來鎖定並雜湊每一次TCP請求 cat /var/log/messages ##發現什麼都沒有,因為我們並沒有設定他的服務 vim /etc/rsyslog.conf 將$ModLoad imudp $UDPServerRun 541 的註釋開啟
在local7.*下面加 local0.* /var/log/haproxy.log
在*.info;mail.none;authpriv.none;cron.none;加local0.none
/etc/init.d/rsyslog restart cat /var/log/haproxy.log ##發現什麼都沒有,我們需要讓瀏覽器訪問幾次,再次檢視就有了
vim haproxy.cfg 在default後面加 stats auth admin:westos
defaults mode http log global option httplog option dontlognull monitor-uri /monitoruri ##看到的是ok字樣,表明你haproxy是好的 maxconn 8000 timeout client 30s
stats uri /admin/stats ##看到的是表格樣式介面,這也可以更改為stats, option prefer-last-server 搜尋變成http://172.25.17.11/stats retries 2 option redispatch timeout connect 30s timeout server 30s stats auth admin:westos /etc/init.d/haproxy reload 在瀏覽器訪問http://172.25.17.11/admin/stats ##此時訪問需要使用者和密碼admin westos
###在黑名單裡面的不能訪問 在前端frontend public 加 acl blacklist src 172.25.17.250 http-request deny if blacklist #如果在黑名單裡,訪問拒絕
frontend public bind 172.25.17.11:80 name clear acl blacklist src 172.25.17.250 http-request deny if blacklist /etc/init.d/haproxy reload 在瀏覽器訪問http://172.25.17.11 ##403被拒
##我們可以讓拒絕連結到server1的httpd上 在前端frontend public 加 acl blacklist src 172.25.17.250 http-request deny if blacklist errorloc 403 http://172.25.17.11:8080 或者直接連結到server1上 redirect location http://172.25.17.11:8080 /etc/init.d/haproxy reload 此時server1要開啟httpd服務,並改8080埠,重啟httpd服務 在瀏覽器訪問http://172.25.17.11 ##出現server1裡面的內容
##更改迴圈演算法 在後端註釋論叫增加 balance source ##根據ip進行訪問,同一個ip訪問的是同一種東西 /etc/init.d/haproxy reload 在瀏覽器訪問http://172.25.17.11 ##不會改變訪問的內容
動靜頁面分離(在沒有分離之前,兩個ip一直在一起) backend dynamic balance roundrobin # balance source server dynsrv1 172.25.17.12:80 check inter 1000 backend static balance roundrobin server dynsrv2 172.25.17.13:80 check inter 1000 將前端訪問預設的後端改為static靜態 use_backend dynamic if { path_end -i *.php } default_backend static
/etc/init.d/haproxy reload 在動態ip上下載php yum install php vim /var/www/html/index.php <?php phpinfo() ?>
/etc/init.d/httpd restart 在瀏覽器訪問http://172.25.17.11 可以看見動靜輪詢
##給瀏覽器上傳某東西 在前端加 acl write method POST acl write method PUT use_backend dynamic if write default_backend static
/etc/init.d/haproxy reload 給動態ip裡面下載安裝包同時刪除/var/www/html裡面所有的東西 cd /var/www/html/ rm -fr * 把upload包放在html裡面 cd upload ls mv * .. ##把upload裡面的東西放在html裡面 ls#此時什麼都沒有了 cd .. ls ll chmod 777 upload ll vim upload_file.php 將你上傳的東西的尺寸改大一般在後面加2個0,使上傳的東西為2兆
scp -r * [email protected]:/var/www/html 在server3裡面 cd /var/www/html ls##此時應該有傳過來的東西 yum install -y php /etc/init.d/httpd restart ll#看upload的許可權是否為777
在瀏覽器訪問http://172.25.17.11 上傳照片,照片的格式一定要改為人家要求的格式,否則上傳失敗
然後去動態ip裡面也就是server2裡面 cd /var/www/html/upload ls ##可以看見你上傳的照片的名字