1. 程式人生 > 其它 >lvs+keepalived centos7

lvs+keepalived centos7

技術標籤:技術參考運維負載均衡centos

1.關閉防火牆

systemctl stop firewalld && systemctl disable firewalld

2.關閉selinux

vim /etc/sysconfig/selinux
修改
SELINUX=disabled

3.安裝keepalived等

yum -y install keepalived ipvsadm net-tools gcc gcc-c++ make popt-devel kernel-devel openssl-devel
#設定開機啟動
systemctl enable keepalived

4.修改keepalived.conf

vim /etc/keepalived/keepalived.conf

keepalived.conf 配置,注意修改ip和埠

! Configuration File for keepalived
global_defs {
   router_id lvs1  #router_id 機器標識,通常為hostname,但不一定非得是hostname。故障發生時,郵件通知會用到。
}
vrrp_instance VI_1 {            #vrrp例項定義部分
    state MASTER               #設定lvs的狀態,MASTER和BACKUP兩種,必須大寫,只能一個MASTER
interface ens33 #設定對外服務的介面 virtual_router_id 100 #設定虛擬路由標示,這個標示是一個數字,同一個vrrp例項使用唯一標示 priority 100 #定義優先順序,數字越大優先順序越高,在一個vrrp——instance下,master的優先順序必須大於backup advert_int 1 #設定master與backup負載均衡器之間同步檢查的時間間隔,單位是秒 authentication { #設定驗證型別和密碼
auth_type PASS #主要有PASS和AH兩種 auth_pass 1111 #驗證密碼,同一個vrrp_instance下MASTER和BACKUP密碼必須相同 } virtual_ipaddress { #設定虛擬ip地址,可以設定多個,每行一個 192.168.50.149 } } virtual_server 192.168.50.149 6443 { #設定虛擬伺服器,需要指定虛擬ip和服務埠 delay_loop 6 #健康檢查時間間隔 lb_algo wrr #負載均衡排程演算法 lb_kind DR #負載均衡轉發規則 persistence_timeout 50 #設定會話保持時間,對動態網頁非常有用 protocol TCP #指定轉發協議型別,有TCP和UDP兩種 real_server 192.168.50.121 6443 { #配置伺服器節點1,需要指定real server的真實IP地址和埠 weight 1 #設定權重,數字越大權重越高 TCP_CHECK { #realserver的狀態監測設定部分單位秒 connect_timeout 10 #連線超時為10秒 retry 3 #重連次數 delay_before_retry 3 #重試間隔 connect_port 6443 #連線埠為81,要和上面的保持一致 } } real_server 192.168.50.122 6443 { #配置伺服器節點1,需要指定real server的真實IP地址和埠 weight 1 #設定權重,數字越大權重越高 TCP_CHECK { #realserver的狀態監測設定部分單位秒 connect_timeout 10 #連線超時為10秒 retry 3 #重連次數 delay_before_retry 3 #重試間隔 connect_port 6443 #連線埠為81,要和上面的保持一致 } } }
# 啟動keepalived
systemctl start keepalived
#設定開機啟動
systemctl enable keepalived

5.修改成單播通訊,可選,根據實際需要

伺服器網路環境中,路由交換層禁用了ARP的廣播限制,造成了keepalived主備協議無法通過廣播的方式進行通訊,造成主備兩臺伺服器都強制佔用HAVIP地址,出現同時兩臺伺服器都有VIP地址的情況出現。必須通過配置來指定IP的兩臺伺服器間進行通

priority 100
unicast_src_ip  192.168.2.192    #本機實際IP
unicast_peer {
         192.168.2.191         #對端實際IP
}

6.DR模式後端主機執行指令碼,兩個選擇一個

1.第一個方法

vim /etc/rc.d/init.d/realserver.sh 

#!/bin/bash
#chkconfig: 345 88 14
    in=${1:-start}
    SNS_VIP=192.168.50.149
    echo $in
    #source /etc/rc.d/init.d/functions
    case "$in" in
    start)
        ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
        /sbin/route add -host $SNS_VIP dev lo:0
        echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
        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"
        ;;
    stop)
        ifconfig lo:0 down
        route del $SNS_VIP >/dev/null 2>&1
        echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
        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"
        ;;
    *)
        echo "Usage: $0 {start|stop}"
        exit 1
    esac
    exit 0
    
chmod u+x /etc/rc.d/init.d/realserver.sh 
chkconfig --add realserver.sh
chkconfig realserver.sh on
service realserver start


2.第二個方法,這個沒有除錯

vim /etc/bin/realserver.sh

#!/bin/bash
#chkconfig: 345 88 14
vip=192.168.50.149
ifconfig  lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
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 /etc/bin/realserver.sh >> /etc/rc.local
chmod u+x /etc/bin/realserver.sh
bash /etc/bin/realserver.sh


ip a  # 檢視lo可以看到一下資訊
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.50.149/32 brd 192.168.50.149 scope global lo:0
       valid_lft forever preferred_lft forever

6.檢查

ip a #檢視虛擬ip
#檢視後端狀態,在本地或者瀏覽器測試訪問檢視是否能檢視流量狀態
ipvsadm -ln  
ipvsadm -ln --stats
ipvsadm -lnc
# 注意netstat -lntp 是看不到開放埠的;

#關閉第一臺伺服器,看ip是否漂移,是否能正常訪問;

7.記錄日誌,可選

1、修改/etc/sysconfig/keepalived日誌儲存路徑

`sed -i s/KEEPALIVED_OPTIONS=\``"-D"``/KEEPALIVED_OPTIONS=\``"-D -d -S 0"``/gp /etc/sysconfig/keepalived`

2、新增rsyslog記錄日誌存放位置

`echo ``"local0.*         /var/log/keepalived.log"` `>>/etc/rsyslog.conf`

3、重啟rsyslog日誌服務和keepalived服務

`systemctl restart rsyslog && systemctl restart keepalived.service`

4、檢查日誌檔案是否存在和記錄日誌

`ls /``var``/log/keepalive.log``tail -3 /``var``/log/keepalive.log`

8.說明

LVS相關術語

  1. DS:Director Server。指的是前端負載均衡器節點。
  2. RS:Real Server。後端真實的工作伺服器。
  3. VIP:向外部直接面向用戶請求,作為使用者請求的目標的IP地址。
  4. DIP:Director Server IP,主要用於和內部主機通訊的IP地址。
  5. RIP:Real Server IP,後端伺服器的IP地址。
  6. CIP:Client IP,訪問客戶端的IP地址

LVS的八種排程演算法

  1. 輪叫排程 rr
    這種演算法是最簡單的,就是按依次迴圈的方式將請求排程到不同的伺服器上,該演算法最大的特點就是簡單。輪詢演算法假設所有的伺服器處理請求的能力都是一樣的,排程器會將所有的請求平均分配給每個真實伺服器,不管後端 RS 配置和處理能力,非常均衡地分發下去。

  2. 加權輪叫 wrr
    這種演算法比 rr 的演算法多了一個權重的概念,可以給 RS 設定權重,權重越高,那麼分發的請求數越多,權重的取值範圍 0 – 100。主要是對rr演算法的一種優化和補充, LVS 會考慮每臺伺服器的效能,並給每臺伺服器新增要給權值,如果伺服器A的權值為1,伺服器B的權值為2,則排程到伺服器B的請求會是伺服器A的2倍。權值越高的伺服器,處理的請求越多。

  3. 最少連結 lc
    這個演算法會根據後端 RS 的連線數來決定把請求分發給誰,比如 RS1 連線數比 RS2 連線數少,那麼請求就優先發給 RS1

  4. 加權最少連結 wlc
    這個演算法比 lc 多了一個權重的概念。

  5. 基於區域性性的最少連線排程演算法 lblc
    這個演算法是請求資料包的目標 IP 地址的一種排程演算法,該演算法先根據請求的目標 IP 地址尋找最近的該目標 IP 地址所有使用的伺服器,如果這臺伺服器依然可用,並且有能力處理該請求,排程器會盡量選擇相同的伺服器,否則會繼續選擇其它可行的伺服器

  6. 複雜的基於區域性性最少的連線演算法 lblcr
    記錄的不是要給目標 IP 與一臺伺服器之間的連線記錄,它會維護一個目標 IP 到一組伺服器之間的對映關係,防止單點伺服器負載過高。

  7. 目標地址雜湊排程演算法 dh
    該演算法是根據目標 IP 地址通過雜湊函式將目標 IP 與伺服器建立對映關係,出現伺服器不可用或負載過高的情況下,發往該目標 IP 的請求會固定發給該伺服器。

  8. 源地址雜湊排程演算法 sh
    與目標地址雜湊排程演算法類似,但它是根據源地址雜湊演算法進行靜態分配固定的伺服器資源。

LVS有三種工作模式

1、NAT模式(VS-NAT)

把客戶端發來的資料包的IP頭的目的地址,在負載均衡器上換成其中一臺RS的IP地址,併發至此RS

來處理,RS處理完成後把資料交給經過負載均衡器,負載均衡器再把資料包的原IP地址改為自己的IP,將

目的地址改為客戶端IP地址即可期間,無論是進來的流量,還是出去的流量,都必須經過負載均衡器

2、IP隧道模式(VS-TUN)

由於網際網路上的大多Internet服務的請求包很短小,而應答包通常很大,所以,隧道模式就是把客

戶端發來的資料包,封裝一個新的IP頭標記(僅目的IP)發給RS,RS收到後,先把資料包的頭解開,還原資料

包,處理後,直接返回給客戶端,不需要再經過負載均衡器注意,由於RS需要對負載均衡器發過來的資料包

進行還原,所以必須支援IPTUNNEL協議,因此在RS的核心中,必須要編譯IPTUNNEL這個選項。

3、直接路由模式(VS-DR)

負載均衡器和RS都使用同一個IP對外服務但只有DR對ARP請求進行響應,所有RS對本身這個IP的ARP

請求保持靜默也就是說,閘道器會把對這個服務IP的請求全部定向給DR,而DR收到資料包後根據排程演算法,

找出對應的RS,把目的MAC地址改為RS的MAC(因為IP一致)並將請求分發給這臺RS這時RS收到這個資料

包,處理完成之後,由於IP一致,可以直接將資料返給客戶,則等於直接從客戶端收到這個資料包無異,

處理後直接返回給客戶端由於負載均衡器要對二層包頭進行改換,所以負載均衡器和RS之間必須在一個

廣播域,也可以簡單的理解為在同一臺交換機上

★DR模式的九大特點

1、通過在排程器上LB上修改資料包的目的的MAC地址實現轉發,源IP仍然是客戶端的IP,目的IP地址仍然是VIP
2、請求報文警告排程器,而RS響應出來後的報文無需警告排程器LB,因此併發訪問量大使用效率很高(和NAT模式比)
3、DR模式是通過MAC地址的改寫機制實現轉發,因此所有RS節點和排程器LB只能在一個區域網中(小缺點)。
4、需要注意RS節點的VIP繫結(lo:vip/32,lo1:vip/32)和ARP抑制問題,抑制沒有接網線的那個網絡卡響應ARP廣播。
5、RS節點的預設閘道器不需要是排程器LB的DIP,而直接是IDC機房分配的上級路由器的IP(RS帶有外網IP地址的情況),理講,只要RS可以出外網即可,不是必須配置外網IP。
6、由於DR模式的排程器僅進行了目的MAC地址的改寫,因此排程器LB無法改變請求報文目的埠(和NAT要區別)。
7、當前排程器LB支援幾乎所有的UNIX/LINUX系統,但目前不支援Windows系統,真實伺服器RS節點可以是Windows系統
8、總的來說DR模式效率很高,但是配置也比較麻煩,因此訪問量不是特別大的公司可以用haproxy/nginx取代,符合運維原則:簡單、易用、高效,日1000-2000萬PV或請求1萬以下都可以考慮aproxy/nginx(LVS NAT模式)。
9、直接對外的訪問業務,例如:web伺服器做RS節點,RS最好用公網IP地址,不直接對外的業務,如資料庫、儲存系統節點最後用內部IP地址。

參考

https://www.cnblogs.com/quanloveshui/p/11075796.html

https://www.cnblogs.com/huanglingfa/p/13821811.html

https://blog.csdn.net/xia296/article/details/87971439