天天看點

lvslvs分布式存儲叢集和分布式LVS工作原理LVS叢集類型中的術語

lvs

1.優勢:核心裡面的功能。而不是一個應用程式。核心可以動用各種資源。LVS:Linux Virtual Server,負載排程器,核心內建

阿裡的四層SLB(Server Load Balance)是基于LVS+keepalived實作 LVS 官網:http://www.linuxvirtualserver.org/

阿裡SLB和LVS:https://yq.aliyun.com/articles/1803 https://github.com/alibaba/LVS

2.LVS是叢集 mysql裡面的主從複制都是叢集

  • Cluster分為三種類型
#LB:Load Balancing,負載均衡叢集,多個主機組成,每個主機隻承擔一部分通路請求

#HA:High Availiablity,高可用,避免SPOF(single Point Of failure)
 MTBF:Mean Time Between Failure 平均無故障時間,正常時間
 MTTR:Mean Time To Restoration( repair)平均恢複前時間,故障時間
 A = MTBF /(MTBF+MTTR) (0,1):99%,99.5%,99.9%,99.99%,99.999%

SLA:服務等級協定(簡稱:SLA,全稱:service level agreement)。是在一定開銷下為保障服
務的性能和可用性,服務提供商與使用者間定義的一種雙方認可的協定。通常這個開銷是驅動提供服
務品質的主要因素。在正常的領域中,總是設定所謂的三個9,四個9來進行表示,當沒有達到這
種水準的時候,就會有一些列的懲罰措施,而運維,最主要的目标就是達成這種服務水準。           

分布式存儲

分布式存儲: Ceph,GlusterFS,FastDFS,MogileFS
 分布式計算:hadoop,Spark
分布式常見應用
分布式應用-服務按照功能拆分,使用微服務
分布式靜态資源--靜态資源放在不同的存儲叢集上
分布式資料和存儲--使用key-value緩存系統
分布式計算--對特殊業務使用分布式計算,比如Hadoop叢集           

叢集和分布式

叢集:同一個業務系統,部署在多台伺服器上。叢集中,每一台伺服器實作的功能沒有差别,資料和代
碼都是一樣的
分布式:一個業務被拆成多個子業務,或者本身就是不同的業務,部署在多台伺服器上。分布式中,每
一台伺服器實作的功能是有差别的,資料和代碼也是不一樣的,分布式每台伺服器功能加起來,才是完
整的業務
分布式是以縮短單個任務的執行時間來提升效率的,而叢集則是通過提高機關時間内執行的任務數來提
升效率。
對于大型網站,通路使用者很多,實作一個群集,在前面部署一個負載均衡伺服器,後面幾台伺服器完成
同一業務。如果有使用者進行相應業務通路時,負載均衡器根據後端哪台伺服器的負載情況,決定由給哪
一台去完成響應,并且一台伺服器垮了,其它的伺服器可以頂上來。分布式的每一個節點,都完成不同
的業務,如果一個節點垮了,那這個業務可能就會失敗           

叢集設計原則

可擴充性—叢集的橫向擴充能力

可用性—無故障時間 (SLA service level agreement)

性能—通路響應時間

容量—機關時間内的最大并發吞吐量(C10K 并發問題)

LVS工作原理

VS根據請求封包的目标IP和目标協定及端口将其排程轉發至某RS,根據排程算法來挑選RS。LVS是核心

級功能,工作在INPUT鍊的位置,将發往INPUT的流量進行“處理”

LVS叢集類型中的術語

VS:Virtual Server,Director Server(DS), Dispatcher(排程器),Load Balancer  #虛拟伺服器
RS:Real Server(lvs), upstream server(nginx), backend server(haproxy) #真正提供服務的
CIP:Client IP              #客服端的IP
VIP:Virtual serve IP       #VS外網的IP
DIP:Director IP            #VS内網的IP
RIP:Real server IP         #RS1 RS2的IP
通路流程:CIP <--> VIP == DIP <--> RIP           

NAT 模型 (多端口的DNAT)

隻是替換目标位址。多目标的DNAT 應答包要原路傳回

lvslvs分布式存儲叢集和分布式LVS工作原理LVS叢集類型中的術語
lvslvs分布式存儲叢集和分布式LVS工作原理LVS叢集類型中的術語

LVS的工作模式:

lvslvs分布式存儲叢集和分布式LVS工作原理LVS叢集類型中的術語
lvslvs分布式存儲叢集和分布式LVS工作原理LVS叢集類型中的術語
lvslvs分布式存儲叢集和分布式LVS工作原理LVS叢集類型中的術語
lvslvs分布式存儲叢集和分布式LVS工作原理LVS叢集類型中的術語

LVS 和 DNAT的差別就是 DNAT隻能是一對一的轉發 ,但是LVS 可以是一對多了模式。将目标位址替換

LVS伺服器和後端的伺服器能否是路由器: 也可以,但是路由器的吞吐量沒有交換機的吞吐量大

後端的伺服器可以是Windows伺服器,也可以是Linux伺服器 ,但是LVS伺服器卻隻能是Linux伺服器

瓶頸:LVS伺服器一個抗下了所有的。LVS核心裡面性能好

lvslvs分布式存儲叢集和分布式LVS工作原理LVS叢集類型中的術語
lvslvs分布式存儲叢集和分布式LVS工作原理LVS叢集類型中的術語

DR (直接路由)模型

lvslvs分布式存儲叢集和分布式LVS工作原理LVS叢集類型中的術語
lvslvs分布式存儲叢集和分布式LVS工作原理LVS叢集類型中的術語

客服端的發送被調到後端的伺服器,後端的伺服器直接的傳回到客服端,而不經過LVS伺服器

DR模型相當于NAT模型就是傳回的時候是直接原路傳回的,而不經過LVS伺服器

免費ARP :發送ARP廣播擷取IP位址
ARP解決MAC和IP之間的關系
為了避免免費的ARP 。不向外公布自己有這個IP 發來的封包不回複           

1. 保證發送的資料包隻到LVS而不是到 RS1 和RS2

優點:不是原路傳回的,減少了LVS伺服器的壓力

lvslvs分布式存儲叢集和分布式LVS工作原理LVS叢集類型中的術語
lvslvs分布式存儲叢集和分布式LVS工作原理LVS叢集類型中的術語
lvslvs分布式存儲叢集和分布式LVS工作原理LVS叢集類型中的術語
lvslvs分布式存儲叢集和分布式LVS工作原理LVS叢集類型中的術語
lvslvs分布式存儲叢集和分布式LVS工作原理LVS叢集類型中的術語
lvslvs分布式存儲叢集和分布式LVS工作原理LVS叢集類型中的術語
lvslvs分布式存儲叢集和分布式LVS工作原理LVS叢集類型中的術語
lvslvs分布式存儲叢集和分布式LVS工作原理LVS叢集類型中的術語

核心參數

[root@localhost ~]# cat /proc/sys/net/ipv4/conf/eth0/arp_announce  #不公告
0 
[root@localhost ~]# cat /proc/sys/net/ipv4/conf/eth0/arp_ignore    #不應當
0           

TUN 模式(LVS伺服器和後端伺服器可以跨網段)

優點就是LVS伺服器和後端的 伺服器可能會隔得很遠都可以,也是傳回無需經過LVS伺服器

lvslvs分布式存儲叢集和分布式LVS工作原理LVS叢集類型中的術語
lvslvs分布式存儲叢集和分布式LVS工作原理LVS叢集類型中的術語

FULL NAT 模式 (完全NAT)

NAT模型就隻是将目标的位址替換 FULL NAT 将目标和源位址都替換了

阿裡内部用,要編譯核心再用

lvslvs分布式存儲叢集和分布式LVS工作原理LVS叢集類型中的術語
lvslvs分布式存儲叢集和分布式LVS工作原理LVS叢集類型中的術語

LVS工作模式的總結和比較

lvslvs分布式存儲叢集和分布式LVS工作原理LVS叢集類型中的術語
lvslvs分布式存儲叢集和分布式LVS工作原理LVS叢集類型中的術語
vs-nat與lvs-fullnat:

請求和響應封包都經由Director

lvs-nat:RIP的網關要指向DIP

lvs-fullnat:RIP和DIP未必在同一IP網絡,但要能通信

lvs-dr與lvs-tun:

請求封包要經由Director,但響應封包由RS直接發往Client

lvs-dr:通過封裝新的MAC首部實作,通過MAC網絡轉發

lvs-tun:通過在原IP封包外封裝新IP頭實作轉發,支援遠距離通信           

LVS排程算法

分為兩種:靜态方法和動态方法

靜态方法

僅根據算法本身進行排程

1、RR:roundrobin,輪詢,平均的配置設定

2、WRR:Weighted RR,權重輪詢

3、SH(源位址hash):Source Hashing,實作session sticky,源IP位址hash;将來自于同一個IP位址的請求始終發

往第一次挑中的RS,進而實作會話綁定

4、DH(目标位址hash):Destination Hashing;目标位址哈希,第一次輪詢排程至RS,後續将發往同一個目标位址的

請求始終轉發至第一次挑中的RS,典型使用場景是正向代理緩存場景中的負載均衡,如:寬帶營運商

動态方法

主要根據每RS目前的負載狀态及排程算法進行排程Overhead=value 較小的RS将被排程

1、LC:least connections 适用于長連接配接應用

負擔輕的就多給一對

Overhead=activeconns*256+inactiveconns           

2、WLC:Weighted LC,預設排程方法

Overhead=(activeconns*256+inactiveconns)/weight           

3、SED:Shortest Expection Delay,初始連接配接高權重優先

Overhead=(activeconns+1)*256/weight           

4、NQ:Never Queue,第一輪均勻配置設定,後續SED

5、LBLC:Locality-Based LC,動态的DH(目标位址hash)算法,使用場景:根據負載狀态實作正向代理

6、LBLCR:LBLC with Replication,帶複制功能的LBLC,解決LBLC負載不均衡問題,從負載重的複制

到負載輕的RS

核心版本 4.15 版本後新增排程算法:FO和OVF

FO(Weighted Fail Over)排程算法,在此FO算法中,周遊虛拟服務所關聯的真實伺服器連結清單,找到還

未過載(未設定IP_VS_DEST_F_OVERLOAD标志)的且權重最高的真實伺服器,進行排程

OVF(Overflow-connection)排程算法,基于真實伺服器的活動連接配接數量和權重值實作。将新連接配接調

度到權重值最高的真實伺服器,直到其活動連接配接數量超過權重值,之後排程到下一個權重值最高的真實

伺服器,在此OVF算法中,周遊虛拟服務相關聯的真實伺服器連結清單,找到權重值最高的可用真實伺服器。

一個可用的真實伺服器需要同時滿足以下條件:

未過載(未設定IP_VS_DEST_F_OVERLOAD标志)

真實伺服器目前的活動連接配接數量小于其權重值

其權重值不為零

ipvsadm

[root@C8-108]#yum install ipvsadm -y

[root@C8-108]#rpm -ql  ipvsadm 
/etc/sysconfig/ipvsadm-config
/usr/lib/.build-id
/usr/lib/.build-id/e9
/usr/lib/.build-id/e9/2e0bac9713532c12e56e8290b695eafc6ffb50
/usr/lib/systemd/system/ipvsadm.service
/usr/sbin/ipvsadm
/usr/sbin/ipvsadm-restore
/usr/sbin/ipvsadm-save
/usr/share/doc/ipvsadm
/usr/share/doc/ipvsadm/MAINTAINERS
/usr/share/doc/ipvsadm/README
/usr/share/man/man8/ipvsadm-restore.8.gz
/usr/share/man/man8/ipvsadm-save.8.gz
/usr/share/man/man8/ipvsadm.8.gz

程式包:ipvsadm
Unit File: ipvsadm.service
主程式:/usr/sbin/ipvsadm
規則儲存工具:/usr/sbin/ipvsadm-save
規則重載工具:/usr/sbin/ipvsadm-restore
配置檔案:/etc/sysconfig/ipvsadm-config
ipvs排程規則檔案:/etc/sysconfig/ipvsadm
           

ipvsadm 指令

ipvsadm核心功能:

叢集服務管理:增、删、改

Overhead=activeconns*256+inactiveconns

Overhead=(activeconns*256+inactiveconns)/weight

Overhead=(activeconns+1)*256/weight叢集服務的RS管理:增、删、改

ipvsadm 工具用法:

#管理叢集服務
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] 
[--pe persistence_engine] [-b sched-flags]
ipvsadm -D -t|u|f service-address #删除
ipvsadm –C #清空
ipvsadm –R #重載,相當于ipvsadm-restore
ipvsadm -S [-n] #儲存,相當于ipvsadm-save
#管理叢集中的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
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f service-address]           
選項:
     lvs類型:
         -g: gateway, dr類型,預設
         -i: ipip, tun類型
         -m: masquerade, nat類型        
         -w weight:權重           

#安裝包
[root@C8-108]#yum install ipvsadm -y

#lvs 伺服器檢視
[root@C8-108]#ipvsadm -Ln    # n 寫在後面
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

 #lvs 伺服器設定輪詢
[root@C8-108]#ipvsadm -A -t 192.168.200.129:80 -s rr     #rr表示輪詢
[root@C8-108]#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.200.129:80 rr

#lvs 伺服器管理後端的RS 
[root@C8-108]#ipvsadm -a -t 192.168.200.129:80 -r 10.0.0.37 -m
[root@C8-108]#ipvsadm -a -t 192.168.200.129:80 -r 10.0.0.107 -m -w 3
[root@C8-108]#

#測試輪詢
[root@c7-17 ~]# while true;do curl http://192.168.200.129;sleep 1;done
10.0.0.37 
10.0.0.107 
10.0.0.37 
10.0.0.107 
10.0.0.37 
10.0.0.107 
10.0.0.37 

#修改排程算法為  wrr
[root@C8-108]#ipvsadm -E -t 192.168.200.129:80 -s wrr 
[root@C8-108]#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.200.129:80 wrr
  -> 10.0.0.37:80                 Masq    1      0          0         
  -> 10.0.0.107:80                Masq    3      0          0    #帶權重了

#測試  帶權重以後是3比1 
[root@c7-17 ~]# while true;do curl http://192.168.200.129;sleep 1;done
10.0.0.107 
10.0.0.107 
10.0.0.107 
10.0.0.37 
10.0.0.107 
10.0.0.107 
10.0.0.107 
10.0.0.37 

#源位址雜湊演算法
[root@C8-108]#ipvsadm -E -t 192.168.200.129:80 -s sh
[root@C8-108]#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.200.129:80 sh
  -> 10.0.0.37:80                 Masq    1      0          0         
  -> 10.0.0.107:80                Masq    3      0          3      
[root@c7-17 ~]# while true;do curl http://192.168.200.129;sleep 1;done
10.0.0.107 
10.0.0.107 
10.0.0.107 
10.0.0.107 
10.0.0.107 
10.0.0.107 
10.0.0.107 
10.0.0.107 
10.0.0.107 
10.0.0.107 
           

儲存

[root@C8-108]#cat /usr/lib/systemd/system/ipvsadm.service 
[Unit]
Description=Initialise the Linux Virtual Server
After=syslog.target network.target

[Service]
Type=oneshot
ExecStart=/bin/bash -c "exec /sbin/ipvsadm-restore < /etc/sysconfig/ipvsadm"
ExecStop=/bin/bash -c "exec /sbin/ipvsadm-save -n > /etc/sysconfig/ipvsadm"
ExecStop=/sbin/ipvsadm -C
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

[root@C8-108]#systemctl status ipvsadm
● ipvsadm.service - Initialise the Linux Virtual Server
   Loaded: loaded (/usr/lib/systemd/system/ipvsadm.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
   [root@C8-108]#systemctl start ipvsadm   #無法啟動服務
Job for ipvsadm.service failed because the control process exited with error code.
See "systemctl status ipvsadm.service" and "journalctl -xe" for details.
[root@C8-108]#systemctl status  ipvsadm
● ipvsadm.service - Initialise the Linux Virtual Server
   Loaded: loaded (/usr/lib/systemd/system/ipvsadm.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Mon 2021-07-05 21:19:08 CST; 32s ago
  Process: 1719 ExecStart=/bin/bash -c exec /sbin/ipvsadm-restore < /etc/sysconfig/ipvsadm (code=exited,>
 Main PID: 1719 (code=exited, status=1/FAILURE)

Jul 05 21:19:08 C8-108 systemd[1]: Starting Initialise the Linux Virtual Server...
Jul 05 21:19:08 C8-108 bash[1719]: /bin/bash: /etc/sysconfig/ipvsadm: No such file or directory #報錯缺少檔案
Jul 05 21:19:08 C8-108 systemd[1]: ipvsadm.service: Main process exited, code=exited, status=1/FAILURE
Jul 05 21:19:08 C8-108 systemd[1]: ipvsadm.service: Failed with result 'exit-code'.
Jul 05 21:19:08 C8-108 systemd[1]: Failed to start Initialise the Linux Virtual Server.

#将規則重定向到該檔案重新開機成功
[root@C8-108]#ipvsadm-save -n > /etc/sysconfig/ipvsadm

#重新開機服務儲存了
[root@C8-108]#systemctl restart ipvsadm
[root@C8-108]#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.200.129:80 sh
  -> 10.0.0.37:80                 Masq    1      0          0         
  -> 10.0.0.107:80                Masq    3      0          0    

  lvs 無法做到後端伺服器的健康檢查

[root@C8-108]#ipvsadm -E -t 192.168.200.129:80 -s rr  #修改為輪詢以後關閉服務服務配置檔案自動修改
[root@C8-108]#systemctl stop  ipvsadm
[root@C8-108]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@C8-108]#cat /etc/sysconfig/ipvsadm
-A -t 192.168.200.129:80 -s rr     #自動修改了
-a -t 192.168.200.129:80 -r 10.0.0.37:80 -m -w 1
-a -t 192.168.200.129:80 -r 10.0.0.107:80 -m -w 3
[root@C8-108]#systemctl restart  ipvsadm
[root@C8-108]#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.200.129:80 rr
  -> 10.0.0.37:80                 Masq    1      0          1         
  -> 10.0.0.107:80                Masq    3      0          1         
[root@C8-108]#
           

端口号

#修改配置檔案的端口号
[root@C8-108]#vim /etc/sysconfig/ipvsadm

-A -t 192.168.200.129:80 -s rr
-a -t 192.168.200.129:80 -r 10.0.0.37:8080 -m -w 1  #後端服務端端口号發生變化
-a -t 192.168.200.129:80 -r 10.0.0.107:80 -m -w 3

[root@C8-108]#ipvsadm-restore </etc/sysconfig/ipvsadm
[root@C8-108]#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.200.129:80 rr
  -> 10.0.0.37:8080               Masq    1      0          5         
  -> 10.0.0.107:80                Masq    3      0          5  
           

DR 模型

#lvs伺服器
[root@c7-47]#ifconfig lo:1 10.0.0.100/32
[root@c7-47]#ipvsadm -A -t 10.0.0.100:80 -s rr     # -rr 輪詢
[root@c7-47]#ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.37:80 -g   
[root@c7-47]#ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.107:80 -g
[root@c7-47]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.100:80 rr
  -> 10.0.0.37:80                  Route   1      0          0         
  -> 10.0.0.107:80                 Route   1      0          0         
[root@c7-47]#

#兩台 RS伺服器的設定
[root@c7-107 ~]# echo 1 >   /proc/sys/net/ipv4/conf/all/arp_ignore      #忽略IP
[root@c7-107 ~]# echo 2 >   /proc/sys/net/ipv4/conf/all/arp_announce    #不開自己有IP
[root@c7-107 ~]# echo 1 >   /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@c7-107 ~]# echo 2 >   /proc/sys/net/ipv4/conf/lo/arp_announce
[root@c7-107 ~]# ifconfig lo:1 10.0.0.100/32
或者永久修改配置檔案
[root@c7-107 ~]# vim  /etc/sysctl.conf
[root@c7-107 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2

[root@c7-37 ~]#echo 1 >   /proc/sys/net/ipv4/conf/all/arp_ignore
[root@c7-37 ~]#echo 1 >   /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@c7-37 ~]#echo 2 >   /proc/sys/net/ipv4/conf/all/arp_announce
[root@c7-37 ~]#echo 2 >   /proc/sys/net/ipv4/conf/lo/arp_announce
[root@c7-37 ~]#ifconfig lo:1 10.0.0.100/32
或者永久修改配置檔案
[root@c7-37 ~]#vim /etc/sysctl.conf 
[root@c7-37 ~]#sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
[root@c7-37 ~]#ifconfig lo:1 10.0.0.100/32

#測試
[root@c7-17 ~]# while true;do curl 10.0.0.100;sleep 1;done
10.0.0.107 
10.0.0.37 
10.0.0.107 
10.0.0.37 
10.0.0.107 
10.0.0.37 
10.0.0.107 
10.0.0.37 

#日志
[root@c7-107 ~]# tailf /var/log/httpd/access_log -n0
192.168.200.17 - - [06/Jul/2021:16:07:13 +0800] "GET / HTTP/1.1" 200 12 "-" "curl/7.29.0"
192.168.200.17 - - [06/Jul/2021:16:07:14 +0800] "GET / HTTP/1.1" 200 12 "-" "curl/7.29.0"
192.168.200.17 - - [06/Jul/2021:16:07:15 +0800] "GET / HTTP/1.1" 200 12 "-" "curl/7.29.0"
192.168.200.17 - - [06/Jul/2021:16:07:16 +0800] "GET / HTTP/1.1" 200 12 "-" "curl/7.29.0"
192.168.200.17 - - [06/Jul/2021:16:07:17 +0800] "GET / HTTP/1.1" 200 12 "-" "curl/7.29.0"           

跨網段的DR模型

#路由器添加IP 
[root@C8-108]#nmcli connection modify eth0 +ipv4.addresses 172.16.0.200/24  #添加IP
[root@C8-108]#nmcli conn reload
[root@C8-108]#nmcli conn up eth0
[root@C8-108]#hostname -I
10.0.0.108 172.16.0.200 192.168.200.129 

[root@c7-37 ~]#ifconfig  lo:1 down

#清除規則:-C 
[root@c7-47]#ipvsadm -C
[root@c7-47]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

#後端伺服器的配置
[root@c7-107 ~]# cat RS_DR.sh 
#!/bin/bash
vip=172.16.0.100
mask='255.255.255.255'
dev=lo:1
rpm -q httpd &> /dev/null || yum -y install httpd &>/dev/null
service httpd start &> /dev/null && echo "The httpd Server is Ready!"
echo "`hostname -I`" > /var/www/html/index.html
case $1 in
start)
    echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
    echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
    ifconfig $dev $vip netmask $mask #broadcast $vip up
    echo "The RS Server is Ready!"
    ;;
stop)
    ifconfig $dev down
    echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
    echo "The RS Server is Canceled!"
    ;;
*)
    echo "Usage: $(basename $0) start|stop"
    exit 1
    ;;
esac

#lvs 伺服器的配置
[root@c7-47]#cat  lvs.sh 
vip='172.16.0.100'
iface='lo:1'
mask='255.255.255.255'
port='80'
rs1='10.0.0.107'
rs2='10.0.0.37'
scheduler='wrr'
type='-g'
rpm -q ipvsadm &> /dev/null || yum -y install ipvsadm &> /dev/null
case $1 in
start)
    ifconfig $iface $vip netmask $mask #broadcast $vip up
    iptables -F
    ipvsadm -A -t ${vip}:${port} -s $scheduler
    ipvsadm -a -t ${vip}:${port} -r ${rs1} $type -w 1
    ipvsadm -a -t ${vip}:${port} -r ${rs2} $type -w 1
    echo "The VS Server is Ready!"
    ;;
stop)
    ipvsadm -C
    ifconfig $iface down
    echo "The VS Server is Canceled!"
    ;;
*)
    echo "Usage: $(basename $0) start|stop"
    exit 1
    ;;
esac

#測試
[root@c7-17 ~]# while true;do curl 172.16.0.100;sleep 1;done
10.0.0.37 
10.0.0.107 
10.0.0.37 
10.0.0.107 
10.0.0.37 
10.0.0.107 
10.0.0.37 
10.0.0.107 
10.0.0.37 
10.0.0.107 
10.0.0.37 

[root@c7-17 ~]# curl http://172.16.0.100
10.0.0.107 
[root@c7-17 ~]# curl http://172.16.0.100
10.0.0.37 
[root@c7-17 ~]# curl -k  https://172.16.0.100
10.0.0.107 
[root@c7-17 ~]# curl -k  https://172.16.0.100
10.0.0.37 
           

防火牆标簽

[root@c7-47]#iptables -t mangle -A PREROUTING -d 172.16.0.100 -p tcp -m multiport --dport 80,443 -j MARK 
 --set-mark 10
[root@c7-47]#ipvsadm -C
[root@c7-47]#ipvsadm -A -f 10 -s rr
[root@c7-47]#ipvsadm -a -f 10 -r 10.0.0.37 -g
[root@c7-47]#ipvsadm -a -f 10 -r 10.0.0.107 -g
[root@c7-47]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
FWM  10 rr
  -> 10.0.0.37:0                  Route   1      0          0         
  -> 10.0.0.107:0                 Route   1      0          0         

[root@c7-17 ~]# curl -k  https://172.16.0.100;curl http://172.16.0.100
10.0.0.37 
10.0.0.107 
[root@c7-17 ~]# curl -k  https://172.16.0.100;curl http://172.16.0.100
10.0.0.37 
10.0.0.107 

[root@c7-47]#ipvsadm -E -f 10 -p   預設是360秒  
[root@c7-47]#ipvsadm -E -f 10 -p 1000   #設定為1000
[root@c7-47]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
FWM  10 wlc persistent 1000
  -> 10.0.0.37:0                  Route   1      0          0         
  -> 10.0.0.107:0                 Route   1      0          0
[root@c7-47]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
FWM  10 wlc persistent 360
  -> 10.0.0.37:0                  Route   1      0          0         
  -> 10.0.0.107:0                 Route   1      0          4     

[root@c7-17 ~]# curl -k  https://172.16.0.100;curl http://172.16.0.100
10.0.0.107 
10.0.0.107 
[root@c7-47]#ipvsadm -Lnc
IPVS connection entries
pro expire state       source             virtual            destination
IP  01:15  NONE        192.168.200.17:0   0.0.0.10:0         10.0.0.107:0           
lvs
上一篇: lvs
下一篇: LVS