天天看點

lvs

負載均衡 LVS

三種(應該是四種)負載均衡技術:不具備抗攻擊能力

lvs
lvs

 VS/NAT (通過NAT實作虛拟伺服器) 壓力都在排程器上 排程器輸入内網的資料包會源路傳回到外網  對後端的realserver 沒有要求隻要提供服務就行了

 VS/TUN(隧道模式 在原有的模式下繼續做封裝缺點:資料包過大)(通過IP隧道實作虛拟伺服器)成本高 可支援廣域網

 VS/DR(後端可以挂一百個伺服器速度快)(通過直接路由實作虛拟伺服器) 必須在内網(在同一個實體網絡)

生産環境中主要用第四種:FullNAT(跨WELN)

redhat6:自帶10種核心連接配接排程算法

lvs

VS/DR: (核心 更改mac位址 不支援回包)

排程機器:

首先安裝一服務:确認一下

ipvsadm -l

ip addr add 172.25.42.130 (vip)

lvs

ipvsadm -A -t 172.25.42.130:80 -s rr (rr:論尋算法)

ipvsadm -a -t 172.25.42.130:80 -r 172.25.42.17:80 -g

ipvsadm -a -t 172.25.42.130:80-r 172.25.42.18:80 –g

lvs

/etc/init.d/ipvsadm save

realserver1(dd8.example.com) 用apache測試  //對外不響應

yum install httpd -y

/etc/init.d/httpd start

cd /var/www/html

vim index.html

<h1>dd8.example.com</h1>

ipaddr add 172.25.42.130/32 dev eth0

realserver2(dd9.example.com)

<h1>dd9.example.com</h1>

ip addr add 172.25.42.130/32 dev eth0

如果隻做上述操作,發現排程機不起作用

在實體機上:arp -an 172.25.42.130

            arp -d 172.25.42.130

            ping 172.25.42.130

            arp -an 172.25.42.130

會發現,兩次IP的mac位址不一樣,因為排程機,兩台realyserver 上面都有172.25.42.130 這個IP 也就是說這三個相同的IP有三個不同的mac位址 此時ping 這個IP 隻會随機選擇一個

在 real server上:arptable(arp 防火牆)//此實驗中 主要是為了屏蔽real server 上面的vip的mac

yum install arptables_jf.x86_64 -y

arptables -A IN -d 172.25.42.130 -j DROP (對外不釋出172.25.42.130)

arptables -A OUT -s 172.25.42.130 -j mangle --mangle-ip-s 172.25.42.17 (誰用 172.25.42.130 通路我 我所回應的都是 172.25.42.17)//一個mac可以對應多個ip,在real server 裡面不讓vip用這個mac

lvs

arptables -A IN -d 172.25.42.130 -j DROP

arptables -A OUT -s 172.25.42.130 -j mangle --mangle-ip-s 172.25.42.17

lvs
lvs
lvs

對背景伺服器不具備健康檢查:

其中一台real server 的httpd服務關閉

在排程伺服器中,發現排程器依然會正常排程:

此時,在實體機上測試:curl:172.25.42.130

優化:(加上健康檢查)

排程機:ipvsadm –C

lvs

在heartbeat 的前提下(找一個已經安裝過的軟體包)

cd /etc/ha.d

rpm -qd ldirectord

cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf .

lvs

vim ldirectord.cf

lvs

# Sample for an http virtual service

virtual=172.25.42.130:80

        real=172.25.42.17:80 gate  //real server ip

        real=172.25.42.18:80 gate  //real server ip

        fallback=127.0.0.1:80 gate //realserver 全部挂掉 排程機器(本機)去頂替

        service=http

        scheduler=rr

        #persistent=600       //與存儲或資料庫等長久需要保持連接配接的設定有關 

        #netmask=255.255.255.255

        protocol=tcp

        checktype=negotiate

        checkport=80

        request="index.html"

#       receive="TestPage"   

#       virtualhost=www.x.y.z

/etc/init.d/ldirectord start

lvs

測試:

lvs

關掉real server 的httpd

lvs
lvs
lvs
lvs
lvs
lvs
lvs

heartbeat+ldirectord+lvs:(兩台已經做好 heartbeat的虛拟機)

排程機器1:/etc/init.d/ldirectord stop

ipvsadm -C

/etc/init.d/httpd stop

ip addr del 172.25.42.130/24 dev eth0 //因為交給叢集來做 不需要手動開啟和人為幹預

vim haresources

dd6.example.com IPaddr::172.25.42.130/24/eth0 ldirectord httpd

lvs

scp ldirectord.cf haresources [email protected]:/etc/ha.d/

/etc/init.d/heartbeat start (兩台都做此操作)

real server (手動開啟httpd服務)

兩台排程機互相切換:

dd6.example.com:/etc/init.d/heartbeat stop

lvs
lvs
lvs
lvs
lvs

服務健康切換:

lvs
lvs

keepalived+lvs:(/etc/init.d/heartbeat stop)

1.安裝keepalived (keepalived 自帶健康檢查)

./configure --prefix=/usr/local/keepalived  //源碼編譯

make && make install

2.(兩台排程機都做)

/etc/init.d/heartbeat stop

ln-s/usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/

ln-s /usr/local/keepalived/etc/sysconfig/keepalived  /etc/sysconfig

ln-s /usr/local/keepalived/etc/keepalived /etc

cd /usr/local/keepalived

cd sbin

ln -s /usr/local/keepalived/sbin/keepalived /sbin

chmod+x /usr/local/keepalived/etc/rc.d/init.d/keepalived

cd /usr/local

scp -r * [email protected]:/usr/local

cd /etc/keepalived

vim keepalived

yum install mailx -y

/etc/init.d/keepalived start

增加服務 vsftpd

/etc/init.d/keepalived stop

real server :yum install vsftpd -y

vim /etc/keepalived/keepalived

! Configuration File for keepalived

global_defs {

   notification_email {

     root@localhost

   }

   [email protected]

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id LVS_DEVEL

   vrrp_skip_check_adv_addr

   vrrp_strict

   vrrp_garp_interval 0

   vrrp_gna_interval 0

}

vrrp_instance VI_1 {

    state MASTER

    interface eth0

    virtual_router_id 142

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        172.25.42.150

        172.25.42.160

virtual_server 172.25.42.150 80 {

    delay_loop 6

    lb_algo rr

    lb_kind DR

   # persistence_timeout 50

    protocol TCP

    real_server 172.25.42.12 80 {

        weight 1

        TCP_CHECK {

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    real_server 172.25.42.13 80 {

            connect_timeout 3

virtual_server 172.25.42.160 21 {

    persistence_timeout 50

    real_server 172.25.42.12 21 {

            nb_get_retry 3

    real_server 172.25.42.13 21 {

增加虛拟ip:

real server :

ip addr add 172.25.42.140

arptables -A IN -d 172.25.42.140 -j DROP

arptables -A OUT -s 172.25.42.140 -j mangle --mangle-ip-s 172.25.42.140

keepalived 與 heartbeat 相比takeover速度非常快 幾乎沒有時間的延遲

我們可以在兩台機器上面 ipvsadm -l 看到 不管這台機器是不是主排程器 上面都會有排程資訊

lvs
上一篇: niginx安裝
下一篇: msql多表查詢

繼續閱讀