1. 程式人生 > >HAproxy的負載均衡,以及基於TCP和HTTP的應用程式代理

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  ##可以看見你上傳的照片的名字