FastDFS蛋疼的集群和負(fù)載均衡(十八)之LVS+Keepalived雙主模式

diary_report.jpg

Interesting things

我們之前的Keepalived+LVS單主模式,是只有一臺(tái)lvs工作,這會(huì)造成資源浪費(fèi),可以采用雙主結(jié)構(gòu),讓兩臺(tái)lvs都進(jìn)行工作,采用dns輪詢方式,當(dāng)用戶訪問域名通過dns輪詢每天lvs,雙主結(jié)構(gòu)需要2個(gè)vip,這2個(gè)vip需要綁定域名。

同樣,在每臺(tái)lvs上安裝keepalived軟件,當(dāng)keepalived檢測(cè)到其中一個(gè)lvs宕機(jī)則將宕機(jī)的vip漂移到活動(dòng)lvs上,當(dāng)lvs恢復(fù)則vip又重新漂移回來。

附上我畫的拓?fù)鋱D
初始狀態(tài)

image.png

其中一個(gè)主機(jī)宕機(jī)

image.png

主機(jī)恢復(fù)


image.png

所需環(huán)境
vip1 192.168.12.101
vip2 192.168.12.102
lvs_master1 192.168.12.12
lvs_master2 192.168.12.13
nginx1 192.168.12.2
nginx2 192.168.12.3
tomcat1 192.168.12.6
tomcat2 192.168.12.7

What did you do today

雙主模式相比主從環(huán)境,區(qū)別在于:
1.DNS輪詢。
2.LVS負(fù)載均衡層需要2個(gè)vip。比如192.168.12.12和192.168.12.13
3.后端的realServer上要綁定這2個(gè)vip到lo本地回環(huán)設(shè)備上
4.keepalived.conf的配置相比于上面的主從模式有所不同。

  • 在192.168.12.2和192.168.12.3機(jī)器要綁定2個(gè)vip到本地回環(huán)口lo上(分別綁定lo:0和lo:1),所以需要在/etc/init.d/下編寫double_master_lvsdr0和double_master_lvsdr1腳本,具體如下:
#!/bin/sh
VIP=192.168.12.101
. /etc/rc.d/init.d/functions
    
case "$1" in
  
start)
    /sbin/ifconfig lo down
    /sbin/ifconfig lo up
    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
    /sbin/sysctl -p >/dev/null 2>&1
    /sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 up  
    /sbin/route add -host $VIP dev lo:0
    echo "LVS-DR real server starts successfully.\n"
    ;;
stop)
    /sbin/ifconfig lo:0 down
    /sbin/route del $VIP >/dev/null 2>&1
    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
echo "LVS-DR real server stopped.\n"
    ;;
status)
    isLoOn=`/sbin/ifconfig lo:0 | grep "$VIP"`
    isRoOn=`/bin/netstat -rn | grep "$VIP"`
    if [ "$isLoON" == "" -a "$isRoOn" == "" ]; then
        echo "LVS-DR real server has run yet."
    else
        echo "LVS-DR real server is running."
    fi
    exit 3
    ;;
*)
    echo "Usage: $0 {start|stop|status}"
    exit 1
esac
exit 0
#!/bin/sh
VIP=192.168.12.102
. /etc/rc.d/init.d/functions
    
case "$1" in
  
start)
    /sbin/ifconfig lo down
    /sbin/ifconfig lo up
    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
    /sbin/sysctl -p >/dev/null 2>&1
    /sbin/ifconfig lo:1 $VIP netmask 255.255.255.255 up   
    /sbin/route add -host $VIP dev lo:1
    echo "LVS-DR real server starts successfully.\n"
    ;;
stop)
    /sbin/ifconfig lo:1 down
    /sbin/route del $VIP >/dev/null 2>&1
    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
echo "LVS-DR real server stopped.\n"
    ;;
status)
    isLoOn=`/sbin/ifconfig lo:1 | grep "$VIP"`
    isRoOn=`/bin/netstat -rn | grep "$VIP"`
    if [ "$isLoON" == "" -a "$isRoOn" == "" ]; then
        echo "LVS-DR real server has run yet."
    else
        echo "LVS-DR real server is running."
    fi
    exit 3
    ;;
*)
    echo "Usage: $0 {start|stop|status}"
    exit 1
esac
exit 0
  • 將double_master_lvsdr0和double_master_lvsdr1設(shè)置開機(jī)啟動(dòng)

[root@localhost init.d]# chmod +x double_master_lvsdr0
[root@localhost init.d]# chmod +x double_master_lvsdr1
[root@localhost init.d]# echo "/etc/init.d/double_master_lvsdr0" >> /etc/rc.d/rc.local
[root@localhost init.d]# echo "/etc/init.d/double_master_lvsdr1" >> /etc/rc.d/rc.local


image.png
  • 啟動(dòng)double_master_lvsdr0和double_master_lvsdr1腳本


    image.png
  • 查看192.168.12.2和192.168.12.3,發(fā)現(xiàn)vip已經(jīng)成功綁定到本地回環(huán)口lo上了。


    ![image.png](http://upload-images.jianshu.io/upload_images/4636177-b99a4b5e1af33989.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  • 在lvs_master1和lvs_master2打開ip_forward路由轉(zhuǎn)發(fā)功能

[root@localhost ~]# echo "1" > /proc/sys/net/ipv4/ip_forward

  • lvs_master1上的keepalived.conf配置如下:
! Configuration File for keepalived

global_defs {
   router_id LVS_MASTER
}

vrrp_script check_lvs {
   script "/etc/keepalived/lvs_check.sh"
   interval 2
   weight  -20
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }

    track_script {
        check_lvs
    }

    virtual_ipaddress {
        192.168.12.101
    }
}

vrrp_instance VI_2 {
    state BACKUP
    interface eth0
    virtual_router_id 52
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }

    track_script {
        check_lvs
    }

    virtual_ipaddress {
        192.168.12.102
    }
}

virtual_server 192.168.12.101 80 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    #nat_mask 255.255.255.0
    persistence_timeout 50
    protocol TCP


    real_server 192.168.12.2 80 {
        weight 3
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
    real_server 192.168.12.3 80 {
        weight 3
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}


virtual_server 192.168.12.102 80 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    #nat_mask 255.255.255.0
    persistence_timeout 50
    protocol TCP


    real_server 192.168.12.2 80 {
        weight 3
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
    real_server 192.168.12.3 80 {
        weight 3
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}

  • lvs_master2中的keepalived配置如下:
! Configuration File for keepalived
    
global_defs {
   router_id LVS_BACKUP
}

vrrp_script check_lvs {
   script "/etc/keepalived/lvs_check.sh"
   interval 2
   weight  -20
}
    
vrrp_instance VI_1 {
    state BACKUP        
    interface eth0           
    virtual_router_id 51     
    priority 90             
    advert_int 1             
    authentication {
        auth_type PASS       
        auth_pass 1111       
    }

    track_script {
        check_lvs
    }

    virtual_ipaddress {
        192.168.12.101       
    }
}
    
vrrp_instance VI_2 {
    state MASTER         
    interface eth0         
    virtual_router_id 52 
    priority 100          
    advert_int 1          
    authentication {
        auth_type PASS     
        auth_pass 1111     
    }

    track_script {
        check_lvs
    }

    virtual_ipaddress {
        192.168.12.102   
    }
}
  
virtual_server 192.168.12.101 80 {
    delay_loop 6             
    lb_algo wrr              
    lb_kind DR               
    #nat_mask 255.255.255.0
    persistence_timeout 50   
    protocol TCP            
    
  
    real_server 192.168.12.2 80 {
        weight 3
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
    real_server 192.168.12.3 80 {
        weight 3
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}
  
  
virtual_server 192.168.12.102 80 {
    delay_loop 6             
    lb_algo wrr              
    lb_kind DR               
    #nat_mask 255.255.255.0
    persistence_timeout 50   
    protocol TCP            
    
  
    real_server 192.168.12.2 80 {
        weight 3
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
    real_server 192.168.12.3 80 {
        weight 3
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}
  • 編寫lvs_check.sh腳本。
a=`ipvsadm -ln`
str="Route"
bb=`echo $aa|grep $str|wc -l`
if [ $bb = 0 ];then     
    sleep 3
    aa=`ipvsadm -ln`
    bb=`echo $aa|grep $str|wc -l`
    if [ $bb = 0 ];then
        killall keepalived
    fi
fi
  • 啟動(dòng)192.168.12.2和192.16812.3的nginx、double_master_lvsdr0、double_master_lvsdr1服務(wù)。啟動(dòng)192.168.12.6和192.168.12.7的tomcat。

  • 我們查看lvs_master1的eth0節(jié)點(diǎn)信息,發(fā)現(xiàn)綁定了vip1(192.168.12.101)


    image.png
  • 查看lvs_master2的eth0節(jié)點(diǎn)信息,發(fā)現(xiàn)綁定了vip2(192.168.12.102)


    image.png
  • 查看lvs_master1的lvs以及realserver的信息。


    image.png
  • 查看lvs_master2的lvs以及realserver的信息


    image.png
  • 修改hosts文件(C:\Windows\System32\drivers\etc\hosts),指定cmaxiaoma.mayday.com對(duì)應(yīng)的2個(gè)vip。(在hosts里這樣設(shè)置,達(dá)不到負(fù)載均衡,只會(huì)優(yōu)先訪問192.168.12.101)


    image.png
  • 訪問cmazxiaoma.mayday.com


    image.png
  • 我們停止掉lvs_master1.


    image.png
  • 當(dāng)我們又恢復(fù)lvs_master1.vip1又回到了lvs_master1手里,而lvs_master2又失去了vip1。


    image.png

    image.png
  • 在lvs_master2的eth0以及l(fā)vs、RealServer信息。


    image.png

    image.png

Summary

今天加班就到這里了,回去要照顧女朋友了!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,619評(píng)論 6 539
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,155評(píng)論 3 425
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 177,635評(píng)論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,539評(píng)論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,255評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,646評(píng)論 1 326
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,655評(píng)論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,838評(píng)論 0 289
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,399評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,146評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,338評(píng)論 1 372
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,893評(píng)論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,565評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,983評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,257評(píng)論 1 292
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,059評(píng)論 3 397
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,296評(píng)論 2 376

推薦閱讀更多精彩內(nèi)容