❶ 餓了么 負載均衡 haproxy
HAProxy是免費、極速且可靠的用於為TCP和基於HTTP應用程序提供高可用、負載均衡和代理服務的解決方案,尤其適用於高負載且需要持久連接或7層處理機制的web站點。HAProxy還可以將後端的伺服器與網路隔離,起到保護後端伺服器的作用。HAProxy的負載均衡能力雖不如LVS,但也是相當不錯,而且由於其工作在7層,可以對http請求報文做深入分析,按照自己的需要將報文轉發至後端不同的伺服器(例如動靜分離),這一點工作在4層的LVS無法完成。
❷ 如何在linux上使用HAProxy配置HTTP負載均衡系統
一、安裝HAProxy
1、創建HAProxy運行賬戶和組
groupadd haproxy #添加haproxy組
useradd -g haproxy haproxy -s /bin/false #創建nginx運行賬戶haproxy並加入到haproxy組,不允許haproxy用戶直接登錄系統
2、安裝編譯工具
yum install gcc gcc-c++ make openssl-devel kernel-devel
3、安裝HAProxy
HAProxy下載地址:http://haproxy.1wt.eu/download/1.5/src/haproxy-1.5.2.tar.gz
上傳haproxy-1.5.2.tar.gz到/usr/local/src目錄中
cd /usr/local/src #進入軟體包存放目錄
tar zxvf haproxy-1.5.2.tar.gz #解壓
cd haproxy-1.5.2 #進入安裝目錄
make TARGET=linux26 CPU=x86_64 PREFIX=/usr/local/haprpxy #編譯
make install PREFIX=/usr/local/haproxy #安裝
參數說明:
TARGET=linux26 #使用uname -r查看內核,如:2.6.18-371.el5,此時該參數就為linux26
CPU=x86_64 #使用uname -r查看系統信息,如x86_64 x86_64 x86_64 GNU/Linux,此時該參數就為x86_64
PREFIX=/usr/local/haprpxy #/usr/local/haprpxy為haprpxy安裝路徑
4、設置HAProxy
mkdir -p /usr/local/haproxy/conf #創建配置文件目錄
mkdir -p /etc/haproxy #創建配置文件目錄
cp /usr/local/src/haproxy-1.5.2/examples/haproxy.cfg /usr/local/haproxy/conf/haproxy.cfg #拷貝配置模板文件
ln -s /usr/local/haproxy/conf/haproxy.cfg /etc/haproxy/haproxy.cfg #添加配置文件軟連接
cp -r /usr/local/src/haproxy-1.5.2/examples/errorfiles /usr/local/haproxy/errorfiles #拷貝錯誤頁面
ln -s /usr/local/haproxy/errorfiles /etc/haproxy/errorfiles #添加軟連接
mkdir -p /usr/local/haproxy/log #創建日誌文件目錄
touch /usr/local/haproxy/log/haproxy.log #創建日誌文件
ln -s /usr/local/haproxy/log/haproxy.log /var/log/haproxy.log #添加軟連接
cp /usr/local/src/haproxy-1.5.2/examples/haproxy.init /etc/rc.d/init.d/haproxy #拷貝開機啟動文件
chmod +x /etc/rc.d/init.d/haproxy #添加腳本執行許可權
chkconfig haproxy on #設置開機啟動
update-rc.d haproxy defaults 99 # ubuntu 設置開機啟動
ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin #添加軟連接
5、配置haproxy.cfg參數
cp /usr/local/haproxy/conf/haproxy.cfg /usr/local/haproxy/conf/haproxy.cfg-bak #備份
vi /usr/local/haproxy/conf/haproxy.cfg #編輯,修改
global
log 127.0.0.1 local0 notice
maxconn 2000
user haproxy
group haproxy
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
timeout connect 5000
timeout client 10000
timeout server 10000
listen appname 0.0.0.0:80
mode http
stats enable
stats uri /haproxy?stats
stats realm Strictly\ Private
stats auth A_Username:YourPassword
stats auth Another_User:passwd
balance roundrobin
option httpclose
option forwardfor
server lamp1 10.0.0.1:80 check
server lamp2 10.0.0.2:80 check
這里的haproxy.cfg只是一個案例,你可以根據實際情況修改
❸ 請教haproxy +mysql負載均衡
1. 添加監控MySQL狀態的埠
# vi
/etc/servicesmysqlcheck
6033/tcp
# MySQL status
check
2. 使用xinetd守護進程運行MySQL狀態檢測
# cat /etc/xinetd.d/mysqlchk
service mysqlcheck
{
disable = no
flags = REUSE
socket_type = stream
port = 6033
wait = no
user = root
server = /usr/local/haproxy/sbin/mysqlchk_status.sh
log_on_failure += USERID
}
3. 狀態檢測腳本
# vi /usr/local/haproxy/sbin/mysqlchk_status.sh
#/bin/bash
MYSQL_HOST="localhost"
MYSQL_PORT="3306"
MYSQL_USERNAME="root"
MYSQL_PASSWORD="123456"
ERROR_MSG=/usr/bin/mysql --host=$MYSQL_HOST --port=$MYSQL_PORT
--user=$MYSQL_USERNAME --password=$MYSQL_PASSWORD -e "show databases;"
if [ "$ERROR_MSG" != "" ]
then
# mysql is fine, return http 200
/bin/echo -e "HTTP/1.1 200 OK\r\n"
/bin/echo -e "Content-Type: Content-Type: text/plain\r\n"
/bin/echo -e "\r\n"
/bin/echo -e "MySQL is running.\r\n"
/bin/echo -e "\r\n"
else
# mysql is fine, return http 503
/bin/echo -e "HTTP/1.1 503 Service Unavailable\r\n"
/bin/echo -e "Content-Type: Content-Type: text/plain\r\n"
/bin/echo -e "\r\n"
/bin/echo -e "MySQL is *down*.\r\n"
/bin/echo -e "\r\n"
fi
# chown haproxy.haproxy /usr/local/haproxy/sbin/mysqlchk_status.sh
4. HAproxy日誌
# touch /var/log/haproxy.log
# chown haproxy.haproxy /var/log/haproxy.log
編輯/etc/syslog.conf文件,添加如下語句
local0.* /var/log/haproxy.log
5. HAProxy配置文件
[root@localhost htdocs]# cat /usr/local/haproxy/conf/haproxy.conf
global
maxconn 4096
daemon
pidfile /usr/local/haproxy/run/haproxy.pid
#debug
#quiet
user haproxy
group haproxy
defaults
log global
mode http
option httplog
option dontlognull
log 127.0.0.1 local0
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen admin_stats 192.168.0.1:80
mode http
stats uri /dbs
stats realm Global\ statistics
stats auth test:123456
listen proxy-mysql 0.0.0.0:23306
mode tcp
balance roundrobin
option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
server db01 192.168.0.1:3306 weight 1 check port 6033 inter 1s rise 2 fall 2
server db02 192.168.0.2:3306 weight 1 check port 6033 inter 1s rise 2 fall 2
option tcpka
6. HAProxy啟動腳本
# cat /etc/init.d/haproxy
#! /bin/sh
set -e
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/haproxy/sbin
PROGDIR=/usr/local/haproxy
PROGNAME=haproxy
DAEMON=$PROGDIR/sbin/$PROGNAME
CONFIG=$PROGDIR/conf/$PROGNAME.conf
PIDFILE=$PROGDIR/run/$PROGNAME.pid
DESC="HAProxy daemon"
SCRIPTNAME=/etc/init.d/$PROGNAME
# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0
start()
{
echo -n "Starting $DESC: $PROGNAME"
$DAEMON -f $CONFIG
echo "."
}
stop()
{
echo -n "Stopping $DESC: $PROGNAME"
haproxy_pid=cat $PIDFILE
kill $haproxy_pid
echo "."
}
restart()
{
echo -n "Restarting $DESC: $PROGNAME"
$DAEMON -f $CONFIG -p $PIDFILE -sf $(cat $PIDFILE)
echo "."
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
exit 1
;;
esac
exit 0
❹ 常見的負載均衡技術
四層負責均衡:主要是指通過判斷報文的IP地址和埠並通過一定的負載均衡演算法來決定轉發到哪個指定目標,主要工作在OSI模型的第四層。四層負載均衡對數據包只是起一個數據轉發的作用,並不會干預客戶端與伺服器之間應用層的通信(如:三次握手等)。所以能對數據所進行的操作也就很少,但相對於七層負載均衡來講效率會高上很多
七層負載均衡:也被稱為「內容交換」,指的是負載均衡設備通過報文中的應用層信息(URL、HTTP頭部等信息)和負載均衡演算法,選擇到達目的的內部伺服器。七層負載均衡可以「智能化」地篩選報文中 應用層信息,然後根據不同的信息進行特定的負載均衡調度。這種方式提升了應用系統在網路層上的靈活性,另外也在一定程度上提升了後端系統的安全性。因為像網路常見的DoS攻擊,這些攻擊在七層負載均衡的環境下通常都在負載均衡設備上就截止了,不會影響到後台伺服器的正常運行。
前網路中常見的負載均衡主要分為硬體負載均衡和軟體負載均衡。硬體負載均衡比較知名的產品有F5 Big-IP、Cirtix Netscaler等等。而軟體負載均衡就有著眾多的開源項目,常見的有Haproxy、nginx、lvs等。
Haproxy:
lvs:
nginx:
Haproxy可以做代理服務相對於nginx而言有很多相同之處,統一可以基於mode tcp進行四層代理也可以基於mode http進行七層代理,但不同的是其無法使用location和if等進行匹配判斷。突出優勢在於有會話綁定,web管理界面,狀態統計非常詳細。官方推薦只啟用一個進程,相對於nginx多進程架構工作並不理想,更多的線程可能會受到系統內存的一些限制。
程序環境:
主程序:/usr/sbin/haproxy
主配置文件:/etc/haproxy/haproxy.cfg
Unit file:/usr/lib/systemd/system/haproxy.service
查看配置文件
重要的幾個參數,及性能調優,多數無需修改
發現日誌發送給本機rsyslog的local2的facility,而本機的rsyslog里並沒有定義,需要我們自己去配置
所以vim /etc/rsyslog.conf添加一段將local2的所有信息記錄在對應日誌文件中
由於HAProxy可以工作在七層模型下,因此,要實現HAProxy的強大功能,一定要使用強大靈活的ACL規則,通過ACL規則可以實現基於HAProxy的智能負載均衡系統。HAProxy通過ACL規則完成兩種主要的功能,分別是:
1)通過設置的ACL規則檢查客戶端請求是否合法。如果符合ACL規則要求,那麼將放行;如果不符合規則,則直接中斷請求。
2)符合ACL規則要求的請求將被提交到後端的backend伺服器集群,進而實現基於ACL規則的負載均衡。HAProxy中的ACL規則經常使用在frontend段中,使用方法如下:
acl 自定義的acl 名稱 acl 方法 -i [ 匹配的路徑或文件] 其中:
·acl:是一個關鍵字,表示定義ACL規則的開始。後面需要跟上自定義的ACL名稱。
·acl方法:這個欄位用來定義實現ACL的方法,HAProxy定義了很多ACL方法,經常使用的方法有hdr_reg(host)、hdr_dom(host)、hdr_beg(host)、url_sub、url_dir、path_beg、path_end等。
·-i:表示不區分大小寫,後面需要跟上匹配的路徑或文件或正則表達式。與ACL規則一起使用的HAProxy參數還有use_backend,use_backend後面需要跟上一個backend實例名,表示在滿足ACL規則後去請求哪個backend實例,與use_backend對應的還有default_backend參數,它表示在沒有滿足ACL條件的時候默認使用哪個後端
這些例子定義了www_policy、bbs_policy、url_policy三個ACL規則,第一條規則表示如果客戶端以 www.z.cn 或 z.cn 開頭的域名發送請求時,則此規則返回true,同理第二條規則表示如果客戶端通過 bbs.z.cn 域名發送請求時,則此規則返回true,而第三條規則表示如果客戶端在請求的URL中包含「buy_sid=」字元串時,則此規則返回true。
第四、第五、第六條規則定義了當www_policy、bbs_policy、url_policy三個ACL規則返回true時要調度到哪個後端backend,例如,當用戶的請求滿足www_policy規則時,那麼HAProxy會將用戶的請求直接發往名為server_www的後端backend,其他以此類推。而當用戶的請求不滿足任何一個ACL規則時,HAProxy就會把請求發往由default_backend選項指定的server_cache這個後端backend。
與上面的例子類似,本例中也定義了url_static、host_www和host_static三個ACL規則,其中,第一條規則通過path_end參數定義了如果客戶端在請求的URL中以.gif、.png、.jpg、.css或.js結尾時返回true,第二條規則通過hdr_beg(host)參數定義了如果客戶端以www開頭的域名發送請求時則返回true,同理,第三條規則也是通過hdr_beg(host)參數定義了如果客戶端以img.、video.、download.或ftp.開頭的域名發送請求時則返回true。
第四、第五條規則定義了當滿足ACL規則後要調度到哪個後端backend,例如,當用戶的請求同時滿足host_static規則與url_static規則,或同時滿足host_www和url_static規則時,那麼會將用戶請求直接發往名為static的後端backend,如果用戶請求滿足host_www規則,那麼請求將被調度到名為www的後端backend,如果不滿足所有規則,那麼將用戶請求默認調度到名為server_cache的這個後端backend。
log:全局的日誌配置,local0是日誌設備,info表示日誌級別。其中日誌級別有err、warning、info、debug4種可選。這個配置表示使用127.0.0.1上的rsyslog服務中的local0日誌設備,記錄日誌等級為info。
maxconn:設定每個HAProxy進程可接受的最大並發連接數,此選項等同於Linux命令行選項「ulimit -n」。
user/group:設置運行HAProxy進程的用戶和組,也可使用用戶和組的uid和gid值來替代。
daemon:設置HAProxy進程進入後台運行。這是推薦的運行模式。
nbproc:設置HAProxy啟動時可創建的進程數,此參數要求將HAProxy運行模式設置為daemon,默認只啟動一個進程。該值的設置應該小於伺服器的CPU核數。創建多個進程,能夠減少每個進程的任務隊列,但是過多的進程可能會導致進程崩潰。
pidfile:指定HAProxy進程的pid文件。啟動進程的用戶必須有訪問此文件的許可權。
mode:設置HAProxy實例默認的運行模式,有tcp、http、health三個可選值。
retries:設置連接後端伺服器的失敗重試次數,如果連接失敗的次數超過這里設置的值,HAProxy會將對應的後端伺服器標記為不可用。此參數也可在後面部分進行設置。
timeout connect:設置成功連接到一台伺服器的最長等待時間,默認單位是毫秒,但也可以使用其他的時間單位後綴。
timeout client:設置連接客戶端發送數據時最長等待時間,默認單位是毫秒,也可以使用其他的時間單位後綴。
timeout server:設置伺服器端回應客戶端數據發送的最長等待時間,默認單位是毫秒,也可以使用其他的時間單位後綴。
timeout check:設置對後端伺服器的檢測超時時間,默認單位是毫秒,也可以使用其他的時間單位後綴。
bind:此選項只能在frontend和listen部分進行定義,用於定義一個或幾個監聽的套接字。bind的使用格式為: bind [<address>:<port_range>] interface <interface>其可以為主機名或IP地址,如果將其設置為「*」或「0.0.0.0」,將監聽當前系統的所有IPv4地址。port_range可以是一個特定的TCP埠,也可是一個埠范圍,小於1024的埠需要有特定許可權的用戶才能使用。interface為可選選項,用來指定網路介面的名稱,只能在Linux系統上使用。
option httplog:在默認情況下,HAProxy日誌是不記錄HTTP請求的,這樣很不方便HAProxy問題的排查與監控。通過此選項可以啟用日誌記錄HTTP請求。
option forwardfor:如果後端伺服器需要獲得客戶端的真實IP,就需要配置此參數。由於HAProxy工作於反向代理模式,因此發往後端真實伺服器的請求中的客戶端IP均為HAProxy主機的IP,而非真正訪問客戶端的地址,這就導致真實伺服器端無法記錄客戶端真正請求來源的IP,而X-Forwarded-For則可用於解決此問題。通過使用forwardfor選項,HAProxy就可以向每個發往後端真實伺服器的請求添加X-Forwarded-For記錄,這樣後端真實伺服器日誌可以通過「X-Forwarded-For」信息來記錄客戶端來源IP。
option httpclose:此選項表示在客戶端和伺服器端完成一次連接請求後,HAProxy將主動關閉此TCP連接。這是對性能非常有幫助的一個參數。
log global:表示使用全局的日誌配置,這里的global表示引用在HAProxy配置文件global部分中定義的log選項配置格式。
default_backend:指定默認的後端伺服器池,也就是指定一組後端真實伺服器,而這些真實伺服器組將在backend段進行定義。這里的htmpool就是一個後端伺服器組。
option redispatch:此參數用於cookie保持的環境中。在默認情況下,HAProxy會將其請求的後端伺服器的serverID插入cookie中,以保證會話的session持久性。而如果後端的伺服器出現故障,客戶端的cookie是不會刷新的,這就會出現問題。此時,如果設置此參數,就會將客戶的請求強制定向到另外一台健康的後端伺服器上,以保證服務正常。
option abortonclose:如果設置了此參數,可以在伺服器負載很高的情況下,自動結束當前隊列中處理時間比較長的連接。
-balance:此關鍵字用來定義負載均衡演算法。目前HAProxy支持多種負載均衡演算法,常用的有如下幾種:
cookie:表示允許向cookie插入SERVERID,每台伺服器的SERVERID可在下面的server關鍵字中使用cookie關鍵字定義。
option httpchk:此選項表示啟用HTTP的服務狀態檢測功能。HAProxy作為一個專業的負載均衡器,它支持對backend部分指定的後端服務節點的健康檢查,以保證在後端backend中某個節點不能服務時,把從frotend端進來的客戶端請求分配至backend中其他健康節點上,從而保證整體服務的可用性。
option httpchk的用法如下: option httpchk <method> <uri> <version> 其中,各個參數的含義如下:
check:表示啟用對此後端伺服器執行健康狀態檢查。
inter:設置健康狀態檢查的時間間隔,單位為毫秒。
rise:設置從故障狀態轉換至正常狀態需要成功檢查的次數,例如,「rise 2」表示2次檢查正確就認為此伺服器可用。
fall:設置後端伺服器從正常狀態轉換為不可用狀態需要檢查的次數,例如,「fall 3」表示3次檢查失敗就認為此伺服器不可用。
cookie:為指定的後端伺服器設定cookie值,此處指定的值將在請求入站時被檢查,第一次為此值挑選的後端伺服器將在後續的請求中一直被選中,其目的在於實現持久連接的功能。上面的「cookie server1」表示web1的serverid為server1。同理,「cookie server2」表示web2的serverid為server2。
weight:設置後端真實伺服器的權重,默認為1,最大值為256。設置為0表示不參與負載均衡。
backup:設置後端真實伺服器的備份伺服器,僅僅在後端所有真實伺服器均不可用的情況下才啟用。
用nginx反代後端的兩台tomcat主機,做動靜分離,如果是jsp結尾的就發往後端,否則就交給nginx處理。
在兩台tomcat主機上創建應用
nginx配置
則動靜分離就實現了,並且我們還基於uri實現了會話粘性
❺ Java web項目,怎麼做負載均衡啊
HAProxy是一款反向代理伺服器工具,通過它,可以實現負載均衡。它支持雙機熱備支持虛擬主機,但其配置簡單,擁有非常不錯的伺服器健康檢查功能,當其代理的後端伺服器出現故障, HAProxy會自動將該伺服器摘除,故障恢復後再自動將該伺服器加入。新的1.3引入了frontend,backend,frontend根據任意HTTP請求頭內容做規則匹配,然後把請求定向到相關的backend.
利用HAPorxy實現負載均衡
1. 利用HAProxy實現負載均衡
192.168.169.137 (haproxy)———負載均衡———-(192.168.169.117;192.168.169.118)
安裝配置HAproxy
cd /usr/local/
wget http://haproxy.1wt.eu/download/1.3/src/haproxy-1.3.14.2.tar.gz
tar zxvf haproxy-1.3.14.2.tar.gz
mv haproxy-1.3.14.2 haproxy
cd haproxy
make TARGET=linux26
2. 創建配置文件
# vi haproxy.cfg
global
maxconn 5120
chroot /usr/local/haproxy
uid 99
gid 99
daemon
quiet
nbproc 2 #通過nbproc多設置幾個haproxy並發進程,這樣每個進程的task_queue相對就會短很多,性能自然就能提高不少
#pidfile /var/run/haproxy-private.pid
defaults
log global
mode http
option httplog
option dontlognull
log 127.0.0.1 local3
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen webfarm 0.0.0.0:80
mode http
stats uri /haproxy-stats #監控haproxy狀態
stats realm Haproxy\ statistics
stats auth netseek:52netseek #設置狀態監控的用戶名為netseek密碼為52netseek
balance roundrobin #負載均衡演算法
cookie SERVERID insert indirect
option httpclose #
option forwardfor #apache日誌轉發功能
option httpchk HEAD /check.txt HTTP/1.0 #健康檢測
server app_bbs1 192.168.169.117:80 cookie app1inst1 check inter 2000 rise 2 fall 5
server app_bbs2 192.168.169.118:80 cookie app1inst2 check inter 2000 rise 2 fall 5
syslog.conf里加一行
local3.* /var/log/haproxy.log
# touch /var/log/haproxy.log
# chown haproxy:haproxy /var/log/haproxy.log
# chmod u+x /var/log/haproxy.log
# tail –f /var/log/harpoxy.log 監控日誌
# ./haproxy -f haproxy.cfg 啟動服務.
監控狀態圖示http://192.168.169.137/haproxy-stats ,輸入用戶名密碼查看狀態。
後端apache日誌處理
配置httpd.conf
LogFormat 「%{X-Forwarded-For}i %l %u %t \」%r\」 %>s %b 」 combined
CustomLog /var/log/httpd/access_log combined
虛擬主機不記錄檢測日誌:
SetEnvIf Request_URI 「^/check\.txt$」 dontlog
LogLevel warn
ErrorLog /var/log/httpd/vhost_error.log
CustomLog /var/log/httpd/vhost_access.log combined env=!dontlog
相關介紹
#./haproxy –help //haproxy相關命令參數介紹.
haproxy -f <配置文件> [-n 最大並發連接總數] [-N 每個偵聽的最大並發數] [-d] [-D] [-q] [-V] [-c] [-p <pid文件>] [-s] [-l] [-dk]
[-ds] [-de] [-dp] [-db] [-m <內存限制M>] [{-sf|-st} pidlist...]
-d 前台,debug模式
-D daemon模式啟動
-q 安靜模式,不輸出信息
-V 詳細模式
-c 對配置文件進行語法檢查
-s 顯示統計數據
-l 顯示詳細統計數據
-dk 不使用kqueue
-ds 不使用speculative epoll
-de 不使用epoll
-dp 不使用poll
-db 禁用後台模式,程序跑在前台
-sf <pidlist>
程序啟動後向pidlist里的進程發送FINISH信號,這個參數放在命令行的最後
-st <pidlist>
程序啟動後向pidlist里的進程發送TERMINATE信號,這個參數放在命令行的最後
❻ haproxy四層負載均衡後端流量怎麼走的
haproxy當配置為四層,也就是TCP時,其將請求根據演算法,轉發給後端伺服器。後端處理後,將請求返回haproxy。haproxy再將請求回給客戶端。其工作方式,類似於LVS的 NAT模式。具體可以參考LVS的NAT模式。
❼ 如何在ubuntu14.0下為WordPress應用伺服器搭建四層負載均衡
當前環境快照
可選:在繼續本教程之前,你可能想為你當前環境創建快照。本教程中快照有兩個目的:
如果發生錯誤可以回滾到可工作環境
對原始伺服器做一次性復制,而不需要再次安裝和配置php以及Nginx
注意:為環境創建快照需要短暫的關閉VPS
為wordpress-1和mysql-1兩個VPS做一個快照。
現在有了快照以後,我們就可以准備好繼續搭建環境中其他部分了。
創建第二台web應用伺服器
現在我們需要創建第二個VPS來分擔原始應用伺服器的負載。有兩種選擇:
從之前的快照wordpress-1中創建一個新的VPS
從頭開始重新創建一個VPS並且設置該VPS和wordpress-1有相同的軟體和配置
不論那種方法,如果網路可用,一定要確保勾選個人網路。個人網路是本教程中所有VPS都需要的。
如果沒有個人網路選項,用你的VPS的公開IP來替代內網IP。需要注意的是,當使用公網IP在應用伺服器和資料庫伺服器之間傳輸敏感數據比如非加密的資料庫密碼,並不是一個很好的選擇,因為這些信息需要在互聯網上傳輸。
方式一:使用快照創建新的VPS
創建一個新的VPS,叫做wordpress-2,使用你為wordpress-1做的快照來做。
如果你選擇的這種方式,可以跳過「方式二」直接去看「同步web應用文件」小節。
方式二:從頭創建一個新的VPS
這種方式和「方式一」可二選一。
如果你想從頭設置wordpress-2伺服器,而不是使用wordpress-1的快照,那麼你要確保安裝的軟體相同。如果你忘了如何安裝和設置原始wordpress伺服器,可以參考預備知識章節中如何設置web伺服器小節。
快速參考,這里是一個相關軟體和配置文件的列表,需要你來安裝或復制:
軟體方面:
Mysql客戶端
Nginx
PHP
安裝完這些軟體後,在你的wordpress-2伺服器上運行一下命令:
sudo apt-get update
sudo apt-get install mysql-client
sudo apt-get install nginx php5-fpm php5-mysql
原始應用伺服器上需要創建或編輯的配置文件:
/etc/php5/fpm/php.ini
/etc/php5/fpm/pool.d/www.conf
/etc/nginx/sites-available/example.com
/etc/nginx/sites-enabled/example.com
當你修改完配置文件後,不要忘了沖洗PHP和Nginx,可以使用一下命令:
sudo service php5-fpm restart
sudo service nginx restart
在新伺服器的安裝和配置完成以後,我們需要同步wordpress應用文件。
同步Web應用文件
在應用程序可以進行負載均衡之前,我們需要確保新應用伺服器的應用程序文件和原始wordpress伺服器的文件是同步的。這些文件的位置也就是你安裝wordpress的位置,以及其他的一些文件。除了wordpress運行所需要的配置文件之外,上傳的文件和通過wordpress介面安裝的插件的安裝文件和這些插件上傳的文件都需要去同步。在預備知識文章中,我們將wordpress安裝在/var/www/example.com路徑下--我們將
在所有的例子中都會使用這個路徑,但是你需要將這個路徑替換為你wordpress的實際安裝路徑。
有很多方法在伺服器之間同步文件--NFS或者glusterFS都是不錯的選擇。我們將使用glusterFS來滿足我們所有的同步需求,因為它允許每個應用伺服器來存儲應用程序文件的副本,同時也會保持文件系統的一致性。下圖是我們共享存儲方案的概念圖:
如果你對本小節中使用的glusterFS完全不熟悉,請參考這個GlusterFS教程(https://www.digitalocean.com/community/tutorials/how-to-create-a-rendant-storage-pool-using-glusterfs-on-ubuntu-servers),這是本小節的基礎。
注意:下面的內容將經常在wordpress-1和wordpress-2伺服器之間跳轉,請確保在正確伺服器上運行響應命令,否則你將遇到麻煩。
編輯hosts文件
如果你有一個內部DNS,而且這個DNS記錄了你VPS的內部IP地址,那麼你可以跳過這一步直接配置並執行glusterFS相關命令。
否則,需要在wordpress-1和wordpress-2上編輯/etc/hosts文件:
sudo vi /etc/hosts
增加以下兩行,將紅色字替換為你應用伺服器的各自ip:
wordpress_1_private_IP wordpress-1
wordpress_2_private_IP wordpress-2
保存並退出。
安裝GlusterFS並配置一個冗餘盤
在wordpress-1和wordpress-2上使用apt-get命令安裝glusterFS服務端軟體:
sudo apt-get install glusterfs-server
在wordpress-1上,運行以下命令來和wordpress-2保持對等:
sudo gluster peer probe wordpress-2
在wordpress-2上,運行以下命令來和wordpress-1保持對等:
sudo gluster peer probe wordpress-1
在wordpress-1和wordpress-2上,創建路徑用來存儲glusterFS所管理的文件,運行:
sudo mkdir /gluster-storage
在wordpress-1上,創建glusterFS副本,我們稱作volume1,glusterFS 會將它存放在/gluster-storage中的數據保存在你所有的應用伺服器上,運行:
sudo gluster volume create volume1 replica 2 transport tcp wordpress-1:/gluster-storage wordpress-2:/gluster-storage force
預期輸出以下結果:
volume create: volume1: success: please start the volume to access data
再次在wordpress-1上,運行一下命令來啟動剛剛創建的glusterFS卷,在volume1上運行:
sudo gluster volume start volume1
預期輸出以下結果:
volume start: volume1: success
在wordpress-1上,如果你想查看剛創建和啟動的glusterFS卷的信息,運行:
sudo gluster volume info
你需要明白的是目前有兩個glusterFS「同盟」,每個對應一個wordpress伺服器。
現在我們已經運行了一個glusterFS盤,為了能夠使用它來同步文件,我們需要將該盤掛載。
掛載共享存儲
首先掛載wordpress-1上的文件系統。
在wordpress-1上,修改fstab文件來使共享文件系統可以隨機啟動:
sudo vi /etc/fstab
添加以下行到fstab來將/storage-pool目錄作為掛載點:
wordpress-1:/volume1 /storage-pool glusterfs defaults,_netdev 0 0
保存並退出。
在wordpress-1上,現在將glusterFS盤掛載至/storage_pool文件系統:
sudo mkdir /storage-pool
sudo mount /storage-pool
在wordpress-1上掛載共享盤/storage-pool後,你可以運行df -h命令來列出當前已掛載的文件。接下來,我們將使用類似的流程來掛載wordpress-2上的共享文件系統。
在wordpress-2上,編輯fstab來使共享系統隨機啟動:
sudo vi /etc/fstab
添加以下行到fstab來將/storage-pool目錄作為掛載點:
wordpress-2:/volume1 /storage-pool glusterfs defaults,_netdev 0 0
在wordpress-2上,現在將glusterFS盤掛載至/storage_pool文件系統:
sudo mkdir /storage-pool
sudo mount /storage-pool
現在,所有在/storage-pool文件系統中創建、修改或刪除的文件都會在兩個wordpress伺服器之間同步,即使當其中一個伺服器暫時故障時也會同步。
將wordpress文件移至共享存儲
下一步是將wordpress-1的wordpress文件移動到共享存儲中。請將紅色字體替換為你自己的值。/var/www/example.com表示wordpress文件的位置(nginx也會在這里查找文件),example.com本身只是根目錄。
在wordpress-1上,運行以下命令來移動wordpress文件至共享文件系統/storage-pool:
sudo mv /var/www/example.com /storage-pool/
sudo chown www-data:www-data /storage-pool/example.com
接下來,你可能想創建一個符號鏈接來指向wordpress在共享文件中位置:
sudo ln -s /storage-pool/example.com /var/www/example.com
目前wordpress文件放在共享文件系統/storage-pool中,這些文件接受Nginx訪問他們的原始路徑/var/www/example.com。
將新的應用伺服器指向共享存儲區
下一步是我們在新web應用程序伺服器上創建一個符號鏈接指向WordPress文件共享文件系統。
如果你選擇使用快照創建wordpress-2,在wordpress-2上運行以下命令:
sudo rm /var/www/example.com
sudo ln -s /storage-pool/example.com /var/www/example.com
如果你從頭創建wordpress-2伺服器,在wordpress-2上運行以下命令:
sudo mkdir -p/var/www
sudo ln -s/storage-pool/example.com /var/www/example.com
這就是wordpress應用的文件同步。接下來是使新伺服器wordpress-2連接資料庫。
創建一個新的資料庫用戶
由於Mysql使用用戶名和源主機來區別用戶,我們需要創建一個新的wordpress用戶來連接新的伺服器wordpress-2。
在資料庫伺服器(mysql-1)上連接至MYSQL控制台:
mysql -u root -p
在一下mysql語句中,將紅色字體替換為你真實環境的參數:
wordpress用戶:Mysql中wordpress用戶。確保和已經存在的用戶名保持一致。
wordpress2private_IP:wordpress-2伺服器的內部ip。
密碼:wordpress用戶的Mysql資料庫密碼。去報和已經存在的用戶名密碼保持一致。
在wordpress-2上mysql控制台中運行以下命令:
CREATE USER 'wordpressuser'@'wordpress_2_private_IP' IDENTIFIED BY 'password';
GRANT SELECT,DELETE,INSERT,UPDATE ON wordpress.* TO 'wordpressuser'@'wordpress_2_private_IP';
FLUSH PRIVILEGES;
現在第二台伺服器wordpress-2就可以登錄mysql伺服器mysql-1了。
還沒負載均衡
注意,有兩個應用伺服器在運行但是他們並沒有被負載均衡,因為每個伺服器必須通過他們的外網IP來訪問。而我們希望能夠通過相同的URL訪問該應用程序,如http://example.com/,以及在兩台伺服器之間做流量分配。
安裝HAProxy
在內網中創建一個新的VPS,在本教程中,我們叫做haproxy-www。
在haproxy-www伺服器上使用apt-get命令來安裝HAProxy:
sudo apt-get update
sudo apt-get install haproxy
我們需要使用HAProxy初始化腳本來啟動和停止HAProxy:
sudo vi /etc/default/haproxy
將ENABLED值改為1來開啟初始化腳本:
ENABLED=1
保存並退出。
現在HAProxy可以在伺服器上被啟動和停止。當然,你現在可以使用命令來控制HAProxy了。讓我們來檢查下它是否運行:
/etc/init.d$ sudo service haproxy status
輸出結果:
haproxy not running
HAProxy沒有運行。這是對的,因為它首先需要配置。接下來,讓我們來配置HAProxy。
HAProxy配置
HAProxy的配置文件主要分為以下兩部分:
Global:設置進程級參數
Proxies:包括默認、監聽、前端、後端參數
Global配置
所有的HAProxy配置都需要在HAProxy伺服器haproxy-www上進行。
首先,復制一份默認的haproxy.cfg文件:
cd /etc/haproxy; sudo cp haproxy.cfg haproxy.cfg.orig
現在,使用文本編輯器打開haproxy.cfg文件:
sudo vi /etc/haproxy/haproxy.cfg
你將看到有兩部分已經被定義:global和defaults。首先,我們將對一些默認參數做一些修改。
在默認情況下,找到一下兩行:
mode http
option httplog
將其中http替換為tcp,結果如下:
mode tcp
option tcplog
選擇tcp作為HAProxy執行第4層負載平衡模式配置。在我們的例子中,這意味著一個特定的IP地址和埠中所有傳入的流量將被轉發到同一後端。如果你不熟悉這一概念,請閱讀在HAProxy介紹中的負載均衡小節。
先不要關閉配置文件,我們將加上proxy配置。
代理配置(Proxyies)
我們首先要做的事情是增加前端。對一個基本的4層負載均衡設置,前端監聽一個特定的IP地址和埠的流量,並將傳入流量轉發到一個指定的後端。
在配置文件的末尾,讓我們添加上我們的前端:www。請將haproxy_www_public_IP替換為你自己的haproxy-www伺服器IP地址:
frontend www
bind haproxy_www_public_IP:80
default_backend wordpress-backend
以下是對上面的前端配置代碼片段中的每一行是什麼意思做出解釋:
frontend www:指定了一個名為「www」的前端,我們將用它來處理傳入www的流量
bind haproxywwwpublic_IP:80:將haproxywwwpublic_IP替換為你haproxy-www伺服器的外網ip。這是告訴haproxy這個前端將處理這個ip和埠上的流量。
default_backend wordpress-backend:這指定所有這些前端的流量將會轉發到wordpress-backend,這在下一步我們將定義
配置完前端後,繼續將以下後端配置加入文件末尾:
backend wordpress-backend
balance roundrobin
mode tcp
server wordpress-1 wordpress_1_private_IP:80 check
server wordpress-2 wordpress_2_private_IP:80 check
以下是對上面每行配置的解釋:
backend wordpress-backend:指定了一個名為「wordpress-backend」的後端
balance roundrobin:指定該後端將使用「輪循」的負載均衡演算法
server wordpress-1 ...:指定了一個名為「wordpress-1」的後端伺服器,內外nagIP(你必須替換為你自己伺服器ip)和埠監聽,在這個例子中為80埠。「check」選項表示使負載均衡器對這個伺服器定期進行健康檢查
server wordpress-2 ...:指定了一個名為「wordpress-2」的後端
保存並退出。
現在HAProxy可以啟動了,但是讓我們先開啟日誌功能。
開始HAProxy日誌功能
啟用HAproxy日誌功能非常簡單,首先編輯rsyslog.conf文件:
sudo vi /etc/rsyslog.conf
接著找到一下兩行,取消這兩行注釋來開啟UDP日誌功能:
$ModLoad imudp
$UDPServerRun 514
$UDPServerAddress 127.0.0.1
現在重啟rsyslog來使新配置生效:
sudo service rsyslog restart
HAProxy日誌功能現在已經開啟了!日誌文件將在HAProxy啟動後被放在/var/log/haproxy.log。
啟動HAProxy和PHP/Nginx
在haproxy-www伺服器上,啟動HAProxy來使配置生效:
sudo service haproxy restart
取決於你如何設置您的新應用程序伺服器,您可能需要重新啟動你的WordPress應用程序通過重啟PHP和Nginx。
在wordpress-2伺服器上,重啟PHP和Nginx:
sudo service php5-fpm restart
sudo service nginx restart
現在WordPress應該運行在兩個應用程序伺服器,它們是負載均衡的。但仍有最後一個配置需要更改。
更新WordPress配置
現在你的WordPress應用程序的URL已經改變,我們必須在WordPress更新幾個設置。
在wordpress伺服器,編輯你的wp-config.php文件。它位於WordPress的安裝位置(在本教程中,它是安裝在/var/www/example.com但你安裝可能會有所不同):
cd /var/www/example.com; sudo vi wp-config.php
找到"DB_NAME"所在行;增加以下配置在該行之上,並且替換紅色的值:
define('WP_SITEURL', 'http://haproxy_www_public_IP');
define('WP_HOME', 'http://haproxy_www_public_IP');
保存並退出。
現在WordPress url配置為指向您的負載平衡器,而不是只有最初的WordPress伺服器,而且在當你試著訪問wp-admin控制台時發揮作用。
負載均衡完成
您的web應用程序伺服器現在是負載均衡的。你的負載平衡WordPress現在可以訪問您的用戶通過負載均衡器haproxy-www的外網IP地址或域名訪問!
❽ 如何使用HAProxy的設置MySQL負載均衡
先做主從同步,達到讀寫分離,在主庫中寫,讀的時候可以從它的幾個從庫內讀,分發的辦法有幾種,可以負載設備,也可以lvs,或者可以更改你的程序配置資料庫指向
❾ 如何在Linux上使用HAProxy配置HTTP負載均衡系統
TTP負載均衡簡介
HTTP負載均衡是一種網路解決方案,負責在託管相同應用內容的幾台伺服器之間分配進入的HTTP或HTTPS流量。由於在多台可用伺服器之間均衡了應用請求,負載均衡系統就能防止任何應用伺服器變成單一故障點,因而提高了整體的應用可用性和響應能力。它還讓你可以隨著不斷變化的工作負載,輕松地縮小/擴大部署的應用系統的規模,只需添加或刪除額外的應用伺服器。
哪裡使用負載均衡、何時使用?
由於負載均衡系統改進了伺服器的利用率,最大限度地提高了可用性,只要你的伺服器開始面臨繁重負載,或者正為一個較龐大的項目規劃架構,就應該使用它。事先規劃好負載均衡系統的用途是個好習慣。那樣,未來你需要擴展環境規模時,它會證明其用途。
HAProxy是什麼東東?
HAProxy是一種流行的開源負載均衡和代理系統,面向GNU/Linux平台上的TCP/HTTP伺服器。HAProxy採用了單一線程的事件驅動型架構而設計,它能夠輕松地處理10G網卡線路速度,現廣泛應用於許多生產環境中。其功能特性包括:自動檢查健康狀況、可定製的負載均衡演算法、支持HTTPS/SSL以及會話速率限制等。
我們在本教程中要達到什麼樣的目的?
在本教程中,我們將逐步介紹為HTTP網站伺服器配置基於HAProxy的負載均衡系統這個過程。
前提條件
你至少需要一台(最好是兩台)網站伺服器來證實所搭建負載均衡系統的功能。我們假設,後端HTTP網站伺服器已經搭建並運行起來。
將HAProxy安裝到Linux上
就大多數發行版而言,我們可以使用你所用發行版的軟體包管理器來安裝HAProxy。
將HAProxy安裝到Debian上
在Debian中,我們需要為Wheezy添加向後移植功能。為此,請在/etc/apt/sources.list.d中創建一個名為「backports.list」的新文件,其內容如下:
deb http://cdn.debian.net/debian wheezybackports main
更新你的軟體庫數據,並安裝HAProxy。
# apt get update
# apt get install haproxy
將HAProxy安裝到Ubuntu上
# apt get install haproxy
將HAProxy安裝到CentOS和RHEL上
# yum install haproxy
配置HAProxy
在本教程中,我們假設有兩台HTTP網站伺服器已搭建並運行起來,其IP地址分別為192.168.100.2和192.168.100.3。我們還假設,負載均衡系統將在IP地址為192.168.100.4的那台伺服器處進行配置。
為了讓HAProxy發揮功用,你需要更改/etc/haproxy/haproxy.cfg中的幾個項目。這些變更在本章節中予以描述。萬一某個配置對不同的GNU/Linux發行版而言有所不同,會在相應段落中加以註明。
1. 配置日誌功能
你首先要做的工作之一就是,為你的HAProxy建立合適的日誌功能,這對將來進行調試大有用處。日誌配置內容位於/etc/haproxy/haproxy.cfg的global部分。下面這些是針對特定發行版的指令,用於為HAProxy配置日誌。
CentOS或RHEL:
要想在CentOS/RHEL上啟用日誌功能,把:
log 127.0.0.1 local2
換成:
log 127.0.0.1 local0
下一步,在/var/log中為HAProxy創建單獨的日誌文件。為此,我們需要改動當前的rsyslog配置。為了讓配置簡單而清楚,我們將在/etc/rsyslog.d/中創建一個名為haproxy.conf的新文件,其內容如下。
$ModLoad imudp
$UDPServerRun 514
$template Haproxy,"%msg%\n"
local0.=info /var/log/haproxy.log;Haproxy
local0.notice /var/log/haproxystatus.log;Haproxy
local0.* ~
該配置將把基於$template的所有HAProxy消息隔離到/var/log中的日誌文件。現在,重啟rsyslog,讓變更內容生效。
# service rsyslog restart
Debian或Ubuntu:
要想在Debian或Ubuntu上為HAProxy啟用日誌功能,把:
log /dev/log local0
log /dev/log local1 notice
換成:
log 127.0.0.1 local0
下一步,為HAProxy配置單獨的日誌文件,編輯/etc/rsyslog.d/中一個名為haproxy.conf的文件(或者Debian中的49-haproxy.conf),其內容如下。
$ModLoad imudp
$UDPServerRun 514
$template Haproxy,"%msg%\n"
local0.=info /var/log/haproxy.log;Haproxy
local0.notice /var/log/haproxystatus.log;Haproxy
local0.* ~
該配置將把基於$template的所有HAProxy消息隔離到/var/log中的日誌文件。現在,重啟rsyslog,讓變更內容生效。
# service rsyslog restart
2. 設置默認值
下一步是為HAProxy設置默認變數。找到/etc/haproxy/haproxy.cfg中的defaults部分,把它換成下列配置。
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
maxconn 20000
contimeout 5000
clitimeout 50000
srvtimeout 50000
上述配置推薦HTTP負載均衡器使用,但可能不是最適合你環境的解決方案。如果那樣,請參閱HAProxy參考手冊頁,進行適當的改動和調整。
3. 網站伺服器集群的配置
網站伺服器集群(Webfarm)的配置定義了可用的HTTP伺服器集群。我們所建負載均衡系統的大部分設置都將放在這里。現在,我們將創建一些基本的配置,我們的節點將在這里加以定義。把從frontend部分到文件末尾的所有配置換成下列代碼:
listen webfarm *:80
mode http
stats enable
stats uri /haproxy?stats
stats realm Haproxy\ Statistics
stats auth haproxy:stats
balance roundrobin
cookie LBN insert indirect nocache
option httpclose
option forwardfor
server web01 192.168.100.2:80 cookie node1 check
server web02 192.168.100.3:80 cookie node2 check
「listen webfarm *:80」這一行定義了我們的負載均衡系統將偵聽哪些介面。出於本教程的需要,我將該值設為「*」,這讓負載均衡系統偵聽我們的所有介面。在實際場景下,這可能不合意,應該換成可從互聯網來訪問的某個介面。
stats enable
stats uri /haproxy?stats
stats realm Haproxy\ Statistics
stats auth haproxy:stats
上述設置聲明,可以在http://<load-balancer-IP>/haproxy?stats處訪問負載均衡系統的統計數字。這種訪問由簡單的HTTP驗證以及登錄名「haproxy」和密碼「stats」來確保安全。這些設置應該換成你自己的登錄信息。如果你不想讓這些統計數字被人看到,那麼可以完全禁用它們。
下面是HAProxy統計數字的一個例子。
「balance roundrobin」這一行定義了我們將使用哪種類型的負載均衡。在本教程中,我們將使用簡單的輪叫調度演算法,這對HTTP負載均衡來說完全綽綽有餘。HAProxy還提供了其他類型的負載均衡:
•leastconn:連接數最少的伺服器優先接收連接。
•source:對源IP地址進行哈希處理,用運行中伺服器的總權重除以哈希值,即可決定哪台伺服器將接收請求。
•uri:URI的左邊部分(問號前面)經哈希處理,用運行中伺服器的總權重除以哈希值。所得結果決定哪台伺服器將接收請求。
•url_param:變數中指定的URL參數將在每個HTTP GET請求的查詢串中進行查詢。你基本上可以將使用蓄意製作的URL(crafted URL)的請求鎖定於特定的負載均衡節點。
•hdr(name):HTTP頭<name> 將在每個HTTP請求中進行查詢,被定向到特定節點。
「cookie LBN insert indirect nocache」這一行讓我們的負載均衡系統存儲持久性cookie,這讓我們得以准確查明集群中的哪個節點用於某一個會話。這些節點cookie將與指定的名稱一並存儲起來。在我們這個例子中,我使用了「LBN」,但你可以指定自己喜歡的任意名稱。節點將為該cookie把字元串作為一個值而存儲起來。
server web01 192.168.100.2:80 cookie node1 check
server web02 192.168.100.3:80 cookie node2 check
上述部分對網站伺服器節點集群進行了定義。每台伺服器都用內部名稱(比如web01和web02)、IP地址和獨特的cookie串來表示。cookie串可以定義為你需要的任何名稱。我使用了簡單的node1、node2 ... node(n)。
啟動HAProxy
你完成了配置工作後,可以啟動HAProxy,驗證一切按預期運行。
在Centos/RHEL上啟動HAProxy
使用下列指令,讓HAProxy能夠在系統啟動後啟動,並打開它:
# chkconfig haproxy on
# service haproxy start
當然,別忘了啟用防火牆中的埠80,如下所示。
CentOS/RHEL 7上的防火牆:
# firewallcmd permanent zone=public addport=80/tcp
# firewallcmd reload
CentOS/RHEL 6上的防火牆:
把下面這一行添加到/etc/sysconfig/iptables中的這部分「:OUTPUT ACCEPT」:
A INPUT m state state NEW m tcp p tcp dport 80 j ACCEPT
然後重啟iptables:
# service iptables restart
在Debian上啟動HAProxy
使用下列指令啟動HAProxy:
# service haproxy start
別忘了啟用防火牆中的埠80,為此把下面這一行添加到/etc/iptables.up.rules:
A INPUT p tcp dport 80 j ACCEPT
在Ubuntu上啟動HAProxy
讓HAProxy能夠在系統啟動後啟動,只要在/etc/default/haproxy中將「ENABLED」選項設為「1」:
ENABLED=1
啟動HAProxy:
# service haproxy start
然後啟用防火牆中的埠80:
# ufw allow 80
測試HAProxy
為了檢查HAproxy是否在正常工作,我們可以執行下列步驟:
首先,用下列內容准備好test.php文件:
<?php
header('Content-Type: text/plain');
echo "Server IP: ".$_SERVER['SERVER_ADDR'];
echo "\nX-Forwarded-for: ".$_SERVER['HTTP_X_FORWARDED_FOR'];
?>
該PHP文件將告訴我們哪台伺服器(即負載均衡系統)轉發請求,哪台後端網站伺服器實際處理請求。
把該PHP文件放到這兩台後端網站伺服器的根目錄下。現在,使用curl命令,從負載均衡系統(192.168.100.4)提取這個PHP文件。
$ curl http://192.168.100.4/test.php
我們多次運行這個命令時,應該會看到下面兩個輸出交替出現(由於輪叫調度演算法)。
Server IP: 192.168.100.2
X-Forwarded-for: 192.168.100.4
Server IP: 192.168.100.3
X-Forwarded-for: 192.168.100.4
如果我們停止這兩台後端網站伺服器中的其中一台,curl命令應該仍會執行,將請求定向到另一台可用的網站伺服器。
結束語
至此,你應該有了一套完全實用的負載均衡系統,能夠在輪叫循環模式下為你的網站節點提供請求。與往常一樣,你可以隨意更改配置,讓它更適合自己的基礎設施。希望本教程幫助你讓自己的網站項目具有更強的抗壓力和更高的可用性。
正如大家已經注意到的那樣,本教程所含的設置適用於僅僅一套負載均衡系統。這意味著,我們把一個單一故障點換成了另一個單一故障點。在實際場景下,你應該部署至少兩套或三套負載均衡系統,以防範可能出現的任何故障,但這不在本教程的討論范圍之內。
❿ nginx負載均衡的演算法怎麼實現的
常見的有LVS、Nginx和HAProxy,者者介紹分別如下:
LVS:使用集群技術和Linux操作系統實現一個高性能、高可用的伺服器,它具有很好的可伸縮性(Scalability)、可靠性(Reliability)和可管理性(Manageability),感謝章文嵩博士為我們提供如此強大實用的開源軟體。
LVS的特點是:
1、抗負載能力強、是工作在網路4層之上僅作分發之用,沒有流量的產生,這個特點也決定了它在負載均衡軟體里的性能最強的;
2、配置性比較低,這是一個缺點也是一個優點,因為沒有可太多配置的東西,所以並不需要太多接觸,大大減少了人為出錯的幾率;
3、工作穩定,自身有完整的雙機熱備方案;
4、無流量,保證了均衡器IO的性能不會收到大流量的影響;
5、應用范圍比較廣,可以對所有應用做負載均衡;
6、軟體本身不支持正則處理,不能做動靜分離。
Nginx的特點是:
1、工作在網路的7層之上,可以針對http應用做一些分流的策略;
2、Nginx對網路的依賴非常小;
3、Nginx安裝和配置比較簡單,測試起來比較方便;
4、可以承擔高的負載壓力且穩定,一般能支撐超過幾萬次的並發量;
5、Nginx可以通過埠檢測到伺服器內部的故障,比如根據伺服器處理網頁返回的狀態碼、超時等等;
6、Nginx僅能支持http和Email;
HAProxy的特點是:
1、HAProxy是支持虛擬主機的;
2、能夠補充Nginx的一些缺點比如Session的保持,Cookie的引導等工作;
3、支持url檢測後端的伺服器出問題的檢測會有很好的幫助;
4、它跟LVS一樣,本身僅僅就只是一款負載均衡軟體;
5、HAProxy可以對Mysql讀進行負載均衡,對後端的MySQL節點進行檢測和負載均衡,不過在後端的MySQL slaves數量超過10台時性能不如LVS;
6、HAProxy的演算法多;