紧张了2个礼拜,RHCE终于过了,上午满分300,下午260,虽然不知道错在哪,但这下终于可以有时间更新我的博客了。虽然平时博客访问量挺大,但基本没什么人和我互动,不过写点东西给需要帮助的朋友,我还是表示我的努力没有白费,不扯别的了,开始今天的正题。
一.什么是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服务或更改端口即可。
本文转自 showerlee 51CTO博客,原文链接:http://blog.51cto.com/showerlee/1201144,如需转载请自行联系原作者