天天看點

haproxy+keepalived

http://www.osyunwei.com/archives/7512.html  (主要參考)
http://blog.chinaunix.net/uid-25266990-id-3989321.html (次要參考)
http://xz159065974.blog.51cto.com/8618592/1405812  (動靜态分離)
http://www.cnblogs.com/dkblog/archive/2011/07/06/2098949.html
---------------------------------------------------------------

      

作業系統:CentOS 6.5 64位

Web伺服器:192.168.21.127、192.168.21.128

站點:bbs.osyunwei.com和sns.osyunwei.com部署在兩台Web伺服器上

實作目的:

增加兩台伺服器(主主模式),通過HAProxy+Keepalived實作Web伺服器負載均衡

架構規劃:

HAProxy伺服器:192.168.1.117、192.168.1.118

虛拟伺服器(VIP):192.168.1.20、192.168.1.30

Realserver: 192.168.1.119   192.168.1.120

部署完成之後:

1、VIP:192.168.1.20指向192.168.1.117;VIP:192.168.1.30指向192.168.1.118;

2、當192.168.1.117當機時,VIP:192.168.1.20漂移到192.168.1.118上;

3、當192.168.1.118當機時,VIP:192.168.1.30漂移到192.168.1.117上;

這樣的主主模式好處是,兩台伺服器在提供服務的同時,又互為對方的備份伺服器。

具體操作:

第一部分:在兩台HAProxy伺服器上分别操作

一、關閉SElinux、配置防火牆

1、vi /etc/selinux/config

#SELINUX=enforcing #注釋掉

#SELINUXTYPE=targeted #注釋掉

SELINUX=disabled #增加

:wq!  #儲存退出

setenforce 0 #使配置立即生效

2、vi /etc/sysconfig/iptables  #編輯

-A RH-Firewall-1-INPUT -d 224.0.0.18 -j ACCEPT  #允許多點傳播位址通信

-A RH-Firewall-1-INPUT -p    vrrp    -j ACCEPT  #允許VRRP(虛拟路由器備援協)通信

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT  #允許80端口通過防火牆

:wq! #儲存退出

/etc/init.d/iptables restart #重新開機防火牆使配置生效

二、安裝HAProxy

1、建立HAProxy運作賬戶群組

groupadd haproxy #添加haproxy組

useradd -g haproxy haproxy -s /bin/false #建立haproxy運作賬戶haproxy并加入到haproxy組,不允許haproxy使用者直接登入系統

2、安裝編譯工具

yum install  gcc gcc-c++ make openssl-devel kernel-devel

3、安裝HAProxy

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

上傳haproxy-1.4.24.tar.gz到/usr/local/src目錄中

cd /usr/local/src #進入軟體包存放目錄

tar zxvf haproxy-1.4.24.tar.gz #解壓

cd  haproxy-1.4.24  #進入安裝目錄

make  TARGET=linux26 CPU=x86_64  PREFIX=/usr/local/haprpxy  #編譯

make install PREFIX=/usr/local/haproxy  #安裝

參數說明:

TARGET=linux26

#使用uname -r檢視核心,如:2.6.18-371.el5,此時該參數就為linux26

#kernel 大于2.6.28的用:TARGET=linux2628

CPU=x86_64   #使用uname -r檢視系統資訊,如x86_64 x86_64 x86_64 GNU/Linux,此時該參數就為x86_64

PREFIX=/usr/local/haprpxy   #/usr/local/haprpxy為haprpxy安裝路徑

4、設定HAProxy

mkdir -p  /usr/local/haproxy/conf  #建立配置檔案目錄

mkdir -p /etc/haproxy  #建立配置檔案目錄

cp /usr/local/src/haproxy-1.4.24/examples/haproxy.cfg  /usr/local/haproxy/conf/haproxy.cfg  #拷貝配置模闆檔案

ln -s  /usr/local/haproxy/conf/haproxy.cfg   /etc/haproxy/haproxy.cfg  #添加配置檔案軟連接配接

cp -r  /usr/local/src/haproxy-1.4.24/examples/errorfiles  /usr/local/haproxy/errorfiles  #拷貝錯誤頁面

ln -s  /usr/local/haproxy/errorfiles  /etc/haproxy/errorfiles  #添加軟連接配接

mkdir -p  /usr/local/haproxy/log  #建立日志檔案目錄

touch  /usr/local/haproxy/log/haproxy.log  #建立日志檔案

ln -s  /usr/local/haproxy/log/haproxy.log  /var/log/haproxy.log  #添加軟連接配接

cp /usr/local/src/haproxy-1.4.24/examples/haproxy.init  /etc/rc.d/init.d/haproxy  #拷貝開機啟動檔案

chmod +x  /etc/rc.d/init.d/haproxy  #添加腳本執行權限

chkconfig haproxy on  #設定開機啟動

ln -s  /usr/local/haproxy/sbin/haproxy  /usr/sbin  #添加軟連接配接

5、配置haproxy.cfg參數

cp  /usr/local/haproxy/conf/haproxy.cfg   /usr/local/haproxy/conf/haproxy.cfg-bak  #備份

vim  /usr/local/haproxy/conf/haproxy.cfg  #編輯,修改  (兩台機子一樣)

在第二台機118上:scp [email protected]:/usr/local/haproxy/conf/haproxy.cfg /usr/local/haproxy/conf/haproxy.cfg

# this config needs haproxy-1.1.28 or haproxy-1.2.1
global
        log 127.0.0.1   local0 #在本機記錄日志
        log 127.0.0.1   local1 notice
        #log loghost    local0 info
        maxconn 65535   #每個程序可用的最大連接配接數
        nbproc  8  #程序數量,可以設定多個,提高處理效率
        chroot /usr/local/haproxy  #haproxy安裝目錄
        uid 500  #運作haproxy的使用者uid(cat /etc/passwd檢視)
        gid 500  #運作haproxy的組uid(cat /etc/group檢視)
        daemon   #以背景守護程序運作
        pidfile /usr/local/haproxy/haproxy.pid  #将所有程序寫入pid檔案
        #debug   #調試模式
        #quiet   #安裝模式
defaults
        #log     global
        log  127.0.0.1   local3  #日志檔案設定
        mode    http  #運作模式tcp、http、health
        option  httplog
        option  http-pretend-keepalive  #伺服器端保持長連接配接
        option  http-server-close   #每次請求完畢後主動關閉http通道
        option  forceclose    #服務端響應後主動關閉請求連接配接,及早釋放服務連接配接,不必等到用戶端應答确認
        option  httpclose       #每次請求完畢後主動關閉http通道
        option  accept-invalid-http-request       #接受無效的http請求,一般建議不設定,但是可解決部分雜牌浏覽器通路打不開頁面問題
        option  dontlognull     #不記錄健康檢查的日志資訊
        option  redispatch  #如果後端有伺服器當機,強制切換到正常伺服器
        option  abortonclose  #丢棄由于用戶端等待時間過長而關閉連接配接但仍在haproxy等待隊列中的請求
        option  forwardfor  except 127.0.0.0/8  #不記錄本機轉發的日志
        option  originalto  #記錄用戶端通路的目的IP
        maxconn  65535  #每個程序可用的最大連接配接數
        balance source  #同一IP位址的所有請求都發送到同一伺服器
        retries 3   #三次連接配接失敗,則判斷服務不可用
        contimeout      5000  #連接配接逾時
        clitimeout      50000 #用戶端逾時
        srvtimeout      50000 #伺服器逾時
        timeout check 5s  #檢測逾時
        timeout http-request 5s  #http請求逾時時間
        timeout queue 30s  #一個請求在隊列裡的逾時時間
        timeout http-keep-alive  5s  #設定http-keep-alive的逾時時間
        stats refresh 30s #統計頁面自動重新整理時間
        stats uri  /haproxy-status  #統計頁面URL路徑
        stats realm haproxy-status  #統計頁面輸入密碼框提示資訊
        stats auth admin:123456     #統計頁面使用者名和密碼
        stats hide-version          #隐藏統計頁面上HAProxy版本資訊

frontend    web  #自定義描述資訊
        bind :80  #監聽80端口
        acl www.ccqq.com  hdr(host) -i www.ccqq.com  #規則設定,-i後面是要通路的域名,如果通路bbs.osyunwei.com這個域名,就負載均衡到bbs.osyunwei.com作用域
        use_backend www.ccqq.com if www.ccqq.com   #acl和if後面的名稱必須相同這裡為bbs.osyunwei.com
        acl img.ccqq.com  hdr(host) -i img.ccqq.com  #規則設定,-i後面是要通路的域名,如果通路sns.osyunwei.com這個域名,就負載均衡到sns.osyunwei.com作用域
        use_backend img.ccqq.com if img.ccqq.com

backend www.ccqq.com
        mode http
        balance roundrobin
        #option  httpchk /index.php  #檢測伺服器此檔案是否存在,如果沒有,則認為伺服器連接配接異常,此參數可以不設定
        server web01 192.168.1.120:80   check  inter  2000  rise 3  fall  3  weight 100
        #inter  2000 心跳檢測時間;rise 3 三次連接配接成功,表示伺服器正常;fall  3 三次連接配接失敗,表示伺服器異常; weight 100 權重設定
        server web02 192.168.1.119:80   check  inter  2000  rise 3  fall  3  weight 100

backend img.ccqq.com
        mode http
        balance roundrobin  #設定負載均衡模式,source儲存session值,roundrobin輪詢模式
        #option  httpchk /index.php  #檢測伺服器此檔案是否存在,如果沒有,則認為伺服器連接配接異常,此參數可以不設定
        server web01 192.168.1.119:80   check  inter  2000  rise 3  fall  3  weight 100
        server web02 192.168.1.120:80   check  inter  2000  rise 3  fall  3  weight 100
        #errorloc  503  http://www.osyunwei.com/404.html
        errorfile 403 /etc/haproxy/errorfiles/403.http
        errorfile 500 /etc/haproxy/errorfiles/500.http
        errorfile 502 /etc/haproxy/errorfiles/502.http
        errorfile 503 /etc/haproxy/errorfiles/503.http
        errorfile 504 /etc/haproxy/errorfiles/504.http
      

在windows下修改 hosts  :

192.168.1.20 www.ccqq.com

192.168.1.30 img.ccqq.com

二、安裝配置keepalived(2配置參考1,大體上一樣)

1、安裝配置keepalived

[root@node1 src]# yum -y install popt popt-devel popt-static openssl-devel kernel-devel libnl libnl-devel

[root@node1 src]# wget http://www.keepalived.org/software/keepalived-1.2.4.tar.gz

[root@node1 src]# tar xf keepalived-1.2.4.tar.gz

[root@node1 src]# cd keepalived-1.2.4

[root@node1 keepalived-1.2.4]# ./configure --prefix=/usr/local/keepalived

[root@node1 keepalived-1.2.4]# make && make install

[root@node1 keepalived-1.2.4]# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/

[root@node1 keepalived-1.2.4]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

[root@node1 keepalived-1.2.4]# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

[root@node1 keepalived-1.2.4]# mkdir -p /etc/keepalived

[root@node1 keepalived-1.2.4]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

[root@node1 keepalived-1.2.4]# chmod +x /etc/init.d/keepalived

配置

[root@node1 keepalived-1.2.4]# vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

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/check_haproxy.sh"
                interval 2
                weight 2
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    mcast_src_ip 192.168.1.117
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
track_script {
        chk_http_port
        }
    virtual_ipaddress {
       192.168.1.20
    }
}

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.1.30
         }
}
      

 BACKUP 機的 keepalived 配置:

haproxy+keepalived
haproxy+keepalived
! Configuration File for keepalived

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/check_haproxy.sh"
                interval 2
                weight 2
}
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    mcast_src_ip 192.168.1.118
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
track_script {
        chk_http_port
        }
    virtual_ipaddress {
       192.168.1.20
    }
}
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.1.30
         }
}      

View Code

 

檢測腳本,為了防止haproxy服務關閉導緻keepalived不自動切換。  測了有問題 

1

2

3

4

5

6

7

8

9

#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

ip addr  檢視兩台機的VIP

域名測試  是否正常

---日志問題  沒試成功------------------------------------------
1.vim /etc/rsyslog.conf 
添加local0.* /var/log/haproxy.log      
2.Haproxy.conf代碼
global   
    log 127.0.0.1 local0 info   
    ......
3. 日志輸出在/var/log/haproxy.log下      

centos 下,修改 vim /etc/sysconfig/rsyslog ,把

SYSLOGD_OPTIONS=”-m 0″ 改為 SYSLOGD_OPTIONS=”-m 0 -r”

service rsyslog restart

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

cd /

find -name haproxy

[root@carbonlinux /]rm -rf /usr/share/haproxy

[root@carbonlinux /]# rm -rf /usr/sbin/haproxy

[root@carbonlinux /]# rm -rf /usr/local/sbin/haproxy

[root@carbonlinux /]# rm -rf /usr/local/doc/haproxy

[root@carbonlinux /]# rm -rf /etc/haproxy

[root@carbonlinux /]# rm -rf /etc/rc.d/init.d/haproxy

[root@carbonlinux /]# rm -rf /var/lock/subsys/haproxy

下一篇: NGINX+keepalived