Linux LVS+keepalived負載均衡集羣的部署

高可用負載均衡集羣html

ipvsios

負載均衡經常使用的有四種模式算法

DRvim

NAT瀏覽器

TUN緩存

FULLNET服務器

 

實驗環境:準備四臺rhel6.5的虛擬機四臺。一臺做爲調度器server1,兩臺做爲real server(server3,4),heartbeat服務關閉網絡

172.25.50.10 server1.example.com負載均衡

172.25.50.20 server2.example.comcurl

172.25.50.30 server3.example.com

172.25.50.250 real50.example.com

172.25.50.40 server4.example.com

DR模式:

#ipvsadm -l 命令能夠看到當前主機的調度策略

#ipvsamd -L

#iIpvsadm -C 清除當前策略

server3和server4上都安裝而且開啓httpd服務,而後都在默認發佈目錄上寫一個不一樣的測試頁面:server3.example.com  server4.example,com

調度器server1上,添加一個172.25.50.100的ip

#   ip addr add 172.25.50.100/24 dev eth0

而且用真機ping 一下這個ip讓真機緩存綁定一個MAC地址

server1上添加策略:

ipvsadm -A -t 172.25.50.100:80 -s rr##rr表示輪詢

ipvsadm -a -t 172.25.50.100:80 -r 172.25.50.30:80 -g

ipvsadm -a -t 172.25.50.100:80 -r 172.25.50.40:80 -g

.ipvsadm參數說明:

-C:清除表中全部的記錄

-A:在服務器列表中新添加一套新的虛擬服務器記錄

-a:在服務器列表中添加一體新的真實主機記錄

-t:表示tcp服務

-u:表示udp服務

-r::真實服務器地址

-s:使用調度算法(rr | wrr | )

 

[root@server1 ~]# ipvsadm -l

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  172.25.50.100:http rr

  -> server3.example.com:http     Route   1      0          0         

  -> server4.example.com:http     Route   1      0          0         

 

serevr3和server4上都添加ip:

#  ip addr add 172.25.50.100/32 dev eth0

 

測試:在瀏覽器上訪問172.25.50.100,重複刷新,能夠看到測試頁面的變更

[root@real50 kiosk]# curl 172.25.50.100

<h1>serer3.example.com</h1>

[root@real50 kiosk]# curl 172.25.50.100

<h2>server4.example.com</h2>

 

這樣作是有缺陷的。這樣是不具有對服務的健康檢查

real server的服務宕機,在調度器上不能看到服務是否正常運行,在瀏覽器上能夠看到網頁時好時壞。

 

Arp

server3和server4上安裝arptables_jf.x86_64 0:0.0.8-23.el6

server3和server4 上都執行如下策略

 

arptables -A IN -d 172.25.50.100 -j DROP

arptables -A OUT -s 172.25.50.100 -j mangle --mangle-ip-s 172.25.50.30

/etc/init.d/arptables_jf save

 

而後關閉server3的httpd服務

而後在調度器上server1上可以發現real serevr 上的服務故障

[root@server1 ha.d]# ipvsadm -l

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  172.25.50.100:http rr

  -> server4.example.com:http     Route   1      0          0         

 

在瀏覽器上只能看到serevr4的測試頁面

[root@real50 kiosk]# curl 172.25.50.100

<h2>server4.example.com</h2>

[root@real50 kiosk]# curl 172.25.50.100

<h2>server4.example.com</h2>

 

######將heartbeat加入負載均衡集羣中:#####

 

[root@server1 ~]# ipvsadm -C  ##清除以前的策略

[root@server1 ~]# ipvsadm -L

 

[root@server1 ha.d]# rpm -qd ldirectord##查詢這個軟件的文檔

/usr/share/doc/ldirectord-3.9.5/COPYING

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

/usr/share/man/man8/ldirectord.8.gz

 

[root@server1 ha.d]# cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf .

[root@server1 ha.d]# vim ldirectord.cf ##這個文件寫着調度策略

 25 virtual=172.25.50.100:80##虛擬ip

 26         real=172.25.50.30:80 gate##真實主機的ip地址

 27         real=172.25.50.40:80 gate

 28         fallback=127.0.0.1:80 gate

 29         service=http

 30         scheduler=rr##策略:輪詢

 31         #persistent=600

 32         #netmask=255.255.255.255

 33         protocol=tcp

 34         checktype=negotiate

 35         checkport=80

 36         request="index.html"

 37 #       receive="Test Page"##檢測真實主機上的測試測試頁面是否一致

 38 #       virtualhost=www.x.y.z

 

[root@server1 ha.d]# /etc/init.d/ldirectord start##啓動ld

 

server3上將httpd服務停了

在真機上:

[root@real50 Desktop]# curl 172.25.50.100

<h2>server4.example.com</h2>

調度器serverv1上:

[root@server1 ha.d]# ipvsadm -l

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  172.25.50.100:http rr

  -> server4.example.com:http     Route   1      0          0         

 

這時將server3上的httpd服務打開

這時負載均衡開始工做:

[root@real50 Desktop]# curl 172.25.50.100

<h2>server4.example.com</h2>

[root@real50 Desktop]# curl 172.25.50.100

<h1>serer3.example.com</h1>

 

[root@server1 ha.d]# /etc/init.d/ldirectord stop

[root@server1 html]# ip addr del 172.25.50.100/24 dev eth0

[root@server1 html]# /etc/init.d/httpd stop

[root@server1 html]# cd /etc/ha.d/

[root@server1 ha.d]# vim haresources

在最後一行添加:

server1.example.com IPaddr::172.25.50.100/24/eth0 ldirectord httpd

||||

添加虛擬ip啓動腳本

[root@server1 ha.d]# scp haresources 172.25.50.20:/etc/ha.d/#發送到server2上

[root@server1 ha.d]# scp ldirectord.cf 172.25.50.20:/etc/ha.d/

root@172.25.50.20's password:

haresources                                   100% 5972     5.8KB/s   00:00    

 

 /etc/init.d/heartbeat restart##在serevr1和server2上都從新啓動heartbeat

[root@server1 ha.d]# tail -f /var/log/messages    #用過日誌查看服務啓動狀況

 

 

 

[root@server1 ha.d]# ipvsadm -l

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  172.25.50.100:http rr

  -> server3.example.com:http     Route   1      0          0         

  -> server4.example.com:http     Route   1      0          0  

 

在真機上測試:

[root@real50 Desktop]# for i in {1..8}; do curl 172.25.50.100; done

<h2>server4.example.com</h2>

<h1>serer3.example.com</h1>

<h2>server4.example.com</h2>

<h1>serer3.example.com</h1>

<h2>server4.example.com</h2>

<h1>serer3.example.com</h1>

<h2>server4.example.com</h2>

<h1>serer3.example.com</h1>

realserver上任何一個的http服務掛了。另一個realserver會一直接管httpd服務

當調度器中的server1掛了,server2會接管調度工做,保證系統正常運行

 

Keepalived+lvs

 

wKioL1jFbNbSMpidAAF42yiE73w881.png-wh_50 

先關閉sererv1和server2的heartbeart服務

 /etc/init.d/heartbeat stop

server和server上都進行以下操做

tar zxf keepalived-1.2.24.tar.gz #第三方模塊,在官網上去找

cd keepalived-1.2.24

yum install openssl-devel -y#編譯文件

yum install libnl-devel -y

yum install libnfnetlink-devel-1.0.0-1.el6.x86_64.rpm -y

rpm -ivh libnfnetlink-devel-1.0.0-1.el6.x86_64.rpm

warning: libnfnetlink-devel-1.0.0-1.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY

Preparing...                ########################################### [100%]

package libnfnetlink-devel-1.0.0-1.el6.x86_64 is already installe

 

cd keepalived-1.2.24

 ./configure --prefix=/usr/local/keepalived##編譯,並指定安裝路徑,

make && make install

 

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/

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

 

軟鏈接設置後能夠在後面的目錄中生成一個新的文件,若是設置錯了,把生成的新文件刪除,再進行軟鏈接設置便可。

 

編輯集羣信息配置文件

[root@server1 etc]# cat /etc/keepalived/keepalived.conf

! Configuration File for keepalived

 

global_defs {

   notification_email {

     root@localhost#接收警報的 email 地址,能夠添加多個

   }

   notification_email_from Alexandre.Cassen@firewall.loc #設置郵件的發送地址

   smtp_server 192.168.200.1#設置 smtp server 地址

   smtp_connect_timeout 30#設置鏈接 smtp 服務器超時時間

   router_id LVS_DEVEL#load balancer 的標識 ID,用於 email 警報

   vrrp_skip_check_adv_addr

   vrrp_strict

   vrrp_garp_interval 0

   vrrp_gna_interval 0

}

 

vrrp_instance VI_1 {

    state MASTER設置爲主機###備機改成 BACKUP,此狀態是由 priority 的值來決定的,當前priority 的值小於備機的值,那麼將會失去 MASTER 狀態

    interface eth0#HA 監測網絡接口

    virtual_router_id 51##主、備機的 virtual_router_id 必須相同,取值 0-255

    priority 100##優先級,備份機改成50,數字大的優先級高,主>備

    advert_int 1#主備之間通告間隔秒數

    authentication {

        auth_type PASS##設置認證類型,pass  或者 AH

        auth_pass 1111##設置驗證密碼

    }

    virtual_ipaddress {#設置虛擬 IP 地址,能夠設置多個虛擬 IP 地址,每行一個

        172.25.50.100

    }

}

 

virtual_server 172.25.50.100 80 {#定義虛擬服務器

delay_loop 6#每隔 6 秒查詢 realserver 狀態

    lb_algo rr#每隔 6 秒查詢 realserver 狀態

    lb_kind DR#LVS 是用 DR 模式

#    persistence_timeout 50

    protocol TCP#指定轉發協議類型,有 tcp 和 udp 兩種

 

    real_server 172.25.50.30 80 {#配置服務節點

        weight 1配置服務節點的權值,權值大小用數字表示,數字越大,權

值越高,設置權值的大小能夠爲不一樣性能的服務器分配不一樣的負載,能夠對性能高的服務器設

置較高的權值,而對性能較低的服務器設置相對較低的權值,這樣就合理的利用和分配了系統

資源

        TCP_CHECK {#realserve 的狀態檢測設置部分,單位是秒

            connect_timeout 3#3 秒無響應超時

            nb_get_retry 3#重複次數

            delay_before_retry 3#重試間隔

        }

    }

   real_server 172.25.50.40 80 {

        weight 1

        TCP_CHECK {

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

 

}

注意:紅色字體只有 備機  keepalived配置只改動紅色部分

 

將配置文件複製到備機server2上,並進行修改

 

server3和server4上的httpd服務開啓,並設置vip:

ip addr add 172.25.50.100/32 dev eth0l兩臺realserver都添加

 

server1和server2上的keepalived服務開啓。

 

測試:

1. 高可用測試:中止 master 上的 keepalived 服務,看 backup 是否接管。

2. 負載均衡測試:訪問 http://192.168.0.163,看到頁面在兩個 realserver 上切換表示成功!

你也能夠經過 ipvsadm -Lnc 查看詳細鏈接狀況!

3. 故障切換測試:任意關閉 realserver 上的 httpd 服務,Keepalived 監控模塊是否能及時發現,

而後屏蔽故障節點,同時服務轉移到正常節點來執行

相關文章
相關標籤/搜索