1. 程式人生 > >[轉] Haproxy、Keepalived雙主高可用負載均衡

[轉] Haproxy、Keepalived雙主高可用負載均衡

配置過程 virtual dev gnu 文本 tpch margin amp queue

http://blog.chinaunix.net/uid-25266990-id-3989321.html

在測試了Nginx+Keepalived的負載均衡後,也對Haproxy+Keepalived雙主模式做了測試,雙主的模式充分利用了服務器資源,這樣不會導致服務器浪費。 這裏舉例說明:
默認情況下,第一臺負載均衡器主要分發www.zhirs.com的請求,第二臺負載均衡器主要分發img.zhirs.com的請求。
任意一臺宕機都不會影響網站分發。

實驗環境

VIP1=192.168.137.200 (www.zhirs.com)
VIP2=192.168.137.100 (img.zhirs.com)

haproxy01=192.168.137.254
haproxy02=192.168.137.253
web1=192.168.137.201
web2=192.168.137.202
img1=192.168.158.101
img2=192.168.158.102

架構圖

技術分享
安裝配置過程

1、安裝配置過程,(兩臺Haproxy的安裝配置步驟一樣)

haproxy下載地址:http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.24.tar.gz

#cd /usr/local/src
#wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.24.tar.gz
#tar xf haproxy-1.4.24.tar.gz #cd haproxy-1.4.24 #make TARGET=linux26 ARCH=x86_64 #TARGET是指定內核版本,ARCH指定CPU架構,我使用的是64bit系統 #make install

2、安裝完畢後,創建配置文件和啟動文件。

#mkdir /etc/haproxy
#cp examples/haproxy.cfg /etc/haproxy
#cp examples/haproxy.init /etc/init.d/haproxy
#
chmod +x /etc/init.d/haproxy #ln -s /usr/local/sbin/haproxy /usr/sbin/ #mkdir /usr/share/haproxy

3、編輯配置文件(兩臺Haproxy配置文件相同)

#vim /etc/haproxy/haproxy.cfg
# 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
    #log loghost    local0 info
    maxconn 4096                #最大連接數
    chroot /usr/share/haproxy   #改變當前工作目錄。
    uid 99                  #所屬用戶的uid
    gid 99                  #所屬運行的gid
    daemon                  #以後臺形式運行haproxy
    #debug
    #quiet
 
defaults
    log global
    mode    http
  #默認的模式mode { tcp|http|health },tcp是4層,http是7層,health只會返回OK
    option  httplog
    option  dontlognull
    option   redispatch
  #當serverId對應的服務器掛掉後,強制定向到其他健康的服務器
    option  abortonclose
  #當服務器負載很高的時候,自動結束掉當前隊列處理比較久的鏈接
    retries 3               #兩次連接失敗就認為是服務器不可用
    maxconn 2000            #默認的最大連接數
  #timeout http-keep-alive 10s
  # timeout queue 1m
    contimeout  5000        #連接超時
    clitimeout  50000       #客戶端超時
    srvtimeout  50000       #服務器超時
    timeout check 5s            #心跳檢測超時
    stats refresh 30s           #統計頁面自動刷新時間
    stats uri  /stats           #統計頁面url
    stats realm baison-test-Haproxy         #統計頁面密碼框上提示文本
    stats auth admin:admin123           #統計頁面用戶名和密碼設置
    stats hide-version                  #隱藏統計頁面上HAProxy的版本信息
frontend www
    bind *:80
    #這裏建議使用bind *:80的方式,要不然做集群高可用的時候有問題,vip切換到其他機器就不能訪問了。
    acl web hdr(host) -i www.zhirs.com
    #acl後面是規則名稱,-i是要訪問的域名,如果訪問www.zhirs.com這個域名就分發到下面的webserver 的作用域。
    acl img hdr(host) -i img.zhirs.com
    #如果訪問img.baison.com.cn就分發到imgserver這個作用域。
    use_backend webserver if web
    use_backend imgserver if img
 
backend webserver             #webserver作用域
    mode http
    balance   roundrobin     
    #banlance roundrobin 輪詢,balance source 保存session值,支持static-rr,leastconn,first,uri等參數
    option  httpchk /index.html
    #檢測文件,如果分發到後臺index.html訪問不到就不再分發給它
    server     web01 192.168.137.201:80  check inter 2000 fall 3 weight 30
   server     web01 192.168.137.202:80  check inter 2000 fall 3 weight 20
   server     web01 192.168.137.203:80  check inter 2000 fall 3 weight 10
 
backend imgserver
    mode http
    option  httpchk /index.php
    balance     roundrobin                         
    server      img01 192.168.137.101:80  check inter 2000 fall 3
    server      img02 192.168.137.102:80  check inter 2000 fall 3

4、啟動Haproxy服務,查看狀態。

1 #service haproxy start

技術分享
技術分享

5、安裝配置keepalived(兩臺keepalived安裝步驟一樣)

#cd /root/software
#wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.33.tar.gz
#tar -zxvf pcre-8.33.tar.gz
#cd pcre-8.33
#./configure
#make && make install
#wget http://nginx.org/download/nginx-1.2.9.tar.gz
#tar -zxvf nginx-1.2.9.tar.gz
#cd nginx-1.2.9
#./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_sub_module --with-http_stub_status_module --with-http_gzip_static_module
#make && make install

6、第一臺keepalived配置文件。第一臺做192.168.137.200vip的master,192.168.137.100的backup。

#vim /etc/keepalived/keepalived.conf
global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_script chk_http_port {
                #script "/opt/nginx_pid.sh"
                script "/opt/check_haproxy.sh"
                interval 2
                weight 2
}
vrrp_instance VI_1 {
    state MASTER        ############ 輔機為 BACKUP
    interface eth0
    virtual_router_id 51
    mcast_src_ip 192.168.137.254
    priority 100                  ########### 權值要比 back 高
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
track_script {
        chk_http_port ### 執行監控的服務
        }
    virtual_ipaddress {
       192.168.137.200
    }
}
vrrp_instance VI_2 {
    state BACKUP
    interface eth0
    virtual_router_id 52
    priority 99
    advert_int 1
    authentication {
         auth_type PASS
         auth_pass 1111
    }
    virtual_ipaddress {
        192.168.137.100 
         }
}

7、第二臺keepalived的配置文件。

#vim /etc/keepalived/keepalived.conf
global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_script chk_http_port {
                #script "/opt/nginx_pid.sh"
                script "/opt/check_haproxy.sh"
                interval 2
                weight 2
}
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    mcast_src_ip 192.168.137.253
    priority 99             ##########權值 要比master低
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
track_script {
        chk_http_port
        }
    virtual_ipaddress {
       192.168.137.200
    }
}
vrrp_instance VI_2 {
    state MASTER
    interface eth0
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
         auth_type PASS
         auth_pass 1111
    }
    virtual_ipaddress {
        192.168.137.100
         }
}

8、檢測腳本,為了防止haproxy服務關閉導致keepalived不自動切換。

#vim /opt/check_haproxy.sh
#!/bin/bash
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
     /etc/init.d/haproxy  start
fi
sleep 2
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
       /etc/init.d/keepalived stop
fi

9、啟動兩臺keepalived和Haproxy服務。

#servcie haproxy start
#service keepalived start

10、查看兩臺服務器的VIP 查看
查看192.168.137.254:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:0c:29:dc:01:3e brd ff:ff:ff:ff:ff:ff
inet 192.168.137.254/24 brd 192.168.137.255 scope global eth0
inet 192.168.137.200/32 scope global eth0

查看192.168.137.253:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:0c:29:d5:e7:3d brd ff:ff:ff:ff:ff:ff
inet 192.168.137.253/24 brd 192.168.137.255 scope global eth0
inet 192.168.137.100/32 scope global eth0
inet6 fe80::20c:29ff:fed5:e73d/64 scope link
valid_lft forever preferred_lft forever

11、測試,關閉任意一臺keepalived,img和www域名訪問正常。 後續會對Nginx+Keepalived 雙主結果做測試。

[轉] Haproxy、Keepalived雙主高可用負載均衡