一,LVS功能詳解html
1.1 LVS(Linux Virtual Server)介紹前端
LVS是Linux Virtual Server 的簡寫(也叫作IPVS),意即Linux虛擬服務器,是一個虛擬的服務器集羣系統,能夠在UNIX/LINUX平臺下實現負載均衡集羣功能。linux
1.2 企業網站LVS集羣架構圖nginx
1.3 IPVS軟件工做層次圖web
從上圖咱們看出,LVS負載均衡調度技術是在Linux內核中實現的,所以,被稱之爲Linux虛擬服務器(Linux Virtual Server)。咱們使用該軟件配置LVS時候,不能直接配置內核中的ipbs,而須要使用ipvs管理工具ipvsadm進行管理,或者經過Keepalived軟件直接管理ipvs。算法
1.4 LVS體系結構與工做原理簡單描述數據庫
1.5 LVS 基本工做過程圖apache
LVS基本工做過程以下圖所示:vim
爲了方便你們探討LVS技術,LVS社區提供了一個命名的約定,內容以下表:windows
名稱 |
縮寫 |
說明 |
虛擬IP |
VIP |
VIP爲Director用於向客戶端計算機提供服務的IP地址。好比:www.yunjisuan.com域名就要解析到vip上提供服務 |
真實IP地址 |
RIP |
在集羣下面節點上使用的IP地址,物理IP地址 |
Dirctor的IP地址 |
DIP |
Director用於鏈接內外網絡的IP地址,物理網卡上的IP地址。是負載均衡器上的IP |
客戶端主機IP地址 |
CIP |
客戶端用戶計算機請求集羣服務器的IP地址,該地址用做發送給集羣的請求的源IP地址 |
LVS集羣內部的節點稱爲真實服務器(Real Server),也叫作集羣節點。請求集羣服務的計算機稱爲客戶端計算機。
與計算機一般在網上交換數據包的方式相同,客戶端計算機,Director和真實服務器使用IP地址彼此進行通訊。
不一樣架構角色命名狀況以下圖:
1.6 LVS集羣的3種常見工做模式介紹與原理講解
IP虛擬服務器軟件IPVS
LVS的四種工做模式
1.6.1 NAT模式-網絡地址轉換<==收費站模式(瞭解便可)
Virtual Server via Network Address Translation(VS/NAT)
調度時:目的IP改爲RIP(DNAT)
返回時:源IP改爲VIP(SNAT)
NAT模式特色小結:
1.6.2 TUN模式-(瞭解便可)
增長一個IP頭部。經過IP隧道進行通訊(能夠跨網段找到RS節點)
TUN模式特色小結:
1.6.3 DR模式-直接路由模式(重點)
Virtual Server via Direct Routing(VS/DR)
VS/DR模式是經過改寫請求報文的目標MAC地址,將請求發給真實服務器的,而真實服務器將響應後的處理結果直接返回給客戶端用戶。同VS/TUN技術同樣,VS/DR技術可極大地提升集羣系統的伸縮性。並且,這種DR模式沒有IP隧道的開銷,對集羣中的真實服務器也沒有必須支持IP隧道協議的要求,可是要求調度器LB與正式服務器RS節點都有一塊網卡連在同一物理網段上,即必須在同一個局域網環境。
只修改目標MAC地址,經過MAC找到RS節點(沒法跨網段找到RS節點)
DR模式特色小結:
1.6.4 FULLNAT模式-(瞭解便可)
淘寶的LVS應用模式
FULLANT特色:
1,源IP改爲不一樣的VIP和目的IP改爲RIP
2,RS處理完畢返回時,返回給不一樣的LVS調度器
3,全部LVS調度器之間經過session表進行Client Address的共享
1.7 LVS的調度算法
10種調度算法見以下表格(rr,wrr,wlc重點):
算法 |
說明 |
rr |
輪循調度,它將請求依次分配不一樣的RS節點,也就是在RS節點中均攤請求。這種算法簡單,可是隻適合於RS節點處理性能相差不大的狀況 |
wrr |
權重輪循,它將依據不一樣RS節點的權值分配任務。權值較高的RS將優先得到任務,而且分配到的鏈接數將比權值較低的RS節點更多。相同權值的RS獲得相同數目的鏈接數 |
dh |
目的地址哈希調度,以目的地址爲關鍵字查找一個靜態hash表來得到須要的RS |
sh |
源地址哈希調度,以源地址爲關鍵字查找一個靜態hash表來得到須要的RS |
wlc |
加權最小鏈接數調度,實際鏈接數除以權值,最小的RS做爲分配的RS |
lc |
最小鏈接數調度,鏈接數最小的RS做爲分配的RS |
lblc |
基於地址的最小鏈接數調度,未來自同一目的地址的請求分配給同一臺RS節點 |
lblcr |
基於地址帶重複最小鏈接數調度。(略) |
SED |
最短的指望的延遲(不成熟) |
NQ |
最小隊列調度(不成熟) |
1.8 LVS的調度算法的生產環境選型
通常的網絡服務,如Http,Mail,MySQL等,經常使用的LVS調度算法爲:
實際使用中,這些算法的適用範圍不限於這些。咱們最好參考內核中的鏈接調度算法的實現原理,根據具體業務需求合理的選型。
1.9 LVS集羣的特色
LVS集羣的特色能夠歸結以下:
(1)功能:
實現三種IP負載均衡技術和10種鏈接調度算法的IPVS軟件。在IPVS內部實現上,採用了高效的Hash函數和垃圾回收機制,能正確處理所調度報文相關的ICMP消息(有些商品化的系統反而不能)。虛擬服務的設置數目沒有限制,每一個虛擬服務都有本身的服務器集。它支持持久的虛擬服務(如HTTP Cookie 和HTTPS等須要該功能的支持),並提供詳盡的統計數據,如鏈接的處理速率和報文的流量等。針對大規模拒絕服務(Deny of service)攻擊,實現了三種防衛策略:有基於內容請求分發的應用層交換軟件KTCPVS,它也是在Linux內核中實現。有相關的集羣管理軟件對資源進行檢測,能及時將故障屏蔽,實現系統的高可用性。主,從調度器能週期性地進行狀態同步,從而實現更高的可用性。
(2)適用性
1)後端真實服務器可運行任何支持TCP/IP的操做系統,包括Linux,各類Unix(如FreeBSD,Sun Solaris,HP Unix等),Mac/OS和windows NT/2000等。
2)負載均衡調度器LB可以支持絕大多數的TCP和UDP協議:
協議 |
內容 |
TCP |
HTTP,FTP,PROXY,SMTP,POP3,IMAP4,DNS,LDAP,HTTPS,SSMTP等 |
UDP |
DNS,NTP,TCP,視頻,音頻流播放協議等 |
無需對客戶機和服務做任何修改,可適用大多數Internet服務。
3)調度器自己當前不支持windows系統。支持大多數的Linux和UINIX系統。
(3)性能
LVS服務器集羣系統具備良好的伸縮性,可支持幾百萬個併發鏈接。配置100M網卡,採用VS/TUN或VS/DR調度技術,集羣系統的吞吐量可高達1Gbits/s;如配置千兆網卡,則系統的最大吞吐量可接近10Gbits/s
(4)可靠性
LVS服務器集羣軟件已經在不少大型的,關鍵性的站點獲得很好的應用,因此它的可靠性在真實應用獲得很好的證明。
(5)軟件許可證
LVS集羣軟件是按GPL(GNU Public License)許可證發行的自由軟件,這意味着你能夠獲得軟件的源代碼,有權對其進行修改,但必須保證你的修改也是以GPL方式發行。
1.10 LVS的官方中文閱讀資料
標題 |
地址 |
LVS項目介紹 |
|
LVS集羣的體系結構 |
|
LVS集羣中的IP負載均衡技術 |
|
LVS集羣的負載調度 |
二,手動實現LVS的負載均衡功能(DR模式)
2.1 安裝LVS軟件
2.1.1 LVS應用場景說明
1)數據庫及memcache等對內業務的負載均衡環境
管理IP地址 |
角色 |
備註 |
10.1.1.141 |
LVS調度器(Director) |
對外提供服務的VIP爲10.1.1.240 |
10.1.1.142 |
RS1(真實服務器) |
|
10.1.1.143 |
RS2(真實服務器) |
特別提示:上面的環境爲內部環境的負載均衡模式,即LVS服務是對內部業務的,如數據庫及memcache等的負載均衡
2)web服務或web cache等負載均衡環境
外部IP地址 |
內部IP地址 |
角色 |
備註 |
|
10.1.1.141 |
LVS調度器(Director) |
對外提供服務的VIP爲10.1.1.240 |
|
10.1.1.142 |
RS1(真實服務器) |
|
|
10.1.1.143 |
RS2(真實服務器) |
提示:
這個表格通常是提供Web或Web cache負載均衡的狀況,此種狀況特色爲雙網卡環境。這裏把192.168.0.0/24假設爲內網卡,192.168.200.0/24假設爲外網卡。
2.1.2 實驗一律述
內部IP(eth0) |
外部IP(eth1) |
角色 |
備註 |
10.1.1.141 |
無 |
LVS負載均衡器 |
VIP: 10.1.1.240 網關爲: 10.1.1.150 |
10.1.1.142 |
無 |
Web01節點 |
網關爲:10.1.1.150 |
10.1.1.143 |
無 |
Web02節點 |
網關爲:10.1.1.150 |
10.1.1.144 |
無 |
內網客戶端 |
網關爲:10.1.1.150 |
|
192.168.1.201 |
外網客戶端 |
不配網關 |
10.1.1.150 |
192.168.1.201 |
網關型防火牆 |
雙網卡均無網關 |
2.1.3 兩臺Web配置簡單的http服務
爲了方便,咱們能夠用yum簡單裝一個apache提供httpd服務進行測試,過程略。
2.1.4 開始安裝LVS
如下的安裝都是在LVS LB 10.1.141上
1)下載相關軟件包
2)安裝準備命令
[root@LVS-Master ~]# lsmod | grep ip_vs
[root@LVS-Master ~]# mount /dev/sr0 /media/cdrom/
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@LVS-Master ~]# yum -y install kernel-devel
[root@LVS-Master ~]# ls -ld /usr/src/kernels/2.6.32-431.el6.x86_64/
drwxr-xr-x 22 root root 4096 Jan 3 02:29 /usr/src/kernels/2.6.32-431.el6.x86_64/
[root@LVS-Master ~]# ln -s /usr/src/kernels/2.6.32-431.el6.x86_64/ /usr/src/linux
[root@LVS-Master ~]# ll -d /usr/src/linux/
drwxr-xr-x 22 root root 4096 Jan 3 02:29 /usr/src/linux/
[root@LVS-Master ~]# ll /usr/src/
total 12
drwxr-xr-x. 2 root root 4096 Sep 23 2011 debug
drwxr-xr-x. 12 501 games 4096 Oct 2 21:39 httpd-2.2.9
drwxr-xr-x. 3 root root 4096 Jan 3 02:29 kernels
lrwxrwxrwx 1 root root 39 Jan 3 02:31 linux -> /usr/src/kernels/2.6
.32-431.el6.x86_64/
特別注意:
此ln命令的連接路徑要和uname -r輸出結果內核版本對應,工做中若是作安裝虛擬化可能有多個內核路徑
若是沒有/usr/src/kernels/2.6.32-431.el6.x86_64/路徑,極可能是由於缺乏kernel-devel軟件包。可經過yum進行安裝
centos5.x版本不能用ipvs1.26
3)安裝lvs命令:
[root@LVS-Master ~]# yum -y install createrepo
[root@LVS-Master ~]# ls
anaconda-ks.cfg install.log ipvsadm-1.26.tar.gz
httpd-2.2.9.tar.gz install.log.syslog rpm
[root@LVS-Master ~]# cd rpm/
[root@LVS-Master rpm]# createrepo -v .
[root@LVS-Master ~]# cd /etc/yum.repos.d/
[root@LVS-Master yum.repos.d]# vim CentOS-Media.repo
[root@LVS-Master yum.repos.d]# cat CentOS-Media.repo | grep -v "#"
[c6-media]
name=CentOS-$releasever - Media
baseurl=file:///media/CentOS/
file:///media/cdrom/
file:///media/cdrecorder/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
[rpm]
name=rpm
baseurl=file:///root/rpm/
gpgcheck=0
enabled=1
[root@LVS-Master yum.repos.d]# yum -y clean all && yum makecache
[root@LVS-Master rpm]# yum -y install libnl* popt*
[root@LVS-Master ~]# ls
anaconda-ks.cfg install.log ipvsadm-1.26.tar.gz
httpd-2.2.9.tar.gz install.log.syslog rpm
[root@LVS-Master ~]# tar xf ipvsadm-1.26.tar.gz -C /usr/src
[root@LVS-Master ~]# cd /usr/src/ipvsadm-1.26/
[root@LVS-Master ipvsadm-1.26]# make && make install
[root@LVS-Master ipvsadm-1.26]# which ipvsadm
/sbin/ipvsadm
[root@LVS-Master ipvsadm-1.26]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@LVS-Master ipvsadm-1.26]# /sbin/ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@LVS-Master ipvsadm-1.26]# lsmod | grep ip_vs
ip_vs 125220 0
libcrc32c 1246 1 ip_vs
ipv6 317340 270 ip_vs,ip6t_REJECT,nf_conntrack_ipv6,nf_
defrag_ipv6
出現這個內容就表示LVS已經安裝好,並加載到了內核
LVS安裝小結:
1,CentOS5.X安裝lvs,使用1.24版本。
2,CentOS6.X安裝lvs,使用1.26版本。
3,安裝lvs後,要執行ipvsadm把ip_vs模塊加載到內核。
2.2 手動配置LVS負載均衡服務
2.2.1 手工添加lvs轉發
(1)配置LVS虛擬IP(VIP)
[root@LVS-Master ~]# ifconfig eth0:0 10.1.1.240/24
[root@LVS-Master ~]# ifconfig eth0:0
eth0:0 Link encap:Ethernet HWaddr 00:0C:29:64:FB:85
inet addr:10.1.1.240 Bcast:10.1.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
(2)手工執行配置添加LVS服務並增長兩臺RS
[root@LVS-Master ~]# ipvsadm -C
[root@LVS-Master ~]# ipvsadm -A -t 10.1.1.240:80 -s rr
[root@LVS-Master ~]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.1.1.240:http rr
[root@LVS-Master ~]# ipvsadm -a -t 10.1.1.240:80 -r 10.1.1.142:80 -g -w 1
[root@LVS-Master ~]# ipvsadm -a -t 10.1.1.240:80 -r 10.1.1.143:80 -g -w 1
(3)查看lvs配置結果
[root@LVS-Master ~]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.1.1.240:http rr
-> 10.1.1.142:http Route 1 0 0
-> 10.1.1.143:http Route 1 0 0
(4)ipvs配置刪除方法
此時,能夠打開瀏覽器訪問http://10.1.1.240體驗結果,若是沒意外,是沒法訪問的。(RS將包丟棄了)
2.2.2 手工在RS端綁定
在NginxWebB上操做
[root@NginxWebB ~]# ifconfig lo:0 10.1.1.240/32 up
[root@NginxWebB~]# ifconfig lo:0
lo:0 Link encap:Local Loopback
inet addr:10.1.1.240 Mask:0.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
在NginxWebA上操做
[root@NginxWebA ~]# ifconfig lo:0 10.1.1.240/32 up
[root@NginxWebA ~]# ifconfig lo:0
lo:0 Link encap:Local Loopback
inet addr:10.1.1.240 Mask:0.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
2.2.3 瀏覽器測試LVS轉發效果
注意:
在測試時候你會發現刷新看的都是同一個RS節點
這是由於瀏覽器的緩存問題
等一段時間之後,刷新就會從新負載均衡到新RS節點了
2.2.4 關於DR模式RS節點的ARP抑制的問題
[root@NginxWebA ~]# echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@NginxWebA ~]# echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@NginxWebA ~]# echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@NginxWebA ~]# echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
[root@NginxWebB ~]# echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@NginxWebB ~]# echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@NginxWebB ~]# echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@NginxWebB ~]# echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
用命令curl作測試
[root@內網Client ~]# echo "10.1.1.240 www.yunjisuan.com" >> /etc/hosts
[root@內網Client ~]# curl www.yunjisuan.com
10.1.1.142 www.yunjisuan.com
[root@內網Client~]# curl www.yunjisuan.com
10.1.1.143 www.yunjisuan.com
實現了負載均衡
[root@LVS-Master ~]# echo "10.1.1.240 www.yunjisuan.com" >> /etc/hosts
可是咱們發現讓LVS本身curl本身,就會卡那裏,爲何??
由於如今是在LVS上,可是DR模式的特色就是不會再回LVS了,因此在LVS那裏是不行的
2.2.5 配置網關型防火牆
防火牆的雙網卡都不要設置網關,由於本身的就是網關
ifup eth1
外網Client網卡信息
配置完以後重啓網絡服務
service network reload
特別提示:
NginxWebA,NginxWebB,LVS負載均衡器,以及內網Client均將網關設置成網關型防火牆的eth0:10.1.1.150
2.2.6 配置內網客戶端
內網客戶端用於模擬lvs應用於內網的負載均衡狀況
好比lvs數據庫讀負載均衡,好比lvs memcached緩存組負載均衡
因爲這類型的負載均衡請求都是由內網服務器發起,所以用內網客戶端來模擬
從上面能夠看出,內網客戶端模擬訪問lvs負載均衡器,成功
2.2.7 配置外網客戶端
外網客戶端模擬的是lvs轉發外網用戶訪問需求給RS節點處理的狀況
模擬外網客戶端,要求客戶端不能配置任何網關
[root@LVS-Master ~]# ifconfig eth0:0 10.1.1.240/24 up
[root@LVS-Master ~]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.1.1.240:http rr
-> 10.1.1.142:http Route 1 0 0
-> 10.1.1.143:http Route 1 0 0
[root@LVS-Master ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.1.1.240:80 rr
-> 10.1.1.142:80 Route 1 0 0
-> 10.1.1.143:80 Route 1 0 0
[root@NginxWebA ~]# ifconfig lo:0 10.1.1.240/32 up
[root@NginxWebB ~]# ifconfig lo:0 10.1.1.240/32 up
因爲外網客戶端要訪問內網的LVS須要通過網關防火牆的跳轉,所以須要在防火牆服務器上作iptables的DNAT,配置以下:
[root@iptables ~]# iptables -t nat -A PREROUTING -d 192.168.1.200 -p tcp --dport 80 -i eth1 -j DNAT --to-destination 10.1.1.240:80
[root@iptables ~]# vim /etc/sysctl.conf
[root@iptables ~]# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key
error: "net.bridge.bridge-nf-call-iptables" is an unknown key
error: "net.bridge.bridge-nf-call-arptables" is an unknown key
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
進行外網客戶端訪問LVS負載均衡器測試
[root@外網Client ~]# echo "192.168.1.200 www.yunjisuan.com" >> /etc/hosts
[root@外網Client ~]# curl www.yunjisuan.com
10.1.1.143 www.yunjisuan.com
[root@外網Client ~]# curl www.yunjisuan.com
10.1.1.142 www.yunjisuan.com
[root@外網Client ~]# curl www.yunjisuan.com
10.1.1.143 www.yunjisuan.com
[root@外網Client ~]# curl www.yunjisuan.com
10.1.1.142 www.yunjisuan.com
訪問防火牆的外網網卡IP,通過iptables的跳轉訪問到了內網的LVS調度器,進而返回Web節點處理結果。
2.3 arp抑制技術參數說明
2.4 開發腳本配置LVS負載均衡器端
2.4.1 LVS負載均衡器端自動配置腳本:
2.4.2 RS節點Web服務器端自動配置腳本
三,企業LVS負載均衡高可用最優方案(LVS+Keepalived)
3.1 實驗二概述
內部IP(eth0) |
外部IP(eth1) |
角色 |
備註 |
10.1.1.141 |
無 |
LVS負載均衡器(主) |
VIP:10.1.1.240 |
10.1.1.140 |
無 |
LVS負載均衡器(備) |
VIP:10.1.1.250 |
10.1.1.142 |
無 |
Web01節點 |
|
10.1.1.143 |
無 |
Web02節點 |
|
10.1.1.144 |
無 |
內網客戶端 |
3.2 LVS負載均衡器主和備安裝LVS軟件
先給主再添加一個網絡適配器(網卡),而後克隆LVS主當作LVS備
[root@LVS-Master ~]# cd /etc/sysconfig/network-scripts/
[root@LVS-Master network-scripts]# cp ifcfg-eth0 ifcfg-eth1
[root@LVS-Master network-scripts]# vim ifcfg-eth1
[root@LVS-Master network-scripts]# ifdown eth1;ifup eth1
[root@LVS-Master network-scripts]# cat ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=10.1.1.141
NETMASK=255.255.255.0
GATEWAY=10.1.1.150
[root@LVS-Master network-scripts]# cat ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=192.168.1.50
NETMASK=255.255.255.0
[root@LVS-Slave network-scripts]# cp ifcfg-eth0 ifcfg-eth1
[root@LVS-Slave network-scripts]# vim ifcfg-eth1
[root@LVS-Slave network-scripts]# cat ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=192.168.1.100
NETMASK=255.255.255.0
[root@LVS-Slave network-scripts]# ifdown eth1;ifup eth1
3.3 兩臺Web服務器安裝Web服務
過程略
3.4 LVS負載均衡器主和備安裝Keepalived軟件
[root@LVS-Master ~]# yum -y install keepalived
3.5 僅實現LVS負載均衡器主和備的keepalived高可用功能
LVS負載均衡器主的keepalived配置文件內容以下
[root@LVS-Master ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
1409156706@qq.com
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_01
}
vrrp_instance VI_1 {
state MASTER
interface eth1
virtual_router_id 55
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.1.1.240/24 dev eth0 label eth0:240
}
}
vrrp_instance VI_2 {
state BACKUP
interface eth1
virtual_router_id 56
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.1.1.250/24 dev eth0 label eth0:250
}
}
virtual_server 10.1.1.240 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
# persistence_timeout 50
protocol TCP
real_server 10.1.1.142 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 10.1.1.143 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
virtual_server 10.1.1.250 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
# persistence_timeout 50
protocol TCP
real_server 10.1.1.142 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 10.1.1.143 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
[root@LVS-Master ~]# /etc/init.d/keepalived start
[root@LVS-Master ~]# scp /etc/keepalived/keepalived.conf root@10.1.1.140:/etc/keepalived/
root@10.1.1.140's password:
keepalived.conf 100% 1823 1.8KB/s 00:00
LVS負載均衡器備的keepalived配置文件內容以下
[root@LVS-Slave ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
1409156706@qq.com
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_02
}
vrrp_instance VI_1 {
state BACKUP
interface eth1
virtual_router_id 55
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.1.1.240/24 dev eth0 label eth0:240
}
}
vrrp_instance VI_2 {
state MASTER
interface eth1
virtual_router_id 56
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.1.1.250/24 dev eth0 label eth0:250
}
}
virtual_server 10.1.1.240 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
# persistence_timeout 50
protocol TCP
real_server 10.1.1.142 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 10.1.1.143 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
virtual_server 10.1.1.250 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
# persistence_timeout 50
protocol TCP
real_server 10.1.1.142 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 10.1.1.143 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
[root@LVS-Slave ~]# /etc/init.d/keepalived start
將兩個實例中的id設爲同樣,同爲55
[root@LVS-Slave ~]# /etc/init.d/keepalived stop
[root@LVS-Master ~]# /etc/init.d/keepalived restart
測試失敗,上下是不能同樣的。。
再將配置都改回來
[root@LVS-Master ~]# /etc/init.d/keepalived restart
[root@LVS-Slave ~]# /etc/init.d/keepalived start
內網客戶端進行訪問測試
因爲節點尚未綁定新的VIP,因此curl不過去
[root@NginxWebA ~]# ifconfig lo:1 10.1.1.250/32 up
[root@NginxWebB ~]# ifconfig lo:1 10.1.1.250/32 up
綜上,至此基於LVS的keepalived高可用功能實驗完畢。