第四十二節(jié)、LVS負載均衡服務

LVS是Linux Virtual Server的簡寫社露,意即Linux虛擬服務器挟阻,是一個虛擬的服務器集
目前主流的負載均衡服務有以下三種:LVS、Haproxy峭弟、Nginx
LVS基于4層網(wǎng)絡層效率較高
Haproxy基于7層應用層附鸽,都適用于高并發(fā)網(wǎng)站,對機器要求高

特點
  • 可伸縮網(wǎng)絡服務的幾種結構,它們都需要一個前端的負載調度器(或者多個進行主從備份)瞒瘸。我們先分析實現(xiàn)虛擬網(wǎng)絡服務的主要技術坷备,指出IP負載均衡技術是在負載調度器的實現(xiàn)技術中效率最高的。在已有的IP負載均衡技術中情臭,主要有通過網(wǎng)絡地址轉換(Network Address Translation)將一組服務器構成一個高性能的省撑、高可用的虛擬服務器,我們稱之為VS/NAT技術(Virtual Server via Network Address Translation)
  • 在分析VS/NAT的缺點和網(wǎng)絡服務的非對稱性的基礎上俯在,我們提出了通過IP隧道實現(xiàn)虛擬服務器的方法VS/TUN (Virtual Server via IP Tunneling)竟秫,和通過直接路由實現(xiàn)虛擬服務器的方法VS/DR(Virtual Server via Direct Routing),它們可以極大地提高系統(tǒng)的伸縮性VS/NAT朝巫、VS/TUN和VS/DR技術是LVS集群中實現(xiàn)的三種IP負載均衡技術
工作原理
  • 用戶請求LVS VIP鸿摇,LVS根據(jù)轉發(fā)方式和算法,將請求轉發(fā)給后端服務器劈猿,后端服務器接受到請求,返回給用戶潮孽。-
    對于用戶來說揪荣,看不到WEB后端具體的應用
  • LVS轉發(fā)方式有三種,分別是NAT往史、DR仗颈、TUN模式,常用算法:RR(round-robin)椎例、LC(least_connection)挨决、W(weight)RR、WLC模式等(RR為輪詢模式订歪,LC為最少連接模式脖祈,WRR為權重模式)
    NAT修改數(shù)據(jù)包的IP,DR修改MAC刷晋,TUN也是修改MAC但多列一層隧道加密
  • LVS NAT原理:用戶請求LVS到達director,director將請求的報文的目標地址改成后端的realserver地址盖高,同時將報文的目標端口也改成后端選定的realserver相應端口慎陵,最后將報文發(fā)送到realserver,realserver將數(shù)據(jù)返給director喻奥,director再把數(shù)據(jù)發(fā)送給用戶席纽。(兩次請求都經(jīng)過director,所以訪問大的話撞蚕,director會成為瓶頸),realserver上需要配置網(wǎng)關,網(wǎng)關地址就是LVS的VIP
  • LVS DR原理:用戶請求LVS到達director,director將請求的報文的目標MAC地址改成后端的realserver MAC地址润梯,目標IP為VIP(不變),源IP為用戶IP地址(保持不變)甥厦,然后Director將報文發(fā)送到realserver纺铭,realserver檢測到目標為自己本地IP,如果在同一個網(wǎng)段矫渔,然后將請求直接返給用戶彤蔽。如果用戶跟realserver不在一個網(wǎng)段,則通過網(wǎng)關返回用戶庙洼。(此種轉發(fā)效率最高),realserver和LVS上配置相同的VIP地址,但是realserver上會限制ARP響應,防止realserver直接向用戶提供服務,而是只接收LVS轉發(fā)的請求提供服務.
  • LVS TUN原理:跟LVS DR類似顿痪,也是改變封裝MAC地址,多了一層隧道加密油够。實施環(huán)境復雜蚁袭,比LVS DR模式效率略低。
服務安裝

LVS技術是基于ip_vs內核模塊(ip虛擬技術),需要先安裝軟件包ipvsadm-1.2.4.tar.gz,注意軟件版本和內核版本的對應關系,內核2.6對應ipvs1.24版本

#查看系統(tǒng)內核版本是2.6.32
[root@localhost src]# uname -a
Linux localhost.localdomain 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
#下載ipvsadm-1.2.4
[root@localhost src]# wget -c http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
--2018-01-07 14:10:33--  http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
正在解析主機 www.linuxvirtualserver.org... 173.255.202.51, 2600:3c00::f03c:91ff:fe96:fcc2
正在連接 www.linuxvirtualserver.org|173.255.202.51|:80... 已連接石咬。
已發(fā)出 HTTP 請求揩悄,正在等待回應... 200 OK
長度:36598 (36K) [application/x-gzip]
正在保存至: “ipvsadm-1.24.tar.gz”
100%[=======================================================================>] 36,598      23.4K/s   in 1.5s    
2018-01-07 14:10:36 (23.4 KB/s) - 已保存 “ipvsadm-1.24.tar.gz” [36598/36598])
#解壓源碼包后切換到解壓目錄
[root@localhost src]# tar zxvf ipvsadm-1.24.tar.gz
[root@localhost src]# cd ipvsadm-1.24
[root@localhost ipvsadm-1.24]# ls
config_stream.c  debian           ipvsadm.8        ipvsadm-restore.8  ipvsadm.sh       libipvs   SCHEDULERS
config_stream.h  dynamic_array.c  ipvsadm.c        ipvsadm-save       ipvsadm.spec     Makefile  TAGS
contrib          dynamic_array.h  ipvsadm-restore  ipvsadm-save.8     ipvsadm.spec.in  README    VERSION

ipvsadmin軟件包需要先做好軟鏈接編譯進內核然后直接進入解壓目錄安裝

#做軟鏈接
[root@localhost src]# ln -s /usr/src/kernels/2.6.32-431.el6.x86_64/  /usr/src/linux
[root@localhost src]# ll
總用量 10052
drwxr-xr-x. 2 root root    4096 9月  23 2011 debug
drwxr-xr-x  5 root root    4096 1月   7 14:15 ipvsadm-1.24
-rw-r--r--  1 root root   36598 12月 11 2005 ipvsadm-1.24.tar.gz
drwxr-xr-x. 3 root root    4096 12月 16 20:10 kernels
lrwxrwxrwx  1 root root      39 1月   7 14:18 linux -> /usr/src/kernels/2.6.32-431.el6.x86_64/
#進入ipvsadmin解壓目錄后安裝
[root@localhost src]# cd ipvsadm-1.24
[root@localhost ipvsadm-1.24]# make 
[root@localhost ipvsadm-1.24]# make install

查看安裝是否成功ipvasdm

[root@localhost ipvsadm-1.24]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)   #顯示ipvs版本信息及轉發(fā)表的大小
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
ipvs服務配置通過命令直接配置
  • A 增加一臺虛擬服務器地址
  • t 虛擬服務器提供的是tcp服務
  • s 使用的調度算法
  • a 在虛擬服務器中增加一臺后端真實服務器
  • r 指定真實服務器地址
    -m 設置當前轉發(fā)方式為NAT模式;-g為直接路由模式鬼悠;-i 為隧道模式
  • w 后端真實服務器的權重
    配置的步驟有兩步删性,第一步為定義端口服務,第二步為添加realserver后端服務
#添加虛擬的VIP192.168.15.202,端口80,調度算法rr輪詢
[root@localhost ~]# ipvsadm -A -t 192.168.15.202:80 -s rr
#添加后端服務器realserver192.168.15.172,直接路由模式,權重2
[root@localhost ~]# ipvsadm -a -t 192.168.15.202:80 -r 192.168.15.172 -g -w 2
#查看參數(shù)打印列表Ln
[root@localhost ~]# ipvsadm -Ln   
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.15.202:80 rr
  -> 192.168.15.172:80            Local   2      0          0   
  -> 192.168.15.173:80            Local   2      0          0   
#使用文件定向符保存ipvs配置
[root@localhost ~]# ipvsadm-save >/tmp/ipvs.txt
#加載恢復ipvs配置
[root@localhost ~]# ipvsadm-restore </tmp/ipvs.txt
在realserver后端真實服務器上配置VIP
#將VIP綁定到loopback本地回還地址上不會和其他網(wǎng)卡沖突
[root@localhost ~]# VIP=192.168.15.202
[root@localhost ~]# ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
[root@localhost ~]# ifconfig
lo:0      Link encap:Local Loopback  
          inet addr:192.168.15.202  Mask:255.255.255.255
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
#添加網(wǎng)關地址
[root@localhost ~]# /sbin/route add -host $VIP dev lo:0
[root@localhost ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.15.202  0.0.0.0         255.255.255.255 UH    0      0        0 lo
192.168.15.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
0.0.0.0         192.168.15.1    0.0.0.0         UG    0      0        0 eth0
realserver不僅僅要綁定VIP焕窝,還要通過以下腳本抑止自己的arp響應
[root@localhost ~]#  vim auto_realserver.sh
#!/bin/sh
#LVS Client Server
VIP=192.168.15.202                       #定義VIP
case  $1  in                                                                                                                                                                                                                                                           
start)                                                                                                                                                                                                                                            
    ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP   #lo:0綁定vip
    /sbin/route add -host $VIP dev lo:0                                            #添加網(wǎng)關地址
    echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore         #下面4句就是抑止arp響應的語句
    echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
    sysctl -p >/dev/null 2>&1                                            #使上述配置生效
    echo "RealServer Start OK"
    exit 0
;;                                                                                                                                                                                                                                         
stop)
    ifconfig lo:0 down      
    route del $VIP >/dev/null 2>&1                                   #刪除路由信息
    echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore          #恢復arp響應
    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
    echo "RealServer Stoped OK"
    exit 1
;;
*)
    echo "Usage: $0 {start|stop}"
;;
esac
#授予執(zhí)行權限并啟動腳本
[root@localhost ~]#  chmod 0+x auto_realserver.sh
[root@localhost ~]#  sh  auto_realserver.sh  start
RealServer Start OK
LVS服務器故障排查思路
  • 1蹬挺、ping網(wǎng)站的域名www.jfedu.net,能解析到IP,證明域名服務器沒問題,nslookup、ping它掂、dig
  • 2巴帮、登錄LVS服務器,查看ipvsadm -Ln信息以及日志信息tail -fn 100 /var/log/messages,看客戶端realserver的80端口是否啟動
  • 3、看zabbix監(jiān)控服務器,有無異常報警
  • 4虐秋、看keepalived.conf配置文件是否錯誤,進程
  • 5榕茧、看客戶端的auto_realserver.sh腳本VIP是否啟動
  • 6、使用tcpdump -nn port80 and host XXXXip抓包
LVS和keepalived綜合運用

所有操作都直接定義在keepalived的配置文件中即可

[root@localhost ~]# vim /etc/keepalived/keepalived.conf    
#######global conf####  全局配置定義發(fā)送接受的郵箱及路由信息等保持不變
! Configuration File for keepalived
global_defs {
   notification_email {
      wgkgood@139.com
   }
   notification_email_from wgkgood@139.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
######## VIP1  VRRP CONF  第一個VRRP實例作為LVS的MASTER該部分也不變化
vrrp_instance VI_1 {
    state MASTER
    interface eth0                                #通信端口
    lvs_sync_daemon_inteface eth0  #lvs通信端口類似心跳線功能
    virtual_router_id 151                     #路由ID
    priority 100                                    #優(yōu)先級   
    advert_int 5                                   #發(fā)送廣播時間間隔
    nopreempt                                     #設置為不搶占
    authentication {
        auth_type PASS
        auth_pass 2222
    }
    virtual_ipaddress {
        192.168.15.201                         #定義LVS的虛擬VIP
    }
}
############虛擬服務器配置部分增加LVS配置代碼
virtual_server 192.168.15.201 80{
    delay_loop 6                    #健康檢查時間間隔
    lb_algo wrr                       #LVS算法權重輪詢模式
    lb_kind DR                       #LVS轉發(fā)方式為直接路由DR還可以是NAT/TUN
    persistence_timeout 60   #60秒內會話保持在后端同一臺服務器
    protocol TCP                    #v轉發(fā)協(xié)議tcp
    real_server 192.168.15.172 80 {    #這里的realserver是后端的服務器1
        weight 100
        notify_down /data/sh/mysql.sh
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }
 real_server 192.168.15.173 80 {      #這里的realserver是后端的服務器2
        weight 100
        notify_down /data/sh/mysql.sh
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }
}
  • LVS及后端的realserver上都配置VIP,而realserver上配置腳本抑止arp響應是為了當路由器廣播時只有LVS主機響應,而LVS接到數(shù)據(jù)包后修改完目的MAC地址后能把數(shù)據(jù)包直接轉發(fā)到后端服務器
  • 虛擬VIP綁定到本地回環(huán)地址lo上是為了防止虛擬的VIP在交換機端口上產(chǎn)生MAC地址表,而且lo上可綁定多個虛擬VIP
[root@localhost ~]# VIP=XXXX.XXXX.XXXX.XXXX
 [root@localhost ~]# ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末客给,一起剝皮案震驚了整個濱河市用押,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌起愈,老刑警劉巖只恨,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件译仗,死亡現(xiàn)場離奇詭異,居然都是意外死亡官觅,警方通過查閱死者的電腦和手機纵菌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來休涤,“玉大人咱圆,你說我怎么就攤上這事」Π保” “怎么了序苏?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長捷凄。 經(jīng)常有香客問我忱详,道長,這世上最難降的妖魔是什么跺涤? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任匈睁,我火速辦了婚禮,結果婚禮上桶错,老公的妹妹穿的比我還像新娘航唆。我一直安慰自己,他們只是感情好院刁,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布糯钙。 她就那樣靜靜地躺著,像睡著了一般退腥。 火紅的嫁衣襯著肌膚如雪任岸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天狡刘,我揣著相機與錄音演闭,去河邊找鬼。 笑死颓帝,一個胖子當著我的面吹牛,可吹牛的內容都是我干的窝革。 我是一名探鬼主播购城,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼虐译!你這毒婦竟也來了瘪板?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤漆诽,失蹤者是張志新(化名)和其女友劉穎侮攀,沒想到半個月后锣枝,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡兰英,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年撇叁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畦贸。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡陨闹,死狀恐怖地粪,靈堂內的尸體忽然破棺而出纬向,到底是詐尸還是另有隱情,我是刑警寧澤汰现,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布胶坠,位于F島的核電站君账,受9級特大地震影響,放射性物質發(fā)生泄漏沈善。R本人自食惡果不足惜乡数,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望矮瘟。 院中可真熱鬧瞳脓,春花似錦、人聲如沸澈侠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哨啃。三九已至烧栋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拳球,已是汗流浹背审姓。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留祝峻,地道東北人魔吐。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像莱找,于是被迫代替她去往敵國和親酬姆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355