FastDFS蛋疼的集羣和負載均衡(十三)之LVS DR環境安裝

diary_report.jpg
###Interesting things

安裝LVS-DR環境 vip:192.168.12.100 lvs-director:192.168.12.4 nginx1:192.168.12.2 nginx2:192.168.12.3html

###What did you do today前端

  • 安裝lvs的管理工具ipvsadm.

yum install ipvsadmnginx

  • 校驗是否安裝成功

ipvsadm -h 後端

image.png

  • 在192.168.12.2和192.168.12.3上安裝nginx,此處略。能夠查看我FastDFS系列博客。bash

  • 進入/usr/local/nginx/conf/目錄下,建立nginx-lvs.conf服務器

http { include mime.types; default_type application/octet-stream; sendfile on; server { listen 80; server_name localhost; location / { root html; index index.html index.htm; }
}網絡

在Director Server進行配置(192.16812.4)session

  • 在eth0上綁定虛擬ip,此處在eth0設備上綁定了一個虛擬設備eth0:0,同時設置了一個虛擬ip是192.168.12.100,而後指定廣播地址也爲192.168.12.100,須要特別注意的是,虛擬ip地址的廣播地址是它自己,子網掩碼是255.255.255.255.

ifconfig eth0:0 192.168.12.100 broadcast 192.168.12.100 netmask 255.255.255.255 up app

image.png

  • 添加路由規則。

route add -host 192.168.12.100 dev eth0:0 負載均衡

image.png

  • 啓動系統的包轉發功能。參數值爲1時啓用ip轉發,爲0時禁止ip轉發。

echo "1" > /proc/sys/net/ipv4/ip_forward

  • 清除原有轉發規則。

ipvsadm --clear

  • 添加虛擬ip規則, -s -rr 表示輪詢策略,80表示負載轉發的端口是80,-A表示添加一個新的集羣服務,-t表示tcp協議。

ipvsadm -A -t 192.168.12.100:80 -s rr

  • 在虛擬ip中添加服務規則,在新加虛擬ip記錄中添加兩條新的Real Server記錄, -g 表示指定LVS的工做模式爲直接路由模式。lvs進行負載轉發須要保證lvs負載的端口要和nginx服務的端口保持一致,這裏都是80。-a表示添加一個新的realserver規則。

ipvsadm -a -t 192.168.12.100:80 -r 192.168.12.2:80 -g ipvsadm -a -t 192.168.12.100:80 -r 192.168.12.3:80 -g

  • 重啓lvs

ipvsadm

image.png

在LVS的DR和TUN模式下,用戶的訪問請求到達真實服務器後,是直接返回給用戶的,而再也不通過前端的Director Server。所以,就須要在每一個Real Server節點上增長虛擬vip地址,這樣數據才能直接返回給用戶。

接着咱們就須要在Real Server上進行配置。(192.168.12.二、192.168.12.3)

  • 老操做,在迴環設備上綁定虛擬ip地址192.168.12.4

ifconfig lo:0 192.168.12.100 broadcast 192.168.12.100 netmask 255.255.255.255 up /sbin/route add-host 192.168.12.100 dev lo:0

image.png

  • 關閉arp解析。

arp_ignore:定義接收到arp請求時的響應級別 0 - 只要本地配置有相應的地址,就給予響應。 1 - 哪一個接口上接受arp請求,就從哪一個端口響應。DR模式使用

arp_announce:定義將本身地址向外通告時的通告級別 0 - 將本地任何接口上的任何地址向外通告。 1 - 試圖僅向目標網絡通告與其網絡匹配的地址。 2 - 僅向與本地接口上地址匹配的網絡進行通告。DR模式使用

sysctl -p使修改生效!

echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce sysctl -p

image.png

  • 在Director Server(192.168.12.二、192.168.12.3) 和 Real Server(192.168.12.4)的防火牆添加端口80策略。

-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

image.png

注意事項:

  1. 測試時須要在nginx的http中設置keepalive_timeout 0; 取消使用http持久鏈接模式,保證每次客戶端發送請求都須要向服務端簡歷鏈接,這樣作是爲了測試效果更加明顯,每次刷新界面都要通過lvs負載轉發。 2.lvs進行負載轉發須要保證lvs負載端口要和nginx服務的端口保持一致,這裏是80 3.在nginx中keepalive_timeout的默認值是75s,默認使用http持久鏈接模式,可以使客戶端到服務器端的鏈接持續有效,當出現對服務器的後繼請求時,可避免創建或從新創建鏈接。生產環境建議keepalive_timeout不要設置爲0
  • 修改192.168.12.2和192.168.12.3下/usr/local/nginx/html/目錄中index.html的內容,使其個性化。

  • 第一次請求192.168.12.100

    image.png

  • 第二次請求192.168.12.100

    image.png

  • 假設我停到nginx1

    image.png

  • 咱們再次訪問192.168.12.100,仍是能夠的!由於lvs採用輪詢策略,若是其中一個nginx請求不可達,那麼久請求另外一個nginx!

    image.png

  • 爲了方便配置啓動lvs,咱們能夠將Director Server 和 RealServer配置過程封裝到Shell腳本中。

在Director Server進行配置

  • 在/etc/init.d下建立lvsdr,內容以下:
#!/bin/sh
# 定義虛擬ip
VIP=192.168.12.100
# 定義realserver,並已空格分開,根據需求修改
RIPS="192.168.12.2 192.168.12.3"

# 定義提供服務的端口
SERVICE=80

# 調用init.d腳本的標準庫
. /etc/rc.d/init.d/functions
case $1 in
        start)
        echo "Start LVS of DR Mode"
        # 開啓ip轉發
        echo "1" > /proc/sys/net/ipv4/ip_forward
        # 綁定虛擬ip
        ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
        route add -host $VIP dev eth0:0
        # 清除lvs規則
        ipvsadm -C
        # 添加一條虛擬服務器記錄
    # -p指定必定的時間內將相同的客戶端分配到同一臺後端服務器
    # 用於解決session的問題,測試時或有別的解決方案時建議去掉
        ipvsadm -A -t $VIP:$SERVICE -s rr

        # 添加真實服務器記錄
        for RIP in $RIPS
	do
		echo $RIP:$SERVICE;
                ipvsadm -a -t $VIP:$SERVICE -r $RIP:$SERVICE -g
        done
        # 設置tcp tcpfin udp的超時鏈接值
        ipvsadm --set 30 120 300
        ipvsadm
        ;;

        stop)
        echo "Stop LVS DR"
        ifconfig eth0:0 down
        ipvsadm -C
        ;;
        *)
        echo "Usage:$0 {start ¦ stop}"
        exit 1
esac
複製代碼
  • 修改腳本權限。

chmod +x /etc/init.d/lvsdr 啓動: service lvsdr start 中止: service lvsdr stop

在RealServer上進行配置

  • 在/etc/init.d/下建立lvsdr,內容以下:
#!/bin/sh
VIP=192.168.12.100
. /etc/rc.d/init.d/functions
case $1 in
        start)
        echo "lo:0 port starting"
        # 爲了相應lvs調度器轉發過來的包,需在本地lo接口上綁定vip
        ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
        # 限制arp請求
        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
        ;;
        stop)
        echo "lo:0 port closing"
        ifconfig lo:0 down
        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 "Usage: $0 {start ¦ stop}"
        exit 1
esac
複製代碼
  • 修改腳本權限。

chmod +x /etc/init.d/lvsdr 啓動: service lvsdr start 中止: service lvsdr stop


###Summary

明天擼LVS四層+Nginx七層負載均衡!

相關文章
相關標籤/搜索