HAProxy基于Keepalived做高可用并簡單實現Web站點的動靜分離

HAProxy簡介

  HAProxy 是一個免費的,非??焖俸涂煽康慕鉀Q方案,提供 高可用性, 負載均衡和代理對TCP和HTTP的應用程序。它特別適用于非常大流量網站。多年來,它已成為標準開源的負載均衡,現在隨最主流的Linux發行版,并且通常默認的云平臺部署。

haproxy | center

haproxy-pmode.png


實驗描述

1、本實驗主要是在前端放置兩臺通過Keepalived做了高可用的HAProxy反向代理服務器,并實現后端Web站點的動靜分離。
2、主機列表
節點名稱 eth0 eth1 虛擬IP 主要功能
node1 172.16.100.1 192.168.1.11 192.168.1.10 HAProxy Active
node2 172.16.100.2 192.168.1.12 192.168.1.10 HAProxy Backup
node3 172.16.100.3 HTTP Static
node4 172.16.100.4 HTTP Dynamic

詳細配置

一、基本配置

1、所有節點的/etc/hosts解析
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.100.1 node1 node1.redhat.com
172.16.100.2 node2 node2.redhat.com
172.16.100.3 node3 node3.redhat.com
172.16.100.3 node3 node3.redhat.com
2、ssh互信

node1

[root@node1 ~]# ssh-keygen -t rsa -P “”
[root@node1 ~]# ssh-copy-id -i .ssh/id_rsa.pub node2

node2

[root@node2 ~]# ssh-keygen -t rsa -P “”
[root@node2 ~]# ssh-copy-id -i .ssh/id_rsa.pub node1

3、時間同步

node1

[root@node1 ~]# ntpdate 172.16.0.254

node2

[root@node2 ~]# ntpdate 172.16.0.254

查看時間是否同步

[root@node1 ~]# date;ssh node2 ‘date’
Sat Apr 16 10:59:11 CST 2016
Sat Apr 16 10:59:11 CST 2016


二、配置node1與node2節點的KeepAlived服務

1、在兩個上’安裝keepalived

[root@node1 ~]# yum install keepalived -y;ssh node2 ‘yum install keepalived -y’

2、在node1上編輯配置文件

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

global_defs {
   notification_email {
    root@localhost
   }
   notification_email_from admin@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_script chk_maintanance {
    script "[ -f /etc/keepalived/down ] && exit 1 || exit 0"
    interval 3
    weight -20
}
vrrp_instance VI_1 {
    state MASTER              #配置為主節點
    interface eth1            #將虛擬IP配置在eth1接口
    virtual_router_id 51
    priority 100              #權重為100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 5cd403375c990da360bcaf06      #認證密碼,與所有節點的要保持一致
    }
    virtual_ipaddress {
        192.168.1.10          #虛擬IP地址
    }
    track_script {
        chk_maintanance
    }
}
3、復制配置文件到node2

[root@node1 ~]# scp /etc/keepalived/keepalived.conf node2:/etc/keepalived/keepalived.conf

4、在node2上修改配置文件為BACKUP節點

[root@node2 ~]# vim /etc/keepalived/keepalived.conf

global_defs {
   notification_email {
    root@localhost
   }
   notification_email_from admin@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_script chk_maintanance {
    script "[ -f /etc/keepalived/down ] && exit 1 || exit 0"
    interval 3
    weight -20
}
vrrp_instance VI_1 {
    state BACKUP              #配置為備用節點
    interface eth1            #將虛擬IP配置在eth1接口
    virtual_router_id 51
    priority 99               #權重為99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 5cd403375c990da360bcaf06      #認證密碼,與所有節點的要保持一致
    }
    virtual_ipaddress {
        192.168.1.10          #虛擬IP地址
    }
    track_script {
        chk_maintanance
    }
}

5、將兩個節點的keepalived服務啟動

[root@node1 ~]# service keepalived start;ssh node2 ‘service keepalived start’


三、配置node1與node2節點的HAProxy服務

1、在兩個節點上安裝haproxy

[root@node1 ~]# yum install haproxy -y;ssh node2 ‘yum install haproxy -y’

2、在node1上編輯配置文件

[root@node1 ~]# vim /etc/haproxy/haproxy.cfg

global
    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

    stats socket /var/lib/haproxy/stats

defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

frontend  main *:80
    acl url_static       path_beg       -i /static /images /javascript /stylesheets  #靜態內容的ACL規則
    acl url_static       path_end       -i .jpg .gif .png .css .js                   #靜態內容的ACL規則

    use_backend static          if url_static         #如果符合靜態內容的acl,那么就使用static服務器。
    default_backend             dynamic               #沒有被靜態內容的ACL匹配到的請求,都將使用dynamic服務器

backend static
    balance     roundrobin                            #輪調算法,
    server  node3 172.16.100.3:80 check               #靜態服務器地址

backend dynamic
    balance     roundrobin                            #輪調算法
    cookie  SRV_ID  insert  nocache                   #做cookie綁定
    server  node4 172.16.100.4:80 check cookie node4  #動態服務器地址,并設置cookie value
4、編輯rsyslog文件,使haproxy的日志配置生效

[root@node1 ~]# vim /etc/rsyslog.conf

$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imklog # provides kernel logging support (previously done by rklogd)

$ModLoad imudp #工作在udp協議
$UDPServerRun 514 #允許514端口接收使用UDP協議轉發過來的日志

$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

$IncludeConfig /etc/rsyslog.d/*.conf

*.info;mail.none;authpriv.none;cron.none /var/log/messages

authpriv.* /var/log/secure

mail.* -/var/log/maillog

cron.* /var/log/cron

*.emerg *

uucp,news.crit /var/log/spooler

local7.* /var/log/boot.log
local2.* /var/log/haproxy.log #與haproxy里面的日志設置相對應
5、將修改好的配置文件復制到node2

[root@node1 ~]# scp /etc/rsyslog.conf node2:/etc/rsyslog.conf
[root@node1 ~]# scp /etc/haproxy/haproxy.cfg node2:/etc/haproxy/haproxy.cfg

6、啟動haproxy服務并重啟rsyslog服務

[root@node1 ~]# service haproxy start;ssh node2 ‘service haproxy start’
[root@node1 ~]# service rsyslog restart;ssh node2 ‘service rsyslog restart’


四、配置靜態站點

1、node3安裝httpd服務

[root@node3 ~]# yum install httpd -y

2、在/var/www/html/目錄下準備一張圖片

[root@node3 ~]# ls /var/www/html/
magedu.png

3、啟動httpd服務

[root@node3 ~]# service httpd start


五、配置動態站點

1、node4安裝httpd和php服務

[root@node3 ~]# yum install httpd php -y

2、在/var/www/html/目錄下準備一個index.php文件

[root@node4 ~]# vim /var/www/html/index.php

<html>
    <head><title>Welcome to magedu.com</title></head>
    <body>
        <img src="/magedu.png"/>
        <?php
        echo "<h1>Welcome to Magedu</h1>";
        ?>
    </body>
</html>
3、啟動httpd服務

[root@node3 ~]# service httpd start


實驗測試

一、KeepAlived為HAProxy實現高可用的測試

1、首先查看MASTER節點的虛擬IP是否配置成功

Alt textMASTER_IP.jpg

可以看到虛擬IP在eth1接口上配置成功

2、打開瀏覽器,輸入虛擬地址進行測試

Alt text1.gif

測試沒有問題

3、將node1節點down掉,查看BACKUP節點狀態

[root@node1 ~]# touch /etc/keepalived/down

Alt textBACKUP_IP.jpg

虛擬IP轉移到了node2

4、刷新瀏覽器,看是否還能繼續訪問

Alt text2.gif

測試沒有問題


二、Web網站的動靜分離測試

1、打開瀏覽器,按F12打開調試工具,輸入虛擬地址,查看資源是否都被加載

Alt text3.gif

網頁文件與圖片資源都加載成功

2、關閉node3的httpd服務,測試是否還能繼續加載資源

[root@node3 ~]# service httpd stop

Alt text4.gif

當靜態服務器停止服務后,圖片資源加載不到了

3、將node3的httpd服務恢復,測試是否還能繼續加載資源

[root@node3 ~]# service httpd start

Alt text5.gif

當靜態服務器恢復服務后,圖片資源又能正常加載了


實驗總結

  在backend dynamic里面,我加入了cookie綁定,但服務器只有一臺,這是為了做實驗方便,有興趣的同學可以多加入幾臺服務器,測試下cookie綁定的效果,還是很不錯的。實驗就做到這里,如果在實驗過程中有問題,可以在評論區留言交流。


原創文章,作者:張小凡,如若轉載,請注明出處:http://www.www58058.com/14923

(0)
張小凡張小凡
上一篇 2016-04-16
下一篇 2016-04-16

相關推薦

  • 馬哥教育網絡版22期+第10周作業

    week10 1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情) 2、為運行于虛擬機上的CentOS 6添加一塊新硬件,提供兩個主分區;   (1) 為硬盤新建兩個主分區;并為其安裝grub;   (2) 為硬盤的第一個主分區提供內核和ramdisk文件;&nbsp…

    Linux干貨 2016-10-29
  • 文件管理基礎知識及命令詳解

    文件系統     文件和目錄被組織成一個單根倒置樹結構     文件系統從根目錄下開始,用“ /”表示     根文件系統(rootfs): root filesystem    …

    Linux干貨 2016-08-05
  • OpenStack Glance安裝配置過程記錄

    Glance是作為OpenStack的虛擬機的Image(鏡像)服務, 它提供了一系列的REST API, 用來管理、查詢虛擬機的鏡像, 它支持多種后端存儲介質, 例如用本地文件系統作為介質、Swift(OpenStack Object Storage)作為存儲介質或者S3兼容的API作為存儲介質。 Glance作為OpenStack的一個核心的系統, 被設…

    2017-09-14
  • Linux下各類顏色文件的意思

    Linux下各類顏色文件的意思   Linux系統對在終端下的各文件進行了顏色區分,了解各個顏色文件對應的意思對是學習Linux必須要掌握的。Linux文件顏色如下圖: 1、白色:表示普通文件(-) 2、藍色:表示目錄(d) 3、綠色:表示可執行文件(-) 4、紅色:表示壓縮文件(-) 5、淺藍色:鏈接文件(l) 6、黃色:表示設備文件(c) 7、…

    Linux干貨 2016-10-18
  • man手冊的使用

    在Linux中man的使用頻率應該是很高的,靈活運用它可以讓自己快速的掌握一個不熟悉命令的使用方法。下面來介紹下man 環境CentOS6.8 man – format and display the on-line manual pages 在線使用手冊格式及展示通俗點來說它就是命令的使用手冊。它共分九個章節 1、用戶命令2、系統調用3、C庫調…

    Linux干貨 2016-10-19
  • shell編程基礎一(多種方法求值1+2+..+100)

    #SHELL編程基礎一(多種方法求值1+2+..+100)##為什么要學好shell shell腳本語言是實現linux系統管理及自動化運維所必備的重要工具,linux系統的底層及基礎應用軟件的核心大都涉及shell腳本的內容。 每一個合格的linux系統管理員或運維工程師,都需要能夠熟練地編寫shell腳本語言,并能夠閱讀系統及各類軟件…

    Linux干貨 2017-08-26
欧美性久久久久