FastDFS蛋疼的集群和負(fù)載均衡(十三)之LVS-DR環(huán)境安裝

diary_report.jpg

Interesting things

安裝LVS-DR環(huán)境
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

  • 校驗(yàn)是否安裝成功

ipvsadm -h


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

  • 進(jìn)入/usr/local/nginx/conf/目錄下,創(chuàng)建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進(jìn)行配置(192.16812.4)

  • 在eth0上綁定虛擬ip,此處在eth0設(shè)備上綁定了一個(gè)虛擬設(shè)備eth0:0,同時(shí)設(shè)置了一個(gè)虛擬ip是192.168.12.100,然后指定廣播地址也為192.168.12.100,需要特別注意的是,虛擬ip地址的廣播地址是它本身,子網(wǎng)掩碼是255.255.255.255.

ifconfig eth0:0 192.168.12.100 broadcast 192.168.12.100 netmask 255.255.255.255 up


image.png
  • 添加路由規(guī)則。

route add -host 192.168.12.100 dev eth0:0


image.png
  • 啟動(dòng)系統(tǒng)的包轉(zhuǎn)發(fā)功能。參數(shù)值為1時(shí)啟用ip轉(zhuǎn)發(fā),為0時(shí)禁止ip轉(zhuǎn)發(fā)。

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

  • 清除原有轉(zhuǎn)發(fā)規(guī)則。

ipvsadm --clear

  • 添加虛擬ip規(guī)則, -s -rr 表示輪詢策略,80表示負(fù)載轉(zhuǎn)發(fā)的端口是80,-A表示添加一個(gè)新的集群服務(wù),-t表示tcp協(xié)議。

ipvsadm -A -t 192.168.12.100:80 -s rr

  • 在虛擬ip中添加服務(wù)規(guī)則,在新加虛擬ip記錄中添加兩條新的Real Server記錄, -g 表示指定LVS的工作模式為直接路由模式。lvs進(jìn)行負(fù)載轉(zhuǎn)發(fā)需要保證lvs負(fù)載的端口要和nginx服務(wù)的端口保持一致,這里都是80。-a表示添加一個(gè)新的realserver規(guī)則。

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模式下,用戶的訪問請(qǐng)求到達(dá)真實(shí)服務(wù)器后,是直接返回給用戶的,而不再經(jīng)過前端的Director Server。因此,就需要在每個(gè)Real Server節(jié)點(diǎn)上增加虛擬vip地址,這樣數(shù)據(jù)才能直接返回給用戶。

接著我們就需要在Real Server上進(jìn)行配置。(192.168.12.2、192.168.12.3)

  • 老操作,在回環(huán)設(shè)備上綁定虛擬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
  • 關(guān)閉arp解析。

arp_ignore:定義接收到arp請(qǐng)求時(shí)的響應(yīng)級(jí)別
0 - 只要本地配置有相應(yīng)的地址,就給予響應(yīng)。
1 - 哪個(gè)接口上接受arp請(qǐng)求,就從哪個(gè)端口響應(yīng)。DR模式使用

arp_announce:定義將自己地址向外通告時(shí)的通告級(jí)別
0 - 將本地任何接口上的任何地址向外通告。
1 - 試圖僅向目標(biāo)網(wǎng)絡(luò)通告與其網(wǎng)絡(luò)匹配的地址。
2 - 僅向與本地接口上地址匹配的網(wǎng)絡(luò)進(jìn)行通告。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

注意事項(xiàng):

  1. 測試時(shí)需要在nginx的http中設(shè)置keepalive_timeout 0; 取消使用http持久連接模式,保證每次客戶端發(fā)送請(qǐng)求都需要向服務(wù)端簡歷連接,這樣做是為了測試效果更加明顯,每次刷新界面都要經(jīng)過lvs負(fù)載轉(zhuǎn)發(fā)。
    2.lvs進(jìn)行負(fù)載轉(zhuǎn)發(fā)需要保證lvs負(fù)載端口要和nginx服務(wù)的端口保持一致,這里是80

3.在nginx中keepalive_timeout的默認(rèn)值是75s,默認(rèn)使用http持久連接模式,可使客戶端到服務(wù)器端的連接持續(xù)有效,當(dāng)出現(xiàn)對(duì)服務(wù)器的后繼請(qǐng)求時(shí),可避免建立或重新建立連接。生產(chǎn)環(huán)境建議keepalive_timeout不要設(shè)置為0

  • 修改192.168.12.2和192.168.12.3下/usr/local/nginx/html/目錄中index.html的內(nèi)容,使其個(gè)性化。

  • 第一次請(qǐng)求192.168.12.100


    image.png
  • 第二次請(qǐng)求192.168.12.100


    image.png
  • 假設(shè)我停到nginx1


    image.png
  • 我們再次訪問192.168.12.100,還是可以的!因?yàn)閘vs采用輪詢策略,如果其中一個(gè)nginx請(qǐng)求不可達(dá),那么久請(qǐng)求另一個(gè)nginx!


    image.png
  • 為了方便配置啟動(dòng)lvs,我們可以將Director Server 和 RealServer配置過程封裝到Shell腳本中。

在Director Server進(jìn)行配置

  • 在/etc/init.d下創(chuàng)建lvsdr,內(nèi)容如下:
#!/bin/sh
# 定義虛擬ip
VIP=192.168.12.100
# 定義realserver,并已空格分開,根據(jù)需求修改
RIPS="192.168.12.2 192.168.12.3"

# 定義提供服務(wù)的端口
SERVICE=80

# 調(diào)用init.d腳本的標(biāo)準(zhǔn)庫
. /etc/rc.d/init.d/functions
case $1 in
        start)
        echo "Start LVS of DR Mode"
        # 開啟ip轉(zhuǎn)發(fā)
        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規(guī)則
        ipvsadm -C
        # 添加一條虛擬服務(wù)器記錄
    # -p指定一定的時(shí)間內(nèi)將相同的客戶端分配到同一臺(tái)后端服務(wù)器
    # 用于解決session的問題,測試時(shí)或有別的解決方案時(shí)建議去掉
        ipvsadm -A -t $VIP:$SERVICE -s rr

        # 添加真實(shí)服務(wù)器記錄
        for RIP in $RIPS
    do
        echo $RIP:$SERVICE;
                ipvsadm -a -t $VIP:$SERVICE -r $RIP:$SERVICE -g
        done
        # 設(shè)置tcp tcpfin  udp的超時(shí)連接值
        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
  • 修改腳本權(quán)限。

chmod +x /etc/init.d/lvsdr
啟動(dòng): service lvsdr start
停止: service lvsdr stop

在RealServer上進(jìn)行配置

  • 在/etc/init.d/下創(chuàng)建lvsdr,內(nèi)容如下:
#!/bin/sh
VIP=192.168.12.100
. /etc/rc.d/init.d/functions
case $1 in
        start)
        echo "lo:0 port starting"
        # 為了相應(yīng)lvs調(diào)度器轉(zhuǎn)發(fā)過來的包,需在本地lo接口上綁定vip
        ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
        # 限制arp請(qǐng)求
        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
  • 修改腳本權(quán)限。

chmod +x /etc/init.d/lvsdr
啟動(dòng): service lvsdr start
停止: service lvsdr stop


Summary

明天擼LVS四層+Nginx七層負(fù)載均衡!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容