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.3

What did you do today

  • 安裝lvs的管理工具ipvsadm.

    yum install ipvsadm

  • 校驗是否安裝成功

    ipvsadm -h
    image.png

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

  • 進入/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)

  • 在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
    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.2、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.2、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七層負載均衡!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章