LVS

1 集群的概念

  • Cluster的概念
- 當(dāng)系統(tǒng)的性能實(shí)在是不夠用,一般的系統(tǒng)的擴(kuò)展方式
  Scale Up: 向上擴(kuò)展,增強(qiáng)
  Scale Out: 向外擴(kuò)展,增加設(shè)備,但是存在調(diào)度問題
Cluster: 集群,為解決某個特定的問題將多臺計(jì)算機(jī)組合起來形成的單個系統(tǒng)
Linux Cluster類型:
  LB: Load Balancing, 負(fù)載均衡
  HA: High Availiablity,高可用,解決SPOF(Single Point Of Failuer)單點(diǎn)故障
  HPC: High-performance computing,高性能計(jì)算
分布式系統(tǒng):
  分布式存儲:云盤
  分布式計(jì)算: hadoop, Spark
  • Cluster 的分類
硬件: 
  F5 Big-IP
  Citrix Netscaler
  A10
軟件:
  LVS: Linux Virtual Server
  nginx: 支持四層調(diào)度
  haproxy:支持四層調(diào)度
基于工作的協(xié)議層次劃分:
  傳輸層(通用):DPORT
    lvs,nginx(stream),haproxy(mode tcp)
  應(yīng)用層(專用):對特定的協(xié)議
    proxy server(代理服務(wù)器)
    http: nginx, httpd, haproxy(mode http)
    fastcgi: nginx, httpd
    mysql: mysql-proxy
  • 與Cluster相關(guān)的一些問題及解決
會話保持: 負(fù)載均衡
  1 session sticky: 同一個用戶調(diào)度固定的服務(wù)器
    Source IP: LVS sh 算法(對特定的服務(wù)而言)
    Cookie
  2 session replication: 每一臺擁有的全部的session
    session multicast cluster
  3 session server: 專門的session服務(wù)器
    Memcached, Redis
HA集群實(shí)現(xiàn)方案:
  keepalived:基于 vrrp(虛擬冗余路由協(xié)議)
  ais:application interface standard(應(yīng)用接口規(guī)范)
    heartbeat, cman+rgmanager, corosync+pacemaker

2 LVS的介紹

  • LVS: Linux Virtual Server,負(fù)載調(diào)度器,集成內(nèi)核(在netfileter的框架上),由章文嵩研發(fā)
lvs:基于四層調(diào)度,根據(jù)一定的算法將客戶端的請求分發(fā)給后端的服務(wù)器
工作原理: VS根據(jù)請求的報(bào)文的目標(biāo)IP和目標(biāo)協(xié)議及端口將其調(diào)度轉(zhuǎn)發(fā)到某RS,根據(jù)調(diào)度算法來挑選RS
iptables/netfilter:
  iptables:用戶空間的管理工具
  netfileter: 內(nèi)核空間的框架
  流入: PREROUTING --> INPUT
  流出: OUTPUT --> POSTROUTING
  轉(zhuǎn)發(fā): PREROUTING --> FORWARD --> POSTROUTING
查看內(nèi)核是否支持ipvs
  grep -i -A 20 'ipvs' /boot/config-xxx
  • LVS的概念:
  • LVS中的一些術(shù)語
VS: VIrtual Server,Director Server(DS)
  Dispatcher(調(diào)度器),Load Balancer
RS: Real Server(lvs), upstream server(在nginx中叫), backend server(在haproxy叫)
CIP: Client IP
VIP: Virtual server IP VS外網(wǎng)的IP
DIP: Direcor IP VS內(nèi)網(wǎng)的IP
RIP: Real server IP 真是服務(wù)器的IP地址
訪問流程: CIP <--> VIP==DIP <-->RIP
  • LVS 集群的類型:
lvs: ipvsadm/ipvs
  ipvsadm: 用戶空間的命令行工具,規(guī)則管理器,用于管理集群服務(wù)及RealServer
  ipvs: 工作于內(nèi)核空間netfilter的INPUT鉤子上的框架
    支持的協(xié)議: tcp udp ah_esp esp ah sctp
lvs集群的類型:
  lvs-nat: 修改請求報(bào)文的目標(biāo)IP,多目標(biāo)IP的DNAT
  lvs-dr: 操縱封裝新的MAC地址
  lvs-tun: 在原請求IP報(bào)文之外新加一個IP首部
  lvs-fullnat: 修改請求報(bào)文的源和目標(biāo)
  • lvs-nat
lvs-nat
多目標(biāo)DNAT(iptables) 他通過修改報(bào)文的目標(biāo)IP地址(同時可能會修改目標(biāo)端口)至挑選出來某RS的RIP地址實(shí)現(xiàn)轉(zhuǎn)發(fā)
    1 RS 應(yīng)該使用私有網(wǎng)絡(luò)地址最盅,且RS的網(wǎng)關(guān)指向DIP(DIP和RIP之間可以使用路由器)
    2 請求和相應(yīng)報(bào)文都要經(jīng)由director轉(zhuǎn)發(fā)奥额,極高負(fù)載的場景中慨灭,director可能會成為系統(tǒng)瓶頸
    3 支持端口映射
    4 RS 可以使用任意操作系統(tǒng)
    5 RS的RIP和Director的DIP在同一IP網(wǎng)絡(luò),也可以不在同一個網(wǎng)段
  • lvs-dr
1 保證前端路由器將目標(biāo)IP為VIP的請求報(bào)文發(fā)送給director
  解決方案
    靜態(tài)綁定
    arptables  后臺主機(jī)不能使windows
      arptables -A IN -d $VIP -j DROP
      arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
    修改RS主機(jī)內(nèi)核參數(shù)
      arp_announce
      arp_ignore
2 RS的RIP可以使用私有地址,但是也可以使用公網(wǎng)地址
3 RS跟Director必須在同一物理網(wǎng)絡(luò)中
4 請求報(bào)文經(jīng)由Director 調(diào)度,但響應(yīng)報(bào)文一定不能經(jīng)由Director;
5 不支持端口映射
6 RS 可以是大多數(shù)操作系統(tǒng)
7 RS的網(wǎng)關(guān)不能指向DIP
  • lvs-tun
轉(zhuǎn)發(fā)方式:不修改請求報(bào)文的IP首部(源IP為CIP,目標(biāo)IP為VIP),而在原IP報(bào)文之外再封裝一個IP首部(源IP是DIP,目標(biāo)IP是RIP),將報(bào)文發(fā)往挑選出的目標(biāo)RS;RS直接響應(yīng)給客戶端(源IP是VIP,目標(biāo)IP是CIP)
  (1) DIP, VIP, RIP都應(yīng)該是公網(wǎng)地址
  (2) RS的網(wǎng)關(guān)不能,也不可能指向DIP
  (3) 請求報(bào)文要經(jīng)由Director,但響應(yīng)不能經(jīng)由Director
  (4) 不支持端口映射
  (5) RS的OS須支持隧道功能
  • lvs-fullnat: 這種類型kernel不支持,所以也就不做介紹了
  • LVS工作模式的總結(jié)


lvs-nat與lvs-fullnat:請求和響應(yīng)報(bào)文都經(jīng)由Director
lvs-nat: DIP的網(wǎng)關(guān)指向DIP
lvs-fullnat: DIP和RIP未必在同一個網(wǎng)絡(luò),但要能夠通信
lvs-dr與lvs-tun:請求報(bào)文要經(jīng)由Director,但響應(yīng)報(bào)文由RS直接發(fā)往Client
lvs-dr: 通過封裝新的MAC首部實(shí)現(xiàn),通過MAC網(wǎng)絡(luò)轉(zhuǎn)發(fā)
lvs-tun: 通過在原IP報(bào)文封裝新的IP頭,實(shí)現(xiàn)轉(zhuǎn)發(fā),支持遠(yuǎn)程通信
  • ipvs scheduler: lvs的調(diào)度算法
根據(jù)是否考慮各個RS的負(fù)載狀態(tài),可分為兩種:動態(tài)算法和靜態(tài)算法
靜態(tài)算法:四種
  1 RR: roundrobin,輪訓(xùn)
  2 WRR: weight RR, 加權(quán)的輪訓(xùn)
  3 SH: source hashing,實(shí)現(xiàn) session sticky,源地址hash,將來自統(tǒng)一個IP的地址的請求始終發(fā)送給第一次挑中的RS,從而實(shí)現(xiàn)會話綁定,粒度比較粗
  4 DH: destination hashing: 目標(biāo)地址hash,將發(fā)往同一個目標(biāo)地址的請求始終發(fā)至第一次挑中的RS,典型的場景是正向代理緩存場景中的負(fù)載均衡
動態(tài)算法:
  1 LC: least connections 適用于長連接使用 overhead=active*256+inactiveconns
  2 WLC: weight LC: 默認(rèn)調(diào)度算法 overhead=(activeconns*256+inactiveconns)/weight
  3 SED: shortest Expection Delay: 初始連接權(quán)重優(yōu)先 overhead=(activeconns+1)*256/weight
  4 NQ: nerver queue: 第一次均勻分配,后續(xù)SED
  5 LBLC: locality-based lc,動態(tài)的DH算法,場景:根據(jù)負(fù)載狀態(tài)實(shí)現(xiàn)正向代理
  6 LBLCR: LBLC with Replication,帶復(fù)制功能的LBLC,解決LBLC不均勻問題,從負(fù)載重的復(fù)制到負(fù)載輕的RS
  • ipvsadm
ipvsadm 用法同iptables
  管理集群服務(wù) 
    ipvsadm -A|E -t|u|f service-address [-s scheduler]  E 修改
    ipvsadm -D -t|u|f service-address
      service-address
        tcp: -t ip:port
        udp: -u ip:port
        fwm: -f mark    
      -s scheduler
  管理集群服務(wù)中的RS
    ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
    ipvsadm -d -t|u|f service-address -r server-address
      server-address
        ip:port
      lvs-type    要注意使用 什么模型
        -g gateway dr
        -i ipip tun
        -m masquerade,nat   
  清空和查看
    ipvsadm -C
    ipvsadm -L|l [options]
      -n numberic 基于數(shù)字格式顯示地址和端口
      -c connetcion 顯示ipvs連接
      --rate 速率
      --stats 統(tǒng)計(jì)數(shù)據(jù)
      --exact 精確值
  保存和重載
    ipvsadm -R
    ipvsadm -S [n]
  置零計(jì)數(shù)器
    ipvsadm -Z [-t|u|f service-address]

3 LVS的實(shí)現(xiàn)

  • lvs-nat


1 布置此環(huán)境的時候,使用linux的主機(jī)進(jìn)行實(shí)現(xiàn)
2 route的轉(zhuǎn)發(fā)的功能需要實(shí)現(xiàn),Director的核心轉(zhuǎn)發(fā)就不需要打開
3 將RIP1和RIP2的網(wǎng)關(guān)指向DIP
4 然后在Director上寫轉(zhuǎn)發(fā)規(guī)則
5 在各RS布置上服務(wù)如,mysql或httpd的服務(wù)
6 在Director上寫規(guī)則,使用的是mysql和http并且是使用的輪訓(xùn)的算法
  ipvsadm -A -t 192.168.8.3:80 -s rr
  ipvsadm -a -t 192.168.8.3:80 -r 172.18.23.71:80 -m -w 1
  ipvsadm -a -t 192.168.8.3:80 -r 172.18.23.72:80 -m -w 2
  ipvsadm -A -t 192.168.8.3:3306 -s rr 
  ipvsadm -a -t 192.168.8.3:3306 -r 172.18.23.71:3306 -m -w 1
  ipvsadm -a -t 192.168.8.3:3306 -r 172.18.23.72:3306 -m -w 2
  • lvs-dr
DIP和VIP是同網(wǎng)段的地址,如果用到生產(chǎn)環(huán)境,會需要很多的公網(wǎng)IP
1 布置此環(huán)境的時候,使用linux的主機(jī)進(jìn)行實(shí)現(xiàn)
2 ,Director,route的轉(zhuǎn)發(fā)的功能需要實(shí)現(xiàn)
3 將Director,RIP1和RIP2的網(wǎng)關(guān)指向router 2
4 在各個RS的服務(wù)器上修改內(nèi)核參數(shù)
  echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
  echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
  echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
  echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
  ifconfig lo:0 172.18.23.100/32 broadcast 172.18.23.100 up
  route add -host 172.18.23.100 dev lo:0 
5 在Director上配置IP地址
  ifconfig ens33 172.18.23.100/32 broadcast 172.18.23.100 up
  route add -host 172.18.23.100 dev ens33
6 在Director上寫ipvs規(guī)則
  ipvsadm -A -t 172.18.23.100:80 -s rr
  ipvsadm -a -t 172.18.23.100:80 -r 172.18.23.71:80 -g -w 1
  ipvsadm -a -t 172.18.23.100:80 -r 172.18.23.72:80 -g -w 2
  ipvsadm -A -t 172.18.23.100:3306 -s rr
  ipvsadm -a -t 172.18.23.100:3306 -r 172.18.23.71:80 -g -w 1
  ipvsadm -a -t 172.18.23.100:3306 -r 172.18.23.72:80 -g -w 2
DIP和VIP是同網(wǎng)段的地址,可以使用內(nèi)網(wǎng)IP
1 布置此環(huán)境的時候,使用linux的主機(jī)進(jìn)行實(shí)現(xiàn)
2 Director,router的轉(zhuǎn)發(fā)的功能需要實(shí)現(xiàn),并且router上還應(yīng)當(dāng)有192.168.80.0/24地址,否則可能會有問題
3 將Director,RIP1和RIP2的網(wǎng)關(guān)指向router 2
4 在各個RS的服務(wù)器上修改內(nèi)核參數(shù)
  echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
  echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
  echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
  echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
  ifconfig lo:0 192.168.8.8/32 broadcast 192.168.8.8 up
  route add -host 192.168.8.8 dev lo:0 
5 在Director上配置IP地址
  ifconfig ens33 192.168.8.8/32 broadcast 192.168.8.8 up
  route add -host 192.168.8.8 dev ens33
6 這種方式,需要在前段路由器上添加一條路由規(guī)則,執(zhí)行vip,通過route2 的網(wǎng)卡
7 在Director上寫規(guī)則
  ipvsadm -A -t 192.168.8.8 -s rr
  ipvsadm -a -t 192.168.8.8:80 -r 172.18.23.71:80 -g -w 1
  ipvsadm -a -t 192.168.8.8:80 -r 172.18.23.72:80 -g -w 2
  ipvsadm -A -t 192.168.8.8:3306 -s rr
  ipvsadm -a -t 192.168.8.8:3306 -r 172.18.23.71:80 -g -w 1
  ipvsadm -a -t 192.168.8.8:3306 -r 172.18.23.72:80 -g -w 2

對于上面三種lvs的實(shí)現(xiàn):可以使用FWM即:基于防火墻標(biāo)記進(jìn)行統(tǒng)一調(diào)度,請自行進(jìn)行調(diào)節(jié)

iptables -t mangle -A PREROUTING -d VIP -p tcp --dport 80 -j MARK 10
iptables -t mangle -A PREROUTING -d VIP -p tcp --dport 3306 -j MARK 10
ipvsadm -A -f 10 rr
ipvsadm -a -f 10 -r 172.18.23.71 -g
ipvsadm -a -f 10 -r 172.18.23.72 -g
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末番刊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌饲宛,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嗜价,死亡現(xiàn)場離奇詭異艇抠,居然都是意外死亡幕庐,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門家淤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來异剥,“玉大人,你說我怎么就攤上這事絮重≡┦伲” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵青伤,是天一觀的道長督怜。 經(jīng)常有香客問我,道長潮模,這世上最難降的妖魔是什么亮蛔? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮擎厢,結(jié)果婚禮上究流,老公的妹妹穿的比我還像新娘。我一直安慰自己动遭,他們只是感情好芬探,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著厘惦,像睡著了一般偷仿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上宵蕉,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天酝静,我揣著相機(jī)與錄音,去河邊找鬼羡玛。 笑死别智,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的稼稿。 我是一名探鬼主播薄榛,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼让歼!你這毒婦竟也來了敞恋?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤谋右,失蹤者是張志新(化名)和其女友劉穎硬猫,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡啸蜜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年馏予,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盔性。...
    茶點(diǎn)故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖呢岗,靈堂內(nèi)的尸體忽然破棺而出冕香,到底是詐尸還是另有隱情,我是刑警寧澤后豫,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布悉尾,位于F島的核電站,受9級特大地震影響挫酿,放射性物質(zhì)發(fā)生泄漏构眯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一早龟、第九天 我趴在偏房一處隱蔽的房頂上張望惫霸。 院中可真熱鬧,春花似錦葱弟、人聲如沸壹店。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽硅卢。三九已至,卻和暖如春藏杖,著一層夾襖步出監(jiān)牢的瞬間将塑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工蝌麸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留点寥,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓祥楣,卻偏偏與公主長得像开财,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子误褪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 集群的概念LVS介紹ipvsadm的使用實(shí)現(xiàn)LVS-NAT實(shí)現(xiàn)LVS-DRLVS高可用 一责鳍、集群的概念 (一)系統(tǒng)...
    哈嘍別樣閱讀 755評論 0 2
  • 1.Cluster(集群)概念 (1)系統(tǒng)擴(kuò)展方式: Scale UP:向上擴(kuò)展,增強(qiáng)Scale Out:向外擴(kuò)展...
    尛尛大尹閱讀 1,096評論 0 4
  • (一)LVS概念 LVS( Linux Virtual Server)是一種負(fù)載均衡(LB,Laod Balanc...
    uangianlap閱讀 3,587評論 0 9
  • 負(fù)載均衡集群是 load balance 集群的簡寫乓诽,翻譯成中文就是負(fù)載均衡集群。常用的負(fù)載均衡開源軟件有ngin...
    jiangmo閱讀 1,319評論 0 1
  • 本文部分觀點(diǎn)圖片采用于:http://chenx1242.blog.51cto.com 隨著智能機(jī)的逐漸普及咒程,大量...
    BossHuang閱讀 3,138評論 0 16