Haproxy---負載均衡、URL頁面重定向、動靜分離、讀寫分離

一、概念

Haproxy工作在七層模型的應用層
Haproxy工作過程:6次TCP握手、4次NAT轉換

Haproxy 提供高可用性、負載均衡以及基於 TCP 和 HTTP 應用的代理,支持虛擬主機,它是免費、快速並且可靠的一種解決方案。Haproxy 特別適用於那些負載特大的 web 站點, 這些站點通常又需要會話保持或七層處理。Haproxy 運行在當前的硬件上,完全可以支持數以萬計的併發連接。並且它的運行模式使得它可以很簡單安全的整合進當前的架構中, 同時可以保護web 服務器不被暴露到網絡上。

二、配置

1、haproxy負載均衡

實驗

本實驗基於redhat6.5系統

	主機		server1			server2			server3
	ip		172.25.47.1		172.25.47.2		172.25.47.3
	服務    反向代理			apache			apache
物理真機可用作測試,ip爲172.25.47.250

1)添加apache服務

server2
	yum install httpd -y
	/etc/init.d/httpd start
	vim /var/www/html/index.html
		server2
server3
	yum install httpd -y
	/etc/init.d/httpd start
	vim /var/www/html/index.html
		server3

2)添加haproxy

1>配置yum源
物理主機,查看可用包

在這裏插入圖片描述

server1
vim /etc/yum.repos.d/rhel-source.repo
yum clean all
yum repolist

在這裏插入圖片描述

2>安裝haproxy並配置
yum install haproxy -y
cd /etc/haproxy/	
vim haproxy.cfg		##修改配置文件

 50     retries                 3
 51     timeout http-request    10s     ##在客戶端建立連接但不請求數據時,關閉客戶端連接
 52     timeout queue           1m	##等待最大時長
 53     timeout connect         10s	##定義haproxy將客戶端請求轉發至後端服務器所等待的超時時長
 54     timeout client          1m	##客戶端非活躍狀態的超時時長
 55     timeout server          1m	##客戶端與服務器端建立連接後,等待服務器端的超時時長
 56     timeout http-keep-alive 10s	##定義保持連接的超時時長
 57     timeout check           10s	##健康狀態檢測時的超時時長,過短會誤判,過長會消耗資源
 58     maxconn                 3000	##每個server的最大連接數

59行 之後的都註釋掉
	
	##haproxy提供一個web監控頁面		
		 87 listen admin *:8080
		 88         stats enable
		 89         stats uri /status		##監控頁面的地址
		 90         stats auth admin:westos	##帳號和密碼
		 91         stats refresh 5s		##刷新時間爲5s
	##配置輪循
		 93 listen westos *:80
		 94         balance roundrobin		##輪詢
		 95         server web1 172.25.47.2:80 check
		 96         server web2 172.25.47.3:80 check
/etc/init.d/haproxy start

物理主機firefox
172.25.47.1:8080/status
看到監控界面
在這裏插入圖片描述

3)測試:

真機curl 172.25.47.1
可以看到輪詢
在這裏插入圖片描述
可以看監控界面
當server3上關閉apache服務器
可以看到監控頁面上web2行紅,即會有健康檢測
在這裏插入圖片描述

2、動態、靜態頁面

server3做靜態
server2做動態

1)server3添加靜態頁面的圖片

	server3
	cd /var/www/html/
	mkdir images
	cd images/

##給目錄下放一個圖片
	[root@server3 images]# ls
	redhat.jpg		##添加一個圖片

2)server1設定動態和靜態頁面

server1
1、修改配置文件
	vim haproxy.cfg
		 87 listen admin *:8080
		 88         stats enable
		 89         stats uri /status
		 90         stats auth admin:westos
		 91         stats refresh 5s
		 92 
		 93 frontend  westos *:80
		 94     acl url_static       path_beg       -i /images		##以什麼開頭
		 95     acl url_static       path_end       -i .jpg .gif .png	##以什麼結尾
		 96 
		 97     use_backend static          if url_static		##如果是靜態
		 98     default_backend             app				##默認動態
		 99 
		100 backend static			##靜態頁面,即訪問172.25.47.3/images
		101        server web2  172.25.47.3:80 check
		102 
		103 backend app				##動態頁面,即訪問172.25.47.2 
		104         balance roundrobin		##設置爲輪詢,但此處只有一個server,故輪詢不起作用
		105         server web1 172.25.47.2:80 check
		106         server local 172.25.47.1:8000 backup		##本機作爲備用機
2、配置apache作爲備用		
	yum install httpd -y
	vim /etc/httpd/conf/httpd.conf
		 136 Listen 8000	
	vim /var/www/html/index.html
		server1
	/etc/init.d/httpd start

	[root@server1 haproxy]# netstat -antlupe|grep httpd
	tcp        0      0 :::8000       :::*      LISTEN    0   16672   1146/httpd       

	/etc/init.d/haproxy reload
3)測試:瀏覽器訪問(測試時候記得清緩存)
1>訪問靜態

http://172.25.47.1/
看到server2
在這裏插入圖片描述
訪問靜態
http://172.25.47.1/images/
看到圖片
在這裏插入圖片描述

2>把server2服務關掉(此時server1備用機工作)

[root@server2 html]# /etc/init.d/httpd stop
再瀏覽172.25.47.1
看到server1
在這裏插入圖片描述
server2的apache再開啓
[root@server2 html]# /etc/init.d/httpd start
再次訪問172.25.47.1,就是server2工作
在這裏插入圖片描述

3、頁面重定向

302 臨時重定向
301 永久重定向

內部做網頁時,儘量不要用臨時重定向

1)、403錯誤頁面重定向

1>配置
vim haproxy.cfg
		 93 frontend  westos *:80
		 94     acl url_static       path_beg       -i  /images
		 95     acl url_static       path_end       -i .jpg .gif .png
		 96 
		 97     acl badhost src 172.25.47.250		####拒絕250主機連接
		 98     block if badhost				
		99     
		100     use_backend static          if url_static
		101     default_backend             app
		102     
		103 backend static
		104     server web2  172.25.47.3:80 check
		105     
		106 backend app
		107     balance     roundrobin
		108     server  web1 172.25.47.2:80 check
		109     server  local 172.25.47.1:8000 backup

當拒絕訪問時,此時客戶訪問時會出現如下界面
在這裏插入圖片描述

爲了用戶的體驗,此時我們把拒絕頁面重定向到其他頁面

vim haproxy.cfg
		 98     block if badhost
		 99     errorloc 403 http://172.25.47.1:8000
		100     redirect location http://172.25.47.1:8000 if badhost		##如果是403錯誤時,會定向到server1服務器上
		101     
		102     use_backend static          if url_static
		103     default_backend             app

	vim /var/www/html/index.html 			##給server1寫一個發佈頁面,用於測試辨識
		server1
	/etc/init.d/httpd restart
	/etc/init.d/haproxy reload
2>測試:

瀏覽器搜索
172.25.47.1
可以看到server1
在這裏插入圖片描述

2)所有錯誤頁面重定向

1>配置
server1
	vim haproxy.cfg
		97     acl badhost src 172.25.47.250		##拒絕250連接
		98     #block if badhost
		99     #errorloc 403 http://172.25.47.1:8000
		100     redirect location http://172.25.47.1:8000 if badhost   ##訪問的任何錯誤都重定向到server1

	/etc/init.d/haproxy reload

##修改一下發布頁面,便於分辨
	vim /var/www/html/index.html
			server1重定向
2>測試:

物理真機瀏覽器搜索
172.25.47.1
在這裏插入圖片描述

4、動靜分離

1) 301重定向(例如,訪問baidu.com會被重定向到www.baidu.com)
1>server2和server3的apache服務確保開啓
2>server1上進行配置
/etc/init.d/haproxy start
cd /etc/haproxy/
vim haproxy.cfg 
	98     acl westos.org hdr_beg(host) -i westos.org	##以域名訪問
 	99    acl 172.25.47.1 hdr(host) -i 172.25.47.1		##以ip訪問

	103     redirect code 301 location http://www.westos.org if westos.org    ##域名訪問時會訪問 www.westos.org 
	104     redirect code 301 location http://www.westos.org if 172.25.47.1   ##ip地址訪問時會訪問 www.westos.org 
 /etc/init.d/haproxy reload
3>測試:

真機 做地址解析
瀏覽器訪問 www.westos.orgwestos.org、172.25.47.1
訪問的都是 後端server2
在這裏插入圖片描述

2)日至

添加haproxy的日誌文件

server1
vim /etc/rsyslog.conf
	13 $ModLoad imudp		
	14 $UDPServerRun 514		##打開UDP的端口
	43 local2.*                                                /var/log/haproxy.log		##添加日至的地址
/etc/init.d/rsyslog restart			##重啓
ll /var/log/haproxy.log 		##查看一下文件已經存在

在這裏插入圖片描述

5、讀、寫分離

此處,寫是server2,讀是server3
圖片一般保存在文件系統之上,圖片服務器裏

1)server1 修改配置文件
vim /etc/haproxy/haproxy.cfg 
	 96     acl read method GET			##讀
	 97     acl read method HEAD		##讀
	 98     acl write method PUT		##寫
	 99     acl write method POST		##寫

	110     use_backend app          if write ##如果是寫,就是動態訪問
	111     default_backend          static   ##默認是靜態訪問

	113 backend static
	114         server web2 172.25.47.3:80 check	##靜態頁面
	115 
	116 backend app
	117         balance roundrobin
	118         server web1 172.25.47.2:80 check
	119         server local 172.25.47.1:8000 backup
2)server2、server3配置php
server2
	yum install php -y
	cd /var/www/html/
		此處upload下文件是php,需要自行下載
	[root@server2 html]# ls
		index.html  upload
	cd upload/
	mv * ..
	cd ..
	vim upload_file.php
	chmod 777 upload
	/etc/init.d/httpd restart

server3
	yum install php -y
	cd /var/www/html/
		此處upload下文件是php,需要自行下載,同server2
	cd upload/
	mv * ..
	cd ..
	vim upload_file.php
	chmod 777 upload
	/etc/init.d/httpd restart
3)server1 重啓服務
/etc/init.d/haproxy reload
4)測試:
1>真機訪問瀏覽器www.westos.org 上傳(注意瀏覽器會有緩存)

上傳一個.jpg的圖片,然後可以看到
在這裏插入圖片描述
在這裏插入圖片描述
在server2上
ls upload 也能看到
在這裏插入圖片描述

2>訪問www.westos.org/images 訪問的是靜態頁面

在這裏插入圖片描述在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章