文章目錄
1.Haproxy的介紹與安裝
1.1 Haproxy的介紹
1.2 Haproxy的安裝
實驗環境:
server:192.168.43.11 提供haproxy
server2:192.168.43.20 後端1
server3:192.168.43.30 後端2
rhel7:用戶端
yum install haproxy.x86_64 -y
注意:啓動haproxy後需要查看日誌是否有報錯
在server2與server3中安裝httpd
2.Haproxy的功能實現
2.1 Haproxy的負載均衡
vim /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
stats socket /var/lib/haproxy/stats
frontend main *:80
default_backend static
backend static
balance roundrobin
server web1 192.168.43.20:80 check
server web2 192.168.43.30:80 check
systemctl restart haproxy.service
測試
2.2 Haproxy查看後端服務器的狀態
vim /etc/haproxy/haproxy.cfg
systemctl restart haproxy.service
defaults
mode http
log global
option httplog
option dontlognull
retries 3
timeout connect 5s
timeout client 1m
timeout server 1m
maxconn 3000
stats uri /admin/stats##查看後端服務器狀態
monitor-uri /monitoruri##監控頁面
status auth admin:123##設置查看權限(用戶:密碼)
status refresh 5s##自動更新時間間隔
測試:
http://192.168.43.11/admin/stats
http://192.168.43.11/monitoruri
2.3 Haproxy的日誌配置
vim /etc/rsyslog.conf
#### MODULES ####
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
#### RULES ####
local2.* /var/log/haproxy.log
systemctl restart rsyslog.service
2.4 Haproxy的訪問控制
vim /etc/haproxy/haproxy.cfg
frontend main *:80
acl blacklist src 192.168.43.100 ##設置訪問黑名單
http-request deny if blacklist ##黑名單請求拒絕
errorloc 403 http://192.168.43.11:8080/index.html##對黑名單設置訪問報錯頁面
default_backend static
yum install -y httpd
在server中安裝httpd
vim /etc/httpd/conf/httpd.conf
修改httpd的端口
Listen 8080
systemctl restart httpd
systemctl restart haproxy.service
測試:
指定黑名單訪問:
其他用戶訪問:
2.5 Haproxy的請求精確定位(動靜分離)
vim /etc/haproxy/haproxy.cfg
frontend main *:80
default_backend static
use_backend dynamic if { path_end .php } ##訪問以.php結尾訪問動態數據後端
backend static ##靜態數據後端
balance roundrobin
server web1 192.168.43.20:80 check
backend dynamic ##動態數據後端
balance roundrobin
server web2 192.168.43.30:80 check
systemctl restart haproxy.service
在server3中:
yum install -y php
在server3中安裝php
vim /var/www/html/index.php
設置php發佈頁面
<?php
phpinfo()
?>
systemctl restart httpd.service
重啓服務
測試:
2.6 Haproxy的讀寫分離
在server2中
yum install -y php
vim /var/www/html/index.php
讀的php頁面
mkdir /var/www/html/upload
建立用戶寫的目錄
chmod 777 /var/www/html/upload
<html>
<body>
<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename(server2):</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>
vim /var/www/html/upload_file.php
寫的php頁面
<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000000000000000))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
}
}
else
{
echo "Invalid file";
}
?>
systemctl restart httpd.service
在server3中
yum install -y php
vim /var/www/html/index.php
讀的php頁面
vim /var/www/html/upload_file.php
寫的php頁面
systemctl restart httpd.service
mkdir /var/www/html/upload
建立用戶寫的目錄
chmod 777 /var/www/html/upload
在server中
``
backend static
balance roundrobin
server web1 192.168.43.20:80 check
backend dynamic
balance roundrobin
server web2 192.168.43.30:80 check
``
測試
總結:用戶讀的內容爲server2中的內容,寫的內容爲server3.