Keepalived+haproxy构建web高可用负载均衡系统
本章将使用keepalived做为高可用集群调度用户请求,并且检测haproxy负载均衡器的状态,实时地完成节点的动态调整。
keepalived原理图:
Layer3:Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器
发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将 它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。在本文 中将采用这种方式。
Layer4:如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的状态来决定服务器工作正常与否。如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。
Layer5:Layer5就是工作在具体的应用层了,比Layer3,Layer4要复杂一点,在网络上占用的带宽也要大一些。 Keepalived将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则Keepalived将把服务器从服务器群中剔除。
haproxy工作机制:
HAProxy相比LVS的使用要简单很多,功能方面也很丰富。当 前,HAProxy支持两种主要的代理模式:"tcp"也即4层(大多用于邮件服务器、内部协议通信服务器等),和7层(HTTP)。在4层模式 下,HAProxy仅在客户端和服务器之间转发双向流量。7层模式下,HAProxy会分析协议,并且能通过允许、拒绝、交换、增加、修改或者删除请求 (request)或者回应(response)里指定内容来控制协议,这种操作要基于特定规则。
系统环境:CentOS6.4
iptables 关闭
selinux is disabled
一、keepalived的安装与配置
#tar zxf keepalived-1.2.7.tar.gz
#cd keepalived-1.2.7
#./configure --prefix=/usr/local/keepalived 指定路径编译
其中可能安装一下依赖包:
openssl-devel popt-devel libnl-devel
# make && make install 执行make安装
# cd /usr/local/keepalived/ 默认主目录,存在sbin/和etc/目录
# ln -s /usr/local/keepalived/sbin/keepalived /sbin/ 便于管理keepalived,将文件链接
# ln -s /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
#ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
# ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
# vim /etc/keepalived/keepalived.conf
root } notification_email_from keepalived@server3.example.com 通知收件人地址virtual_router_id 88 定义虚拟路由id priority 100 定义主节点(权值决定) virtual_ipaddress { 定义VIP 192.168.0.88 }}使用lvs+keepalived时使用一下配置
virtual_server 192.168.0.88 80{ 定义虚拟服务 delay_loop 6 lb_algo rr 使用轮询方式调度算法 lb_kind DR 使用DR直连模式 # persistence_timeout 50 这个是nat的必须做的,如果加上这个的话,就会持续链接这个 protocol TCP real_server 192.168.0.198 80 { 定义真实服务 weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 192.168.0.199 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 }#/etc/init.d/keepalived start
因为要构建keepalived高可用集群,因此需要在keepalived备用节点上安装配置同样的服务。
二 、 haproxy的安装与配置
#tar zxf haproxy-1.4.23.tar.gz
#cd haproxy-1.4.23
#find -name *.spec 发现spec文件,可以将源码包打压成rpm
#yum install rpm-build -y 安装rpm包构建软件
#rpmbuild -tb haproxy-1.4.23.tar.gz 使用源码包构建rpm包
#cd /root/rpmbuild/RPMS/x86_64 生成的rpm包
#rpm -ivh *.rpm 安装keepalived的rpm包
# vim /etc/haproxy/haproxy.cfg
defaults log global mode http option httplog option dontlognull retries 3 option redispatch maxconn 2000 contimeout 5000 clitimeout 50000 srvtimeout 50000listen status_auth 192.168.0.103:8080 给监控界面做一个端口绑定,指定用户和密码 stats enable stats uri /admin stats auth user:passwd 定义监控页面的用户和密码 stats refresh 6slisten ha_proxy 192.168.0.103:80 在103主机上定义真实主机(Real Server)
balance roundrobin server inst1 192.168.0.198:80 server inst2 192.168.0.199:80# vim /etc/rsyslog.conf
开启tcp或者udp$ModLoad imudp$UDPServerRun 514local0.* /var/log/haproxy.log#/etc/init.d/rsyslog restart#/etc/init.d/haproxy start
web负载均衡方案haproxy构建完毕!
访问 可以访问到198和199主机的内容
访问:8080 使用用户名和密码登陆可以查看链接状态
三、整合keepalived和haproxy
# vim check_haproxy.sh 编写一个检测haproxy状态脚本
#!/bin/bash/etc/init.d/haproxy status &> /dev/null || /etc/init.d/haproxy restart &> /dev/nullif [ $? -ne 0 ] ;then/etc/init.d/keepalived stop &> /dev/nullfi# chmod +x check_haproxy.sh
#./check_haproxy.sh 在haproxy关闭时自动启动haproxy修改keepalived文件
# vim keepalived.conf
vrrp_script check_haproxy { script "/opt/check_haproxy.sh" interval 2 weight 2}virtual_ipaddress {
192.168.0.88 新的VIP } track_script { check_haproxy}# vim /etc/haproxy/haproxy.cfg
listen www.domain.com *:80 所以IP都可以访问(给本机VIP做解析) cookie SERVERID rewrite balance roundrobin server app1_1 192.168.0.198:80 cookie app1inst1 check inter 2000 rise 2 fall 3 server app1_2 192.168.0.199:80 cookie app1inst2 check inter 2000 rise 2 fall 3listen status_auth *:8080 使用任意客户端检测
stats enable stats uri /admin stats auth user:passwd 定义监控页面的用户和密码 stats refresh 6# /etc/init.d/keepalived restart
# ip addr show 查看主keepalived已经加载了VIP资源
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 forever2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 52:54:00:9c:c9:22 brd ff:ff:ff:ff:ff:ff inet 192.168.0.103/24 brd 192.168.0.255 scope global eth0 103为主节点IP inet 192.168.0.88/32 scope global eth0 88为VIP# /etc/init.d/haproxy status 查看状态为running
注意:构建keepalived+haproxy高可用负载均衡集群必须在两个节点分别配置两个服务,并且保证相同的配置和服务,在备用节点上注意将权值修改小些。
测试高可用和负载均衡:
任何一个主机的keepalived出现故障,另外一个主机会接管相应的资源。
任何一个haproxy出现故障,客户仍然可以访问后端Real Server提供的服务。