keepalived+lvs

keepalived是以VRRP協議爲實現基礎的,VRRP全稱Virtual Router Redundancy Protocol,即虛擬路由冗餘協議。它的做用是經過layer3, 4 & 5交換機制來檢測web服務器的狀態,若是有一臺web服務器死機,或工做出現故障,Keepalived將檢測到,並將有故障的web服務器從系統中剔除,當web服務器工做正常後Keepalived自動將web服務器加入到服務器羣中。
linux

layer3是ip/tcp協議ip層,當keepalived使用layer3工做方式時會按期ping真實服務器的ip,當某臺服務器的ipPing不一樣時,將會被踢除服務器羣組。web

layer4是ip/tcp協議的tcp層,它經過檢測服務器端口狀態來檢測服務器,如當keepalived沒有檢測到apache的80端口時,就會將這臺服務器踢除集羣算法

layer5是ip/tcp協議的應用層。它根據用戶的設定檢查服務器程序的運行是否正常,若是與用戶的設定不相符,則Keepalived將把服務器從服務器羣中剔除。apache

LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集羣系統。本項目在1998年5月由章文嵩博士成立,是中國國內最先出現的自由軟件項目之一。它是一個開源的軟件,能夠實現LINUX平臺下的簡單負載均衡。 優勢:vim

1 、開源,免費服務器

二、在網上能找到一些相關技術資源網絡

三、具備軟件負載均衡的一些優勢負載均衡

缺點:tcp

一、具備開源產品常有的缺點,最核心的就是沒有可靠的支持服務,沒有人對其結果負責ide

二、功能比較簡單,支持複雜應用的負載均衡能力較差,如算法較少等。

三、開啓隧道方式需重編譯內核

四、配置複雜

五、只支持LINUX ,若是應用還包括WINDOWS、SOLIRIS等就不行了。

lvs的有DR、NAT、TUN、FULLNAT四種模式

lvs DR模式: 客戶發送一個請求給VIP;VIP 收到這請求後會跟LVS設置的LB算法選擇一個LB 比較合理的真實服務器,而後把此請求的MAC地址修改成真實服務器的MAC地址。DR 模式要求VIP 和 全部的真實服務器在同一個網段,也就是在用過LAN裏面。否則廣播後全部的包都會丟掉,同時全部的真實服務器都必須綁定VIP的IP地址。

wKioL1dmuTmgEwU5AADaeaUnnl0191.png-wh_50

lvs NAT模式:客戶發送請求給vip後,vip會根據LB算法選一個真實服務器處理請求,處理完後發送給lvs以後再傳給客戶。NAT模式走的是switch 或pub 不須要修改MAC 因此,不須要VIP 和真實服務器在同一個網段內。

wKiom1dmuVXxSZtTAADfVPFwmaw981.png-wh_50

lvs TUN模式:把客戶端發來的數據包,封裝一個新的IP頭標記(僅目的IP)發給RS,RS收到後,先把數據包的頭解開,還原數據包,處理後,直接返回給客戶端,不須要再通過負載均衡器注意,因爲RS須要對負載均衡器發過來的數據包進行還原,因此說必須支持IPTUNNEL協議因此,在RS的內核中,必須編譯支持IPTUNNEL這個選項。

wKioL1dmuWuRRBCPAADprsOZ4G4747.png-wh_50

lvs full-nat模式:fullnat無非就是nat,但DIP和RIP之間能夠通過路由進行轉發。當請求到來時,源目IP分別爲CIP和VIP。到達調度器後,仍是由ipvs挑選一臺主機,但因爲DIP和RIP並不在同一個網段,因此ipvs會將請求的報文源目IP分別改成DIP和RIP。RS收到報文後,就會將響應報文發給DIP,這是毋庸置疑的。調度器在收到報文,經過在內部追蹤nat表之後,將響應報文的源目IP分別改成VIP和CIP,因而報文就發給客戶端。這種源目IP都進行修改的LVS類型就是fullnat。

下面是keepalived+lvs(DR)的簡單配置

實驗環境:rhel6.5 selinux and iptables disabled

實驗主機:

  lvs-MASTER      172.25.254.2
  lvs-BACKUP      172.25.254.3
  realserver      172.25.254.4
                  172.25.254.5

lvs主機的配置:

yum install libnfnetlink-devel-1.0.0-1.el6.x86_64.rpm 
yumi install pvsadm kernel-devel openssl-devel libnl-devel gcc 
tar zxf keepalived-1.2.20.tar.gz
cd keepalived-1.2.20

指定安裝路徑編譯:

./configure --prefix=/usr/local/keepalived

出現如下幾個yes便可

wKiom1dmuaLyN9c4AACjvohQB7s330.png-wh_50

make && make install

創建必要的軟鏈接:

ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/keepalived /etc/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
ln -s /usr/local/keepalived/bin/genhash /bin/

配置keepalived:

vim   /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs {
notification_email {
    2838371898@qq.com #指定接受報警的郵箱,能夠有多個
}
notification_email_from keepalived@server2.example.com #發送郵件的地址
smtp_server 127.0.0.1          #smtp server 地址
smtp_connect_timeout 30        #smtp超時時間
router_id LVS_DEVEL            #load balancer 的標識 ID,用於 email 警報
}

vrrp_instance VI_1 {
 state MASTER         #設定lvs主備機狀態,備機爲BACKUP
 interface eth0       #HA 監測網絡接口
 virtual_router_id 51 #主備機的id必須相同
 priority 100         #設定優先級,數字越高優先級有高,主機優先級要高於                            備機
 advert_int 1         #主備機通訊間隔時間
 authentication {
    auth_type PASS   #設置驗證類型,主要有 PASS 和 AH 兩種
    auth_pass 1111   #主備機必須一致

}
virtual_ipaddress {
    172.25.254.100   #設定虛擬ip,可多個
}

}

virtual_server 172.25.254.100 80 {  #經過端口定義虛擬服務器,80爲apache端口
delay_loop 6                 #每隔 6 秒查詢 realserver 狀態
lb_algo rr                   #lvs調度算法爲論詢
lb_kind DR                   #lvs爲直連模式

# persistence_timeout 50 #設定鏈接保持時間 protocol TCP #指定轉發協議

real_server 172.25.254.4 80 {  #定義真實服務器
    weight 1                  #配置權重
    TCP_CHECK {               #設置真實服務器檢查爲tcp查詢
        connect_timeout 3     #設定超時時間
        nb_get_retry 3        #重試次數

        delay_before_retry 3  #重試間閣
    }
}
real_server 172.25.254.5 80 { #另外一臺真實服務器用以實習負載均衡
    weight 1
    TCP_CHECK {
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 3
    }
}
}

真實服務器部分:

爲真實服務器添加虛擬IP

ip addr add 172.25.254.100/32 dev eth0

安裝arp防火牆

yum install arptables_jf.x86_64 -y

爲真實服務器的虛擬ip創建ARP列表使得真實服務器忽略全部來自虛擬ip的請求,使得只有lvs機才能接受虛擬ip的請求。並把原先包含虛擬ip的arp迴應改成包含真實服務器的ip

arptables -A IN  -d 172.25.254.100 -d -j DROP
arptables -A OUT -s 172.25.254.100  -j mangle --mangle-ip-s 172.25.254.4

測試:

中止server2節點備機server3將接管

中止server4的httpd服務訪問虛擬ip將只能訪問server5的主頁

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息