CentOS 6.3下部署LVS(NAT)+keepalived實現高性能高可用負載均衡


一、系統環境

實驗拓撲:

 

 

實驗環境:

Vmware 9.01 + Windows 8 x64 企業版+8G內存

虛擬機步驟:

1、安裝一台CentOS 6.3 x64主機,內存為1GB,網絡為NAT模式,注意檢查Vmware中EDIT菜單下Virtual Network Editor中VMnet8

2、 加電,安裝系統。基礎知識了,不再多說,注意:選擇英文而不要選擇中文,選擇是Basic Server模式,系統名稱:LVS-MASTER

3、安裝系統后,用root用戶登錄進去,執行 ifconfig查看下網絡情況,發現:

沒有看到其物理網卡,我們需要想辦法解決它。

 vi /etc/sysconfig/network-scripts/ifcfg-eth0

按下面的樣子進行修改之,設置隨系統啟動,IP為靜態地址而不是DHCP,IP地址、掩碼、網關、DNS等信息

 

測試一下PING,看看是不是能PING通BAIDU,對了,為什么上面GATEWAY是192.168.9.2,是因為在虛擬機中VMnet8中指定的IP。

 

開始克隆多台主機,組成測試環境:

 

關閉掉主機 init 0,然后在虛擬中右鍵LVS-MASTER,MANAGER-CLONE,注意選擇Create a full clone,機器名輸入LVS-BACKUP,大約三十秒時間可以克隆好。

 

給LVS-BACKUP主機加電,系統正常啟動

我們需要做兩件事,

一是主機名修改為LVS-BACKUP,這個容易

vi /etc/sysconfig/network

修改 LVS-MASTER為LVS-BACKUP就可以了。然后 reboot一下系統就發現系統名稱修改完成了。

 

 

 二是修改系統IP

 

        1、刪除 /etc/udev/rules.d/70-persistent-net.rules 后重啟機器。70-persistent-net.rules這個文件確定了網卡與MAC地址的綁定,導入已經存在的虛擬機后,但網卡的MAC地址發生了變化,所以導致系統認為網絡設備不存在。 

        2、經過這樣的處理后eth0還不能正常啟動,需要將 /etc/udev/rules.d/70-persistent-net.rules 文件最后的修改"eth1"為"eth0",

然后將/etc/sysconfig/network-scripts/ifcfg-eth0中的MAC直接刪除。

重啟機器,eth0可以正常啟動了。

 

確定執行 ifconfig命令后能看到 eth0設備,然后繼續下面的動作: 

vi /etc/sysconfig/network-scripts/ifcfg-eth0

將系統IP修改為192.168.9.202

執行一下 service network restart,現在測試一下ping www.baidu.com,看看是不是能PING通。

 

重復上面的步驟,將WEB1和WEB2兩台主機也克隆完成,IP分別是192.168.9.203,192.168.9.204

 

網絡配置通過了,下面可以使用Securecrt進行網絡連接設置了。

=====================================================================================

系統平台:CentOS 6.3

Kernel:2.6.32-279.el6.i686 

查看內核方法:cat /proc/version,為啥重點說明下這里呢?因為下面有個步驟是創建軟連接到這個內核的目錄上,所以重點說明下為啥下面指定的是這個目錄。 

LVS版本:ipvsadm-1.26

keepalived版本:keepalived-1.2.4

三、安裝

0、安裝LVS前系統需要安裝

yum -y install  openssl-devel lftplibnl* popt* libnl* libpopt* gcc*

 

1、在兩台Director Server上分別配置LVS+Keepalived

------------- -------------LVS install --------------------------

cd /usr/src

wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz

如果已經創建了軟連接,那么刪除之: rm /usr/src/linux 注意不能帶最后的/,否則無法刪除。

ln -s /usr/src/kernels/2.6.32-279.el6.x86_64//usr/src/linux/

tar zxvf ipvsadm-1.26.tar.gz

cd ipvsadm-1.26

make && make install

 Keepalived install -------------

cd ..

wget http://www.keepalived.org/software/keepalived-1.2.4.tar.gz

tar zxvf keepalived-1.2.4.tar.gz

cd keepalived-1.2.4

./configure 

make && make install

######### 將keepalived做成啟動服務,方便管理##########

\cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/

\cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/

mkdir /etc/keepalived/

\cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/

\cp /usr/local/sbin/keepalived /usr/sbin/

service keepalived start  

2、開啟路由轉發

vi /etc/sysctl.conf 

修改下面的值,從0修改到1: 

net.ipv4.ip_forward = 1

 

刷新系統變量,使系統文件變更馬上生效

sysctl -p

 

3、配置Keepalived

vi /etc/keepalived/keepalived.conf

輸入  

:.,$d 

刪除所有內容,在LVS-MASTER中輸入以下內容: 

! Configuration File for keepalived
global_defs {
   notification_email {
      king_819@163.com
   }
   notification_email_from king_819@163.com
   smtp_server smtp.163.com
  # smtp_connect_timeout 30
   router_id LVS_DEVEL
}



# VIP1
vrrp_instance VI_1 {
    state MASTER             #備份服務器上將MASTER改為BACKUP
    interface eth0
    lvs_sync_daemon_inteface eth0
    virtual_router_id 51
    priority 100    # 備份服務上將100改為90
    advert_int 5
    authentication {
        auth_type PASS
        auth_pass 1111
    }

    virtual_ipaddress {
     1
92.168.9.200 #(如果有多個VIP,繼續換行填寫.) } } virtual_server 192.168.9.200 80 { delay_loop 6 #(每隔10秒查詢realserver狀態) lb_algo wlc #(lvs 算法) lb_kind DR #(Direct Route) persistence_timeout 60 #(同一IP的連接60秒內被分配到同一台realserver) protocol TCP #(用TCP協議檢查realserver狀態) real_server 192.168.9.203 80 { weight 100 #(權重) TCP_CHECK { connect_timeout 10 #(10秒無響應超時) nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.9.204 80 { weight 100 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } }

在LVS-BACKUP中輸入以下內容:

! Configuration File for keepalived
global_defs {
   notification_email {
      king_819@163.com
   }

   notification_email_from king_819@163.com
   smtp_server smtp.163.com
  # smtp_connect_timeout 30
   router_id LVS_DEVEL
}



# VIP1
vrrp_instance VI_1 {
    state BACKUP             #備份服務器上將MASTER改為BACKUP
    interface eth0
    lvs_sync_daemon_inteface eth0
    virtual_router_id 51
    priority 90    # 備份服務上將100改為90
    advert_int 5
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
     1
92.168.9.200 #(如果有多個VIP,繼續換行填寫.) } } virtual_server 192.168.9.200 80 { delay_loop 6 #(每隔10秒查詢realserver狀態) lb_algo wlc #(lvs 算法) lb_kind DR #(Direct Route) persistence_timeout 60 #(同一IP的連接60秒內被分配到同一台realserver) protocol TCP #(用TCP協議檢查realserver狀態) real_server 192.168.9.203 80 { weight 100 #(權重) TCP_CHECK { connect_timeout 10 #(10秒無響應超時) nb_get_retry 3 delay_before_retry 3 connect_port 80 } real_server 192.168.9.204 80 { weight 100 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } }

配置keepalived自啟動

chkconfig  --level 0123456 keepalived on

查看自啟動狀態

chkconfig --list keepalived

 

===下面的腳本是在WEB服務器上執行的================================================================================================

在WEB1和WEB2機器上編輯如下文件

vi /root/lvs_real.sh

#!/bin/bash

# description: Config realserver

#Written by : http://kerry.blog.51cto.com

SNS_VIP=192.168.9.200

 

/etc/rc.d/init.d/functions

 

case "$1" in

start)

       /sbin/ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP

       /sbin/route add -host $SNS_VIP dev lo:0

       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

       sysctl -p >/dev/null 2>&1

       echo "RealServer Start OK"

 

       ;;

stop)

       /sbin/ifconfig lo:0 down

       /sbin/route del $SNS_VIP >/dev/null 2>&1

       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 "RealServer Stoped"

       ;;

*)

       echo "Usage: $0 {start|stop}"

       exit 1

esac

 

exit 0

 

賦給執行權限 

 

chmod 755 /etc/rc.d/init.d/functions    別人的配置文檔中沒這個步驟,我不知道為什么總是說執行到這句時沒有權限,所以我添加了執行權限

chmod 755 /root/lvs_real.sh

/root/lvs_real.sh start

添加自動啟動

echo “/root/lvs_real.sh start” >> /etc/rc.local

 ================================================================================================

關閉iptables,因為CentOS 6.3 X64默認是開啟IPTABLES的,這樣我們不方便測試這個實驗,所以暫時采用關閉IPTABLES的辦法,以后需要時再測試如何使用IPTABLES的規則。

 配置iptables關閉自啟動 

chkconfig  --level 0123456 iptables off

查看自啟動狀態 

chkconfig --list iptables 

將四台機器的IPTABLES全部關閉,防止出現其它問題。

光是這樣還是不行的,因為不重啟不能停止掉iptables,所以在四台上執行如下命令:

service iptables stop

 ================================================================================================

4、在2台WEBSERVER中分別配置HTTP,這里使用了一個簡單的WEB SERVER:HTTPD這個軟件包,當然也可以使用APACHE或者TOMCAT。

在192.168.9.203和192.168.9.204上執行如下命令:

yum -y install httpd

cd /var/www/html/

vi index.html

 

-----------------------------

192.168.9.203上內容:

<h1>WEB1/192.168.9.203</h1>

 

192.168.9.204上內容:

<h1>WEB1/192.168.9.204</h1>

----------------------------- 

 /etc/init.d/httpd start

結果發現出錯無法啟動:

 

我們修改一下: 

vi /etc/httpd/conf/httpd.conf

ServerName www.example.com:80

再次啟動:

 /etc/init.d/httpd restart  

設定開機啟動httpd

chkconfig  --level 0123456 httpd on

 

另一台機器配置一樣,過程略。

 

在兩台LVS服務器上都要啟動keepalvied,這點十分重要,否則不能正常查看到下面的界面: 

service keepalived restart

 

 

四、測試

####高可用性測試####

模擬故障,將CentOS-LVS_MASTER上的keepalived服務停掉,然后觀察CentOS-LVS_BACKUP上的日志,信息如下

從日志中可知,主機出現故障后,備機立刻檢測到,此時備機變為MASTER角色,並且接管了主機的虛擬IP資源,最后將虛擬IP綁定在etho設備上。

CentOS-LVS_MASTER 上的keepalived服務開啟后,CentOS-LVS_BACKUP的日志狀態。

從日志可知,備機在檢測到主機重新恢復正常后,釋放了虛擬IP資源重新成為BACKUP角色

####故障切換測試####

故障切換是測試當某個節點出現故障后,Keepalived監制模塊是否能及時發現然后屏蔽故障節點,同時將服務器轉移到正常節點來執行。

將WEB2節點服務停掉,假設這個節點出現故障,然后主、備機日志信息如下

 

從以上可以看出,Keepalived監控模塊檢測到192.168.9.204這台主機出現故障后,將WEB2從集群系統中剔除掉了。 此時訪問http://192.168.9.200只能看到WEB1了)

 

重新啟動WEB2節點的服務,日志信息如下:

 

Keepalived監控模塊檢測到192.168.9.204這台主機恢復正常后,又將此節點加入集群系統中,再次訪問就可以訪問到WEB2頁面了)

 ============================================================================================== 

 參考文檔:

http://blog.csdn.net/winsonyuan/article/details/7069884

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM