Keepalived+HAproxy负载均衡

1.架构
          2个Apache节点,2个负载均衡节点。这四台服务器需要用到5个IP地址,其中4个IP地址分别分配给4台服务器,剩下的那个IP地址,我们叫做"虚拟IP地址“或”共享IP地址“,用来给2个负载均衡节点共享。
          
       架构详情:
                    负载均衡节点1:lb1;  IP地址:192.168.1.11
                   
 负载均衡节点2:lb2;  IP地址:192.168.1.12
                    WEB节点1:www1;    IP地址:192.168.1.13

                    WEB节点2:www2;    IP地址:192.168.1.14
                    虚拟IP:192.168.1.10,对外服务,用于处理访问请求。

               确定每台机器的/etc/hostname和/etc/hosts的内容:
                  比如  lb1的/etc/hostname的内容为: lb1 
                                   /etc/hosts的内容:
                                               [...]
                                               #127.0.1.1    lb1 
                                               192.168.1.11   lb1
                                               [...]
                  其他三台都对应的配置。

 2.架构的实现
    2.1对WEB服务器的配置
       2.1.1  安装Apache2   sudo apt-get install apache2

       2.1.2 修改
/etc/apache2/apache2.conf
         在本方案中,我们会将HAProxy配置成透明的反向代理,它会把访问者的IP地址用X-Forwarded-For变量传递给后面的WEB服务器。当然我们希望Apache在日志中记录访问者的IP地址,而不是负载均衡服务器的IP地址。
         因此,我们修改/etc/apache2/apache2.conf,将LogFormat中的%h改为 %{X-Forwarded-For}i 。
                     
LogFormat "%v:%p %{X-Forwarded-For}i %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
                     LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
                     LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %O" common
  
      2.1.3  创建文件check.txt   (内容随意)
                    我们使用HAProxy来监控WEB节点的状态。为此,我们需要在两个WEB节点下面准备一个文件,如果HAProxy能够访问到这个文件,就说明WEB节点正常,否则说明WEB节点发生故障。

     2.1.4 修改虚拟主机配置
                     不希望虚拟主机在访问日志中记录check.txt的访问情况,这样会干扰我们的日志分析。为此,我们需要修改虚拟主机的配置文件,把原先的CustomLog行注释掉,并且加2行新配置:
                vi   /etc/apache2/sites-available/000-default.conf
                    [...]
                    #
CustomLog ${APACHE_LOG_DIR}/access.log combined
                    SetEnvIf Request_URI   "^/check\.txt$"  dontlog
                    CustomLog ${APACHE_LOG_DIR}/access.log combined env=!dontlog
                    [...]
                                  请确认该配置文件中没有其他的CustomLog 。最后重启Apache (sudo /etc/init.d/apache2 restart)       
  
  2.1.5标识web主机 (测试的时候方便知道访问的是哪一个web节点


2.2 Keepalived的安装及配置 
     2.2.1 安装Keepalived      
                    sudo apt-get install keepalived 
    2.2.2 修改/etc/sysctl.conf
                   为了让Keepalived能够随便绑定虚拟IP地址,修改/etc/sysctl.conf,启用IP转发(net.ipv4.ip_forward),并加上一条nonlocal_bind的配置:
                       [...]
                       
net.ipv4.ip_forward=1
                       net.ipv4.ip_nonlocal_bind=1
                       net.ipv4.tcp_fin_timeout=30
                       net.ipv4.tcp_syncookies=1
                       [...]

              然后,使之生效:   sudo sysctl -p
  
              如果你的lb1和lb2用的是KVM/Xen虚拟机,还需要在宿主服务器上修改/etc/sysctl.conf:
                         
net.ipv4.conf.default.rp_filter=1
                         net.ipv4.conf.all.rp_filter=1
                         net.ipv4.tcp_syncookies=1
                         net.ipv4.conf.eth1.proxy_arp=1
                         net.ipv4.conf.eth0.proxy_arp=1
                         net.bridge.bridge-nf-call-ip6tables=0
                         net.bridge.bridge-nf-call-iptables=0
                         net.bridge.bridge-nf-call-arptables=0
                       (在kvm虚拟机中待验证)

    2.2.3 配置Keepalived
               将lb1作为负载均衡的“主服务器”,将lb2作为“从服务器”,这是通过配置文件中的priority(优先级)来实现的。在主服务器上设置priority为101,从服务器上则设置priority为100 。
             ----------------------------------------------------------------
               在lb1/lb2上操作,创建/etc/keepalived/keepalived.conf 。
               
#通知设置
               global_defs{
                                   notification_email{
                                                              1213@mapgoo.net   #要通知的Email (邮箱地址可以多个,每行一个)
                                                              }
                                    notification_email_from  lb1@mytest.com    #通知邮件的From地址
                                   smtp_server 127.0.0.1               #这里可以设置成你自己的smtp服务器地址
                                   smtp_connect_timeout 20
                                 }
           
               #定义脚本,用以检测haproxy是否正常运行
               vrrp_script chk_haproxy{
                                                  script "killall -0 haproxy"
                                                  interval 2
                                                  weight 2 
                                                     } 
                       
               #虚拟接口配置
                vrrp_instance VI_1{
                                              interface eth0
                                              state MASTER     #在lb2上是BACKUP (区别点)
                                               priority 101         #在lb2上是100         (区别点)
                                              virtual_router_id 51
                                              smtp_alert            #启用email通知
                                               authentication{ 
                                                                   auth_type PASS
                                                                   auth_pass Amitabha  #设置你的密码
                                                                      }
                                              #共享的虚拟IP地址              
                                              virtual_ipaddress{
                                                                   192.168.1.10
                                                                         }
                                              # 故障检测             
                                              track_script{
                                                               chk_haproxy
                                                                  }
                                              }   
                 ----------------------------------------------------------------

          2.2.4  运行keepalived服务,并且查看IP地址信息:
                         service  keepalived start  
                         ip addr sh eth0 
       -----
         
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether c8:1f:66:c5:0e:06 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.142/24 brd 192.168.1.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet 192.168.1.10/32 scope global eth1     (成功的话设置成MASTER的lb1,这是显示共享虚拟的IP地址)
       valid_lft forever preferred_lft forever
    inet6 fe80::ca1f:66ff:fec5:e06/64 scope link 
       valid_lft forever preferred_lft forever
------ 
                  
       2.2.5 HAProxy的安装及配置 (均在lb1和lb2上操作执行)
                2.2.5.1安装HAProxy:  sudo apt-get install haproxy

               2.2.5.2配置/etc/haproxy/haproxy.cfg  (修改前备份一下) 
             -------------------------------------------------
            
global
                      log /dev/log local0
                      log /edv/log local1 notice
                      maxconn 4096
                      chroot /var/lib/haproxy
                      user haproxy
                      group haproxy
                      daemon

         defaults
                    log global
                    option dontlognull
                    retries 3         #HAProxy在遇到问题时再重复3次
                    contimeout 5000
                    clitimeout 50000
                    srvtimeout 50000
                    errorfile 400 /etc/haproxy/errors/400.http
                    errorfile 403 /etc/haproxy/errors/403.http
                    errorfile 408 /etc/haproxy/errors/408.http
                    errorfile 500 /etc/haproxy/errors/500.http
                    errorfile 502 /etc/haproxy/errors/502.http
                    errorfile 503 /etc/haproxy/errors/503.http
                    errorfile 504 /etc/haproxy/errors/504.http

        listen  webfarm 192.168.1.10:80
                   mode http
                  option httplog
                  stats enable       #启动统计页面
                 stats auth hiweed:mypassword  #统计页面的账号和密码
                 balance roundrobin                  #均衡方式:逐个轮流
                 cookie  JSESSIONID prefix        #用于Session的
                option httpclose
                option forwardfor
                option httpchk HEAD /check.txt HTTP/1.0
               server webA 192.168.1.13:80 cookie A check
               server webB 192.168.1.14:80 cookie B check
            --------------------------------------------------- 
                该配置让HAProxy监听在虚拟IP地址 192.168.1.10的80端口上,后面的两台web服务器分别为192.168.1.13和192.168.1.14,以文件/check.txt作为检查目标。
               
             2.2.5.3 让HAProxy自动启动 (把ENABLED的值改成1)
                         sudo vi  /etc/default/haproxy
                                      
# Set ENABLED to 1 if you want the init script to start haproxy.
                                      ENABLED=1
                                      # Add extra flags here.
                                      #EXTRAOPTS="-de -m 16"
            2.2.5.4  在lb1和lb2上启动HAProxy
                       sudo service haproxy start

3.测试
      3.1WEB节点测试
      浏览器中输入:192.168.1.10
          按F5刷新,你会发现都是在两台web服务器之间切换,这就是我们实现的“负载均衡”功能。之所以能够切换,我们使用的均衡方式是roundrobin,也就是让所有的节点轮流上场。均衡方式也可以用source,这个有点像Nginx的IP Hash,也就是说,只要在集群的节点数量不变,那么来自某个IP的用户,会始终被HAProxy分配到固定的一个节点上(这个特性也会解决Session问题)。 
      3.2负载均衡节点故障模拟
          停掉主服务器lb1,看服务能不能中断。

4.HAProxy的WEB统计页面
       HAProxy自带了一个web统计页面。在其配置文件中,有两行:
                    stats enable       #启动统计页面
                   stats auth hiweed:mypassword  #统计页面的账号和密码
      浏览器中输入:192.168.1.10/haproxy?stats  (即可用账号密码登陆上去)
     如果不需要该页面,只需要在HAProxy的配置文件中去掉上面的这两行就行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值