HAProxy是一種高效、可靠、免費的高可用及負載均衡解決方案,很是適合於高負載站點的七層數據請求。客戶端經過HAProxy代理服務器得到站點頁面,而代理服務器收到客戶請求後根據負載均衡的規則將請求數據轉發給後端真實服務器。html
同一客戶端訪問服務器,HAProxy保持回話的三種方案:前端
HAProxy將客戶端ip進行Hash計算並保存,由此確保相同IP訪問時被轉發到同一真實服務器上。linux
HAProxy依靠真實服務器發送給客戶端的cookie信息進行回話保持。web
HAProxy保存真實服務器的session及服務器標識,實現會話保持功能。redis
HAProxy拓撲結構圖vim
二 配置文件解析後端
HAProxy安裝後默認沒有配置文件,須要手動建立/etc/haproxy.cfg。啓動HAProxy時用-f指定配置文件路徑。haproxy的配置文件包含全局設置段與代理段,global是全局段,defaults、listen、frontend、backend爲代理段。frontend用來匹配客戶端請求的域名或者URL;backend定義後端服務器集羣。瀏覽器
HAProxy配置文件參數詳細解析:服務器
三 Haproxy實例部署cookie
本例使用listen定義一個監控端口;
使用frontend定義一個前端80端口;
經過backend定義名爲inside_servers 和 external_servers的服務器組;
使用default_backend定義默認服務器組external_servers;
external_servers包括web1.test.com和web2.test.com 兩臺服務器
inside_servers包含web3.test.com 一臺服務器
1首先配置web服務器
在web一、web二、web3上安裝httpd並配置網卡
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.1.3
NETMASK=255.255.255.0
GATEWAY=192.168.1.2
ONBOOT=yes
TYPE=Ethernet
service network restart
yum install -y httpd
iptables -F
iptables -X
service iptables save
setenforce 0
sed -i s/enforcing/disabled/g /etc/sysconfig/selinux
echo "web1 192.168.1.3" > /var/www/html/index.html
service httpd restart
chkconfig httpd on
web二、web3機器上執行與web1相同步驟,注意修改部分參數
2接着haproxy服務器配置
設置兩塊網卡
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=10.10.10.10
NETMASK=255.0.0.0
ONBOOT=yes
TYPE=Ethernet
vim /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=static
IPADDR=192.168.1.2
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
ONBOOT=yes
TYPE=Ethernet
service network restart
service iptables stop
內核調優,修改系統文件
vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
配置日誌文件,添加三行
vim /etc/rsyslog.conf
$ModLoad imudp
$UDPServerRun 514
local3.* /var/log/haproxy.log
yum -y install gcc
wget http://www.haproxy.org/download/1.6/src/haproxy-1.6.11.tar.gz
tar zxf haproxy-1.6.11.tar.gz -C /usr/src/
cd /usr/src/haproxy-1.6.11/
make TARGET=linux2628
make install
mkdir /var/haproxy
3建立配置文件
vim /etc/haproxy.cfg
global
maxconn 4096
log 127.0.0.1 local3 info
chroot /var/haproxy
uid 99
gid 99
daemon
nbproc 1
pidfile /var/run/haproxy.pid
ulimit-n 65535
stats socket /var/tmp/stats
defaults
log global
mode http
maxconn 20480
option httplog
option httpclose
option dontlognull
option forwardfor
option redispatch
option abortonclose
stats refresh 30
retries 3
balance roundrobin
cookie SRV
timeout check 2000ms
timeout connect 5000ms
timeout server 50000ms
timeout client 50000ms
listen admin_status #定義haproxy的監控界面
bind 0.0.0.0:6553
mode http
log 127.0.0.1 local3 info
stats enable
stats refresh 5s #監控頁面自動刷新時間5s
stats realm Haproxy\ Statistics #登陸監控頁面提示符
stats uri /admin?stats #監控頁面URL路徑
stats auth admin:123456 #監控頁面的帳戶密碼
stats hide-version #隱藏haproxy版本
frontend web_service #定義前端服務器
bind 0.0.0.0:80
mode http
log global
option httplog
option httpclose
option forwardfor
#acl inside_src src 192.168.1.0/24 #定義acl
#use_backend inside_servers if inside_src #判斷acl的源地址,把請求轉發到inside_servers組
default_backend external_servers #默認服務器組
backend external_servers
mode http
balance roundrobin #輪詢真實服務器
option httpchk GET /index.html #檢查index文件,判斷服務器是否健康
##定義後端真實服務器,向cookie中插入web1信息,check進行健康檢查,檢查時間間隔爲2000ms,##連續兩次健康則認爲是正常開啓的,連續三次檢查失敗則認爲宕機,服務器權重1
server web1 192.168.1.3:80 cookie web1 check inter 2000 rise 2 fall 3 weight 1
server web2 192.168.1.4:80 cookie web2 check inter 2000 rise 2 fall 3 weight 1
#backend inside_servers
#mode http
#balance roundrobin #輪詢真實服務器
#option httpchk GET /index.html #檢查index文件,判斷服務器是否健康
#server web3 192.168.1.5:80 cookie web3 check inter 2000 rise 2 fall 3 weight 1
4啓動haproxy服務
service rsyslog restart #重啓系統日誌服務
haproxy -f /etc/haproxy.cfg #啓動haproxy服務
echo "/usr/local/sbin/haproxy -f /etc/haproxy.cfg" >> /etc/rc.local
5測試驗證
瀏覽器訪問監控頁面
在一個ip爲10.10.10.100的機器上訪問http://10.10.10.10:6553/admin?stats
屢次刷新訪問將獲得web1和web2 不一樣頁面信息
若是配置文件中開啓使用inside_servers,則在192.168.1.0/24網段機器上訪問http://192.168.1.2,服務器返回的會一直是web3的頁面信息。