Lvs+keepAlived實現負載均衡高可用集群(DR實現)

来源:http://www.cnblogs.com/bananaaa/archive/2017/11/30/7929796.html
-Advertisement-
Play Games

第1章 LVS 簡介 1.1 LVS介紹 LVS是Linux Virtual Server的簡寫,意為Linux虛擬伺服器,是虛擬的伺服器集群系統,可在UNIX/LINUX平臺下實現負載均衡集群功能。該項目在1998年5月由章文嵩博士組織成立,是國內最早出現的自由軟體項目之一 官網:http://w ...


第1章 LVS 簡介

1.1 LVS介紹

LVS是Linux Virtual Server的簡寫,意為Linux虛擬伺服器,是虛擬的伺服器集群系統,可在UNIX/LINUX平臺下實現負載均衡集群功能。該項目在1998年5月由章文嵩博士組織成立,是國內最早出現的自由軟體項目之一

官網:http://www.linuxvirtualserver.org/index.html

中文資料:
LVS項目介紹          http://www.linuxvirtualserver.org/zh/lvs1.html
LVS集群的體繫結構    http://www.linuxvirtualserver.org/zh/lvs2.html
LVS集群中的IP負載均衡技術    http://www.linuxvirtualserver.org/zh/lvs3.html
LVS集群的負載調度    http://www.linuxvirtualserver.org/zh/lvs4.html

簡單一句話,當併發超過了Nginx上限,就可以使用LVS了。
日1000-2000W PV或併發請求1萬以下都可以考慮用Nginx。
大型門戶網站,電商網站需要用到LVS。

1.1.1 LVS內核模塊ip_vs介紹

早在2.2內核時,IPVS就已經以內核補丁的形式出現

從2.4.23版本開始,IPVS軟體就合併到Linux內核常用版本的內核補丁的集合

從2.4.24以後IPVS已經成為Linux官方標準內核的一部分

 

 

 

 

 

說明:

LVS無需安裝

安裝的是管理工具,第一種叫ipvsadm,第二種叫keepalive

ipvsadm是通過命令行管理,而keepalive讀取配置文件管理

後面我們會用Shell腳本實現keepalive的功能

 

第2章 LVS集群搭建

2.1 環境準備

主機名

主機IP

備註

lb03

10.0.0.15

01.Cent0S7.4系統,記憶體512M

02.防火牆firewall和Selinux關閉

03.web03和web04只安裝Nginx軟體,並滿足

curl http://10.0.0.17/頁尾得到結果為web03

curl http://10.0.0.18/頁尾得到結果為web04

lb04

10.0.0.16

web03

10.0.0.17

web04

10.0.0.18

 

2.1 安裝ipvsadm管理工具

 1 lsmod |grep ip_vs #查看系統的LVS模塊->預設沒有載入模塊,需安裝管理工具才會激活 2 yum -y install ipvsadm 

查看當前LVS狀態,順便激活LVS內核模塊

1 [root@lb03 ~]# ipvsadm -ln
2 IP Virtual Server version 1.2.1 (size=4096)
3 Prot LocalAddress:Port Scheduler Flags
4   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
5 [root@lb03 ~]# lsmod|grep ip_vs
6 ip_vs                 141092  0
7 nf_conntrack          133387  1 ip_vs
8 libcrc32c              12644  3 xfs,ip_vs,nf_conntrack

註意ipvsadm -ln作用:健康檢查,即當某台web伺服器出現問題時LVS將自動踢出;等恢復後再添加進來

 

2.1.1 ①在eth0網卡綁定VIP地址(高可用)

 1 ip addr add 10.0.0.13/24 dev eth0 #lb服務的IP地址可擴展性較差,故使用VIP地址(刪除del;顯示show) 

2.1.2 ②清除當前所有LVS規則

 1 ipvsadm -C 

2.1.3 ③設置tcp、tcpfin、udp鏈接超時時間(s)

 1 ipvsadm --set 30 5 60 #控制瀏覽器與lb01的超時時間 

2.1.4 ④添加虛擬服務,調度演算法見man ipvsadm

 1 ipvsadm -A -t 10.0.0.13:80 -s wrr -p 20 2 3 #LVS預設無80埠,需另外添加新的虛擬IP記錄->控制lb01與web01、web02的超時時間 

2.1.5 ⑤將虛擬服務關聯到真實服務上

1 ipvsadm -a -t 10.0.0.13:80 -r 10.0.0.17:80 -g -w 1
2 
3 ipvsadm -a -t 10.0.0.13:80 -r 10.0.0.18:80 -g -w 1

2.1.6 ⑥查看配置結果

1 [root@lb03 ~]# ipvsadm -ln
2 IP Virtual Server version 1.2.1 (size=4096)   #LVS版本號
3 Prot LocalAddress:Port Scheduler Flags     #協議(TCP)本地IP:埠 調度演算法 標誌(持續時間20s)
4   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
5     #後端節點IP:埠          工作模式 權重 已建立連接 正在連接
6 TCP  10.0.0.3:80 wrr persistent 20
7   -> 10.0.0.17:80                 Route   1      0          0
8   -> 10.0.0.18:80                 Route   1      0          0

2.2 web伺服器配置

2.2.1 Ⅰ.在lo網卡綁定VIP地址

 1 ip addr add 10.0.0.13/32 dev lo 

2.2.2 Ⅱ.修改內核參數抑制ARP響應

1 cat >>/etc/sysctl.conf<<EOF   #其目的是為了讓rs順利發送mac地址給客戶端
2 net.ipv4.conf.all.arp_ignore = 1
3 net.ipv4.conf.all.arp_announce = 2
4 net.ipv4.conf.lo.arp_ignore = 1
5 net.ipv4.conf.lo.arp_announce = 2
6 EOF
7 
8 sysctl -p

查看結果

 1 [root@lb03 ~]# ip a s eth0
 2 eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
 3  link/ether 00:50:56:3b:cb:36 brd ff:ff:ff:ff:ff:ff
 4  inet 10.0.0.13/24 scope global secondary eth0
 5     valid_lft forever preferred_lft forever
 6 [root@web03 ~]# ip a s lo
 7 lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
 8  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 9 inet 10.0.0.13/32 scope global lo
10     valid_lft forever preferred_lft forever

2.2.3 Ⅲ.web瀏覽器測試

 1 http://10.0.0.13/ 

說明:當lb伺服器斷開連接後VIP會自動消失,重新連接後需再次添加VIP

2.2.4 Ⅳ. arp解析查看

1 [root@lb04 ~]# arp -n
2 Address                  HWtype  HWaddress           Flags Mask            Iface
3 10.0.0.254               ether   00:50:56:e9:9f:2c   C                     eth0
4 10.0.0.18                ether   00:0c:29:ea:ca:55   C                     eth0
5 10.0.0.13                ether   00:0c:29:de:7c:97   C                     eth0
6 172.16.1.15              ether   00:0c:29:de:7c:a1   C                     eth1
7 10.0.0.17                ether   00:0c:29:4a:ac:4a   C                     eth0

至此,LVS集群配置完畢

註意:所有有訪問的返回值都是10.0.0.3

lvs與nginx的不同就在於17和18並不通過IP地址訪問,而是通過mac地址訪問

至此,LVS集群配置完畢

2.2.4.1 存疑問題:使用抓包工具發現通信的是windows IP和lb03的80埠,但lb03沒有80埠?

lvs通過mac地址訪問時,訪問10.0.0.3就是訪問lb01

10.0.0.3的數據包mac地址的返回值就是訪問web03

2.3 ARP協議

2.3.1 arp詳解

01.ARP協議,全稱"Address Resolut ion Protocol",中文名是地址解析協議,使用ARP協議可實現通過IP地址獲得對應主機的物理地址(MAC地址)

 ARP協議要求通信的主機雙方必須在同一個物理網段(即區域網環境)!

02.為了提高IP轉換MAC的效率,系統會將解析結果保存下來,這個結果叫做ARP緩存

1 arp-a   #Windows查看ARP緩存命令
2 arp-n   #Linux查看ARP緩存命令
3 arping -c 1 -I eth0 10.0.0.6
4 #Linux解析IP對應的MAC地址[-c指定超時的ARP數據包數量;-I指定使用哪個網路介面]

ARP緩存表是把雙刃劍

 ①主機有了arp緩存表,可以加快ARP的解析速度,減少區域網內廣播風暴。因為arp是發廣播解析的,頻繁的解析也是消耗帶寬的(尤其是機器多的時候) ②正是有了arp緩存表,給惡意黑客帶來了攻擊伺服器主機的風險,這個就是arp欺騙攻擊 ③切換路由器,負載均衡器等設備時,可能會導致短時網路中斷。因為所有的客戶端ARP緩存表未更新 

2.3.2 伺服器切換ARP問題

當lb01宕機,VIP地址遷移到lb02時需要通過arping命令通知所有網路內機器更新本地的ARP緩存表,從而使得客戶機訪問時重新廣播獲取MAC地址

ARP廣播進行新的地址解析

 1 arping -I eth0 -c 1 -U VIP 2 arping -I eth0 -c 1 -U 10.0.0.13 

測試ARP緩存切換(手動漂移VIP)

1 [root@lb03 ~]# ip addr del 10.0.0.13/24 dev eth0
2 [root@lb04 ~]# ip addr add 10.0.0.13/24 dev eth0
3 [root@lb04 ~]# arping -I eth0 -c 1 -U 10.0.0.13
4 ARPING 10.0.0.13 from 10.0.0.13 eth0
5 Sent 1 probes (1 broadcast(s))
6 Received 0 response(s)

windows查看arp -a

 1 [e:\~]$ arp -a 

2.3.3 LVS集群的工作模式

DR直接路由模式

NAT模式

FULLNAT

TUNNEL

 

第3章 Keepalive+LVS實現

3.1 安裝配置keepalive實例

3.1.1 ①在lb03和lb04上安裝keepalive

 1 yum install -y keepalived 

3.1.2 ②編輯keepalived.conf配置文件

 1 [root@lb03 ~]# cat /etc/keepalived/keepalived.conf
 2 global_defs {
 3    router_id LVS_01
 4 }
 5 
 6 vrrp_instance VI_1 {
 7     state MASTER
 8     interface eth0
 9     virtual_router_id 51
10     priority 150
11     advert_int 1
12     authentication {
13         auth_type PASS
14         auth_pass 1111
15     }
16     virtual_ipaddress {
17      10.0.0.13/24
18     }
19 }
20 
21 virtual_server 10.0.0.13 80 {
22     delay_loop 6              
23     lb_algo wrr                
24     lb_kind DR                
25     nat_mask 255.255.255.0
26     persistence_timeout 50     
27     protocol TCP                
28 
29     real_server 10.0.0.17 80 {
30         weight 1              
31         TCP_CHECK {
32         connect_timeout 8       
33         nb_get_retry 3
34         delay_before_retry 3
35         connect_port 80
36         }
37     }
38 
39     real_server 10.0.0.18 80 {
40         weight 1              
41         TCP_CHECK {
42         connect_timeout 8       
43         nb_get_retry 3
44         delay_before_retry 3
45         connect_port 80
46         }
47     }
48 }

 

3.1.3 ③開啟keepalived服務

 1 systemctl start keepalived.service 2 ip a #查看VIP,此時應漂移到lb04上

3.1.4 ④web03/web04同時操作以下步驟

 1 ip addr add 10.0.0.13/32 dev lo
 2 
 3 cat >>/etc/sysctl.conf<<EOF
 4 net.ipv4.conf.all.arp_ignore = 1
 5 net.ipv4.conf.all.arp_announce = 2
 6 net.ipv4.conf.lo.arp_ignore = 1
 7 net.ipv4.conf.lo.arp_announce = 2
 8 EOF
 9 
10 sysctl -p

 

註意:因為虛擬的ip重啟之後就會失效,故須加入開機啟動項rc.local文件並賦予其可執行許可權

3.1.5 ⑤keepalive健康檢查功能

模擬web03出現問題

3.1.5.1 查看lb03 lvs狀態

3.1.5.2 關閉web03

3.1.5.3 查看lb03狀態

如圖發現,web03被剔除

3.1.5.4 開啟web03

3.1.5.5 查看lvs狀態

web03恢復

以上是健康檢查功能

3.1.6 ⑥測試

 1 [root@lb04 ~]# curl 10.0.0.13 2 web03 3 [root@lb04 ~]# ipvsadm -ln  

3.2 常見LVS負載均衡高可用解決方案

01.開發類似keepalived的腳本,早期的辦法(不推薦)

02.heartbeat+lvs+ldirectord腳本配置方案,複雜不易控制(不推薦使用)

03.RedHat工具piranha,一個web界面配置LVS

04.LVS-DR+keepalived方案,推薦最優方案,簡單、易用、高效

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這篇主要講如何將數據保存回Mysql,但是裡面還會涉及到如何將錯誤信息以及提示信息保存到文件里,方便以後的運維,再有就是如何使用PHP寫進程BAT。 Redis數據刷回資料庫前的知識準備 首先針對上篇提到的關於redis刷回資料庫的安全性的設計模式,因為我們使用的是list來做數據索引,所以在我們將 ...
  • 註意要先關閉 selinux 和 防火牆 創建掛載點 mkdir /opt/gua 掛載光碟 mount /dev/cdrom /opt/gua/ 進入目錄 cd /opt/gua/CentOS/ 安裝samba服務 rpm -ivh samba-3.0.33-3.28.el5.i386.rpm - ...
  • 1.1 ISO/OSI 七層模型 筆記: 打入ipconfig: mac地址:Media Access Control 也是物理地址,這是由網卡決定的。負責的是內網,也就是區域網通信。 IPv4地址:是負責外網的,也就是公網通信。 埠是來確定你伺服器給的哪個服務的 1.2 Linux網路基礎之TC ...
  • 性能監測著重於電腦系統資源監測,是對系統進行預防性維護的必要工作,可通過分析監視數據來瞭解系統存在哪些瓶頸,應當採取何種措施來調整或更新受影響的資源, Linux系 統提供了多種性能監測工具來幫助管理員完成系統監控工作; 1》性能監測概述: 系統性能監測與調整是Linux系統管理員日常維護工作的一 ...
  • 1、Shell腳本運行方式 創建Shell腳本文件,一般以.sh結尾(如:example.sh) Shell腳本運行方式如下: 添加 ‘x’ 執行許可權(相對或絕對路徑執行) 使用bash或source(.)命令調用腳本文件 2、Bash的基本功能 (1)、歷史命令history -c:清空歷史命令 ...
  • 在開始搜索框輸入regedit打開註冊表,定位到HKEY_LOCAL_MACHINE SYSTEM ControlSet001 Control GraphicsDrivers Configuration 然後右鍵點擊Configuration,選擇查找,輸入Scaling,在右框內即可看到scali ...
  • 1.1 關於版本控制 1.1.1 本地版本控制 本地版本控制系統 許多人習慣用複製整個項目目錄的方式來保存不同的版本,或許還會改名加上備份時間以示區別。這麼做唯一的 好處就是簡單,但是特別容易犯錯。有時候會混淆所在的工作目錄,一不小心會寫錯文件或者覆蓋意想外的文件。 1.1.2 集中化的版本控制系統 ...
  • 飛秋2013功能很強大,很多公司內部都在使用,是一款區域網內部使用軟體。因2013、2014、和2015不能同時相容使用,鑒於2013功能的完善,使用的用戶很多。 描述:每次重啟或者關閉飛秋後都無法保存修改後的名稱、分組、群設置… 解決方式: PS:無法保存原因:feiqiu的當前系統工作目錄設置在 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...