自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

企業(yè)級WEB的負載均衡高可用之LVS+Keepalived

原創(chuàng)
網(wǎng)絡(luò) 網(wǎng)絡(luò)優(yōu)化 網(wǎng)絡(luò)運維
企業(yè)級WEB的負載均衡高可用一直以來都是讓運維人員比較頭疼的一個問題,下面我們就來介紹一種通過LVS+Keepalived來解決這類問題的方法。

【51CTO.com獨家特稿】前言:

①如果四臺機器均置于IDC機房,前端無防火墻時,這種情況好處理,只需要向你的IDC申請5個公網(wǎng)IP即可,多余的一個公網(wǎng)ip用于VIP;

②如果是上述網(wǎng)絡(luò)拓撲,后面四臺機器均用內(nèi)網(wǎng);此時只需要前面的Juniper將內(nèi)網(wǎng)VIP映射成公網(wǎng)IP即可,注:非映射80和443端口,感謝田逸兄提供的技術(shù)性指導意見;

③lvs就比較依賴于網(wǎng)絡(luò)環(huán)境,可以用苛求來形容;要做好LVS管理員,確實得跟進學習很多有關(guān)網(wǎng)絡(luò)通信方面的知識,就不再是一個HTTP那么簡單了;相對而言,nginx對網(wǎng)絡(luò)的依賴較小,理論上只要ping得通,網(wǎng)頁訪問正常,nginx就能連得通。

④本來我想將公司的web環(huán)境生級成LVS+Keepalived架構(gòu),卻發(fā)現(xiàn)lvs怎么都不能轉(zhuǎn)發(fā);結(jié)果查了下機器的route情況,發(fā)現(xiàn)每臺機器都有十幾條靜態(tài)路由,二個網(wǎng)關(guān),而Network engineer也說明了網(wǎng)絡(luò)環(huán)境不可能更改,只能由系統(tǒng)環(huán)境牽就網(wǎng)絡(luò)環(huán)境;最后只能將LVS+Keepalvied更改為Nginx+Keepalived架構(gòu),甚是遺憾。

這里首先說下LVS/DR的網(wǎng)絡(luò)拓撲情況,如果均置于電信IDC機房,用5個外網(wǎng)IP的話,整個網(wǎng)絡(luò)拓撲清晰明了,實施起來也非常方便;但如果是置于Juniper防火墻后,情況就有點小復雜了,這時仍可用內(nèi)網(wǎng)IP,只要將內(nèi)網(wǎng)的VIP通過Juniper防火墻轉(zhuǎn)換成一個公網(wǎng)IP即可,注:此時不要做80端口的映射,在這里感謝田逸兄的指導性意見。

服務器故障:(服務器故障包括:服務器宕機、web服務終止、網(wǎng)線松動等等)

①當lvs-master故障時,無法再接受用戶請求并將請求轉(zhuǎn)發(fā)給真實的web服務器(即便真實web服務器正常)從而導致整個web服務的癱瘓,也就是lvs控制器存在單點故障問題。

②當lvs-master正常時,真實地web服務器如web1-realserver故障。此時lvs-master并不知道真實服務器是否在正常提供web服務,所以仍然在向故障的web1-realserver轉(zhuǎn)發(fā)用戶請求。這樣的結(jié)果是用戶請求無法被故障web服務器相應,某些用戶可以訪問網(wǎng)站有些則無法訪問。

基于以上的問題,我們需要想辦法實現(xiàn)對lvs控制器和web服務器的健康監(jiān)測,一旦服務出現(xiàn)問題能保證服務不中斷的情況下排除故障。即增加lvs控制器實現(xiàn)主備模式避免單點故障以及自動刪除故障web服務結(jié)點并當它恢復后再自動添加到群集中這樣的功能,這就是LVS+keepalived能實現(xiàn)的功能。整個系統(tǒng)的拓撲如下:

  

實施步驟:

①在realserver主機上實行腳本realserver,為lo:0綁定VIP地址192.168.5.188,這步分別在二個web主機上192.168.5.104、192.168.5.105實施。這步提前做,是因為以后的過程中這一步是不會發(fā)生更改的。

  1. #vim /usr/local/sbin/realserver  
  2. #!/bin/bash  
  3. SNS_VIP=192.168.5.188  
  4. . /etc/rc.d/init.d/functions  
  5. case "$1" in  
  6. start)  
  7.        ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP  
  8.        /sbin/route add -host $SNS_VIP dev lo:0  
  9.        echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore  
  10.        echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce  
  11.        echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore  
  12.        echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce  
  13.        sysctl -p >/dev/null 2>&1  
  14.        echo "RealServer Start OK"   
  15.        ;;  
  16. stop)  
  17.        ifconfig lo:0 down  
  18.        route del $SNS_VIP >/dev/null 2>&1  
  19.        echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore  
  20.        echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce  
  21.        echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore  
  22.        echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce  
  23.        echo "RealServer Stoped"  
  24.        ;;  
  25. *)  
  26.        echo "Usage: $0 {start|stop}"  
  27.        exit 1  
  28. esac  
  29. exit 0 

簡單說明下上述腳本的作用:

1)vip(virtual ip)。直接路由模式的vip必須跟服務器對外提供服務的ip地址在同一個網(wǎng)段,并且lvs 負載均衡器和其他所有提供相同功能的服務器都使用這個vip;

2)vip被綁定在環(huán)回接口lo0:0上,其廣播地址是其本身,子網(wǎng)掩碼是255.255.255.255。這與標準的網(wǎng)絡(luò)地址設(shè)置有很大的不同。采用這種可變長掩碼方式把網(wǎng)段劃分成只含一個主機地址的目的是避免ip地址沖突;

3)echo這段的作用是抑制arp廣播。如果不做arp抑制,將會有眾多的機器向其他宣稱:“嗨!我是奧巴馬,我在這里呢!”,這樣就亂套了。

②為二臺lvs主機安裝lvs+keepalived軟件。安裝lvs軟件是必須做的,因為keepalived是運行在lvs之上的,因此lvs及keepalived必須裝在一個系統(tǒng)里面。過程如下:

  1. #mkdir /usr/local/src/lvs  
  2. #cd /usr/local/src/lvs  
  3. #wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz  
  4. #ln -s /usr/src/kernels/2.6.18-53.el5PAE-i686/ /usr/src/linux  
  5. #tar zxvf ipvsadm-1.24.tar.gz  
  6. #cd ipvsadm-1.24  
  7. #make   
  8. #make install 

#p#③編輯keepalived.conf文件,直接用keepalived實現(xiàn)負載均衡及高可用性。

a)Keepalved的安裝

  1. a)Keepalved的安裝  
  2. #wget http://www.keepalived.org/software/keepalived-1.1.15.tar.gz  
  3. #tar zxvf keepalived-1.1.15.tar.gz  
  4. #cd keepalived-1.1.15  
  5. #./configure  
  6. #make  
  7. #make install 

將keepalived做成啟動腳務,方便管理:

  1. #cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/  
  2. #cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/  
  3. #mkdir /etc/keepalived  
  4. #cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/  
  5. #cp /usr/local/sbin/keepalived /usr/sbin/  
  6. #service keepalived start|stop  

b)Keealived的配置

①分別在主從負載均衡服務器上配置keepalived.conf ,內(nèi)容分別如下:

  1. ! Configuration File for keepalived  
  2. global_defs {  
  3.    notification_email {  
  4.          yuhongchun027@163.com  
  5.    }  
  6.    notification_email_from sns-lvs@gmail.com  
  7.    smtp_server 127.0.0.1  
  8.    router_id LVS_DEVEL  
  9. }  
  10. vrrp_instance VI_1 {  
  11.     state MASTER               
  12.     interface eth0  
  13.     virtual_router_id 51  
  14.     priority 100      
  15.     advert_int 1  
  16.     authentication {  
  17.         auth_type PASS  
  18.         auth_pass 1111  
  19.     }  
  20.     virtual_ipaddress {  
  21.         192.168.5.188   
  22.     }  
  23. }  
  24. virtual_server 192.168.5.188 80 {  
  25.     delay_loop 6                    
  26.     lb_algo wrr                    
  27.     lb_kind DR                    
  28.     persistence_timeout 60          
  29.     protocol TCP                  
  30.     real_server 192.168.5.104 80 {  
  31.         weight 3                 
  32.         TCP_CHECK {  
  33.         connect_timeout 10         
  34.         nb_get_retry 3  
  35.         delay_before_retry 3  
  36.         connect_port 80  
  37.         }  
  38.     }  
  39.     real_server 192.168.5.105 80 {  
  40.         weight 3  
  41.         TCP_CHECK {  
  42.         connect_timeout 10  
  43.         nb_get_retry 3  
  44.         delay_before_retry 3  
  45.         connect_port 80  
  46.         }  
  47.      }  
  1. ! Configuration File for keepalived  
  2. global_defs {  
  3.    notification_email {  
  4.          yuhongchun027@163.com  
  5.    }  
  6.    notification_email_from sns-lvs@gmail.com  
  7.    smtp_server 127.0.0.1  
  8.    router_id LVS_DEVEL  
  9. }  
  10. vrrp_instance VI_1 {  
  11.     state BACKUP               
  12.     interface eth0  
  13.     virtual_router_id 51  
  14.     priority 99      
  15.     advert_int 1  
  16.     authentication {  
  17.         auth_type PASS  
  18.         auth_pass 1111  
  19.     }  
  20.     virtual_ipaddress {  
  21.         192.168.5.188   
  22.     }  
  23. }  
  24. virtual_server 192.168.5.188 80 {  
  25.     delay_loop 6                    
  26.     lb_algo wrr                    
  27.     lb_kind DR                    
  28.     persistence_timeout 60          
  29.     protocol TCP                  
  30.     real_server 192.168.5.104 80 {  
  31.         weight 3                 
  32.         TCP_CHECK {  
  33.         connect_timeout 10         
  34.         nb_get_retry 3  
  35.         delay_before_retry 3  
  36.         connect_port 80  
  37.         }  
  38.     }  
  39.     real_server 192.168.5.105 80 {  
  40.         weight 3  
  41.         TCP_CHECK {  
  42.         connect_timeout 10  
  43.         nb_get_retry 3  
  44.         delay_before_retry 3  
  45.         connect_port 80  
  46.         }  
  47.      }  

#p#②分別在二臺lvs機上啟動servcie keepalived start就可實現(xiàn)負載均衡及高可用集群;keepalived.conf內(nèi)容說明如下:

●全局定義塊

1、email通知。作用:有故障,發(fā)郵件報警。

2、Lvs負載均衡器標識(lvs_id)。在一個網(wǎng)絡(luò)內(nèi),它應該是唯一的。

3、花括號“{}”。用來分隔定義塊,因此必須成對出現(xiàn)。如果寫漏了,keepalived運行時,不會得到預期的結(jié)果。由于定義塊內(nèi)存在嵌套關(guān)系,因此很容易遺漏結(jié)尾處的花括號,這點要特別注意。

●VRRP定義塊

1、同步vrrp組vrrp_sync_group。作用:確定失敗切換(FailOver)包含的路由實例個數(shù)。即在有2個負載均衡器的場景,一旦某個負載均衡器失效,需要自動切換到另外一個負載均衡器的實例是哪些?
2、實例組group。至少包含一個vrrp實例。
3、Vrrp實例vrrp_instance。實例名出自實例組group所包含的那些名字。

(1)實例狀態(tài)state。只有MASTER和BACKUP兩種狀態(tài),并且需要大寫這些單詞。其中MASTER為工作狀態(tài),BACKUP為備用狀態(tài)。當MASTER所在的服務器失效時,BACKUP所在的系統(tǒng)會自動把它的狀態(tài)有BACKUP變換成MASTER;當失效的MASTER所在的系統(tǒng)恢復時,BACKUP從MASTER恢復到BACKUP狀態(tài)。

(2)通信接口interface。對外提供服務的網(wǎng)絡(luò)接口,如eth0,eth1.當前主流的服務器都有2個或2個以上的接口,在選擇服務接口時,一定要核實清楚。

(3)lvs_sync_daemon_inteface。負載均衡器之間的監(jiān)控接口,類似于HA HeartBeat的心跳線。但它的機制優(yōu)于Heartbeat,因為它沒有“裂腦”這個問題,它是以優(yōu)先級這個機制來規(guī)避這個麻煩的。在DR模式中,lvs_sync_daemon_inteface 與服務接口interface 使用同一個網(wǎng)絡(luò)接口。

(4)虛擬路由標識virtual_router_id。這個標識是一個數(shù)字,并且同一個vrrp實例使用唯一的標識。即同一個vrrp_stance,MASTER和BACKUP的virtual_router_id是一致的,同時在整個vrrp內(nèi)是唯一的。

(5)優(yōu)先級priority。這是一個數(shù)字,數(shù)值愈大,優(yōu)先級越高。在同一個vrrp_instance里,MASTER 的優(yōu)先級高于BACKUP。若MASTER的priority值為150,那么BACKUP的priority只能是140或更小的數(shù)值。

(6)同步通知間隔advert_int。MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,單位為秒。

(7)驗證authentication。包含驗證類型和驗證密碼。類型主要有PASS、AH兩種,通常使用的類型為PASS,據(jù)說AH使用時有問題。驗證密碼為明文,同一vrrp實例MASTER與BACKUP 使用相同的密碼才能正常通信。

4、 虛擬ip地址virtual_ipaddress。可以有多個地址,每個地址占一行,不需要指定子網(wǎng)掩碼。注意:這個ip必須與我們在lvs客戶端設(shè)定的vip相一致!

●虛擬服務器virtual_server定義塊

虛擬服務器定義是keepalived框架最重要的項目了,是keepalived.conf必不可少的部分。

1、虛擬服務器virtual_server。這個ip來自于vrrp定義塊的第“4”步,后面一個空格,然后加上端口號。定義一個vip,可以實現(xiàn)多個tcp端口的負載均衡功能。

(1)delay_loop。健康檢查時間間隔,單位是秒。

(2)lb_algo。負載均衡調(diào)度算法,互聯(lián)網(wǎng)應用常使用wlc或rr。

(3)lb_kind。負載均衡轉(zhuǎn)發(fā)規(guī)則。一般包括DR、NAT、TUN3種,在我的方案中,都使用DR的方式。

(4)persistence_timeout。會話保持時間,單位是秒。這個選項對動態(tài)網(wǎng)站很有用處:當用戶從遠程用帳號進行登陸網(wǎng)站時,有了這個會話保持功能,就能把用戶的請求轉(zhuǎn)發(fā)給同一個應用服務器。在這里,我們來做一個假設(shè),假定現(xiàn)在有一個lvs 環(huán)境,使用DR轉(zhuǎn)發(fā)模式,真實服務器有3個,負載均衡器不啟用會話保持功能。當用戶第一次訪問的時候,他的訪問請求被負載均衡器轉(zhuǎn)給某個真實服務器,這樣他看到一個登陸頁面,第一次訪問完畢;接著他在登陸框填寫用戶名和密碼,然后提交;這時候,問題就可能出現(xiàn)了---登陸不能成功。因為沒有會話保持,負載均衡器可能會把第2次的請求轉(zhuǎn)發(fā)到其他的服務器。

(5)轉(zhuǎn)發(fā)協(xié)議protocol。一般有tcp和udp兩種。實話說,我還沒嘗試過udp協(xié)議類的轉(zhuǎn)發(fā)。

2、真實服務器real_server,也即服務器池。Real_server的值包括ip地址和端口號,多個連續(xù)的真實ip。

(1)權(quán)重weight,權(quán)重值是一個數(shù)字,數(shù)值越大,權(quán)重越高。使用不同的權(quán)重值的目的在于為不同性能的機器分配不同的負載,性能較好的機器,負載分擔大些;反之,性能差的機器,則分擔較少的負載,這樣就可以合理的利用不同性能的機器資源。

(2)Tcp檢查tcp_check。

附注:以上就是lvs+keepalived的基本配置步驟,有興趣的同學建議可做下lvs的1+2的基本架構(gòu)實驗,即不需要keepalived,采用單lvs的方式,其lvs_dr腳本如下

  1. #vim /usr/local/sbin/lvs-dr.sh  
  2.        #!/bin/bash  
  3.        #website director vip.  
  4.        SNS_VIP=192.168.1.188  
  5.        SNS_RIP1=192.168.1.104  
  6.        SNS_RIP2=192.168.1.105  
  7.       ./etc/rc.d/init.d/functions  
  8.          logger $0 called with $1  
  9.          case "$1" in  
  10.          start)  
  11.          # set squid vip  
  12.          /sbin/ipvsadm --set 30 5 60  
  13.          /sbin/ifconfig eth0:0 $SNS_VIP broadcast $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP up  
  14.          /sbin/route add -host $SNS_VIP dev eth0:0  
  15.          /sbin/ipvsadm -A -t $SNS_VIP:80 -s wrr -p 3  
  16.          /sbin/ipvsadm -a -t $SNS_VIP:80 -r $SNS_RIP1:80 -g -w 1  
  17.          /sbin/ipvsadm -a -t $SNS_VIP:80 -r $SNS_RIP2:80 -g -w 1  
  18.          touch /var/lock/subsys/ipvsadm >/dev/null 2>&1  
  19.         ;;  
  20. stop)  
  21.          /sbin/ipvsadm -C  
  22.          /sbin/ipvsadm -Z  
  23.          ifconfig eth0:0 down  
  24.          route del $SNS_VIP  
  25.          rm -rf /var/lock/subsys/ipvsadm >/dev/null 2>&1  
  26.          echo "ipvsadm stoped"  
  27.         ;;  
  28. status)  
  29.          if [ ! -e /var/lock/subsys/ipvsadm ];then  
  30.                  echo "ipvsadm stoped"  
  31.                  exit 1  
  32.          else  
  33.                  echo "ipvsadm OK"  
  34.          fi  
  35.        ;;  
  36. *)  
  37.          echo "Usage: $0 {start|stop|status}"  
  38.          exit 1  
  39. esac  
  40. exit 0 

最新版更新內(nèi)容如下:

①每臺服務器都有二塊網(wǎng)卡,分別連接內(nèi)外網(wǎng);后端的mysql數(shù)據(jù)庫與web連接采用內(nèi)網(wǎng)方式,整個網(wǎng)絡(luò)環(huán)境采用內(nèi)網(wǎng);

②增加了keepalivedyiyyy .conf語法內(nèi)容;

③刪除了lvs.sh腳本內(nèi)容,直接讓keepalived內(nèi)容更直接明了,新增加了單lvs的配置腳本lvs_dr.sh;

④lvs主從機上的keepalived.conf文件我直接從生產(chǎn)服務器上download下來了,可方便大家使用。

部分內(nèi)容參考了田逸和netseek的文章,如果有任何疑問和咨詢,歡迎來郵撫琴煮酒yuhongchun027@163.com   #p#

※值得注意的是:

1、你必須向你的服務器所在機房IDC多申請一個IP供VIP使用;多關(guān)注/var/log/messages和ipvsadm -ln,利用其有效信息排錯。

2、服務器的iptables、Selinux均關(guān)閉;在生產(chǎn)環(huán)境中,我就遇到了iptables的NAT轉(zhuǎn)發(fā)問題,導致了lvs失敗。

3、keepalived的啟動過程并不會對配置文件進行語法檢查,就算沒有配置文件,keepalived的守護進程照樣能夠被運行起來。在默認狀態(tài)下,即不指定配置文件的位置--keepalived先查找文件/etc/keepalived/keepalived.conf。

4、session的過程默認是以文件的形式存在,在瀏覽器關(guān)閉或重啟時刪除;會話保持我建議寫成120秒,如果這個值設(shè)置得不合理,用戶將得到非常糟糕的訪問效果。

5、keepalived是lvs的擴展項目,因此它們之間具備良好的兼容性,這點應該是keepalived部署比其他類似工具能更簡潔的原因吧,lvs+keepalived目前是一個應用于生產(chǎn)環(huán)境的成熟架構(gòu),實現(xiàn)了真正意義上的負載均衡高可用(尤其是對于Nginx+Keepalived而言),尤其適用于bbs和blog(它們均是訪問頻繁,用戶量大的對象),建議熟練掌握。

 

責任編輯:林琳 來源: 51CTO.com
相關(guān)推薦

2012-02-15 00:01:34

2015-03-18 14:56:58

負載均衡服務器集群

2011-09-30 13:02:10

51CTO博客一周熱門Web架構(gòu)

2023-11-09 07:58:50

2014-05-30 13:35:21

MySQL Clust架構(gòu)

2010-07-06 15:16:02

web負載均衡

2014-05-15 09:54:40

heartbeatlvs集群

2012-02-13 23:46:22

keepalived高可用

2018-08-24 08:51:10

haproxykeepalived均衡器

2019-12-24 14:28:00

KeepalivedNginxTomcat

2015-02-11 10:07:58

KeepalivedLVS負載均衡

2024-11-11 16:29:54

負載均衡器系統(tǒng)

2018-10-23 09:22:06

2023-10-13 18:57:22

2019-10-09 16:02:16

NginxKeepalivedLvs

2021-09-17 07:51:24

Keepalived服務高可用

2019-07-02 08:38:45

NginxTomcatKeepalived

2013-10-28 01:44:56

mysql載均衡高可用環(huán)境

2011-12-02 22:51:46

Nginx負載均衡

2010-07-15 11:16:04

負載均衡
點贊
收藏

51CTO技術(shù)棧公眾號