Haproxy+Keepalivedマスター高可用性


博文転自http://fighter.blog.51cto.com/1318618/1254815
紹介HAProxyは高性能のプロキシサーバーで、7階と4階のプロキシを提供することができ、healthcheck、負荷バランスなど多くの特性を持ち、Twitter、Reddit、StackOverflow、GitHubを含む多くの有名なインターネット会社が使用しています.KeepAlivedは、VIP(すなわち仮想IP)および心拍検出によって高可用性を実現する高可用性スキームである.その原理は1組(2台)のサーバーが存在し、それぞれMaster、Backupの2つの役割を与え、デフォルトではMasterはVIPを自分のネットワークカードにバインドし、対外的にサービスを提供する.Master,Backupは一定の時間間隔で相手に心拍パケットを送信して相手の状態を検出する.この時間間隔は一般的に2秒である.BackupがMasterダウンを発見すると、BackupはARPパケットをゲートウェイに送信し、VIPを自分のネットワークカードにバインドする.このときBackupは対外的にサービスを提供し、自動化されたフェイルオーバを実現する.Masterが回復すると、サービスは再引き継ぎされます.
私たちのkeepalivedマスターのアプリケーションシーン:プライマリドメイン名とピクチャサーバドメイン名を同時に配布要求を提供する必要があるため、Haproxy+keepalivedマスターモードを使用しました.
デフォルトでは、最初の負荷イコライザは主にwww.baisonを配布する.com.cnの要求は、2台目の負荷イコライザが主にimgを配布する.baison.com.cnのリクエスト.いずれのダウンタイムも、Webサイトの配布に影響しません.これにより、サーバが無駄になりません.
VIP1=192.168.150.222            (www.baison.com.cn)
VIP2=192.168.150.223            (img.baison.com.cn)
haproxy01=192.168.150.110
haproxy02=192.168.150.112
web1=192.168.158.116
web2=192.168.158.117
web3=192.168.158.118
img1=192.168.158.119
img2=192.168.158.120

インストール構成プロセス
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
#      README,  TARGET       ,ARCH  CPU  ,
#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/

3、プロファイルの編集(2台の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 65535         #     
     chroot /usr/local/       #        。
     uid 99             #     uid
     gid 99             #     gid
     daemon             #       haproxy
defaults
  log global
  mode http
  #     mode { tcp|http|health },tcp 4 ,http 7 ,health    OK
  option dontlognull
  option httplog
  retries 3              #                
  option redispatch 
  # serverId         ,             
  option abortonclose
  #           ,                 
  maxconn 65535            #        
#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.baison.com.cn
  #acl       ,-i       ,    www.baison.com           webserver     。
  acl img hdr(host) -i img.baison.com.cn
  #    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.158.116:80  check inter 2000 fall 3 weight 20
server     web02 192.168.158.117:80  check inter 2000 fall 3 weight 10
server     web03 192.168.158.118:80  check inter 2000 fall 3 weight 10
                                                                                       
backend imgserver
   mode http
   option httpchk /index.php
   balance roundrobin                          
     server img01 192.168.149.119:80 check inter 2000 fall 3
     server img02 192.168.149.120:80 check inter 2000 fall 3

4、Haproxyサービスを起動し、状態を確認する
#service  haproxy  start

Haproxy+Keepalived主主高可用_第1张图片
5、インストール構成keepalived(2台のkeepalivedのインストール手順は同じ)
#tar zxvf  -1.2.7.tar.gz
#cd keepalived-1.2.7
#./configure --prefix=/usr/local/keepalived
#make
#make install
#cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
#cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
#cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
#mkdir /etc/keepalived
#cp /usr/local/keepalived/etc/keepalived/keepalived.conf  /etc/keepalived/

6、最初のkeepalivedプロファイル.第1台は192.168.150.222 vipのmasterをして、192.168.150.23のbackup
#vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   router_id LVS_DEVEL
}
vrrp_script chk_haproxy {
         script "/usr/local/keepalived/check_haproxy.sh"
        interval 2
        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 5555
    }
track_script {
        chk_haproxy #  haproxy    
    }
    virtual_ipaddress {
        192.168.150.222
    }
}
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.150.223         
         }
}

7、2台目のkeepalivedのプロファイル
#vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   router_id LVS_DEVEL
}
vrrp_script chk_haproxy {
        script "/usr/local/keepalived/check_haproxy.sh"
        interval 2
        weight 2
}
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 5555
    }
track_script {
        chk_haproxy      #  haproxy    
    }
    virtual_ipaddress {
        192.168.150.222
    }
}
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.150.223   
         }
}

8、スクリプトを検出し、haproxyサービスが閉鎖されてkeepalivedが自動的に切り替えられないことを防止する.
#vim /usr/local/keepalived/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サービスを2台起動する.
#servcie haproxy  start
#service keepalived  start

10、2台のサーバーのVIPを見る
#ip addr

11、公式サイトのカーネル最適化の提案.
echo 1024 60999 > /proc/sys/net/ipv4/ip_local_port_range
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
echo 4096 > /proc/sys/net/ipv4/tcp_max_syn_backlog
echo 262144 > /proc/sys/net/ipv4/tcp_max_tw_buckets
echo 262144 > /proc/sys/net/ipv4/tcp_max_orphans
echo 300 > /proc/sys/net/ipv4/tcp_keepalive_time
echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle
echo 0 > /proc/sys/net/ipv4/tcp_timestamps
echo 0 > /proc/sys/net/ipv4/tcp_ecn
echo 1 > /proc/sys/net/ipv4/tcp_sack
echo 0 > /proc/sys/net/ipv4/tcp_dsack

12、テスト、任意の1台のkeepalivedを閉じるか、または任意のkeepalivedのネットワークケーブルを抜く.imgとwwwドメイン名のアクセスは正常です.