HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代 理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。
keepalived是一个类似于layer3,4 & 5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器.
用Haproxy+KeepAlived实现高可用的负载均衡方案,用Haproxy做负载匀衡,用KeepAlived做高可用性Health Check,在Master与Slave上面分别配置相同的虚拟路由vrrp(192.168.187.61),当Master宕机后,虚拟路由负载自动由Master转到Slave,负载由Slave完成,当Master恢复以后,自动又恢复到Master。服务器的布署结构如下:Master(192.168.187.129);Slave(192.168.187.132);VRRP(192.168.187.61);SERVER1(192.168.2.68);SERVER2(192.168.2.60)
4.1 Haproxy安装方法
在Master(192.168.187.129)操作
下载
[root@localhost /]:wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.23.tar.gz
解压缩
[root@localhost/]:tar xzvf haproxy-1.4.23.tar.gz
编译haproxy,进入解压后的haproxy的目录,用下列命令进行编译:
[[email protected]] make TARGET=linux26
[[email protected]] make PREFX=/usr/local/haproxy install
安装完成后会在安装目录下生成doc ,sbin ,share三个文件夹。解压的源码文件也可以删除掉。
创建pid文件,日志文件,配置文件,在安装目录下建立配置文件目录
[root@localhost sbin]mkdir conf
[root@localhost sbin]mkdir logs
[root@localhost logs]vihaproxy.log
[root@localhost logs]vihaproxy.pid
在新创建的目录下创建配置文件
[root@localhostconf]vi haproxy.cfg
4.2 Haproxy的配置
在创建的haproxy.cfg文件中填入
#全局配置
global
#日志设置
log 127.0.0.1 local0 info #[err warning info debug]
#最大连接数
maxconn 4096
#用户
user root
#用户组
group root
#使HAProxy进程进入后台运行。这是推荐的运行模式
Daemon
#创建1个进程进入deamon模式运行
nbproc 1
#将所有进程的pid写入文件
pidfile /usr/local/haproxy/sbin/logs/haproxy.pid
#默认配置
defaults
#默认的最大连接数
maxconn2000
#连接超时
contimeout5000
#客户端超时
clitimeout30000
#服务器超时
srvtimeout30000
#统计页面配置
listenadmin_stats
#监听端口
bind 0.0.0.0:1080
#http七层模式
modehttp
#日志设置
log127.0.0.1 local0 err
#统计页面url
stats uri /admin_stats
#监听配置
listen http_in
#监听端口
bind *:1081
#http七层模式
mode http
#负载均衡的方式,source为 IP经过hash计算后 指定到固定的真实服务器上
balance source
#允许插入serverid到cookie中,serverid后面可以定义
cookie SERVERID
#日志设置
log 127.0.0.1 local0 err
# 要负载的后台服务器
#服务器定义,cookie 1表示serverid为1,
# weight -- 调节服务器的负重
# check -- 允许对该服务器进行健康检查
# inter -- 设置连续的两次健康检查之间的时间,单位为毫秒(ms),默认值 2000(ms)
# rise -- 指定多少次连续成功的健康检查后,即可认定该服务器处于可操作状态,默认值 2
# fall -- 指定多少次不成功的健康检查后,认为服务器为当掉状态,默认值 3
# maxconn -- 指定可被发送到该服务器的最大并发连接数
server localhost * cookie 1 weight 3 check inter 2000 rise 2 fall 3
#用来做测试的两台实体机器的IP
server 192.168.2.68 192.168.2.68:8081cookie 2 weight 3 check inter 2000 rise 2 fall 3
server 192.168.2.60 192.168.2.60:80 cookie 3 weight 3 check inter 2000 rise 2 fall3
4.3.启动haproxy测试
如下是启动haproxy的方式.
[root@localhost sbin]./haproxy –f./conf/haproxy.cfg
启动以后用以下命令进行查看,如下:
可以看到haproxy已经以进程的方式启动了.
在IE浏览器中输入http://ip:1080/admin_stats.这是Haproxy的运行状态,如下图:
4.4.修改日志配置
使用root账户首先修改/etc/sysconfig/syslog文件,将SYSLOGD_OPTIONS="-m0”修改为SYSLOGD_OPTIONS="-m 0 -r -x",支持收集远程服务器日志。然后修改/etc/syslog.conf,增加如下语句:
local0.* /usr/local/haproxy/sbin/logs/haproxy.log // haproxy.log地址代表了需要存储日志的地址,其中local0这个级别要和haproxy.cfg配置的log级别一样
执行service syslog restart,重新启动系统日志器
另外一台Slave(192.168.187.132)做为备用服务器的机器按照同样的配置
5.KeepAlived安装配置
5.1 KeepAlived的安装方法
下载keepalived
[root@localhost /]:wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
解压缩
[root@localhost /]:tar xzvf keepalived-1.2.7.tar.gz
安装
[root@localhost /]cd keepalived-1.2.7
[root@localhost keepalived-1.2.7]./configure
[root@localhost keepalived-1.2.7]make
[root@localhost keepalived-1.2.7]make install
5.2 将keepalived加入服务
按照上述安装方法,keepalived安装完成后,自动安装在/usr/local/sbin目录下面,配置文件
位置在/usr/local/etc/keepalived目录下面,具体操作如下:
/*在配置文件夹/etc下面建立keepalived文件夹*/
Mkdir /etc/keepalived
/*将配置文件复制过去*/
Cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
/*将keepalived文件复制到/etc/init.d文件夹,这个文件夹存放可执行的服务程序*/
Cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d
/*将安装目录下面的系统配置文件复制到/etc/sysconfig,这是一个存放系统配文件的目录*/
Cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
/*开启服务*/
Service keepalived start
/*停止服务*/
Service keepalived stop
/*重启服务*/
Service keepalived restart
安装好以后,对其进行配置如下:
有两台机器(MASTER)所在的192.168.187.129与(SLAVE)192.168.187.132,用(VRRP)192.168.187.61做虚拟IP,在两台服务器中飘动,如下图:
在两台服各器中的/etc/keepalived文件夹中的keepalived.conf下进行配置:
Master的设置
192.168.187.129
global_defs {
router_id Haproxy #当前节点名
}
vrrp_instance VI_1{
state MASTER #指定Haproxy节点为主节点 备用节点上设置为BACKUP即可
interface eth0 #绑定虚拟IP的网络接口
virtual_router_id 51 #VRRP组名,两个节点的设置必须一样,以指明各个节点属于同一VRRP组
priority 150 #主节点的优先级(1-254之间),备用节点必须比主节点优先级低
acvert_int 1 #组播信息发送间隔,两个节点设置必须一样
authentication{ #设置验证信息,两个节点必须一致
auth_type PASS
auth_pass 1111
}
Virtual_ipaddress{ #指定虚拟IP, 两个节点设置必须一样
192.168.187.61
}
}
Slave的设置
192.168.187.132
global_defs {
router_id Haproxy #当前节点名
}
vrrp_instance VI_1{
state BACKUP #指定Haproxy节点为备用节点 备用节点上设置为Master即可
interface eth0 #绑定虚拟IP的网络接口
virtual_router_id 51 #VRRP组名,两个节点的设置必须一样,以指明各个节点属于同一VRRP组
priority 100 #主节点的优先级(1-254之间),备用节点必须比主节点优先级低
acvert_int 1 #组播信息发送间隔,两个节点设置必须一样
authentication{ #设置验证信息,两个节点必须一致
auth_type PASS
auth_pass 1111
}
Virtual_ipaddress{ #指定虚拟IP, 两个节点设置必须一样
192.168.187.61
}
}
No1:第一种情况,双机都正常的情况
在(Master)192.168.187.129服务器上面查看IP,可以看到一个192.168.187.61的虚拟IP
而这时用IP addr在备机192.168.187.132上面查看,可以发现不存在192.168.187.61的虚拟IP
No2:第二种情况,Master已经宕机的情况
,再用 IP addr 查看,发现虚拟IP已经漂移到192.168.187.132这台机子上面来了,响应速度非常快,
实现了高可用性,如下图:
No3:第三种情况,Master已经恢复的情况
当Master恢复的情况下,用IP addr 再进行查看,发现虚拟IP再次漂移到192.168.187.129上面来了,
如下图:
两台被负载的服务器都已经装好了Web的运行环境,运行情况如下:
.192.168.2.63的运行环境
.192.168.2.68的运行环境
开两个浏览器页面,用Haproxy中配置的虚拟IP(192.168.187.61)进行测试,可以看到一台负载到了
192.168.2.68,而另外一台被负载到了192.168.2.63。
当关掉做为主机的192.168.187.129做为宕机处理,同样也不会出问题,虚拟IP由192.168.187.129漂移
到192.168.187.132上面。
7.安装时出现的问题及处理方法
No1:第一种错误情况
错误:haproxy启动报错Startingproxy : cannot bind socket
原因:其监听80已被占用
解决办法:查看netstat–ntpl,如果有80端口,说明80被占用了,只需要找到程序关闭就可以了!
No2:第二种错误情况
错误:安装Keepalived时出现这种错误
1. configure: error:
2. !!! OpenSSL is not properly installed on your system. !!!
3. !!! Can not include OpenSSL headers files. !!!
原因:没有安装 OpenSSL
解决办法:CentOS下安装 Yum –y installopenssl-devel