天天看點

Web 負載均衡解決方案——HAproxy+keepalived實作高可用負載均衡

     Web 負載均衡解決方案——HAproxy+keepalived實作高可用負載均衡

HAProxy概念:

HAProxy提供高可用性、負載均衡以及基于TCP和HTTP應用的代理,支援虛拟主機, 它是免費、快速并且可靠的一種解決方案。HAProxy特别适用于那些負載特大的web站點, 這些站點通常又需要會話保持或七層處理。HAProxy運作在目前的硬體上,完全可以支援數以萬計的并發連接配接。并且它的運作模式使得它可以很簡單安全的整 合進您目前的架構中, 同時可以保護你的web伺服器不被暴露到網絡上。

一,    拓撲

                                    浮動IP eth0:1 192.168.10.31/23

                                                                                              |

                      +++++++++++++             +++++++++++++                       

                     + HAproxy master  +          + HAproxy backup  +

                      +++++++++++++             +++++++++++++  

                    DIP eth0 192.168.10.30/23       DIP eth0 192.168.10.28/23

                           |______________________________|

                             ______________|_______________

                             |                              | 

                                           |                                                |

       ++++++++++++       ++++++++++++        ++++++++++++       ++++++++++++

       +  WEB B   +       +  WEB B   +        +  WEB C   +       +  WEB D   +

     eth0 192.168.10.2/23   eth0 192.168.10.3/23      eth0 192.168.10.4/23   eth0 192.168.10.5/23

二,配置

(一)    搭建環境

作業系統:CentOS release 6.3 x86-64核心:2.6.27.21-0.1-xen

cpu:Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz (雙核)

記憶體:4G

軟體版本:keepalived-1.2.1 ; haproxy-1.4.20

軟體庫環境:安裝開發工具和開發庫

[root@localhost ~]#yum -y groupinstall "Development libraries" "Development tools" 

[root@localhost ~]#yum -y install gcc openssl-devel pcre-devel zlib-devel

(二)    安裝keepalived

[root@localhost ~]# tar -xvf  keepalived-1.2.7.tar.gz

[root@localhost ~]# cd keepalived-1.2.7

[root@localhost keepalived-1.2.7]#./configure --prefix=/

Keepalived configuration

------------------------

Keepalived version       : 1.2.7

Compiler                 : gcc

Compiler flags           : -g -O2

Extra Lib                : -lpopt -lssl -lcrypto 

Use IPVS Framework       : Yes

IPVS sync daemon support : Yes

IPVS use libnl           : No

Use VRRP Framework       : Yes

Use VRRP VMAC            : Yes

SNMP support             : No

Use Debug flags          : No

顯示如上為編譯成功

[root@localhost keepalived-1.2.7]#make && make install

[root@localhost ~]# vi /etc/keepalived/keepalived.conf

global_defs {

       notification_email {

               root@localhost

               }

       notification_email_from keepalived@localhost

       smtp_server 127.0.0.1

       smtp_connect_timeout 30

       router_id nginx1

       }

vrrp_script chk_haproxy {

       script "/etc/keepalived/chk_haproxy.sh"

       interval 5

vrrp_instance VI_1 {

       state MASTER

       interface eth0

       virtual_router_id 51

       priority 100

       advert_int 1

       authentication {

               auth_type PASS

               auth_pass 1111

       track_script {

               chk_haproxy 

       virtual_ipaddress {

               192.168.10.31/23

[root@localhost ~]# chkconfig keepalived on

[root@localhost ~]# chkconfig --list keepalived      

keepalived      0:off   1:off   2:on    3:on    4:on    5:on    6:off

輔keepalived配置與主相同但在keepalived配置檔案中修改:

state BACKUP

priority 50

(三)    編寫haproxy的監控腳本,當haproxy無法啟動時關閉keepalived将服務切換到輔伺服器

[root@localhost ~]# vi /etc/keepalived/chk_haproxy.sh 

#!/bin/bash

A=`ps -C haproxy --no-header | wc -l`

if [ $A -eq 0 ]

       then  /usr/local/haproxy/sbin/haproxy  -f  /usr/local/haproxy/conf/haproxy.cfg

               sleep 3

               if [ `ps -C haproxy --no-header | wc -l `  -eq 0 ]

               then  /etc/init.d/keepalived stop

               fi

fi

(四)安裝haproxy

[root@localhost ~]# tar -xvf haproxy-1.4.20.tar.gz

[root@localhost haproxy-1.4.20]# make TARGET=linux26 PREFIX=/usr/local/haproxy install

[root@localhost haproxy-1.4.20]# cd /usr/local/haproxy/

[root@localhost haproxy]# mkdir conf logs

[root@localhost haproxy]# cd conf/

[root@localhost conf]# vim haproxy.cfg

global

               log 127.0.0.1 local3 info 需要在/etc/syslog.conf裡添加local3.*         /var/log/haproxy.log

               maxconn 4096

               uid nobody

               gid nobody

               daemon

               nbproc 4

       defaults

               log             global

               mode    http

               maxconn 2048               #最大連接配接數

               retries         3        #3 次連接配接失敗就認為伺服器不可用

       option httpclose                #每次請求完畢後主動關閉http通道

       option forwardfor               #如果後端伺服器需要獲得用戶端真實ip需要配置的參數,可以從Http Header中獲得用戶端ip

       option abortonclose             #當伺服器負載很高的時候,自動結束掉目前隊列處理比較久的連接配接

               option  redispatch              #serverId對應的伺服器挂掉後,強制定向到其他健康的伺服器

       stats refresh 30                #統計頁面重新整理間隔

               stats   uri  /haproxy         #監控後端伺服器的頁面

       stats auth admin:zgrtqgjxglzx     #登陸監控頁面的使用者名和密碼

               contimeout      5000         #連接配接逾時

               clitimeout      50000         #用戶端逾時

               srvtimeout      50000         #伺服器逾時

       listen http-in

               bind 0.0.0.0:80

               mode http              #http 表示七層

               log global

               option httplog

               balance roundrobin         #預設的負載均衡的方式,輪詢方式

               balance leastconn

       option httpchk GET /login.jsp     #心跳檢測的檔案 此處不是項目裡真實的檔案

               #option httpchk GET /index.html

               cookie SERVERID insert indirect nocache

               server jsp-A 192.168.10.2:80 weight 1 cookie 1 check inter 2000 rise 2 fall 5        #cookie 1 辨別 serverid 為 1    

               server jsp-B 192.168.10.3:80 weight 1 cookie 2 check inter 2000 rise 2 fall 5        #check inter 2000 檢測心跳頻率

               server jsp-C 192.168.10.4:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5        #rise 2 2 次正确認為伺服器可用

               server jsp-D 192.168.10.5:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5        #fall 5 5 次失敗認為伺服器不可用

最後将/usr/local/haproxy/sbin/haproxy  -f  /usr/local/haproxy/conf/haproxy.cfg 加入/etc/rc.loal 設定開機啟動

(五)啟動haproxy

[root@localhost conf]# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg

三、測試

在用戶端通路 HAproxy 測試

[root@localhost ~]# elinks –dump http:// 192.168.122.254

在客戶機通路HAproxy健康檢查頁面

<a href="http://s3.51cto.com/wyfs02/M02/12/2E/wKiom1L8UrDDwibKAARieA1aSWo951.jpg" target="_blank"></a>

本文轉自Devin 51CTO部落格,原文連結:http://blog.51cto.com/devingeng/1358701