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地址。
lvs NAT模式:客戶發送請求給vip後,vip會根據LB算法選一個真實服務器處理請求,處理完後發送給lvs以後再傳給客戶。NAT模式走的是switch 或pub 不須要修改MAC 因此,不須要VIP 和真實服務器在同一個網段內。
lvs TUN模式:把客戶端發來的數據包,封裝一個新的IP頭標記(僅目的IP)發給RS,RS收到後,先把數據包的頭解開,還原數據包,處理後,直接返回給客戶端,不須要再通過負載均衡器注意,因爲RS須要對負載均衡器發過來的數據包進行還原,因此說必須支持IPTUNNEL協議因此,在RS的內核中,必須編譯支持IPTUNNEL這個選項。
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便可
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的主頁