負載均衡的安裝部署及使用手冊
web server1 :10.10.13.243
web server2 :10.10.13.244
web server 的對外虛擬IP是10.10.13.245 。
二、243/244:兩臺RealServer的 web服務配置
1、先安裝web服務: apt-get install apache2
#LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog /var/log/apache2/access.log combined env=!dontlog
echo "The web service provider is 243|244" > /var/www/index.html
三、240/241兩臺服務器的haproxy配置
###########全局配置#########
#nbproc 1
#pidfile /var/run/haproxy.pid
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
maxconn 4096
########默認配置############
log global
mode http #默認的模式mode { tcp|http|health },tcp是4層,http是7層,health只會返回OK
retries 3 #兩次連接失敗就認爲是服務器不可用,也可以通過後面設置
#option redispatch #當serverId對應的服務器掛掉後,強制定向到其他健康的服務器
#option abortonclose #當服務器負載很高的時候,自動結束掉當前隊列處理比較久的鏈接
option httplog
option dontlognull
option redispatch
maxconn 2000 #默認的最大連接數
timeout connect 5000ms #連接超時
timeout client 30000ms #客戶端超時
timeout server 30000ms #服務器超時
#timeout check 2000 #=心跳檢測超時
log 127.0.0.1 local0 err #開啓記錄haproxy日誌
mode http
stats enable
balance roundrobin
option httpclose
option forwardfor
option httpchk HEAD /check.txt HTTP/1.0
server nc243 10.10.13.243:80 cookie A check
server nc244 10.10.13.244:80 cookie B check
bind *:82
mode http
acl api_net url_sub -i sip_apiname=engagecloud
use_backend engagecloud if api_net
default_backend engagecloud
mode http
balance roundrobin
server app 10.15.14.130:80 cookie A
server app1 10.15.14.131:8080 cookie B
mode http
server app1 10.15.14.131:8080 cookie B
bind *:822
mode http
acl api_net url_sub -i sip_apiname=engagecloud
use_backend engagecloud if api_net
default_backend salesapp1
mode http
server app 10.15.14.130:80 cookie A
mode http
server app1 10.15.14.131:8080 cookie B
server app 10.15.14.130:80 cookie A
option forwardfor //如果後端服務器需要獲得客戶端的真實IP需要配置次參數,將可以從Http Header中獲得客戶端IP
capture response header Content-Length len 10
//控制策略的配置,參考別人的配置,使用時要根據自己的實際情況。
acl api_taobao url_sub -i sip_apiname=taobao. //在請求url中包含sip_apiname=taobao,則此控制策略返回true,否則爲false
acl api_alisoft url_sub -i sip_apiname=alisoft. //在請求url中包含sip_apiname=alisoft,則此控制策略返回true,否則爲false
acl invalid_req url_sub -i sip_apiname= //在請求url中包含sip_apiname=,則此控制策略返回true,否則爲false
block if !invalid_req !stat_req //block表示阻止請求,返回403錯誤,當前表示如果不滿足策略invalid_req,同時也不滿足策略stat_req,則阻止請求。(就是要求URL中必需有參數sip_apiname,除非是查看服務器狀態的URL)。
use_backend alisoft_server if api_alisoft //如果是滿足策略api_alisoft的情況,則使用alisoft_server作爲後端服務集羣。
server app1 10.10.13.243:80 cookie 1 check fall 5 weight 1 //真實服務器配置定義cookie 1表示serverid爲1,check表示需要狀態檢查,fall 5表示失敗五次就認爲服務器狀態不可用(不在接受請求),weight 1表示權重
server app2 x.x.x.x:8080 cookie 1 check fall 5 weight 10
首先修改/etc/sysconfig/syslog文件,將SYSLOGD_OPTIONS="-m 0” 修改爲SYSLOGD_OPTIONS="-m 0 -r -x",支持收集遠程服務器日誌。
/usr/local/haproxy/sbin/haproxy –f /etc/haproxy/haproxy.cfg –d 或者-D
1、 HAProxy 常用參數說明
haproxy -f <配置文件> [-n 最大併發連接總數] [-N 每個偵聽的最大併發數] [-d] [-D] [-q] [-V] [-c] [-p] [-s] [-l] [-dk] [-ds] [-de] [-dp] [-db] [-m <內存限制M>] [{-sf|-st} pidlist...]
2、HAProxy 錯誤排除
Starting haproxy: [ALERT] 015/191034 (15631) : Starting proxy webfarm: cannot bind socket...on both load balancer
[ALERT] 056/103843 (1358) : Starting proxy www-balancer: cannot bind socket
sysctl -e net.ipv4.ip_nonlocal_bind=1
sysctl -a | grep nonlocal #看是否已經有設定此參數
vim /etc/sysctl.conf # 最下面加入
還有一種可能就是,haproxy Load Balancer的機器上開啓了web服務,關閉即可。要保證web服務,在這兩臺機器上是關掉的。
3、 HAProxy 配置手冊
下述所有 <name> 都必須由 大/小 寫字母、數字、 -、 . 、: 組成. (大小寫會視爲不同名稱)
daemon: 執行 -D 也是同樣
nbproc: deamon 才能使用, 也是最推薦的模式, 如果小檔案很多, 建議要多開幾個, 但是 debug 時不建議開此參數. (arg: nbproc <number>)
ulimit-n: 設定每個行程最大文件數, 此值會自動計算, 不建議設定此參數 (arg: ulimit-n <number>)
noepoll: 在 Linux 系統不使用 epoll, 等同 -de
nokqueue: 在 BSD 不使用 kqueue polling, 同 –dk
nosepoll: 在 Linux 系統不使用 speculative epoll, 等同 -ds
spread-checks: 多久去 check 一次, 默認值 0 (arg: spread-checks <0..50, in percent>)
listen <instance_name> [ <IP_address>:<port_range>[,...] ]
balance: roundrobin / source / url / url_param
4、httpchk 範例
httpchk (啓用 HTTP 的 server health check.) 特別重要, 範例多記錄一點.
option httpchk <method> <uri>
option httpchk <method> <uri> <version>
# Relay HTTPS traffic to Apache instance and check service availability
# using HTTP request "OPTIONS * HTTP/1.1" on port 80.
option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
server apache1 192.168.1.1:443 check port 80
option httpchk GET /robots.txt # 指的是 GET /robots.txt HTTP/1.0
option httpchk # 指的是 OPTIONS / HTTP/1.0
option httpchk * # 指的是 OPTIONS * HTTP/1.0
四、240/241兩臺服務器的keepalived配置
router_id LVS_DEVEL
state MASTER #241服務器上將MASTER改爲BACKUP
auth_type PASS #VRRP認證方式
auth_pass 123456789 #VRRP口令字
}
10.10.13.245 #LVS虛擬地址
}
/usr/local/keepalived/sbin/keepalived –f /etc/keepalived/keepalived.conf
在eth0的10.10.13.240的ip下有一個新的ip生成。如:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:e0:4c:ec:d7:e5 brd ff:ff:ff:ff:ff:ff
inet 10.10.13.245/32 scope global eth0
inet6 fe80::2e0:4cff:feec:d7e5/64 scope link
valid_lft forever preferred_lft forever
在eth0的10.10.13.241的ip下沒有新的ip生成,如下:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:e0:4c:ec:d7:d3 brd ff:ff:ff:ff:ff:ff
inet6 fe80::2e0:4cff:feec:d7d3/64 scope link
valid_lft forever preferred_lft forever
5、 將240的keepalived服務停掉,重新看一下:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:e0:4c:ec:d7:e5 brd ff:ff:ff:ff:ff:ff
inet6 fe80::2e0:4cff:feec:d7e5/64 scope link
valid_lft forever preferred_lft forever
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:e0:4c:ec:d7:d3 brd ff:ff:ff:ff:ff:ff
inet 10.10.13.241/24 brd 10.10.13.255 scope global eth0
inet6 fe80::2e0:4cff:feec:d7d3/64 scope link
valid_lft forever preferred_lft forever