dcvb 发表于 2013-9-30 09:33:04

Haproxy+Keepalived配置WEB负载均衡及动静分离

一、简介
二、环境介绍三、安装配置后端服务器四、安装配置Haproxy五、安装配置Keepalived六、验证服务
一、简介HAProxy简介:HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在时下的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上HAProxy实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作Keepalived简介:KeepAlived是一个类似于layer3, 4 & 5交换机制的软件,是一个高可用解决方案,通过虚拟IP地址和心跳检测对方状态来实现高可用功能。Keepalived是由两台服务器分别指定Master与Backup两个角色,而指定Master的优先级比Backup的高;所以默认情况下虚拟IP会绑定到Master服务器上,对外提供服务。而Master、Backup服务器会在一定的时间间隔向对方发送心跳信息来检测对方的存活状态,时间间隔一般为2秒钟可以修改,如果Backup发现Master宕机,那么Backup会发送ARP包到网关,然后把虚拟IP绑定到自己的网卡上,此时Backup对外提供服务,实现了自动化的故障转移,当Master恢复的时会重新接管所有资源二、环境介绍
系统版本: CentOS 6.4_x86_64Keepalived版本: keepalived-1.2.7 点此下载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服务器并测试


# yum -y install httpd php mysql-server######创建测试页# vim /var/www/html/index.phpLAMP: 172.16.14.5

2、安装WEB1服务器的HTTPD服务并访问测试

# yum -y install httpd# service httpd start# chkconfig httpd on# echo "WEB1:172.16.14.3" > /var/www/html/index.html


3、安装WEB2服务器的HTTPD服务并访问测试

# yum -y install httpd# service httpd start# chkconfig httpd on# echo "WEB2:172.16.14.4" > /var/www/html/index.html


四、安装并配置Haproxy
1、在HA1服务器安装Haproxy

######安装开发环境
# yum -y install gcc gcc-c++
# tar xf haproxy-1.4.24.tar.gz
# cd haproxy-1.4.24
# uname -r
2.6.32-358.el6.x86_64
# make TARGET=linux26 ARCH=x86_64
# make install
######注释:TARGET指定内核版本,而uname -r是查看内核版本;ARCH指定CPU架构
----------------------------------------------------------------------
######为Haproxy提供主配置文件与服务脚本,并将其添加到系统服务
# mkdir /etc/haproxy
# cp examples/haproxy.cfg /etc/haproxy
# cp examples/haproxy.init /etc/init.d/haproxy
# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
# chmod +x /etc/init.d/haproxy
# chkconfig --add haproxy
2、修改主配置文件
# vim /etc/haproxy/haproxy.cfg######创建Haproxy的工作目录
# mkdir /usr/share/haproxy
# this config needs haproxy-1.1.28 or haproxy-1.2.1
global
    log 127.0.0.1   local0      #日志配置,所有日志都记录在本地,通过local0输出
    log 127.0.0.1   local1 notice
    maxconn 25600               #最大连接数
    chroot /usr/share/haproxy   #改变Haproxy的工作目录
    uid 99                        #用户的UID
    gid 99                        #用户的GID
    nbproc 1                      #进程数据(可以设置多个)
    daemon                        #以后台守护进程方式运行Haproxy
    #debug                        #是否开启调试
defaults
    log global         
    mode    http                  #默认使用协议,可以为{http|tcp|health} http:是七层协议 tcp:是四层 health:只返回OK
    optionhttplog               #详细记录http日志
    optiondontlognull         #不记录健康检查的日志信息
    retries 3                     #3次连接失败则认为服务不可用
    optionredispatch            #ServerID对应的服务器宕机后,强制定向到其他运行正常的服务器
    maxconn 30000               #默认的最大连接数
    contimeout5000            #连接超时
    clitimeout50000             #客户端超时
    srvtimeout50000             #服务器超时
    timeout check   1s            #心跳检测超时
    timeout http-request    10s   #默认http请求超时时间
    timeout queue         1m    #默认队列超时时间
    timeout connect         10s   #默认连接超时时间
    timeout client          1m    #默认客户端超时时间
    timeout server          1m    #默认服务器超时时间
    timeout http-keep-alive 10s   #默认持久连接超时时间
listenstats
    mode http
    bind 0.0.0.0:8090             #指定IP地址与Port
    stats enable                  #开启Haproxy统计状态
    stats refresh 3s            #统计页面自动刷新时间间隔
    stats hide-version            #状态页面不显示版本号
    stats uri   /allen            #统计页面的uri为"/allen"
    stats realm Haproxy allen    #统计页面认证时提示内容信息
    stats authadmin:admin       #统计页面的用户名与密码
    stats admin if TRUE         #启用或禁用状态页面
frontend allen                  #定义前端服务器
    bind *:80
    mode http
    option httpclose            #每次请求完成主动关闭http连接
    option forwardfor             #后端服务器获取客户端的IP地址,可以从http header中获取
    acl url_static path_end -i .html .jpg .gif #定义ACL规则以如".html"结尾的文件;-i:忽略大小写
    acl url_dynamic path_end -i .php
    default_backend webservers    #客户端访问时默认调用后端服务器地址池
    use_backend lamp if url_dynamic #调用后端服务器并检查ACL规则是否被匹配
backend webservers                #定义后端服务器
    balance roundrobin            #定义算法;基于权重进行轮询
    server web1 172.16.14.3:80 check rise 2 fall 1 weight 2
    server web2 172.16.14.4:80 check rise 2 fall 1 weight 2
backend lamp
    balance source            #定义算法;源地址hash运算;类似于Nginx的ip_hash
    server lamp 172.16.14.5:80 check rise 2 fall 1
----------------------------------------------------------------------
#####注释:check:启动对后端server的健康状态检测;rise:离线的server转换到正常状态成功检查的次数;fall:确认server从正常状态转换为不可用状态需要检查的次数;weight:权重,数量越大,超重越高
3、启动Haproxy服务并做访问测试
1
# service haproxy start


4、在HA2服务器上安装Haproxy;这里就不在介绍了,安装与配置方法与在HA1服务器上安装相同
五、安装配置Keepalived
1、在HA1与HA2服务器上安装Keepalived# yum -y install keepalived
# yum -y install keepalived
2、修改HA1服务器的主配置文件
global_defs {# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
   notification_email {
    root@localhost
   }
   notification_email_from admin@allen.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_ALLEN
}
vrrp_script chk_proess {
    script "killall -0 haproxy"
    interval 1
    weight -2
}
vrrp_instance ha_1 {
    state MASTER
    interface eth0
    virtual_router_id 56
    priority 100
    advert_int 1
    authentication {
      auth_type PASS
      auth_pass 1056
    }
    virtual_ipaddress {
    172.16.14.10
    }
    track_script {
      chk_proess
    }
}
vrrp_instance ha_2 {
    state BACKUP
    interface eth0
    virtual_router_id 58
    priority 92
    advert_int 1
    authentication {
      auth_type PASS
      auth_pass 1058
    }
    virtual_ipaddress {
    172.16.14.11
    }
}
3、修改HA2服务器的主配置文件
global_defs {# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
   notification_email {
    root@localhost
   }
   notification_email_from admin@allen.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_ALLEN
}
vrrp_script chk_proess {
    script "killall -0 haproxy"
    interval 1
    weight -2
}
vrrp_instance ha_1 {
    state BACKUP
    interface eth0
    virtual_router_id 56
    priority 99
    advert_int 1
    authentication {
      auth_type PASS
      auth_pass 1056
    }
    virtual_ipaddress {
    172.16.14.10
    }
}
vrrp_instance ha_2 {
    state MASTER
    interface eth0
    virtual_router_id 58
    priority 93
    advert_int 1
    authentication {
      auth_type PASS
      auth_pass 1058
    }
    virtual_ipaddress {
    172.16.14.11
    }
    track_script {
      chk_proess
    }
}
4、启动Keepalived服务并查看HA1与HA2服务器上的虚拟IP地址
2: eth0:
mtu 1500 qdisc pfifo_fast state UP qlen 1000# service keepalived start
# ip addr show eth0
    link/ether 00:0c:29:2c:1a:24 brd ff:ff:ff:ff:ff:ff
    inet 172.16.14.1/16 brd 172.16.255.255 scope global eth0
    inet 172.16.14.10/32 scope global eth0
    inet6 fe80::20c:29ff:fe2c:1a24/64 scope link
       valid_lft forever preferred_lft forever
------------------------------------------------------------------------
# service keepalived start
# ip addr show eth0
2: eth0:
mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:ec:f6:3f brd ff:ff:ff:ff:ff:ff
    inet 172.16.14.2/16 brd 172.16.255.255 scope global eth0
    inet 172.16.14.11/32 scope global eth0
    inet6 fe80::20c:29ff:feec:f63f/64 scope link
       valid_lft forever preferred_lft forever


六、验证服务1、访问验证服务器的负载均衡功能2、验证是否实现动、静分离的效果3、假设前端服务器其中一台出现了故障,验证IP地址能否自动切换到备份服务器上


######停止HA1服务器的haproxy服务# service haproxy stop------------------------------------------------------------------------######查看HA2服务器的IP地址# ip addr show eth02: eth0:
mtu 1500 qdisc pfifo_fast state UP qlen 1000    link/ether 00:0c:29:ec:f6:3f brd ff:ff:ff:ff:ff:ff    inet 172.16.14.2/16 brd 172.16.255.255 scope global eth0    inet 172.16.14.11/32 scope global eth0    inet 172.16.14.10/32 scope global eth0    inet6 fe80::20c:29ff:feec:f63f/64 scope link       valid_lft forever preferred_lft forever注释:由上可见,虚拟IP地址已成功切换到HA2服务器4、假如这里将服务器修复好重新上线,IP地址会切换回到原来的服务器,这里就不在验证;将HA2服务器上的haproxy或keepalived服务关闭亦是如此
到此Keepalived+Haproxy实现负载均衡及动静分离已完成;后续博客会更新其他相关内容,敬请关注...

云中漫步 发表于 2013-10-8 11:51:13

我是个凑数的。。。

posir 发表于 2013-10-16 21:22:26

我的id是假冒的,大家不要相信我是骗子。

chenjiali 发表于 2013-10-23 09:04:58

死亡教会人一切,如同考试之后公布的结果——虽然恍然大悟,但为时晚矣~!

wuaji 发表于 2013-11-2 06:28:11

人生不能像做菜、把所有的料都准备好才下锅!

jinquan26 发表于 2013-11-20 20:18:00

男人与女人,终究也只是欲望的动物吧!真的可以因为爱而结合吗?对不起,我也不知道。。

浪人 发表于 2013-12-7 08:38:12

爱情像天平,当你跳下去的时候,我会摔的更痛
页: [1]
查看完整版本: Haproxy+Keepalived配置WEB负载均衡及动静分离