haproxy+keepalived实现高可用性集群
一、HAProxy简介
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在时下的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
HAProxy实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。
二、Keepalived简介
Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web 服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人 工做的只是修复故障的web服务器。
三、安装及配置
1、架构图
2、环境
OS:CentOS 6.5
HAProxy:1.5.4
Keepalived:1.2.13
VIP:192.168.31.200
Master:192.168.31.148
Backup:192.168.31.170
Web1:192.168.31.105
Web2:192.168.31.212
3、安装haproxy
1、可以使用源码包安装 2、可以使用RPM包安装,这里我使用RPM包的方式安装haproxy [root@haproxy-1 ~]# yum -y install haproxy 3、haproxy的配置文件如下 global log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon defaults mode http log global option httplog option dontlognull option http-server-close option forwardfor except 127.0.0.1/8 option redispatch retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout http-keep-alive 10s timeout check 10s maxconn 3000 stats uri /haproxy-stats frontend static *:80 acl url_static path_beg -i /static /p_w_picpaths /javascript /stylesheets acl url_static path_end -i .jpg .gif .png .css .js use_backend static if url_static default_backendapp backend static balance roundrobin server static 192.168.31.105:80 check backend app balance roundrobin server app1 192.168.31.212:80 check #两个haproxy节点的配置一样
4、测试haproxy
4、安装keepalived
1、源码包安装 2、RPM包安装,我选择RPM包安装 [root@haproxy-1 haproxy]# yum install keepalived -y 3、主节点的keepalived的配置文件如下,备节点的只需修改 \ MASTER改为BACKUP,priority 100改为priority 99。 global_defs { notification_email { root@localhostt } notification_email_from haproxy@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_script chk_haproxy { script "lsof -i:80 &>/dev/null" interval 1 weight -2 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.31.200 } track_script { chk_haproxy } }
4、测试keepalived
#把haproxy服务停止后