HAproxy的基本配置(負載均衡+日誌獨立+動靜分離+讀寫分離)

主機環境   redhat6.5 64位javascript

實驗環境   服務端1 ip 172.25.29.2 php

           服務端2 ip 172.25.29.3  css

           管理端1 ip 172.25.29.1 html

防火牆狀態:關閉java


    

1.Haproxy的負載均衡及測試web

A)負載均衡的配置vim

[root@server1 ~]# yum install haproxy -y            #安裝haproxy瀏覽器

[root@server1 ~]# vim /etc/haproxy/haproxy.cfg      #進入主配置文件bash

 59        stats uri /status                #虛擬目錄,後面的全標記,本身添加
 60 ##---------------------------------------------------------------------
 61 ## main frontend which proxys to the backends
 62 ##---------------------------------------------------------------------
 63 #frontend  main *:5000
 64 #    acl url_static       path_beg       -i /static /p_w_picpaths /javascript /sty    lesheets
 65 #    acl url_static       path_end       -i .jpg .gif .png .css .js
 66 #
 67 #    use_backend static          if url_static
 68 #    default_backend             app
 69 #
 70 ##---------------------------------------------------------------------
 71 ## static backend for serving up p_w_picpaths, stylesheets and such
 72 ##---------------------------------------------------------------------
 73 #backend static
 74 #    balance     roundrobin
 75 #    server      static 127.0.0.1:4331 check
 76 #
 77 ##---------------------------------------------------------------------
 78 ## round robin balancing between the various backends
 79 ##---------------------------------------------------------------------
 80 #backend app
 81 #    balance     roundrobin
 82 #    server  app1 127.0.0.1:5001 check
 83 #    server  app2 127.0.0.1:5002 check
 84 #    server  app3 127.0.0.1:5003 check
 85 #    server  app4 127.0.0.1:5004 check
 86 listen wen *:80                                 #添加服務
 87         balance roundrobin#機制:輪叫
 88         server web1 172.25.29.2:80 check        #真正的服務端
 89         server web2 172.25.29.3:80 check        #真正的服務端

[root@server1 ~]# /etc/init.d/haproxy start          #開啓haproxyapp

Starting haproxy:                                          [  OK  ]

B)測試

在測試以前,服務端1和服務端2要安裝httpd,開啓httpd服務,而且有不一樣的測試頁。

[root@server2 ~]# /etc/init.d/httpd start

Starting httpd:                                            [  OK  ]

[root@server3 ~]# /etc/init.d/httpd start

Starting httpd:                                            [  OK  ]

開始測試:172.25.29.1/status (服務端1和服務端2httpd服務都開啓 

wKioL1gQZt2i1EP9AAEkXr4Aofw248.png

測試:172.25.29.1

wKioL1gQZt7Qt3NNAAAeLdvInX4699.png

刷新以後

 wKioL1gQZt6AD5cOAAAfed1rt1I657.png

當關閉服務端2的httpd服務時:

[root@server3 ~]# /etc/init.d/httpd stop

Starting httpd:                                            [  OK  ]

刷新以後,結果如圖:(只有wed1運行,wed2中止)

wKioL1gQZt6xrwraAAEQb_X9_NQ189.png

當再關閉服務端1的httpd服務時:

[root@server2 ~]# /etc/init.d/httpd stop

Starting httpd:                                            [  OK  ]

刷新以後,結果如圖:(wed1和wed2都中止)

wKiom1gQZt-wjmdfAADreoGq0eY444.png

2.Haproxy中將管理和負載均衡分開及測試

A) 將管理和負載均衡分開的配置

管理端要安裝httpd,要有測試頁,在/etc/httpd/conf/httpd.conf中將端口改爲8080,否則會衝突。     

[root@server1 ~]# vim /etc/haproxy/haproxy.cfg #修改主配置文件

 86 frontend wen *:80
 87         default_backend app
 88 backend app
 89         balance roundrobin
 90         server web1 172.25.29.2:80 check
 91         server web2 172.25.29.3:80 check
 92         server local 127.0.0.1:8080 backup

[root@server1 ~]# /etc/init.d/haproxy reload#刷新

Reloading haproxy: 

B)測試

開始測試(開啓管理端、服務端一、服務端2的httpd服務)

wKioL1gQZuDBH9VPAAFKFtDjGGU274.png

訪問172.25.29.1時,服務端1和服務端2再刷新先後交替出現。

當中止服務端2的httpd時:

[root@server3 ~]# /etc/init.d/httpd stop

Stopping httpd:                                            [  OK  ] wKioL1gQZuCj5lAFAAFSP4AxtOE980.png

訪問172.25.29.1時,只有服務端1刷新以後也不變。

再中止服務端1的httpd時:

[root@server2 ~]# /etc/init.d/httpd stop

Stopping httpd:                                            [  OK  ]

wKiom1gQZuCgd0MJAAFKHWAyEks813.png

訪問172.25.29.1時,出現管理端的測試頁

 wKiom1gQZuHQTIUlAAAVfl7Hnlc909.png

3.Haproxy日誌的獨立及測試

 A)日誌獨立的配置

[root@server1 ~]# vim /etc/rsyslog.conf #日誌的配置文件 

 13 $ModLoad imudp                                                               
 14 $UDPServerRun 514                  #開啓端口和端口號                      
 42 *.info;mail.none;authpriv.none;cron.none;local2.none      /var/log/ messages    #haproxy的日誌不在messages裏作記錄  
 63 local2.*                                                 /var/log/haproxy.log   #將haproxy的日誌文件單獨記錄在haproxy.log中

[root@server1 ~]# /etc/init.d/rsyslog restart

Shutting down system logger:                               [  OK  ]

Starting system logger:                                    [  OK  ]

B)測試

[root@server1 ~]# tail -f /var/log/haproxy.log   #剛開始沒有日誌

 wKioL1gQZuGxCf2tAAAT_oQbcs4072.png

當在瀏覽器中訪問172.25.29.1後出現日誌,如圖:

wKiom1gQZuGi5c5nAABL6CHCTgA299.png


4.Haproxy黑名單及測試

 A)黑名單的配置

[root@server1 log]# vim /etc/haproxy/haproxy.cfg 

 86 frontend wen *:80
 87         acl badhost src 172.25.29.250         #禁止ip(172.25.29.250)的訪問
 88         block if badhost                      #若是禁止訪問的ip進行訪問
 89         errorloc 403 http://172.25.29.1:8080  #若是訪問,頁面中出現的是http://172.25.29.1:8080中的信息
           # redirect location  http://172.25.29.1:8080 if badhost  #這句和(88+89)的做用相同

[root@server1 log]# /etc/init.d/haproxy reload      #刷新

Reloading haproxy: 

 B)測試

開始測試(管理端、服務端一、服務端2的httpd服務全開啓)

Ip爲172.25.29.250進行測試,刷新不變

 wKioL1gQZuHx6B7bAAAX-CjjJ-Q699.png

用其餘的ip進行測試

 wKiom1gQZuPyqHIoAAAeLdvInX4289.png

刷新以後

 wKioL1gQZuPQ5zgRAAAfed1rt1I437.png


5.Haproxy的動靜分離及測試

 A)動靜分離的配置

管理端

[root@server1 log]# vim /etc/haproxy/haproxy.cfg 

 86 frontend wen *:80
 87         acl url_static path_beg -i /p_w_picpaths     #定義開始p_w_picpaths
 88         acl url_static path_end -i .gif        #結尾.gif
 89         use_backend app if url_static          #若是是動態,訪問app
 90   default_backend html                         #默認訪問html
 91         
 92 backend html                                   #名字
 93         balance roundrobin
 94         server web1 172.25.29.2:80 check
 95 
 96 backend app
 97         balance roundrobin
 98         server web2 172.25.29.3:80 check

[root@server1 log]# /etc/init.d/haproxy reload        #刷新

Reloading haproxy: 


在服務端2做一些簡單的配置

[root@server3 html]# pwd                              #當前目錄

/var/www/html

[root@server3 html]# mkdir p_w_picpaths                     #建立p_w_picpaths目錄

[root@server3 html]# mv osi.gif p_w_picpaths/               #將圖片移動到p_w_picpaths

 B)測試

測試  訪問172.25.29.1結果:

 wKiom1gQZuPwiRy7AAAgvq4nKGk793.png

若是訪問172.25.29.1/p_w_picpaths/osi.gif,結果:

wKioL1gQZumBi_UhAAqisWG9kfE854.png


6.Haproxy讀寫分離及測試

 A)讀寫分離的配置

[root@server1 log]# vim /etc/haproxy/haproxy.cfg 

 86 frontend wen *:80
 87         acl read method DET
 88         acl read method HEAD
 89         acl write method PUT
 90         acl write method POST
 91 
 92         use_backend app if write        #若是是寫,訪問app
 93    default_backend html                 #默認訪問htm
 94         
 95 backend html
 96         balance roundrobin
 97         server web1 172.25.29.2:80 check
 98 
 99 backend app
100         balance roundrobin
101         server web2 172.25.29.3:80 check

[root@server1 log]# /etc/init.d/haproxy reload

Reloading haproxy: 


對服務端1和服務端2安裝php及寫一些簡單的php測試文件

服務端1

[root@server2 html]# yum install php -y            #安裝php

[root@server2 html]# pwd#當前目錄

/var/www/html

[root@server2 html]# vim index.php                 #上傳的測試文件(讀)

  1 <html>
  2 <body>
  3 
  4 <form action="upload_file.php" method="post"
  5 enctype="multipart/form-data">
  6 <label for="file">Filename:</label>
  7 <input type="file" name="file" id="file" />
  8 <br />
  9 <input type="submit" name="submit" value="Submit" />
 10 </form>
 11 
 12 </body>
 13 </html>

[root@serve2 html]# /etc/init.d/httpd restart

Stopping httpd:                                            [  OK  ]

Starting httpd:                                            [  OK  ]


服務端2

[root@server2 html]# yum install php -y            #安裝php

[root@server3 html]# vim upload_file.php           #存儲的測試文件(寫)

  1 <?php
  2 if ((($_FILES["file"]["type"] == "p_w_picpath/gif")
  3 || ($_FILES["file"]["type"] == "p_w_picpath/jpeg")
  4 || ($_FILES["file"]["type"] == "p_w_picpath/png"))
  5 && ($_FILES["file"]["size"] < 2000000))
  6   {
  7   if ($_FILES["file"]["error"] > 0)
  8     {
  9     echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
 10     }
 11   else
 12     {
 13     echo "Upload: " . $_FILES["file"]["name"] . "<br />";
 14     echo "Type: " . $_FILES["file"]["type"] . "<br />";
 15     echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
 16     echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
 17 
 18     if (file_exists("upload/" . $_FILES["file"]["name"]))
 19       {
 20       echo $_FILES["file"]["name"] . " already exists. ";
 21       }
 22     else
 23       {
 24       move_uploaded_file($_FILES["file"]["tmp_name"],
 25       "upload/" . $_FILES["file"]["name"]);
 26       echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
 27       }
 28     }
 29   }
 30 else
 31   {
 32   echo "Invalid file";
 33   }
 34 ?>

[root@server3 html]# mkdir upload

[root@serve3 html]# chmod 777 upload

[root@server3 html]# /etc/init.d/httpd restart            #重啓httpd

Stopping httpd:                                            [  OK  ]

Starting httpd:                                            [  OK  ]

B)測試

開始測試 172.25.29.1

 wKiom1gQZunzKxa6AAAiXZwW8Z0530.png

點Browse上傳圖片,從php的測試文件裏能夠看出後綴只能是.gif,.jpeg,.png的文件

 wKioL1gQZunw_iIrAAAqWhPeCiA878.png

點擊Submit後,上傳成功,下圖是上傳信息

 wKioL1gQZumBSLU3AABECFI2KSs256.png

雖然在服務端1上傳了文件,可是存儲到了服務端2,實現了讀寫分離

[root@server3 html]# cd upload

[root@server3 upload]# ls#查看

Screenshot from 2016-10-21 17:38:41.png

相關文章
相關標籤/搜索