高性能業務架構解決方案(LVS+Keepalived)

高性能業務架構解決方案(LVS+Keepalived)

1、 概況2html

    1.1 應用場景2linux

    1.2 LVS/Nginx/HAProxy特色3web

2、 相關理論4算法

    2.1 Keepalived工做原理4sql

    2.2 LVS工做原理4vim

3、 架構拓撲5後端

4、 資源規劃5緩存

5、 實施部署5bash

    5.1初始化配置6服務器

    5.2 LVS配置6

    5.3 Keepalived部署7

        5.3.1 Keepalived的安裝8

        5.3.2 配置keepalived8

    5.4 後端WEB服務器10

    5.5 共享存儲11

    5.6 測試11

        5.6.1 負載均衡測試12

        5.6.2 高可用測試13

6、 注意事項15

    6.1 LVS安裝注意事項15

    6.2 將相關開機自啓服務16

    6.3 腳本16

 

高性能業務架構解決方案(LVS+Keepalived

1、概況

1.1 應用場景

Nginx/LVS/HAProxy的基於Linux的開源免費的負載均衡軟件。對於大型的,須要進行高併發的網站或者對網絡不太嚴格的場景,可使用Nginx;對於大型的Web服務器的時候可使用Haproxy;對性能有嚴格要求的時候可使用LVS,就單純從負載均衡的角度來講,LVS也許會成爲主流,更適合如今大型的互聯網公司。本文采用LVS+keepalived方案來解決業務架構高可用。

1.2 LVS/Nginx/HAProxy特色

名稱

特色

LVS

1) 抗負載能力強、是工做在網絡4層之上僅做分發之用,沒有流量的產生,這個特色也決定了它在負載均衡軟件裏的性能最強的;

2) 配置性比較低,這是一個缺點也是一個優勢,由於沒有可太多配置的東西,因此並不須要太多接觸,大大減小了人爲出錯的概率;

3) 工做穩定,自身有完整的雙機熱備方案,如LVS+KeepalivedLVS+Heartbeat,不過咱們在項目實施中用得最多的仍是LVS/DR+Keepalived

4) 無流量,保證了均衡器IO的性能不會收到大流量的影響;

5) 應用範圍比較廣,能夠對全部應用作負載均衡;

6) 軟件自己不支持正則處理,不能作動靜分離,這個就比較遺憾了;其實如今許多網站在這方面都有較強的需求,這個是Nginx/HAProxy+Keepalived的優點所在。

7) 若是是網站應用比較龐大的話,實施LVS/DR+Keepalived起來就比較複雜了,特別後面有Windows Server應用的機器的話,若是實施及配置還有維護過程就比較複雜了

Nginx

1) 工做在網絡的7層之上,能夠針對http應用作一些分流的策略,好比針對域名、目錄結構,它的正則規則比HAProxy更爲強大和靈活,這也是許多朋友喜歡它的緣由之一;

2) Nginx對網絡的依賴很是小,理論上能ping通就就能進行負載功能,這個也是它的優點所在;

3) Nginx安裝和配置比較簡單,測試起來比較方便;

4) 也能夠承擔高的負載壓力且穩定,通常能支撐超過幾萬次的併發量;

5) Nginx能夠經過端口檢測到服務器內部的故障,好比根據服務器處理網頁返回的狀態碼、超時等等,而且會把返回錯誤的請求從新提交到另外一個節點,不過其中缺點就是不支持url來檢測;

6) Nginx僅能支持httpEmail,這樣就在適用範圍上面小不少,這個它的弱勢;

7) Nginx不只僅是一款優秀的負載均衡器/反向代理軟件,它同時也是功能強大的Web應用服務器。LNMP如今也是很是流行的web架構,大有和之前最流行的LAMP架構分庭抗爭之勢,在高流量的環境中也有很好的效果。

8) Nginx如今做爲Web反向加速緩存愈來愈成熟了,不少朋友都已在生產環境下投入生產了,並且反映效果不錯,速度比傳統的Squid服務器更快,有興趣的朋友能夠考慮用其做爲反向代理加速器。

HAProxy

1) HAProxy是支持虛擬主機的,之前有朋友說這個不支持虛擬主機,我這裏特此更正一下。

2) 可以補充Nginx的一些缺點好比Session的保持,Cookie的引導等工做

3) 支持url檢測後端的服務器出問題的檢測會有很好的幫助。

4) 它跟LVS同樣,自己僅僅就只是一款負載均衡軟件;單純從效率上來說HAProxy更會比Nginx有更出色的負載均衡速度,在併發處理上也是優於Nginx的。

5) HAProxy能夠對Mysql讀進行負載均衡,對後端的MySQL節點進行檢測和負載均衡,不過在後端的MySQL slaves數量超過10臺時性能不如LVS,因此我向你們推薦LVS+Keepalived

6) HAProxy的算法如今也愈來愈多了,算法特別靈活

2、相關理論

2.1 Keepalived工做原理

keepalived:顧名思義是保持存活,經常使用來搭建設備的高可用,防止業務核心設備出現單點故障。keepalived基於VRRP協議來實現高可用主要用做realserver的健康檢查以及負載均衡主機和backup主機之間的故障漂移。若是將TCP/IP劃分爲5Keepalived就是一個相似於3~5層交換機制的軟件,具備3~5層交換功能,其主要做用是檢測web服務器的狀態,若是某臺web服務器故障,Keepalived將檢測到並將其從系統中剔除,當該web服務器工做正常後Keepalived自動將其加入到服務器羣中,這些工做所有自動完成,而不須要人工干預,只須要人工修復故障的web服務器便可。

層機理是發送ICMP數據包即PING給某臺服務器,若是不,則認爲其故障,並從服務器羣中剔除層機理是檢測TCP端口號狀態來判斷某臺服務器是否故障,若是檢測端口存在異常,則從服務器羣中剔除層機理是根據用戶的設定檢查某個服務器應用程序是否正常運行,若是不正常,則從服務器羣中剔除。

2.2 LVS工做原理

LVS工做在網絡層。經過控制IP來實現負載均衡。IPVS是其具體的實現模塊。IPVS的主要做用:安裝在Director Server上面,在Director Server虛擬一個對外訪問的IPVIP)。用戶訪問VIP,到達Director ServerDirector Server根據必定的規則選擇一個Real Server,處理完成後而後返回給客戶端數據。這些步驟產生了一些具體的問題,好比如何選擇具體的Real ServerReal Server若是返回給客戶端數據等等。IPVS爲此有三種機制:

VS/NAT(Virtual Server via Network Address Translation),即網絡地址翻轉技術實現虛擬服務器。當請求來到時,Diretor server上處理的程序將數據報文中的目標地址(即虛擬IP地址)改爲具體的某臺Real Server,端口也改爲Real Server的端口,而後把報文發給Real ServerReal Server處理完數據後,須要返回給Diretor Server,而後Diretor server將數據包中的源地址和源端口改爲VIP的地址和端口,最後把數據發送出去。由此能夠看出,用戶的請求和返回都要通過Diretor Server,若是數據過多,Diretor Server確定會不堪重負。

VS/TUNVirtual Server via IP Tunneling,IP隧道技術實現虛擬服務器。它跟VS/NAT基本同樣,可是Real server是直接返回數據給客戶端,不須要通過Diretor server,這大大下降了Diretor server的壓力。

VS/DRVirtual Server via Direct Routing),即用直接路由技術實現虛擬服務器。跟前面兩種方式,它的報文轉發方法有所不一樣,VS/DR經過改寫請求報文的MAC地址,將請求發送到Real Server,而Real Server將響應直接返回給客戶,免去了VS/TUN中的IP隧道開銷。這種方式是三種負載調度機制中性能最高最好的,可是必需要求Director ServerReal Server都有一塊網卡連在同一物理網段上

3、架構拓撲

 

wKiom1if6LqQvSq7AAFysRIbnGI158.png


4、資源規劃

主機名稱

內網IP

操做系統

LVS-Master

10.10.10.2

Centos 6.5 64

LVS-Backup

10.10.10.3

Centos 6.5 64

WEB01

10.10.10.11

Centos 6.5 64

WEB02

10.10.10.12

Centos 6.5 64

WEB03

10.10.10.13

Centos 6.5 64

NFS-server

10.10.10.20

Centos 6.5 64

VIP

10.10.10.100

\

5、實施部署

5.1 初始化配置

getenforce 0關閉SeLinux

修改主機名

防火牆開放22/80端口

測試網絡連通性

更新YUM

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

yum makecache           #生成緩存

 

5.2 LVS配置

masterbackup上面同時配置

安裝可採用yum直接安裝,或下載tar包編譯安裝。

yum install ipvsadm

/etc/init.d/ipvsadm save

/etc/init.d/ipvsadm start

查看ipvsadm狀態

/etc/init.d/ipvsadm -ln

# 開啓icmp包重定向

echo "1" > /proc/sys/net/ipv4/conf/all/send_redirects

echo "1" > /proc/sys/net/ipv4/conf/default/send_redirects

echo "1" > /proc/sys/net/ipv4/conf/eth0/send_redirects

#添加路由

route add -host 10.10.10.100 dev eth1

#清除LVS規則

ipvsadm -C

# 添加一條虛擬服務器記錄

# -p指定必定的時間內將相同的客戶端分配到同一臺後端服務器解決session問題

ipvsadm -A -t 10.10.10.100:80 -s wlc -p

# 添加真實服務器記錄

ipvsadm -a -t 10.10.10.100:80 -r 10.10.10.11:80 -g -w 1

ipvsadm -a -t 10.10.10.100:80 -r 10.10.10.12:80 -g -w 1

ipvsadm -a -t 10.10.10.100:80 -r 10.10.10.13:80 -g -w 1

#設置tcp tcpfin udp超市鏈接值

ipvsadm --set 30 120 300

Ipvsadm

配置完成後,查看ipvsadm狀態與主機路由wKiom1if6QGxmGLvAAJAoSW8TjY908.png

wKioL1if6VPQswrgAADfbd18iPA107.png

wKiom1if6YaykMuFAAEnqxb0DZ0588.pngwKioL1if6bLwOe-kAAImyjyDCZE115.png

5.3 Keepalived部署

5.3.1 Keepalived的安裝

masterbackup上面均須要配置

安裝開發組環境工具

yum groupinstall "Development tools" -y

安裝相應軟件包

yum install openssl-devel popt-devel -y

ln -s /usr/src/kernels/2.6.32-642.1.1.el6.x86_64 /usr/src/linux   #此處要根據實際操做系統最高版本的kernel 爲準

若是/usr/src/kernels/下面沒文件使用yum 安裝 kernel-devel

#下載keepalive

wget http://www.keepalived.org/software/keepalived-1.2.24.tar.gz

tar zxvf keepalived-1.2.24.tar.gz

cd keepalived-1.2.24

./configure --with-kernel-dir=/usr/src/kernels/2.6.32-642.1.1.el6.x86_64

 

(注意這個步驟要看到如下字樣纔是正常的)

Use IPVS Framework : Yes

IPVS sync daemon support : Yes

 

make && make install

cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/

cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/

mkdir /etc/keepalived

cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/

cp /usr/local/sbin/keepalived /usr/sbin/

chkconfig --add keepalived

chkconfig --level 2345 keepalived on

/etc/init.d/keepalived start

至此keepalive就已經安裝完畢。

 

注意:主要backup服務器之上修改兩點便可

1state MASTER  backup服務器須要更改成BACKUP

2priority 100小於master的優先級

 

5.3.2 配置keepalived

編輯keepalived.conf

! Configuration File for keepalived

 

global_defs {

   notification_email {

xuel@51idc.com

   }

   notification_email_from Alexandre.Cassen@firewall.loc

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id LVS_DEVEL

}

 

vrrp_instance VI_1 {

    state MASTER #backup主機配置爲BACKUP

    interface eth0    #實例綁定的網卡

    virtual_router_id 51    # VRID 標記( 0...255

    priority 100#backup主機配置優先級小於100,如配置90

    advert_int 1#檢查間隔,默認 1s

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        10.10.10.100#VIP地址,若是有多個 VIP ,繼續換行填寫

    }

}

 

virtual_server 10.10.10.100 80 {     #設置 VIP及監聽後端服務端口

    delay_loop 6

    lb_algo wrr#LVS調度算法 rr|wrr|lc|wlc|sh|dh|lblc

    lb_kind DR#LVS實現負載均衡的機制 NAT|DR|TUN

    nat_mask 255.255.255.0

    persistence_timeout 50# 會話保持時間

    protocol TCP

 

    real_server 10.10.10.11 80 {

weight 3

          TCP_CHECK {#tcp健康檢查

             connect_timeout 10#鏈接超時時間

             nb_get_retry 3#重連次數

             delay_before_retry 3#重連間隔時間

             connect_port 80#健康檢查端口

          }

      }

     real_server 10.10.10.12 80 {

     weight 3

          TCP_CHECK {

             connect_timeout 10

             nb_get_retry 3

             delay_before_retry 3

             connect_port 80

          }

      }

     real_server 10.10.10.13 80 {

     weight 3

          TCP_CHECK {

             connect_timeout 10

             nb_get_retry 3

             delay_before_retry 3

             connect_port 80

          }

      }

}

5.4 後端WEB服務器

安裝httpd,並寫測試頁

yum install httpd

chkconfig httpd on

 wKioL1if6hOgTnaUAAA14do87X8155.pngwKiom1if6mTCmxTeAABzu9GlOA8284.png

WEB01WEB02同時配置

echo "1">/proc/sys/net/ipv4/conf/default/arp_ignore

echo "2">/proc/sys/net/ipv4/conf/default/arp_announce

echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore

echo "2">/proc/sys/net/ipv4/conf/all/arp_announce

 

arp_ignore:定義對目標地址爲本地IPARP詢問不一樣的應答模式

0 - (默認值): 迴應任何網絡接口上對任何本地IP地址的arp查詢請求 

1 - 只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求 

2 -只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求,且來訪IP必須在該網絡接口的子網段內 

3 - 不迴應該網絡界面的arp請求,而只對設置的惟一和鏈接地址作出迴應 

4-7 - 保留未使用 

8 -不迴應全部(本地地址)的arp查詢

 

arp_announce:對網絡接口上,本地IP地址的發出的,ARP迴應,做出相應級別的限制肯定不一樣程度的限制,宣佈對來自本地源IP地址發出Arp請求的接口 

0 - (默認在任意網絡接口(eth0,eth1lo)上的任何本地地址 

1 -儘可能避免不在該網絡接口子網段的本地地址作出arp迴應當發起ARP請求的源IP地址是被設置應該經由路由達到此網絡接口的時候頗有用.此時會檢查來訪IP是否爲全部接口上的子網段內ip之一.若是改來訪IP不屬於各個網絡接口上的子網段內,那麼將採用級別2的方式來進行處理

2 - 對查詢目標使用最適當的本地地址.在此模式下將忽略這個IP數據包的源地址並嘗試選擇與能與該地址通訊的本地地址.首要是選擇全部的網絡接口的子網中外出訪問子網中包含該目標IP地址的本地地址若是沒有合適的地址被發現,將選擇當前的發送網絡接口或其餘的有可能接受到該ARP迴應的網絡接口來進行發送.

關於對arp_announce 理解的一點補充

 

sysctl -p

添加VIP地址與路由

ifconfig lo:0 10.10.10.100 broadcast 10.10.10.100 netmask 255.255.255.255 up

route add -host 10.10.10.100 dev lo:0

 

5.5 共享存儲

yum -y install nfs-utils rpcbind

service nfs start

chkconfig nfs on

vim /etc/exprots

wKiom1if6qiBJQh4AABDp2VqjGM206.png

echo 「This is NFS-share test page!」>/NFSshare

後端WEB掛載共享存儲

mount 10.10.10.20:/NFSshare /var/www/html/

wKioL1if6tuRnMn4AAEYNFouaD0726.png

測試訪問VIP

wKiom1if6waS_9QGAAAyLVZWCU8532.png

5.6 測試

爲測試方便,在後端WEB服務器上,寫入對用文件

 wKioL1if60fAmnhmAAA2peFH7B0192.pngwKioL1if61rCmuIxAAKtIzaYWOQ697.png

5.6.1 負載均衡測試

中止WEB02 httpd

wKioL1if67KQUYykAADS39rt5hc180.png

 wKiom1if66KzbGrzAABynwQ5chI847.png

再中止WEB03 httpd

 wKioL1if6-vxpC1RAAC9ZTyh8ek008.png

wKiom1if7Aeh8qXzAACoj0W5QRw404.png

wKioL1if7AmzXbdKAAFYuq_Xt44291.png

5.6.2 高可用測試

 wKioL1if7FqiuKkZAAKvfwCB384054.png

中止LVS-Master keepalived服務

 wKioL1if7Gzz7BTbAAJjS9kzdV0853.png

此時VIP已經漂移到LVS-Backup上面

 wKioL1if7LzThHlPAAKIj16SSis197.png

後端web已經正常對外提供服務。

啓動Master之上的KeepalivedVIP成功漂移會MASTER之上

wKiom1if7OqDuBW9AAMgGtlFCSc452.png

wKioL1if7TORLscJAACuY5-iUrM257.png

恢復郵件

wKiom1if7UehEMi2AAERxay89WA080.png

6、注意事項

6.1 LVS安裝注意事項

ln -s /usr/src/kernels/2.6.32-642.1.1.el6.x86_64 /usr/src/linux   #此處要根據實際操做系統最高版本的kernel 爲準

./configure --with-kernel-dir=/usr/src/kernels/2.6.32-642.1.1.el6.x86_64

(注意這個步驟要看到如下字樣纔是正常的)

Use IPVS Framework : Yes

IPVS sync daemon support : Yes

6.2 將相關開機自啓服務

開機自啓服務

wKioL1if7dTAbuqLAABcL-VSYHI957.png

開機自啓腳本

wKiom1if7f6gzvMtAADjQfxemwM899.png

開機NFS自動掛載

wKioL1if7lbhJAykAAGEoEz5BRU670.png

6.3 腳本

爲方便配置,目前已經寫了兩個腳本,方便運行安裝。

MasterBackup之上配置

LVS-MB-ipvsadm.sh

#!/bin/bash

VIP=10.10.10.100

RIPS1=10.10.10.11

RIPS2=10.10.10.12

RIPS3=10.10.10.13

SERVICE=80

. /etc/rc.d/init.d/functions

case "$1" in

start)

echo "Start LVS of DR Mode"

echo "1" > /proc/sys/net/ipv4/conf/all/send_redirects

echo "1" > /proc/sys/net/ipv4/conf/default/send_redirects

echo "1" > /proc/sys/net/ipv4/conf/eth0/send_redirects

route add -host $VIP dev eth0

ipvsadm -C

ipvsadm -A -t $VIP:$SERVICE -s wlc -p

ipvsadm -a -t $VIP:$SERVICE -r $RIPS1:$SERVICE -g -w 1

ipvsadm -a -t $VIP:$SERVICE -r $RIPS2:$SERVICE -g -w 1

ipvsadm -a -t $VIP:$SERVICE -r $RIPS3:$SERVICE -g -w 1

ipvsadm --set 30 120 300

ipvsadm

;;

stop)

echo "Stop LVS DR"

ifconfig eth1 down

ipvsadm -C

;;

*)

echo "Usage:$0 {start ? stop}"

exit 1

esac

 

在後端WEB01WEB02之上配置

LVS-RS-WEB.sh

#!/bin/bash

VIP=172.16.16.100

. /etc/init.d/functions

case "$1" in

start)

echo "Start LVS of RS"

/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up

/sbin/route add -host $VIP dev lo:0

echo "1">/proc/sys/net/ipv4/conf/default/arp_ignore

echo "2">/proc/sys/net/ipv4/conf/default/arp_announce

echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore

echo "2">/proc/sys/net/ipv4/conf/all/arp_announce

sysctl -p

;;

stop)

/sbin/ifconfig lo:0 down

echo "Close LVS of RS"

echo "0">/proc/sys/net/ipv4/conf/lo/arp_ignore

echo "0">/proc/sys/net/ipv4/conf/lo/arp_announce

echo "0">/proc/sys/net/ipv4/conf/all/arp_ignore

echo "0">/proc/sys/net/ipv4/conf/all/arp_announce

sysctl -p

;;

*)

echo "Usage:$0{start|stop}"

exit 1

esac

相關文章
相關標籤/搜索