目录
一、Haproxy和Keepalived简介
二、实验环境
三、安装配置后端服务器
四、安装配置Haproxy
五、安装配置Keepalived
六、验证
一、Haproxy和Keepalived简介
什么是Haproxy?
HAProxy,是免费、快速并且可靠的一种解决方案。特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在时下的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。
HAProxy实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以使每个CPU时间片(Cycle)做更多的工作。
什么是Keepalived?
Keepalived是一个高可用解决方案,通过虚拟IP地址和心跳检测对方状态来实现高可用功能。Keepalived由两台服务器分别指定Master与Backup两个角色,而指定Master的优先级比Backup的高;所以默认情况下虚拟IP会绑定到Master服务器上,对外提供服务。而Master、Backup服务器会在一定的时间间隔向对方发送心跳信息来检测对方的存活状态,时间间隔一般为2秒钟可以修改,如果Backup发现Master宕机,那么Backup会发送ARP包到网关,然后把虚拟IP绑定到自己的网卡上,此时Backup对外提供服务,实现了自动化的故障转移,当Master恢复的时会重新接管所有资源。
二、实验环境
系统版本: CentOS 6
Keepalived版本: keepalived-1.2.7
下载地址:http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
Haproxy版本: Haproxy-1.4.24
拓扑介绍:
前端HA1与HA2服务器上安装Keepalived+Haproxy软件,两台服务器互为主备而初始状态是每台服务器上各有一个虚拟IP地址(HA1的VIP:172.16.14.10 HA2的VIP:172.16.14.11);后台WEB1与WEB2服务器上面安装Apache软件实现负载均衡;而LAMP服务器只负责解析php程序,当用户访问的是静态页面时会由前端调度器分发到处理静态请求的服务器,如果访问的是php的动态页面,将会被分发到lamp动态服务器进行处理,实现了动、静分离的效果。
三、安装配置后端服务器
1、安装LAMP服务器并测试
[root@lamp~]# yum -y install httpd php mysql-server
######创建测试页
[root@lamp~]# vim /var/www/html/index.php
LAMP:172.16.14.5
phpinfo();
[root@lamp~]# service httpd start
[root@lamp~]# chkconfig httpd on
2、安装WEB1服务器的HTTPD服务并访问测试
[root@WEB1~]# yum -y install httpd
[root@WEB1~]# service httpd start
[root@WEB1~]# chkconfig httpd on
[root@WEB1 ~]# echo "
WEB1:172.16.14.3
"> /var/www/html/index.html3、安装WEB2服务器的HTTPD服务并访问测试
[root@WEB2~]# yum -y install httpd
[root@WEB2~]# service httpd start
[root@WEB2~]# chkconfig httpd on
[root@WEB2~]# echo "
WEB2:172.16.14.4
" >/var/www/html/index.html四、安装配置Haproxy
1、在HA1服务器安装Haproxy
安装开发环境
[root@HA1~]# yum -y install gcc gcc-c++
[root@HA1~]# tar xf haproxy-1.4.24.tar.gz
[root@HA1~]# cd haproxy-1.4.24
[root@HA1haproxy-1.4.24]# uname -r
2.6.32-358.el6.x86_64
[root@HA1haproxy-1.4.24]# make TARGET=linux26 ARCH=x86_64
[root@HA1haproxy-1.4.24]# make install
注意:TARGET指定内核版本,而uname -r是查看内核版本;ARCH指定CPU架构
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
为Haproxy提供主配置文件与服务脚本,并将其添加到系统服务
[root@HA1haproxy-1.4.24]# mkdir /etc/haproxy
[root@HA1haproxy-1.4.24]# cp examples/haproxy.cfg /etc/haproxy
[root@HA1haproxy-1.4.24]# cp examples/haproxy.init /etc/init.d/haproxy
[root@HA1haproxy-1.4.24]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
[root@HA1haproxy-1.4.24]# chmod +x /etc/init.d/haproxy
[root@HA1haproxy-1.4.24]# chkconfig --add haproxy
2、修改主配置文件
创建Haproxy的工作目录
[root@HA1 ~]#mkdir /usr/share/haproxy
[root@HA1 ~]#vim /etc/haproxy/haproxy.cfg
# this configneeds haproxy-1.1.28 or haproxy-1.2.1
globallog127.0.0.1 local0 #日志配置,所有日志都记录在本地,通过local0输出log127.0.0.1 local1 noticemaxconn25600 #最大连接数chroot /usr/share/haproxy #改变Haproxy的工作目录uid99 #用户的UIDgid99 #用户的GIDnbproc1 #进程数据(可以设置多个)daemon #以后台守护进程方式运行Haproxy#debug #是否开启调试
defaultslogglobal mode http #默认使用协议,可以为{http|tcp|health}http:是七层协议 tcp:是四层 health:只返回OKoption httplog #详细记录http日志option dontlognull #不记录健康检查的日志信息retries3 #3次连接失败则认为服务不可用option redispatch #ServerID对应的服务器宕机后,强制定向到其他运行正常的服务器maxconn30000 #默认的最大连接数contimeout 5000 #连接超时clitimeout 50000 #客户端超时srvtimeout 50000 #服务器超时timeoutcheck 1s #心跳检测超时timeouthttp-request 10s #默认http请求超时时间timeoutqueue 1m #默认队列超时时间timeoutconnect 10s #默认连接超时时间timeoutclient 1m #默认客户端超时时间timeoutserver 1m #默认服务器超时时间timeouthttp-keep-alive 10s #默认持久连接超时时间
listen statsmodehttpbind0.0.0.0:8090 #指定IP地址与Portstats enable #开启Haproxy统计状态statsrefresh3s #统计页面自动刷新时间间隔statshide-version #状态页面不显示版本号statsuri /allen #统计页面的uri为"/allen"statsrealm Haproxy\ allen #统计页面认证时提示内容信息statsauth admin:admin #统计页面的用户名与密码statsadmin if TRUE #启用或禁用状态页面
frontendallen #定义前端服务器bind*:80modehttpoptionhttpclose #每次请求完成主动关闭http连接optionforwardfor #后端服务器获取客户端的IP地址,可以从httpheader中获取aclurl_static path_end -i .html .jpg .gif #定义ACL规则以如".html"结尾的文件;-i:忽略大小写aclurl_dynamic path_end -i .phpdefault_backendwebservers #客户端访问时默认调用后端服务器地址池use_backendlamp if url_dynamic #调用后端服务器并检查ACL规则是否被匹配
backendwebservers #定义后端服务器balanceroundrobin #定义算法;基于权重进行轮询serverweb1 172.16.14.3:80 check rise 2 fall 1 weight 2serverweb2 172.16.14.4:80 check rise 2 fall 1 weight 2
backend lampbalance source #定义算法;源地址hash运算;类似于Nginx的ip_hashserverlamp 172.16.14.5:80 check rise 2 fall 1
注意:check:启动对后端server的健康状态检测;rise:离线的server转换到正常状态成功检查的次数;fall:确认server从正常状态转换为不可用状态需要检查的次数;weight:权重,数量越大,超重越高
3、启动Haproxy服务并做访问测试
[root@HA1 ~]#service haproxy start
4、在HA2服务器上安装Haproxy,方法相同,不再赘述
五、安装配置Keepalived
1、在HA1与HA2服务器上安装Keepalived
[root@HA1~]# yum -y install keepalived
[root@HA2~]# yum -y install keepalived
2、修改HA1服务器的主配置文件
[root@HA1~]# vim /etc/keepalived/keepalived.conf
!Configuration File for keepalived
global_defs{notification_email{root@localhost}notification_email_fromadmin@allen.comsmtp_server127.0.0.1smtp_connect_timeout30router_idLVS_ALLEN
}
vrrp_scriptchk_proess {script "killall-0 haproxy"interval1weight-2
}
vrrp_instanceha_1 {stateMASTERinterfaceeth0virtual_router_id56priority100advert_int1authentication{auth_typePASSauth_pass1056}virtual_ipaddress{172.16.14.10}track_script{chk_proess}
}
vrrp_instanceha_2 {stateBACKUPinterfaceeth0virtual_router_id58priority92advert_int1authentication{auth_typePASSauth_pass1058}virtual_ipaddress{172.16.14.11}
}
3、修改HA2服务器的主配置文件
[root@HA2~]# vim /etc/keepalived/keepalived.conf
!Configuration File for keepalived
global_defs{notification_email{root@localhost}notification_email_fromadmin@allen.comsmtp_server127.0.0.1smtp_connect_timeout30router_idLVS_ALLEN
}
vrrp_scriptchk_proess {script "killall-0 haproxy"interval1weight-2
}
vrrp_instanceha_1 {stateBACKUPinterfaceeth0virtual_router_id56priority99advert_int1authentication{auth_typePASSauth_pass1056}virtual_ipaddress{172.16.14.10}
}
vrrp_instanceha_2 {stateMASTERinterfaceeth0virtual_router_id58priority93advert_int1authentication{auth_typePASSauth_pass1058}virtual_ipaddress{172.16.14.11}track_script{chk_proess}
}
4、启动Keepalived服务并查看HA1与HA2服务器上的虚拟IP地址
[root@HA1~]# service keepalived start 六、验证 1、访问验证服务器的负载均衡功能 2、验证是否实现动、静分离的效果 3、模拟前端服务器中的一台出现故障,来验证IP地址能否自动切换到备份服务器上 停止HA1服务器的haproxy服务
[root@HA1~]# ip addr show eth0
2:eth0:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
[root@HA2~]# service keepalived start
[root@HA2~]# ip addr show eth0
2:eth0:
[root@HA1~]# service haproxy stop查看HA2服务器的IP地址
[root@HA2~]# ip addr show eth0
2:eth0:
VIP已成功切换到HA2服务器;如果将服务器修好后上线,则VIP会切换回原来的服务器。