主機環境 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服務都開啓
測試:172.25.29.1
刷新以後
當關閉服務端2的httpd服務時:
[root@server3 ~]# /etc/init.d/httpd stop
Starting httpd: [ OK ]
刷新以後,結果如圖:(只有wed1運行,wed2中止)
當再關閉服務端1的httpd服務時:
[root@server2 ~]# /etc/init.d/httpd stop
Starting httpd: [ OK ]
刷新以後,結果如圖:(wed1和wed2都中止)
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服務)
訪問172.25.29.1時,服務端1和服務端2再刷新先後交替出現。
當中止服務端2的httpd時:
[root@server3 ~]# /etc/init.d/httpd stop
訪問172.25.29.1時,只有服務端1刷新以後也不變。
再中止服務端1的httpd時:
[root@server2 ~]# /etc/init.d/httpd stop
Stopping httpd: [ OK ]
訪問172.25.29.1時,出現管理端的測試頁
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 #剛開始沒有日誌
當在瀏覽器中訪問172.25.29.1後出現日誌,如圖:
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進行測試,刷新不變
用其餘的ip進行測試
刷新以後
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結果:
若是訪問172.25.29.1/p_w_picpaths/osi.gif,結果:
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
點Browse上傳圖片,從php的測試文件裏能夠看出後綴只能是.gif,.jpeg,.png的文件
點擊Submit後,上傳成功,下圖是上傳信息
雖然在服務端1上傳了文件,可是存儲到了服務端2,實現了讀寫分離
[root@server3 html]# cd upload
[root@server3 upload]# ls#查看
Screenshot from 2016-10-21 17:38:41.png