LVS與heartbeat的組合on rhel5

在rhel5中自帶了集羣軟件,我個人認爲不好用,還不如直接編輯配置文件效率高,快!下面是我在rhel5中使用LVS和heartbeat組合來實現集羣和負載均衡。
   簡要說明:服務器四臺,server3和server4上兩塊網卡,分別爲:
   服務器名稱            IP(eth0)         IP(eth1)
   server3.rhel5.net    192.168.1.30     10.0.0.2
   server4.rhel5.net    192.168.1.40     10.0.0.1
   server5.rhel5.net    192.168.1.50
   server7.rhel5.net    192.168.1.71
   虛擬ip爲192.168.1.70,server3和server4主要提供集羣和負載均衡服務,server3爲主,server4爲從,server5和server7提供httpd服務。心跳使用的eth1網卡。
   heartbeat軟件包下載地址,可以在網上找,一大堆,至於ipvsadm軟件包,rhel5光盤中有,自行安裝。
   所需軟件包:heartbeat、libnet、net-snmp、net-snmp-libs、perl-Compress-Zlib、perl-HTML-Parser、perl-HTML-Tagset、perl-libwww-perl、perl-MailTools、perl-TimeDate、perl-URI、ipvsadm.以上軟件包,有的在rhel5光盤中,有的要在網上搜索的。至於heartbeat、libnet軟件包可以到如下網址下載:
http://www.packetfactory.net/libnet/dist/libnet.tar.gz
建議先安裝以上除heartbeat、libnet之外的其他軟件包,然後安裝heartbeat、libnet.
下來直接從安裝heartbeat、libnet開始:
在server3上首先安裝libnet,否則在安裝heartbeat軟件時會報錯的。
   [root@server3 ~]#tar -xvzf libnet.tar.gz
   [root@server3 ~]#cd libnet
   [root@server3 ~]#./configure
   [root@server3 ~]#make;make install
   [root@server3 ~]# tar -xvzf heartbeat-2.1.3.tar.gz
   [root@server3 ~]# cd heartbeat-2.1.3
   [root@server3 ~]# ./ConfigureMe
   [root@server3 ~]# make;make install
安裝這兩個軟件包過程比較慢,請耐心等待;安裝完了後,在/etc/ha.d目錄下默認沒有ldirectord.cf文件,我們複製heartbeat-2.1.3/ldirectord/ldirectord.cf文件到/etc/ha.d目錄下。
  下來編輯ldirectord.cf、authkeys、ha.cf、haresources四個文件。
  我的配置如下所示:
ldirectord.cf文件:
      checktimeout=3   #檢測超時3s
      checkinterval=1  #檢查時間間隔1s
      autoreload=yes   #配置文件改變時自動加載配置文件
      logfile="/var/log/ldirectord.log"  #定義日誌文件
      quiescent=yes   
      virtual=192.168.1.70:80   #虛擬IP
          real=192.168.1.50:80 gate  #realserver server5
          real=192.168.1.71:80 gate  #realserver server7
          fallback=127.0.0.1:80      #所有服務器發生故障時訪問該服務器
          service=http               #服務名稱
          scheduler=rr               #我這裏使用的直連路由調度算法
          protocol=tcp
          checktype=negotiate
   ha.cf文件:
       debugfile /var/log/ha-debug #定義日誌文件,其實這個文件的內容與ldirectord.cf文件中定義的/var/log/ldirectord.log文件內容相同。
       logfile /var/log/ha-log     #同上
       logfacility     local0      #默認
       keepalive 2                 #設定heartbeat之間的時間間隔爲2秒.
       deadtime 30                 #在30秒後宣佈節點死亡。
       warntime 10                 #在日誌中發出“late heartbeat“警告之前等待的時間,單位爲秒。
       initdead 120      #在某些配置下,重啓後網絡需要一些時間才能正常工作。這個單獨的”deadtime”選項可以處理這種情況。它的取值至少應該爲通常deadtime的兩倍。
       udpport 694  # 使用端口694進行bcast和ucast通信。這是默認的,並且在IANA官方註冊的端口號。
       bcast   eth1            # Linux 表示在eth1接口上使用廣播heartbeat(將eth1替換爲eth0,eth2),或者您使用的任何接口。
       mcast eth0 225.0.0.1 694 1 0 #默認即可
       ucast eth0 192.168.1.30      #改爲你eth0的地址。
       auto_failback on             #該選項是必須配置的。值爲on or off
       node    server3.rhel5.net    #負載均衡服務器名,必須與uname -n的輸出一致。
       node    server4.rhel5.net    #同上
       ping 10.0.0.1
       respawn hacluster /usr/lib/heartbeat/ipfail
       apiauth ipfail gid=haclient uid=hacluster
haresources文件:
       server3.rhel5.net ldirectord::ldirectord.cf LVSSyncDaemonSwap::master IPaddr::192.168.1.70/24/eth0/192.168.1.255
authkeys文件,這裏我使用的是md5方式,注意,該文件的權限必須是600:
       auth 3
            3 md5 test
然後編輯/etc/sysctl.conf文件,加入以下行:
   net.ipv4.ip_forward = 1
   net.ipv4.conf.all.arp_ignore = 1
   net.ipv4.conf.eth0.arp_ignore = 1
   net.ipv4.conf.all.arp_announce = 2
   net.ipv4.conf.eth0.arp_announce = 2
再執行sysctl -p命令,使其立即生效!
以上是server3上的配置,下來進入server4上,重複以上安裝配置,切記,server4上的/etc/ha.d/目錄下的authkeys、haresources、ha.cf、ldirectord.cf四個文件必須和server3上的相同。完成後先啓動server3上的heartbeat服務,查看日誌,是否有報錯,然後在啓動server4上的heartbeat服務,檢查日誌文件,是否有報錯.
server3上:
[root@server3 ~]ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:8E:52:05 
          inet addr:192.168.1.30  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe8e:5205/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:113693 errors:0 dropped:0 overruns:0 frame:0
          TX packets:137301 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:12951968 (12.3 MiB)  TX bytes:11335533 (10.8 MiB)
          Interrupt:169 Base address:0x2000
eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:8E:52:05 
          inet addr:192.168.1.70  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:169 Base address:0x2000
eth1      Link encap:Ethernet  HWaddr 00:0C:29:8E:52:0F 
          inet addr:10.0.0.2  Bcast:10.255.255.255  Mask:255.0.0.0
          inet6 addr: fe80::20c:29ff:fe8e:520f/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3680 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3853 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:720033 (703.1 KiB)  TX bytes:748019 (730.4 KiB)
          Interrupt:193 Base address:0x2080
lo        Link encap:Local Loopback 
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:3982 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3982 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1010816 (987.1 KiB)  TX bytes:1010816 (987.1 KiB)
server4上:
[root@server4 ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:FF:1A:AB 
          inet addr:192.168.1.40  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:feff:1aab/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2983 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4766 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:617725 (603.2 KiB)  TX bytes:1118790 (1.0 MiB)
          Interrupt:169 Base address:0x2000
eth1      Link encap:Ethernet  HWaddr 00:0C:29:FF:1A:B5 
          inet addr:10.0.0.1  Bcast:10.255.255.255  Mask:255.0.0.0
          inet6 addr: fe80::20c:29ff:feff:1ab5/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:4135 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4070 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:813997 (794.9 KiB)  TX bytes:790753 (772.2 KiB)
          Interrupt:193 Base address:0x2080
lo        Link encap:Local Loopback 
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:3374 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3374 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:431408 (421.2 KiB)  TX bytes:431408 (421.2 KiB)
server3上多了個eth0:0接口,若你的沒有出現,請等待一會,再使用ifconfig查看,若還是沒有eth0:0接口出現,請檢查配置文件是否正確!若停止server3上的heartbeat服務,則server4會接管,併產生一個eth0:0接口!
   [root@server3 ~]# /etc/ha.d/resource.d/LVSSyncDaemonSwap master status
     master running
    (ipvs_syncmaster pid: 9132)
   [root@server3 ~]# /etc/ha.d/resource.d/LVSSyncDaemonSwap backup status
    backup stopped
    (ipvs_syncmaster pid: 9132)
  server4上:
    [root@server4 ~]# /etc/ha.d/resource.d/LVSSyncDaemonSwap master status
       master stopped
      (ipvs_syncbackup pid: 5830)
    [root@server4 ~]# /etc/ha.d/resource.d/LVSSyncDaemonSwap backup status
       backup running
      (ipvs_syncbackup pid: 5830)
   現在停止server3上的heartbeat服務,看server4是否可以正常接管,可以查看日誌文件。若沒有報錯,則說明heartbeat服務沒有問題,若存在問題請根據日誌文件進行排錯!
   然後啓動server3和server4上的ipvsadm服務,使用ipvsadm命令查看:
[root@server3 ha.d]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.70:80 rr
  -> 192.168.1.50:80              Route   1      0          0        
  -> 192.168.1.71:80              Route   1      0          0 
server4上的輸出應該和server3上的一致。ok,以上是heartbeat與LVS配置。下面是realserver上的配置: 
server5和server7上的配置:
[root@server5 ~]# echo "This is server5">/var/www/html/index.html
   [root@server5 ~]# vi /etc/sysctl.conf加入以下行:
   net.ipv4.ip_forward = 1
   然後編寫如下腳本,我這裏命名爲lvs.sh
   #!/bin/sh
   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
   ifconfig lo:0 192.168.1.70 broadcast 192.168.1.70 netmask 255.255.255.255 up
   route add -host 192.168.1.70 dev lo:0
   sysctl -p
   然後在/etc/rc.local文件中把lvs.sh文件的絕對路徑,讓其在開機是運行。
  [root@server7 ~]# echo "This is server7">/var/www/html/index.html
  然後把httpd設置爲在開機時就啓動,chkconfig httpd on.在server7上切記不要忘記那個lvs腳本!重啓server5和server7,啓動後,檢查一下是否多了個網絡接口lo:0.我的如下:
    lo:0  Link encap:Local Loopback 
          inet addr:192.168.1.70  Mask:255.255.255.255
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
再查看一下,你的httpd服務是否啓動。
在其他機器上的IE裏輸入http://192.168.1.70,看是否可以訪問,我的成功顯示This is server5,然後刷新一下,顯示server7。
  在server3上使用ipvsadm -Lnc查看那些客戶端通過192.168.70訪問realserver上的httpd服務:
[root@server3 ~]# ipvsadm -Lnc
IPVS connection entries
pro expire state       source             virtual            destination
TCP 01:52  FIN_WAIT    192.168.1.156:4204 192.168.1.70:80    192.168.1.71:80
TCP 01:53  FIN_WAIT    192.168.1.156:4207 192.168.1.70:80    192.168.1.71:80
TCP 01:51  FIN_WAIT    192.168.1.156:4203 192.168.1.70:80    192.168.1.50:80
TCP 01:53  FIN_WAIT    192.168.1.156:4208 192.168.1.70:80    192.168.1.50:80
TCP 01:50  FIN_WAIT    192.168.1.156:4202 192.168.1.70:80    192.168.1.71:80
TCP 01:53  FIN_WAIT    192.168.1.156:4205 192.168.1.70:80    192.168.1.50:80
ok,以上說明192.168.1.156通過192.168.1.70訪問192.168.1.50和192.168.1.71的httpd服務!
Good luck for you!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章