標籤:
一、系統內容
實驗拓撲:
實驗環境:
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 keepalivedglobal_defs { notification_email { [email protected] } notification_email_from [email protected] smtp_server smtp.163.com # smtp_connect_timeout 30 router_id LVS_DEVEL}# VIP1vrrp_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 keepalivedglobal_defs { notification_email { [email protected] } notification_email_from [email protected] smtp_server smtp.163.com # smtp_connect_timeout 30 router_id LVS_DEVEL}# VIP1vrrp_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.comSNS_VIP=192.168.9.200 /etc/rc.d/init.d/functions case "$1" instart) /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 1esac 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
CentOS 6.3下部署LVS(NAT)+keepalived實現高效能高可用負載平衡