HAProxy簡介
HAProxy 是一個免費的,非??焖俸涂煽康慕鉀Q方案,提供 高可用性, 負載均衡和代理對TCP和HTTP的應用程序。它特別適用于非常大流量網站。多年來,它已成為標準開源的負載均衡,現在隨最主流的Linux發行版,并且通常默認的云平臺部署。
實驗描述
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是否配置成功
可以看到虛擬IP在eth1接口上配置成功
2、打開瀏覽器,輸入虛擬地址進行測試
測試沒有問題
3、將node1節點down掉,查看BACKUP
節點狀態
[root@node1 ~]# touch /etc/keepalived/down
虛擬IP轉移到了node2
4、刷新瀏覽器,看是否還能繼續訪問
測試沒有問題
二、Web網站的動靜分離測試
1、打開瀏覽器,按F12打開調試工具,輸入虛擬地址,查看資源是否都被加載
網頁文件與圖片資源都加載成功
2、關閉node3的httpd服務,測試是否還能繼續加載資源
[root@node3 ~]# service httpd stop
當靜態服務器停止服務后,圖片資源加載不到了
3、將node3的httpd服務恢復,測試是否還能繼續加載資源
[root@node3 ~]# service httpd start
當靜態服務器恢復服務后,圖片資源又能正常加載了
實驗總結
在backend dynamic
里面,我加入了cookie綁定,但服務器只有一臺,這是為了做實驗方便,有興趣的同學可以多加入幾臺服務器,測試下cookie綁定的效果,還是很不錯的。實驗就做到這里,如果在實驗過程中有問題,可以在評論區留言交流。
原創文章,作者:張小凡,如若轉載,請注明出處:http://www.www58058.com/14923