1、簡介
php
2、環境介紹html
3、安裝配置後端服務器前端
4、安裝配置Haproxymysql
5、安裝配置Keepalivedlinux
6、驗證服務c++
1、簡介web
HAProxy簡介:redis
HAProxy提供高可用性、負載均衡以及基於TCP和HTTP應用的代理,支持虛擬主機,它是免費、快速而且可靠的一種解決方案。HAProxy特別適用於那些負載特大的web站點,這些站點一般又須要會話保持或七層處理。HAProxy運行在時下的硬件上,徹底能夠支持數以萬計的併發鏈接。而且它的運行模式使得它能夠很簡單安全的整合進您當前的架構中, 同時能夠保護你的web服務器不被暴露到網絡上算法
HAProxy實現了一種事件驅動、單一進程模型,此模型支持很是大的併發鏈接數。多進程或多線程模型受內存限制 、系統調度器限制以及無處不在的鎖限制,不多能處理數千併發鏈接。事件驅動模型由於在有更好的資源和時間管理的用戶端(User-Space) 實現全部這些任務,因此沒有這些問題。此模型的弊端是,在多核系統上,這些程序一般擴展性較差。這就是爲何他們必須進行優化以 使每一個CPU時間片(Cycle)作更多的工做sql
Keepalived簡介:
KeepAlived是一個相似於layer3, 4 & 5交換機制的軟件,是一個高可用解決方案,經過虛擬IP地址和心跳檢測對方狀態來實現高可用功能。Keepalived是由兩臺服務器分別指定Master與Backup兩個角色,而指定Master的優先級比Backup的高;因此默認狀況下虛擬IP會綁定到Master服務器上,對外提供服務。而Master、Backup服務器會在必定的時間間隔向對方發送心跳信息來檢測對方的存活狀態,時間間隔通常爲2秒鐘能夠修改,若是Backup發現Master宕機,那麼Backup會發送ARP包到網關,而後把虛擬IP綁定到本身的網卡上,此時Backup對外提供服務,實現了自動化的故障轉移,當Master恢復的時會從新接管全部資源
2、環境介紹
系統版本: CentOS 6.4_x86_64
Keepalived版本: keepalived-1.2.7 點此下載
Haproxy版本: Haproxy-1.4.24 點此下載
拓撲介紹:
前端HA1與HA2服務器上安裝Keepalived+Haproxy軟件,兩臺服務器互爲主備而初始狀態是每臺服務器上各有一個虛擬IP地址【HA1的VIP:172.16.14.10 HA2的VIP:172.16.14.11】;後臺WEB1與WEB2服務器上面安裝Apache軟件實現負載均衡;而LAMP服務器只負責解析php程序,當用戶訪問的是靜態頁面時會由前端調度器分發處處理靜態請求的服務器,若是訪問的是php的動態頁面,將會被分發到lamp動態服務器進行處理,實現了動、靜分離的效果,
3、安裝後端服務器
一、安裝LAMP服務器並測試
[root@lamp ~]# yum -y install httpd php mysql-server ######建立測試頁 [root@lamp ~]# vim /var/www/html/index.php <h1>LAMP: 172.16.14.5</h1> <?php phpinfo(); [root@lamp ~]# service httpd start [root@lamp ~]# chkconfig httpd on
二、安裝WEB1服務器的HTTPD服務並訪問測試
[root@WEB1 ~]# yum -y install httpd [root@WEB1 ~]# service httpd start [root@WEB1 ~]# chkconfig httpd on [root@WEB1 ~]# echo "<h1>WEB1:172.16.14.3</h1>" > /var/www/html/index.html
三、安裝WEB2服務器的HTTPD服務並訪問測試
[root@WEB2 ~]# yum -y install httpd [root@WEB2 ~]# service httpd start [root@WEB2 ~]# chkconfig httpd on [root@WEB2 ~]# echo "<h1>WEB2:172.16.14.4</h1>" > /var/www/html/index.html
4、安裝並配置Haproxy
一、在HA1服務器安裝Haproxy
######安裝開發環境 [root@HA1 ~]# yum -y install gcc gcc-c++ [root@HA1 ~]# tar xf haproxy-1.4.24.tar.gz [root@HA1 ~]# cd haproxy-1.4.24 [root@HA1 haproxy-1.4.24]# uname -r 2.6.32-358.el6.x86_64 [root@HA1 haproxy-1.4.24]# make TARGET=linux26 ARCH=x86_64 [root@HA1 haproxy-1.4.24]# make install ######註釋:TARGET指定內核版本,而uname -r是查看內核版本;ARCH指定CPU架構 ---------------------------------------------------------------------- ######爲Haproxy提供主配置文件與服務腳本,並將其添加到系統服務 [root@HA1 haproxy-1.4.24]# mkdir /etc/haproxy [root@HA1 haproxy-1.4.24]# cp examples/haproxy.cfg /etc/haproxy [root@HA1 haproxy-1.4.24]# cp examples/haproxy.init /etc/init.d/haproxy [root@HA1 haproxy-1.4.24]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy [root@HA1 haproxy-1.4.24]# chmod +x /etc/init.d/haproxy [root@HA1 haproxy-1.4.24]# chkconfig --add haproxy
二、修改主配置文件
######建立Haproxy的工做目錄 [root@HA1 ~]# mkdir /usr/share/haproxy [root@HA1 ~]# 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 maxconn 25600 #最大鏈接數 chroot /usr/share/haproxy #改變Haproxy的工做目錄 uid 99 #用戶的UID gid 99 #用戶的GID nbproc 1 #進程數據(能夠設置多個) daemon #之後臺守護進程方式運行Haproxy #debug #是否開啓調試 defaults log global mode http #默認使用協議,能夠爲{http|tcp|health} http:是七層協議 tcp:是四層 health:只返回OK option httplog #詳細記錄http日誌 option dontlognull #不記錄健康檢查的日誌信息 retries 3 #3次鏈接失敗則認爲服務不可用 option redispatch #ServerID對應的服務器宕機後,強制定向到其餘運行正常的服務器 maxconn 30000 #默認的最大鏈接數 contimeout 5000 #鏈接超時 clitimeout 50000 #客戶端超時 srvtimeout 50000 #服務器超時 timeout check 1s #心跳檢測超時 timeout http-request 10s #默認http請求超時時間 timeout queue 1m #默認隊列超時時間 timeout connect 10s #默認鏈接超時時間 timeout client 1m #默認客戶端超時時間 timeout server 1m #默認服務器超時時間 timeout http-keep-alive 10s #默認持久鏈接超時時間 listen stats mode http bind 0.0.0.0:8090 #指定IP地址與Port stats enable #開啓Haproxy統計狀態 stats refresh 3s #統計頁面自動刷新時間間隔 stats hide-version #狀態頁面不顯示版本號 stats uri /allen #統計頁面的uri爲"/allen" stats realm Haproxy\ allen #統計頁面認證時提示內容信息 stats auth admin:admin #統計頁面的用戶名與密碼 stats admin if TRUE #啓用或禁用狀態頁面 frontend allen #定義前端服務器 bind *:80 mode http option httpclose #每次請求完成主動關閉http鏈接 option forwardfor #後端服務器獲取客戶端的IP地址,能夠從http header中獲取 acl url_static path_end -i .html .jpg .gif #定義ACL規則以如".html"結尾的文件;-i:忽略大小寫 acl url_dynamic path_end -i .php default_backend webservers #客戶端訪問時默認調用後端服務器地址池 use_backend lamp if url_dynamic #調用後端服務器並檢查ACL規則是否被匹配 backend webservers #定義後端服務器 balance roundrobin #定義算法;基於權重進行輪詢 server web1 172.16.14.3:80 check rise 2 fall 1 weight 2 server web2 172.16.14.4:80 check rise 2 fall 1 weight 2 backend lamp balance source #定義算法;源地址hash運算;相似於Nginx的ip_hash server lamp 172.16.14.5:80 check rise 2 fall 1 ---------------------------------------------------------------------- #####註釋:check:啓動對後端server的健康狀態檢測;rise:離線的server轉換到正常狀態成功檢查的次數;fall:確認server從正常狀態轉換爲不可用狀態須要檢查的次數;weight:權重,數量越大,超重越高
三、啓動Haproxy服務並作訪問測試
[root@HA1 ~]# service haproxy start
四、在HA2服務器上安裝Haproxy;這裏就不在介紹了,安裝與配置方法與在HA1服務器上安裝相同
5、安裝配置Keepalived
一、在HA1與HA2服務器上安裝Keepalived
[root@HA1 ~]# yum -y install keepalived [root@HA2 ~]# yum -y install keepalived
二、修改HA1服務器的主配置文件
[root@HA1 ~]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { root@localhost } notification_email_from admin@allen.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_ALLEN } vrrp_script chk_proess { script "killall -0 haproxy" interval 1 weight -2 } vrrp_instance ha_1 { state MASTER interface eth0 virtual_router_id 56 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1056 } virtual_ipaddress { 172.16.14.10 } track_script { chk_proess } } vrrp_instance ha_2 { state BACKUP interface eth0 virtual_router_id 58 priority 92 advert_int 1 authentication { auth_type PASS auth_pass 1058 } virtual_ipaddress { 172.16.14.11 } }
三、修改HA2服務器的主配置文件
[root@HA2 ~]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { root@localhost } notification_email_from admin@allen.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_ALLEN } vrrp_script chk_proess { script "killall -0 haproxy" interval 1 weight -2 } vrrp_instance ha_1 { state BACKUP interface eth0 virtual_router_id 56 priority 99 advert_int 1 authentication { auth_type PASS auth_pass 1056 } virtual_ipaddress { 172.16.14.10 } } vrrp_instance ha_2 { state MASTER interface eth0 virtual_router_id 58 priority 93 advert_int 1 authentication { auth_type PASS auth_pass 1058 } virtual_ipaddress { 172.16.14.11 } track_script { chk_proess } }
四、啓動Keepalived服務並查看HA1與HA2服務器上的虛擬IP地址
[root@HA1 ~]# service keepalived start [root@HA1 ~]# ip addr show eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:2c:1a:24 brd ff:ff:ff:ff:ff:ff inet 172.16.14.1/16 brd 172.16.255.255 scope global eth0 inet 172.16.14.10/32 scope global eth0 inet6 fe80::20c:29ff:fe2c:1a24/64 scope link valid_lft forever preferred_lft forever ------------------------------------------------------------------------ [root@HA2 ~]# service keepalived start [root@HA2 ~]# ip addr show eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:ec:f6:3f brd ff:ff:ff:ff:ff:ff inet 172.16.14.2/16 brd 172.16.255.255 scope global eth0 inet 172.16.14.11/32 scope global eth0 inet6 fe80::20c:29ff:feec:f63f/64 scope link valid_lft forever preferred_lft forever
6、驗證服務
一、訪問驗證服務器的負載均衡功能
二、驗證是否實現動、靜分離的效果
三、假設前端服務器其中一臺出現了故障,驗證IP地址可否自動切換到備份服務器上
######中止HA1服務器的haproxy服務 [root@HA1 ~]# service haproxy stop ------------------------------------------------------------------------ ######查看HA2服務器的IP地址 [root@HA2 ~]# ip addr show eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:ec:f6:3f brd ff:ff:ff:ff:ff:ff inet 172.16.14.2/16 brd 172.16.255.255 scope global eth0 inet 172.16.14.11/32 scope global eth0 inet 172.16.14.10/32 scope global eth0 inet6 fe80::20c:29ff:feec:f63f/64 scope link valid_lft forever preferred_lft forever 註釋:由上可見,虛擬IP地址已成功切換到HA2服務器
四、假如這裏將服務器修復好從新上線,IP地址會切換回到原來的服務器,這裏就不在驗證;將HA2服務器上的haproxy或keepalived服務關閉亦是如此
到此Keepalived+Haproxy實現負載均衡及動靜分離已完成;後續博客會更新其餘相關內容,敬請關注...