重點:每一個節點時間都同步哈!html
[root@DR2 ~]# ntpdate time.windows.com && hwclock -w
1、環境簡介:前端
1)虛擬機:VMware ESXi 5.5 (CentOS 6.4 x86-64安裝在其中)linux
2)操做系統: CentOS 6.4 x86-64算法
3)Keepalived版本: Keepalived-1.2.9shell
4)IPVS管理工具IPVSadm-1.26數據庫
5) Linux/Unix工具Xmanager 4.0 (Xshell)vim
二、禁掉防火牆和Selinux
windows
(1) 禁掉防火牆瀏覽器
(2) 禁掉Selinux緩存
vim /etc/selinux/config
(3) 最後,必須從新啓動系統
shutdown -r now
重點: DR2、Real Server1和Real Server2以下圖所述完成!
三、檢查DR1與DR2的連通性:
//在DR1上分別ping DR2的public IP和private IP,以下圖所示:
//在DR2上分別ping DR1的public IP和private IP,以下圖所示:
1、理論篇:
1-LVS簡介:
LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集羣系統。本項目在1998年5月由章文嵩博士成立,是中國國內最先出現的自由軟件項目之一。章文嵩博士目前工做於阿里集團,主要從事集羣技術、操做系統、對象存儲與數據庫的研究。(摘自《BAIDU百科》)
2-LVS集羣的組成:
LVS服務器系統由三部分組成:
1)負載均衡層:
位於整個集羣系統的最前端,避免單點故障通常最少由2臺或2臺以上負載調度器組成。
2)服務器羣組層:
是一組真正運行應用服務器的機器組成,Real Server能夠是Web、FTP、DNS、Mail 、視頻等服務器中的一個或N個,每一個Real Server之間經過高速的LAN/WAN相鏈接。爲了節省寶貴的資源,在生產環境中,Director Server同時身兼Real Server的角色!
3)共享存儲層:
爲Real Server提供共享存儲空間和內容一致性的存儲區域。能夠爲磁盤陣列、Red Hat的GFS文件系統、Oracle的OCFS2文件系統等。
Director Server是整個LVS的核心!到目前爲止,Director server只能安裝在Linux、FreeBSD上,若是Linux內核是2.6及以上時,則已經內置了LVS的各個模塊,不用做任何的設置就支持LVS功能。
Real Server服務器幾乎爲全部有系統平臺,如:Windows、Linux、Solaris、AIX、BSD等系統平臺。
3-LVS集羣的特色:
(1) IP負載均衡和負載調度算法;
(2) 高可用性;
(3) 高可靠性;
(4) 適用環境;
(5) 開源軟件。
4-LVS集羣系統的優缺點:
|-LVS集羣系統的優勢:
(1) 抗負載能力強
工做在第4層僅做分發之用,沒有流量的產生,這個特色也決定了它在負載均衡軟件裏的性能最強的;無流量,同時保證了均衡器I/O的性能不會受到大流量的影響;
(2) 工做穩定
自身有完整的雙機熱備方案,如LVS+Keepalived和LVS+Heartbeat;
(3) 應用範圍比較廣
能夠對全部應用作負載均衡;
(4) 配置性比較低
既是優勢,也是缺點,由於沒有太多配置,因此並不須要太多接觸,大大減小了人爲出錯的概率;
|-LVS集羣系統的缺點:
(1) 軟件自己不支持正則處理,不能作動靜分離,這就凸顯了Nginx/HAProxy+Keepalived的優點。
(2) 若是網站應用比較龐大,LVS/DR+Keepalived就比較複雜了,特別是後面有Windows Server應用的機器,
實施及配置還有維護過程就比較麻煩,相對而言,Nginx/HAProxy+Keepalived就簡單多了。
集羣根據業務目標而分爲如下幾種:
(1) High Availability (高可用): 目的是保持業務的持續性。
(2) Load Balancing(負載均衡): 將請求一個個分擔到不一樣一計算機上去,每臺計算機獨立完成一個用戶的請求的。
(3) High Performance (高性能): 須要一組計算機共同完成一件事情。
5-實現集羣產品:
*HA
(1)RHCS: 企業內用得比較多
(2)heartbeat:
(3)keepalived:
(*)黃金組合: LVS + Keepalived (重點)
*LB(負載均衡)
(1)HAProxy;
(2)LVS;
(3)Nginx;
(4)硬件F5;
(5)Piranha :紅帽光盤自帶的,但在Linux 6.0中又去掉了
*HPC
6-LVS負載均衡技術:
(1)LVS-DR模式(Direct routing):直接路由模式。用得最多!能夠跟100個以上Real Server
(2)LVS-NAT模式(Network Address Translaton): 只能跟3~5個Real Server;
(3)LVS-TUN模式(IP Tunneling): 應用於遠程,尤爲是外網等
7-LVS-NAT特性:
(1)Real Server必須與Director在同一網絡,僅用於與Director服務器通信;
(2)Director接收全部的數據包通信(包括客戶端與Director、Director和real server直接的通信);
(3)Real Server的默認網關指向Director的真實IP地址;
(4)Director支持端口映射,能夠將客戶端的請求映射到Real Server的另外一個端口;(與DR模式的區別)
(5)支持任意操做系統; 如:Windows、Linux、FreeBSD、AIX等
(6)單一的Director是整個集羣的瓶頸(故通常都是2臺或2臺以上的Director機器)
8-LVS負載均衡的調度算法(靜態)
(1)輪循調度(Round Robin)(rr)(最笨的調度算法)
調度器經過「輪循」調度算法將外部請求按順序輪流分配到集羣中的Real Server上,均等每一臺Server,而無論Server上實際的鏈接和系統負載。
(2)加權輪循(Weighted Round Robin)(wrr)
調度器經過」加權輪循」調度算法根據真實服務器的不一樣處理能力來調訪問請求。如此保證處理能力強的服務器能處理更多的訪問流量。調度器能夠自動問詢真實服務器的負載狀況,並動態地調整其權值。
(3)目標地址散列(Destination Hashing)(DH)(有緩存,目標不變,則不變)
它的調度算法根據請求的目標IP地址,做爲散列(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,則將請求發送到該服務器,不然返回空。
(4)源地址散列(Source Hashing)(SH) (有緩存,源不變,則不變)
是根據請求的源IP地址,做爲散列鍵(Hash key)從靜態分配的散列表找出對應的服務器,若該 服務器是可用的且未超載,將請求發送到該服務器,不然返回空。
9-LVS負載均衡的調度算法(動態)
(5)最少連接(Least Connections)(LC)
調度器經過」最少鏈接」調度算法動態地將網絡請求調度到已創建的連接數最少的服務器上。若集羣系統的真實服務器具備相近的系統性能,採用「最少鏈接」調度算法能夠較好地均衡負載。
公式:LC = 活動鏈接數*256 + 非活動鏈接數
例如:
(6)加權最少連接(Weighted Least Connections)(WLC) 注:目前最優秀的調度算法!
適應:在集羣系統中的服務器性能差別較大的狀況下,調度器採用」加權最少連接」調算法優化負載均衡性能。具備較高權值的服務器將承受較大比例的活動鏈接負載。調度器能夠自動問詢真實服務器的負載狀況,並動態地調整其權值。
例如:在上表加入Real Server1權值 爲3,Real Server2權值爲1時,則
公式:WLC = (活動鏈接數*256 + 非活動鏈接數)/權重
(7)最短的指望的延時(Shortest Expected Delay)(SED)
sed只是在WLC上作了些微調而已。只計算活動鏈接數!
公式:LC = (活動鏈接數+1)*256 ÷權重
(8)最少隊列調度(Never Queue Scheduling)(NQS)
無需隊列。若Real Server的鏈接數=0,就直接分配過去,不須要再進行sed運算。只計算活動鏈接數!
(9)基於局部性的最少鏈接(Locality-Based Least Connections)(LBLC)
它的調度算法針對目標IP地址的負載均衡,目前主要用於Cache集羣系統。該算法根據請求的目標IP地址找出該目標IP地址最近使用的服務器,若該服務器是可用的且沒有超載,將請求發送到該服務器;若服務器不存在,或者該服務器超載且有服務器處於一半的工做負載,則用「最少鏈接」的原則選出一個可用的服務器,將請求發送到該服務器。(HD動態算法)
(10)帶複製的基於局部最少連接(Locality-Based Leat Connections Witch Replication)(LBLCR)
此調算法也是針對目標IP地址的負載均衡,目前主要用於Cache集羣系統。它與LBLC算法的不一樣之處是它要維護從一個目標IP地址到一組服務器的映射,而LBLC算法維護從一個目標IP地址到一臺服務器的映射。該算法根據請求的目標IP地址找出該目標IP地址對應的服務器組,按「最小鏈接」原則從服務器組中選出一臺服務器,若服務器沒有超載,將請求發送到該服務器,若服務器超載,則按「按最少鏈接」原則從這個集羣中選出一臺服務器,將該服務器加入到服務器組中,將請求發送到該服務器。同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以下降複製的程度。
2、實戰篇:
1-安裝LVS軟件:(分別在DR1和DR2中)
LVS軟件包括二部分:
① IPVS模塊,LVS已是Linux標準內核的一部分,直接被編譯在內核中!
② IPVS管理工具IPVSadm ,如:IPVSadm-1.26
1)檢查是否安裝了IPVS模塊: 注:LVS已是Linux標準內核的一部分,直接被編譯在內核中!
方法1: 查看IPVS模塊是否真的編譯到內核中去了,以下圖所示:
由上可知,有3個項,說明這個功能已經編譯到內核中了!
方法2: 使用modprobe命令查看,以下圖所示:
由上可知,明顯安裝了支持LVS的IPVS模塊!
2)在DR1上安裝IPVS管理軟件:
方法1:源碼安裝
[root@DR1 src]# cd ipvsadm-1.26 [root@DR1 ipvsadm-1.26]# make
//make時,出現以下所示:
解決方法:
安裝如下4個包: (rpm –ivh 軟件包名)
(1) popt-1.13-7.el6.x86_64.rpm
(2) libnl-1.1-14.el6.x86_64.rpm
(3) libnl-devel-1.1-14.el6.x86_64.rpm
(4)popt-static-1.13-7.el6.x86_64.rpm
重點:
安裝以上4個包後,安裝成功,以下圖所示:
方法2: yum安裝
yum -y install ipvsadm
//檢查ipvsadm安裝是否成功:
若是顯示了ipvsadm的各類用法,則說明ipvsadm安裝成功了!
2-安裝Keepalived (分別在DR1和DR2中)
[root@DR1 src]# cd keepalived-1.2.9 [root@DR1 keepalived-1.2.9]# ./configure --sysconf=/etc\ > --with-kernel-dir=/usr/src/kernels/2.6.32-358.el6.x86_64/
重點: 確保下面3行是 yes !以下圖所示:
//編譯之
[root@DR1 keepalived-1.2.9]# make
//安裝
//作個軟連接
[root@DR1 keepalived-1.2.9]# ln -s /usr/local/sbin/keepalived /sbin/
//檢驗安裝是否成功:
若是顯示了Keepalived的各類用法,則說明Keepalived安裝成功了!
//同理DR2中安裝keepalived,如今檢查安裝是否成功:
3-配置keepalived
(1)在DR1上配置keepalived:
最簡單的方法:先在記事本中,手工建立之。複製到/etc/keepalived/keepalived.conf中,保存便可!
//手工建立keepalived.conf文件(vim /etc/keepalived/keepalived.conf)
! Configuration File for keepalived global_defs { notification_email { acassen@firewall.loc #設置報警郵件地址,能夠設置多個,每行1個, failover@firewall.loc #需開啓郵件報警及本機的Sendmail服務。 sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.200.1 #設置SMTP Server地址; smtp_connect_timeout 30 router_id LVS_DEVEL } ########VRRP Instance######## vrrp_instance VI_1 { state MASTER #指定Keepalived的角色,MASTER爲主機服務器,BACKUP爲備用服務器 interface eth0 #BACKUP爲備用服務器 virtual_router_id 51 priority 100 #定義優先級,數字越大,優先級越高,主DR必須大於備用DR。 advert_int 1 authentication { auth_type PASS #設置驗證類型,主要有PASS和AH兩種 auth_pass 1111 #設置驗證密碼 } virtual_ipaddress { 192.168.1.200 #設置主DR的虛擬IP地址(virtual IP),可多設,但必須每行1個 } } ########Virtual Server######## virtual_server 192.168.1.200 80 { #注意IP地址與端口號之間用空格隔開 delay_loop 6 #設置健康檢查時間,單位是秒 lb_algo rr #設置負載調度算法,默認爲rr,即輪詢算法,最優秀是wlc算法 lb_kind DR #設置LVS實現LB機制,有NAT、TUNN和DR三個模式可選 nat_mask 255.255.255.0 persistence_timeout 50 #會話保持時間,單位爲秒 protocol TCP #指定轉發協議類型,有TCP和UDP兩種 real_server 192.168.1.132 80 { weight 1 #配置節點權值,數字越大權值越高 TCP_CHECK { connect_timeout 3 #表示3秒無響應,則超時 nb_get_retry 3 #表示重試次數 delay_before_retry 3 #表示重試間隔 } } real_server 192.168.1.133 80 { #配置服務器節點,即Real Server2的public IP weight 3 #配置節點權值,數字越大權值越高 TCP_CHECK { connect_timeout 3 #表示3秒無響應,則超時 nb_get_retry 3 #表示重試次數 delay_before_retry 3 #表示重試間隔 } } }
//啓動哈keepalived、設置keepalived服務自動啓動、檢查是否生效,以下圖所示:
(2)在DR2上配置keepalived:
先將上面記事本中的keepalived.conf配置文件,僅僅修改2處,以下圖所示:
No.1處:把「stateMASTER」修改成「stateBACKUP」 #即備用服務器;
No.2處:把「priority 100」修改成「priority 90」 #優先級爲90。
修改好後,複製到DR2的/etc/keepalived/keepalived.conf中,保存便可!
//啓動哈keepalived、設置keepalived服務自動啓動、檢查是否生效,以下圖所示:
4-配置Real Server節點:
1)yum –y install httpd
2)啓動httpd服務時,出錯:
//vim /etc/httpd/conf/httpd.conf中,依以下操做:
#265 ServerName www.example.com:80 //去掉前面的#號便可!
3)在RealServer1和RealServer2上的腳本realserver.sh:
#add for chkconfig #chkconfig: 2345 70 30 #234都是文本界面,5就是圖形界面X,70啓動順序號,30系統關閉,腳本 #止順序號 #description: RealServer's script #關於腳本的簡短描述 #processname: realserver.sh #第一個進程名,後邊設置自動時會用到 #!/bin/bash VIP=192.168.1.200 source /etc/rc.d/init.d/functions case "$1" in start) ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP /sbin/route add -host $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 echo "RealServer Start OK" ;; stop) ifconfig lo:0 down route del $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
5-啓動keepalived + LVS集羣系統:
6-測試分爲三個部分:
1)高可用×××測試:
高可用性是經過LVS的兩個DR1和DR2完成的。爲了模擬故障,先將DR1上的Keepalived服務中止或者乾脆關掉節點DR1,而後觀察備用DR2上Keepalived是否得到虛擬IP地址,即VIP 192.168.1.200
//在DR1查看哈,信息以下圖所示:
由上可知,虛擬IP地址在DR1節點上,即VIP 192.168.1.200
//在DR2查看哈,信息以下圖所示:
【思考】本身查查看,必定會成功!
方法1:命令檢驗法
使用命令ipvsadm –Ln和ip addr list/show查看虛擬IP漂移狀況來判斷。
//關閉DR1,模擬宕機,以下圖所示:
由上圖可知,DR1確實宕機了,而DR2獲得了虛擬IP地址(上圖紅框中的192.168.1.200)
且訪問依然正常,再次證實了高可用性,以下圖所示:
方法2:查看日誌法
//關閉DR1/中止DR1的keepalived服務,模擬宕機,在DR2中查看日誌,以下圖日誌所示:
//再查看DR2是否馬上檢測到DR1出現故障,確實很是快就檢測到DR1的故障,並立刻接管主機的虛擬IP地址(192.168.1.200),注意觀察上圖和下圖!
2)負載均衡測試:
爲了便於測試,咱們在Real Server1和Real Server2分別配置www服務的網頁且內容也好識別,以下圖所示:
方法1:客戶端瀏覽器中測試
由上可知,咱們在VMWare中的XP操做系統和物理機器win 7的瀏覽器中分別輸入http://192.168.1.200且不斷地刷新之均可訪問!
方法2:用壓力測試法
[root@CentOS6 ~]# ab –c 100 –n 10000 http://192.168.1.200/index.html
3)故障切換測試
故障切換是測試在某個節點出現故障後,keepalived監控模塊可否及時發現,而後屏蔽故障節點,同時將服務轉移到正常節點上執行之。
停掉節點Real Server2服務,模擬該節點出現故障,而後查查看主、備機器日誌信息:
方法1:查看主、備機器日誌信息
//先停掉節點Real Server2的httpd服務,以下圖所示:
//再查看DR1上的日誌,以下圖所示:
//再查看DR2上的日誌,以下圖所示:
由上可知,故障切換測試成功!
方法2:客戶端瀏覽器中測試
不斷刷新網頁一直就顯示如上圖所示:Real Server1內容!可見故障切換成功!
至此,《構建黃金組合LVS + Keepalived高可用的負載均衡集羣》配置成功!