keepalived+Haproxy搭建高可用Web羣集

Haproxy是目前比較流行的一種羣集調度工具,同類羣集調度工具備不少,如LVS和Nginx。相比較而言,LVS性能最好,可是搭建相對複雜,搭建LVS羣集能夠參考博文:搭建:LVS+Keepalived高可用Web服務羣集環境;Nginx的upstream模塊支持羣集功能,可是相對羣集節點健康檢查功能不強,性能沒有Haproxy好,更多的是應用在企業內網環境中。Nginx羣集能夠參考博文:centos 7部署Tomcat及其負載均衡配置詳解html

上述幾個web羣集調度器屬於軟件類型的,還有不少硬件羣集調度器,硬件通常使用比較多的是F5,也有不少公司使用國產的一些產品,如梭子魚、綠盟等。硬件羣集調度器有一些比較顯而易見的缺點,若是說出問題了,還要須要廠家的技術支持,廠家維護時還須要咱們的錯誤日誌,在出現問題到問題解決這段時間,可能一個月的時間都過去了。如果使用軟件型的羣集調度器,那麼只要咱們運維人員技術過硬,發現問題到解決問題,很快的。linux

關於Haproxy經常使用的調度算法、配置文件及參數優化能夠參考博文:centos 7 之haproxy的配置文件詳解及haproxy參數調優web

如今如下面的環境,進行搭建一個keepalived的高可用web羣集(關於高可用存儲服務器,這裏就省略了,將在之後的文章寫出如何搭建高可用的存儲服務器),環境以下:redis

keepalived+Haproxy搭建高可用Web羣集

1、準備工做:算法

一、調通網絡,防火牆放行相關流量(我這裏直接將防火牆關閉了);apache

二、準備系統映像,配置本地yum(自行配置)。vim

三、下載haproxy源碼包,能夠從我提供的網盤連接下載使用:haproxy下載連接
提取碼:54iv 。後端

四、web網站使用apache、Nginx、Tomcat搭建均可,只要能夠訪問就行,這裏自行搭建吧,我爲了測試方便,直接使用系統映像自帶的httpd服務,web網站搭建能夠參考:基於Linux搭建Apache網站服務配置詳解基於centos 7搭建Nginx網站服務器centos

五、我這裏使用的所有是centos 7系統,注意,該環境不是生產環境,如果在生產環境中,確定還有後端存儲來存放網頁文件,web服務器讀取存儲服務器上的網頁返回給客戶端。這樣纔可保證網頁內容的一致性。服務器

2、開始搭建:

一、配置keepalived+haproxy主服務器:

[root@haproxy1 ~]# yum -y install keepalived pcre-devel bzip2-devel           
#掛載系統映像,安裝相關軟件包
[root@haproxy1 media]# tar zxf haproxy-1.5.19.tar.gz -C /usr/src/     #解包
[root@haproxy1 media]# cd /usr/src/haproxy-1.5.19/       #切換至源碼包目錄
[root@haproxy1 haproxy-1.5.19]# make TARGET=linux26 && make install      
#編譯安裝,TARGET配置項表示64位系統。haproxy無須./configure配置。
[root@haproxy1 haproxy-1.5.19]# mkdir /etc/haproxy             #建立配置文件目錄
[root@haproxy1 haproxy-1.5.19]# cp examples/haproxy.cfg /etc/haproxy/      
#將源碼包自帶的配置文件目錄複製過來。
[root@haproxy1 haproxy-1.5.19]# cd
[root@haproxy1 ~]# vim /etc/haproxy/haproxy.cfg         
#編輯主配置文件,根據當前環境,將主配置文件修改以下:
# this config needs haproxy-1.1.28 or haproxy-1.2.1

global
        log /dev/log    local0 info
        log /dev/log    local0 notice
        #log loghost    local0 info
        maxconn 4096
        #chroot /usr/share/haproxy             #將該行註釋掉
        uid 99
        gid 99
        daemon
        #debug
        #quiet

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
     retries 3
        redispatch
        maxconn 2000
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000

listen  webcluster 0.0.0.0:80    #webcluster爲羣集名稱,可自定義,修改後面的端口號。
        option  httpchk /index.html
        balance roundrobin        #表示採用輪詢算法。
        server  inst1 192.168.1.3:80 check inter 2000 fall 3             #web節點1
         server  inst2 192.168.1.4:80 check inter 2000 fall 3  #web節點2,注意相關端口號
#注意,在配置文件下,有不少listen配置項,找到和咱們須要的差很少的listen項複製到
#defaults配置項下,而後將後面全部的配置項刪除,若不刪除,可能服務啓動時會報錯。
[root@haproxy1 ~]# cd /usr/src/haproxy-1.5.19/examples/           #切換至指定目錄
[root@haproxy1 examples]# cp haproxy.init /etc/init.d/haproxy    #複製服務控制腳本
[root@haproxy1 examples]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
#建立軟鏈接
[root@haproxy1 examples]# chmod +x /etc/init.d/haproxy          #賦予文件執行權限
[root@haproxy1 examples]# chkconfig --add /etc/init.d/haproxy       #添加爲系統服務
[root@haproxy1 examples]# systemctl restart haproxy              #啓動haproxy服務
[root@haproxy1 examples]# netstat -anpt | grep 80                #查看是否在監聽
#haproxy服務默認監聽80端口
tcp        0      0 0.0.0.0:80    0.0.0.0:*      LISTEN  12640/haproxy   
[root@haproxy1 ~]# vim /etc/rsyslog.d/haproxy.conf              #配置haproxy日誌,寫入下面內容

if ($programname == 'haproxy' and $syslogseverity-text == 'info') then -/var/log/haproxy/haproxy-info.log
& ~ 
if ($programname == 'haproxy' and $syslogseverity-text == 'notice') then -/var/log/haproxy/haproxy-notice.log
& ~ 
#寫入後,保存退出便可。
[root@haproxy1 ~]# systemctl restart rsyslog                  #重啓日誌服務
#如下部分開始配置keepalived,haproxy已經配置完成了。
#如今client能夠訪問該服務器IP地址,看看是否能夠刷到兩個web服務器提供的網頁。
#須要多刷新幾回,web服務器準備不同的網頁纔可看到效果。
[root@haproxy1 ~]# vim /etc/keepalived/keepalived.conf    #編輯keepalived配置文件
#只改動如下標註的配置項便可
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL1             #定義服務器名稱,不可與其餘服務器名稱衝突
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33            #修改承載漂移IP地址的物理網卡
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }   
    virtual_ipaddress {
    192.168.1.100              #指定漂移IP地址
    }
}   
#配置項至此保存退出就能夠了,將後面的全部配置項刪除,以避免影響服務啓動。
[root@haproxy1 ~]# systemctl restart keepalived               #重啓keepalived服務。

二、配置keepalived+haproxy備份服務器:

[root@haproxy2 ~]# systemctl stop firewalld          #關閉防火牆
[root@haproxy2 ~]# yum -y install keepalived pcre-devel bzip2-devel
#掛載系統映像,安裝相關軟件包
[root@haproxy2 media]# tar zxf haproxy-1.5.19.tar.gz -C /usr/src            #解包
[root@haproxy2 media]# cd /usr/src/haproxy-1.5.19/
[root@haproxy2 haproxy-1.5.19]# make TARGET=linux26 && make install    #安裝
[root@haproxy2 haproxy-1.5.19]# cd
[root@haproxy2 ~]# mkdir /etc/haproxy            #建立配置文件目錄
[root@haproxy2 ~]# scp root@192.168.1.1:/etc/haproxy/haproxy.cfg /etc/haproxy/
#直接將主服務器的haproxy配置文件複製過來
root@192.168.1.1 s password:          #輸入主服務器的用戶密碼
haproxy.cfg                                 100%  566   460.5KB/s   00:00    
[root@haproxy2 ~]# scp root@192.168.1.1:/etc/init.d/haproxy /etc/init.d/haproxy
root@192.168.1.1s password: 
haproxy                                     100% 2553     2.1MB/s   00:00    
[root@haproxy2 ~]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy        #建立連接文件
[root@haproxy2 ~]# chkconfig --add /etc/init.d/haproxy            #添加爲系統服務
[root@haproxy2 ~]# systemctl start haproxy              #啓動服務
[root@haproxy1 examples]# netstat -anpt | grep 80                #查看是否在監聽
#haproxy服務默認監聽80端口
tcp        0      0 0.0.0.0:80    0.0.0.0:*      LISTEN  12640/haproxy   
[root@haproxy1 ~]# vim /etc/rsyslog.d/haproxy.conf              #配置haproxy日誌,寫入下面內容

if ($programname == 'haproxy' and $syslogseverity-text == 'info') then -/var/log/haproxy/haproxy-info.log
& ~ 
if ($programname == 'haproxy' and $syslogseverity-text == 'notice') then -/var/log/haproxy/haproxy-notice.log
& ~ 
#寫完保存退出便可。
[root@haproxy2 ~]# systemctl restart rsyslog                  #重啓日誌服務
[root@haproxy2 ~]# scp root@192.168.1.1:/etc/keepalived/keepalived.conf /etc/keepalived/
#將主服務器的keepalived配置文件複製過來
root@192.168.1.1s password:                  #輸入主服務器的用戶密碼
keepalived.conf                             100%  630   622.3KB/s   00:00    
[root@haproxy2 ~]# vim /etc/keepalived/keepalived.conf 
#修改下面三個配置項:
                     ................
router_id LVS_DEVEL2       #將服務器名稱改一下,別和主服務器衝突
                     ..............
state BACKUP            #將狀態改成BACKUP
                     ...............
priority 90            #修改一下優先級,要比主服務器優先級低

#改完以上三行,保存退出便可。
[root@haproxy2 ~]# systemctl start keepalived           #啓動keepalived服務

至此,keepalived+haproxy就配置完成了,可使用client進行訪問測試,模擬主服務器宕機等問題,測試高可用。

[root@haproxy1 ~]# tail -f /var/log/haproxy/haproxy-info.log        #查看haproxy訪問日誌
相關文章
相關標籤/搜索