一、系統環境
實驗拓撲:
實驗環境:
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 {
192.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 {
192.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