一.什麼是haproxy
HAProxy提供高可用性、負載均衡以及基於TCP和HTTP應用的代理,支持虛擬主機,它是免費、快速並且可 靠的一種解決方案。HAProxy特別適用於那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。 HAProxy運行在當前的硬件上,完全可以支持數以萬計的並發連接。並且它的運行模式使得它可以很簡單安全 的整合進您當前的架構中, 同時可以保護你的web服務器不被暴露到網絡上。
二.安裝haproxy
系統環境:centos6.3
apache: httpd-2.4.4
haproxy: haproxy-1.4.8
haproxy server: 192.168.7.198
apache client1: 192.168.7.196
apache client2: 192.168.7.197
關閉iptables和SELINUX
# service iptables stop
# setenforce 0
# vi /etc/sysconfig/selinux
---------------
SELINUX=disabled
---------------
# wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.8.tar.gz
# tar zxvf haproxy-1.4.8.tar.gz
# cd haproxy-1.4.8
# uname -a //查看linux內核版本
# make TARGET=linux26 PREFIX=/usr/local/haproxy
# make install PREFIX=/usr/local/haproxy
# useradd -s /sbin/nologin haproxy
# passwd haproxy
# chown -R haproxy.haproxy /usr/local/haproxy
三.配置haproxy
# vi /usr/local/haproxy/haproxy.cfg
-----------------
global
maxconn 5120
chroot /usr/local/haproxy
user haproxy
group haproxy
daemon
quiet
nbproc 2
pidfile /usr/local/haproxy/haproxy.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 web :80
mode http
balance roundrobin
option httpclose
option forwardfor
server client1 192.168.7.196:80 check weight 1 minconn 1 maxconn 3 check inter 40000
server client2 192.168.7.197:80 check weight 1 minconn 1 maxconn 3 check inter 40000
listen stats :8888
mode http
transparent
stats uri / haproxy-stats
stats realm Haproxy \ statistic
#認證
stats auth haproxy:password
-----------------
四.啟動haproxy
啟動haproxy
# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg
查看是否啟動
# ps -ef|grep haproxy
--------------------------
avahi 1430 1 0 01:35 ? 00:00:00 avahi-daemon: running [haproxy.local]
haproxy 36112 1 0 03:43 ? 00:00:00 /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg
haproxy 36113 1 0 03:43 ? 00:00:00 /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg
root 36168 2002 0 04:02 pts/0 00:00:00 grep haproxy
--------------------------
重啟haproxy
# pkill haproxy
# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg
其中:
haproxy server監聽的端口:80
client1代理:192.168.7.196:80
client2代理:192.168.7.197:80
統計頁面監聽的端口:8888
訪問頁面:
http://192.168.7.198:8888/haproxy-stats
認證賬號/密碼:haproxy/password
總結:
用戶只需訪問http://192.168.7.198即可隨機跳轉到client1或client2頁面,只要haproxy server 服務不掛掉,即使掛掉任意一台client1或client2服務器,另外一台也會實時接管web服務,實現web服務高可 用性與負載均衡。
 
基於域名的訪問:
首先apache client1與apache client2做一個相同的虛擬主機配置
例如都做成:www.example.com
client1端(192.168.7.196)配置:
# mkdir /usr/local/apache2/htdocs/www.example.com/
# cd /usr/local/apache2/htdocs/www.example.com/
# echo "IP:192.168.7.196" > index.html
# vi /usr/local/apache2/conf/httpd.conf
找到461行,去掉該行注釋:
----------------
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
----------------
# vi /usr/local/apache2/conf/extra/httpd-vhosts.conf
刪除配置文件內非注釋內容,並添加:
--------------
<VirtualHost *:80>
DocumentRoot "/usr/local/apache2/htdocs/www.example.com"
ServerName www.example.com
</VirtualHost>
--------------
重啟apache服務
# /usr/local/apache2/bin/apachectl restart
client2端(192.168.7.197)配置:
# mkdir /usr/local/apache2/htdocs/www.example.com/
# cd /usr/local/apache2/htdocs/www.example.com/
# echo "IP:192.168.7.197" > index.html
# vi /usr/local/apache2/conf/httpd.conf
找到461行,去掉該行注釋:
----------------
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
----------------
# vi /usr/local/apache2/conf/extra/httpd-vhosts.conf
刪除配置文件內非注釋內容,並添加:
--------------
<VirtualHost *:80>
DocumentRoot "/usr/local/apache2/htdocs/www.example.com"
ServerName www.example.com
</VirtualHost>
--------------
重啟apache服務
# /usr/local/apache2/bin/apachectl restart
最後客戶端浏覽器做好www.example.com的解析地址是192.168.7.198
客戶端訪問如圖:
客戶端浏覽器最終訪問www.example.com地址時會隨機在client1與client2虛擬主機目錄之間來回跳轉,實 現基於域名的負載均衡。
注:haproxy啟動報錯
Starting proxy : cannot bind socket
一般是haproxy server安裝web服務(apache或nginx),由於默認端口為80,和haproxy配 置文件設置的端口沖突導致,關閉web服務或更改端口即可。