Linux集群服务知识点总结及通过案例介绍如何实现高性能web服务
轉(zhuǎn)自:http://guodayong.blog.51cto.com/263451/1201101
一:集群相關(guān)概念及知識點介紹:
LVS(Linux Virtual System)
? ? ? ? ? ?本項目在1998年5月由章文嵩博士成立,是中國國內(nèi)最早出現(xiàn)的Free Software項目之一。linux虛擬服務(wù)器(LVS)項目在linux操作系統(tǒng)上提供了最常見的負(fù)載均衡軟件。
集群定義:
? ? ? ? ? ?集群(cluster)技術(shù)是一種較新的技術(shù),通過集群技術(shù),可以在付出較低成本的情況下獲得在性能、可靠性、靈活性方面的相對較高的收益,其任務(wù)調(diào)度則是集群系統(tǒng)中
的核心技術(shù)。本文就集群系統(tǒng)的定義、發(fā)展趨勢、任務(wù)調(diào)度等問題進(jìn)行了簡要論述。集群是一組相互獨立的、通過高速網(wǎng)絡(luò)互聯(lián)的計算機(jī),它們構(gòu)成了一個組,并以單一系統(tǒng)的模式加以管理。一個客戶與集群相互作用時,集群像是一個獨立的服務(wù)器。集群配置是用于提高可用性和可縮放性。
集群系統(tǒng)的主要優(yōu)點:(高可擴(kuò)展性、高可用性、高性能、高性價比)
目前運行在LINUX最主流的三種集群:
負(fù)載集群之一:LB(Load Balancing)
? ? ? ?負(fù)載均衡集群運行時,一般通過一個或者多個前端負(fù)載均衡器(Director Server),將用戶發(fā)來的請求資源信息,通過一種調(diào)度算法發(fā)送至到后端的一組應(yīng)用服務(wù)器(Real Server)上,從而達(dá)到整個系統(tǒng)的高性能和高可用性。這樣的計算機(jī)集群有時也被稱為服務(wù)器群(Server Farm)
一般高可用性集群和負(fù)載均衡集群會使用類似的技術(shù),或同時具有高可用性與負(fù)載均衡的特點。
負(fù)載集群之二:HA(High-Availability)
? ? ? ? 一般是指當(dāng)集群中有某個節(jié)點失效的情況下,其上的任務(wù)會自動轉(zhuǎn)移到其他正常的節(jié)點上。并且還可以將集群中的某節(jié)點進(jìn)行離線維護(hù)再上線,該過程并不影響
整個集群的運行。
高可用集群:為了保證服務(wù)一直在線的高可用能力的集群
衡量標(biāo)準(zhǔn):可用性=在線時間/(在線時間+故障處理時間)
負(fù)載集群之三:HP
? ? ? ? ?高性能計算集群采用將計算任務(wù)分配到集群的不同計算節(jié)點從而提高計算能力,因而主要應(yīng)用在科學(xué)計算領(lǐng)域。比較流行的HPC采用Linux操作系統(tǒng)和其它一些免費軟
件來完成并行運算。這一集群配置通常被稱為Beowulf集群。這類集群通常運行特定的程序以發(fā)揮HPC cluster的并行能力。這類程序一般應(yīng)用特定的運行庫, 比如專為科學(xué)計算設(shè)計的MPI庫。
HPC集群特別適合于在計算中各計算節(jié)點之間發(fā)生大量數(shù)據(jù)通訊的計算作業(yè),比如一個節(jié)點的中間結(jié)果或影響到其它節(jié)點計算結(jié)果的情況。
高性能處理集群:
? ? ? ? ?利用的是分布式存儲:分布式文件系統(tǒng),分布式文件系統(tǒng)把一個大任務(wù)切割為小任務(wù)、分別進(jìn)行處理
LVS系統(tǒng)結(jié)構(gòu):
? ? ? ? ? ? ? ? ? ? ?負(fù)載均衡器(Load Balancer)、服務(wù)器群組(Server Aarry)、共享存儲(Shared Storage)
負(fù)載均衡層:
? ? ? ? ? 整個集群服務(wù)最前端設(shè)備,它有一個或多個調(diào)度器(Director Server)組成,LVS軟件運行在調(diào)度服務(wù)器上。
調(diào)度服務(wù)器的功能:
?將用戶的請求,根據(jù)調(diào)度算法進(jìn)行IP分流,將數(shù)據(jù)包發(fā)送到后端應(yīng)用服務(wù)器上(Real Server),如果調(diào)度服務(wù)器安裝了監(jiān)控模塊Ldirectord,那么調(diào)度服務(wù)器會將出現(xiàn)故障的應(yīng)用服務(wù)器標(biāo)記為不可用,知道此應(yīng)用服務(wù)器恢復(fù)正常。
服務(wù)器群組層:
? ? ? ? ? ?這是由一個或者多個應(yīng)用程序服務(wù)器(Real Server)組成,并且每個應(yīng)用服務(wù)器提供相同的服務(wù),調(diào)度服務(wù)器會將用戶的請求定向到具體的應(yīng)用服務(wù)器上,然后由后端的應(yīng)用服務(wù)器響應(yīng)客戶端。
共享存儲層:
? ? ? ? ? ?功能只要是保證服務(wù)器群組中的應(yīng)用服務(wù)器提供數(shù)據(jù)的一致性。
共享存儲的實現(xiàn)方式:
? ? ? ? ? ?磁盤陣列、集群文件系統(tǒng)(OCFS2)
LVS是linux系統(tǒng)上的一種機(jī)制,類似于iptables,其相關(guān)屬性也是通過(ipvsadm)與iptables命令類似的方式定義的,
LVS是工作于linux系統(tǒng)內(nèi)核空間,通過內(nèi)核來提供工作,其工作空間在iptables的INPUT鏈上,當(dāng)客戶端請求到達(dá)INPUT鏈上以后,通過LVS規(guī)則的驗證,如果是內(nèi)部請求,發(fā)送至用戶空間,如果發(fā)現(xiàn)是集群,將此請求發(fā)送至POSTROUTING鏈,并交給后端應(yīng)用程序服務(wù)器來響應(yīng)用戶的請求。
注意:上面所提到LVS其實是工作在iptables的INPUT和postrouting鏈上的,所以在此系統(tǒng)上iptables和LVS不能同時存在。
LVS的組成:
ipvsadm:用于管理集群服務(wù)的命令行工具,工作于Linux系統(tǒng)中的用戶空間
ipvs:為lvs提供服務(wù)的內(nèi)核模塊,工作于內(nèi)核空間 (相對于是框架,通過ipvsadm添加規(guī)則,來實現(xiàn)ipvs功能)
注:在linux內(nèi)核2.4.23之前的內(nèi)核中模塊默認(rèn)是不存在的,需要自己手動打補丁,然后把此模塊編譯進(jìn)內(nèi)核才可以使用此功能
LVS類型:
? ? ? ? ? ? ? ? LVS-NAT模式、LVS-DR模式、LVS-TUN模式
NAT:(Network address translation)
? ? ? ? ? ?原理:把用戶的請求發(fā)來的IP包的IP報頭目的地址,通過LVS服務(wù)器轉(zhuǎn)換至后端提供服務(wù)的Real Server的地址并將用戶的請求報文發(fā)送至應(yīng)用服務(wù)器。而應(yīng)用服務(wù)器打開報文并響應(yīng)用戶請求發(fā)送并經(jīng)過LVS服務(wù)器,LVS服務(wù)器將源地址修改為LVS服務(wù)器接口上的VIP地址。
NAT模式特點:
| 123456789 | 用戶發(fā)來的請求和響應(yīng),都必須經(jīng)過LVS服務(wù)器。集群節(jié)點跟Director必須在同一個IP網(wǎng)絡(luò)中;RIP通常是私有地址,僅用于各集群節(jié)點間的通信;Director位于Client和Real Server之間,并負(fù)責(zé)處理進(jìn)出的所有通信;Realserver必須將網(wǎng)關(guān)指向DIP地址;支持端口映射;Realserver可以使用任意OS;LVS服務(wù)器必須有兩塊網(wǎng)卡較大規(guī)模應(yīng)該場景中,Director易成為系統(tǒng)瓶頸; |
DR:(Direct routing)
? ? ? ? ? ?DR模式工作在數(shù)據(jù)鏈路層,其原理,LVS服務(wù)器和應(yīng)用服務(wù)器使用同一個IP地址對外服務(wù),但只有LVS服務(wù)器對ARP請求進(jìn)行響應(yīng),所有應(yīng)用服務(wù)器對本身這個IP地址的ARP請求保持靜默。網(wǎng)關(guān)會把所有的ARP請求定向至LVS服務(wù)器,而LVS服務(wù)器收到用戶請求數(shù)據(jù)報文,根據(jù)調(diào)度算法進(jìn)行IP分流,然后相應(yīng)的MAC地址的修改,發(fā)送至后端對應(yīng)的應(yīng)用服務(wù)器。
注:由于LVS服務(wù)器對二層數(shù)據(jù)包進(jìn)行修改,所以LVS服務(wù)器和應(yīng)用服務(wù)器必須在同一個廣播域。
DR模式特點:
| 12345 | 集群節(jié)點跟director必須在同一個物理網(wǎng)絡(luò)中;RIP可以使用公網(wǎng)地址,實現(xiàn)便捷的遠(yuǎn)程管理和監(jiān)控;Director僅負(fù)責(zé)處理入站請求,響應(yīng)報文則由Real Server直接發(fā)往客戶端;Real Server不能將網(wǎng)關(guān)指向DIP;不支持端口映射; |
注:在DR模式中,LVS服務(wù)器只負(fù)責(zé)接收用戶請求,根據(jù)調(diào)度算法及IP分流,直接路由轉(zhuǎn)發(fā),其響應(yīng)報文交給Real Server自行處理。
? ? ? ? ? ?DR模式是三種模式當(dāng)中性能最好的,唯一的缺陷是LVS服務(wù)器和后端的應(yīng)用服務(wù)器必須在同一個廣播域中,因此不能實現(xiàn)集群的跨網(wǎng)端應(yīng)用。
TUN (IP Tunnel模式)
? ? ? ? ? ?TUN模式,LVS將TCP/IP請求進(jìn)行重新封裝并轉(zhuǎn)發(fā)給目標(biāo)應(yīng)用服務(wù)器,有目標(biāo)應(yīng)用程序服務(wù)器對用戶請求做出相應(yīng)。LVS Router和Real Server通過Tp Tunnel通過隧道技術(shù)
進(jìn)行轉(zhuǎn)發(fā),因此兩者可以存在不同的網(wǎng)絡(luò)當(dāng)中。
注:由于應(yīng)用服務(wù)器需要對LVS發(fā)送的報文進(jìn)行還原,也就是說應(yīng)用服務(wù)器也要支持Ip Tunnel協(xié)議。(Network options)
TUN模式特點:
| 123456 | 集群節(jié)點可以跨越Internet;RIP必須是公網(wǎng)地址;Director僅負(fù)責(zé)處理入站請求,響應(yīng)報文則由Real Server直接發(fā)往客戶端;Real Server網(wǎng)關(guān)不能指向director;只有支持隧道功能的OS才能用于Real Server;不支持端口映射; |
LVS負(fù)載均衡八種調(diào)度算法:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?rr-->wrr-->lc-->wlc-->lblc-->lblcr-->dh-->sh
輪叫(Round Robin):
? ? ? ? ? ?該算法將用戶請求有次序地分發(fā)到后端的應(yīng)用服務(wù)器,均等看待所有Real Server,而并不計算具體服務(wù)器上的鏈接和負(fù)載。
加權(quán)輪叫(Weighted Round Robin):
? ? ? ? ? ?該調(diào)度算法根據(jù)各個應(yīng)用服務(wù)器的不同負(fù)載能力,給服務(wù)器設(shè)置不同的權(quán)值,處理能力強的應(yīng)用服務(wù)器的權(quán)值設(shè)置大點,來響應(yīng)更多的用戶請求。
最少連接(Least Connections):
? ? ? ? ? ?該算法將用戶發(fā)送的請求分配到連接做少的應(yīng)用服務(wù)器上。
加權(quán)最少連接(Weighted Least Connections):
? ? ? ? ? ?該算法根據(jù)應(yīng)用服務(wù)器的不同負(fù)載能力,設(shè)置不同大小不同的權(quán)值,權(quán)值較大并且連接請求數(shù)少的應(yīng)用服務(wù)器則優(yōu)先分配用戶請求信息。
基于局部性最少連接:(Locality-Based Least Connections):
? ? ? ? ? ?該算法針對目標(biāo)IP地址的負(fù)載均衡算法,主要用于緩存集群系統(tǒng)。此算法會根據(jù)用戶請求的目標(biāo)IP地址找出與目標(biāo)地址最近的應(yīng)用服務(wù)器,如果服務(wù)器沒有超載,則請求被分發(fā)到該應(yīng)用服務(wù)器,如果服務(wù)器不可用或者負(fù)載較大,則使用最少連接算法,選擇目標(biāo)應(yīng)用服務(wù)器
帶復(fù)制的基于局部性最少連接(Locality-Based Least Connections wiht Replication)
? ? ? ? ? ?該算法也是針對目標(biāo)IP地址的負(fù)載均衡算法,主要用于緩存集群系統(tǒng)。域LBLC區(qū)別在于,前者維護(hù)一個IP地址到一組服務(wù)器的映射。而后者則是維護(hù)一個IP地址到一臺應(yīng)用服務(wù)器的映射。
目標(biāo)地址散列(Destination Hashing)
? ? ? ? ? ?該算法將用戶請求的目標(biāo)地址作為散列鍵,并嘗試從靜態(tài)分配的散列表中找出對應(yīng)的應(yīng)用服務(wù)器。如果目標(biāo)應(yīng)用服務(wù)器沒有超載,那么將用戶的請求信息分發(fā)至該應(yīng)用服務(wù)里,否則返回空。
源地址散列(Source Hashing)
? ? ? ? ? ?該算法將請求的源地址作為散列鍵,并嘗試從靜態(tài)分配的散列表中找出對應(yīng)的應(yīng)用服務(wù)器。如果目標(biāo)應(yīng)用服務(wù)器可用并且沒有超載,那么將用戶請求的信息分發(fā)至此應(yīng)用服務(wù)器,否則返回空。
LVS IP Address Name Conventions:(LVS Ip-address 命名規(guī)范)
| 12345 | Director's IP (DIP) address :中間層,根據(jù)不同模式,來接收并響應(yīng)用戶的請求。Virtual IP (VIP) address:向外提供服務(wù)的地址。Real IP (RIP) address :Real Server IP:后端提供應(yīng)用服務(wù)的主機(jī)地址。Director's IP (DIP) address :和內(nèi)部的IP通信所使用的地址:設(shè)置在Director Server上Client computer's IP (CIP) address:客戶端地址 |
ipvsadm命令詳細(xì)介紹:
pvsadm: 管理集群服務(wù)的命令行工具,而ipvs系統(tǒng)內(nèi)核中的一個模塊
ipvsadm命令的基本使用:
| 1234567891011121314151617181920 | -A:在內(nèi)核的虛擬服務(wù)器列表中添加一條VIP記錄-E:修改內(nèi)核虛擬服務(wù)器列表中的一條VIP記錄-D:刪除內(nèi)核虛擬服務(wù)器列表中的一條VIP記錄-C:清空內(nèi)核虛擬服務(wù)器列表中的所有VIP記錄-S:保存虛擬服務(wù)器規(guī)則-R:恢復(fù)虛擬服務(wù)器策略規(guī)則-a:在內(nèi)核虛擬服務(wù)器列表中添加一個應(yīng)用服務(wù)器的地址。-e:修改一個虛擬服務(wù)器列表中的一條應(yīng)用服務(wù)器地址記錄-d:刪除一個虛擬服務(wù)器列表中的一條應(yīng)用服務(wù)器地址記錄-L/-l: 查看內(nèi)核虛擬服務(wù)器列表-Z:將內(nèi)核中的虛擬服務(wù)器計數(shù)清為0-t service-address:指定虛擬服務(wù)器使用TCP服務(wù)-u service-address:指定虛擬服務(wù)器使用UDP服務(wù)-s scheduler:指定調(diào)度算法:-p timeout:在應(yīng)用服務(wù)器上的持續(xù)服務(wù)時間,單位為秒-r service-address:指定應(yīng)用服務(wù)器的地址-g:指定LVS工作模式為直接路由(DR-defalut)-I:指定LVS工作模式為隧道模式(Ip Tunnel)-m:指定LVS工作模式為地址轉(zhuǎn)換模式(NAT)-w:設(shè)定應(yīng)用服務(wù)器的權(quán)值 |
二:項目案例-如圖
LVS/DR+Keepalived 實現(xiàn)lvs高可用,并提供web服務(wù)負(fù)載均衡
案例環(huán)境:版本及相及IP地址的分配
名稱(Name) | Ip_address |
LVS-DR-DIP:eth0 LVS-DR-DIP:eth0 | 172.16.88.88/16 172.16.88.66/16 |
LVS-DR-VIP:eth0:0 | 172.16.88.100/16 |
WEB1-Real-Server:eth0 | 172.16.88.10/16 |
WEB2-Real-Server:eth0 | 172.16.88.20/16 |
軟件及版本:Vmware ?Station-RHEL 5.8(2.6.18) | |
實驗拓?fù)鋱D如下:
配置過程如下:
Realserver1:172.16.88.10/16配置
第一步:設(shè)置主機(jī)名、IP地址、hosts文件IP地址和主機(jī)名對應(yīng)關(guān)系,及關(guān)閉selinux
| 12345678910111213141516 | [root@localhost ~]# sed -i 's@\(HOSTNAME=\).*@\1Real1.example.com@g'? /etc/sysconfig/network[root@localhost ~]# hostname Real1.example..com[root@localhost ~]# vim /etc/hosts172.16.88.10??? Real1.example.com?? Real1172.16.88.20??? Real2.example.com?? Real2[root@Real1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]# Real Service Ip_address InformationDEVICE=eth0BOOTPROTO=staticIPADDR=172.16.88.10NETMASK=255.255.0.0GATEWAY=172.16.0.1ONBOOT=yesHWADDR=00:0c:29:4b:88:1f[root@Real1 ~]# service network restart |
第二步:建立Realserver之間建立SSH互信及時間同步:
| 12345 | [root@Real1 ~]# ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''[root@Real1 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@172.16.88.20[root@Real1 ~]# service ntpd stop && chkconfig ntpd off && ntpdate 172.16.0.1[root@Real1 ~]# crontab -e*/3 * * * * /sbin/ntpdate 172.16.0.1 &> /dev/null |
第三步:創(chuàng)建Shell_Scripts,在這里,我們的RealServer提供的是web服務(wù)器,所以在這里我們采用腳本的方式來對Realserver進(jìn)行配置,腳本內(nèi)容如下:
[root@Real1 ~]# vim /scripts/realserver.sh ? ? ? ? ? ? ?##創(chuàng)建腳本實現(xiàn)vip地址以和默認(rèn)路由的設(shè)置以及對外網(wǎng)ARP請求的相關(guān)設(shè)置
| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 | #!/bin/bash## Script to start LVS DR real server.# chkconfig: - 90 10# description: LVS DR real server#.? /etc/rc.d/init.d/functionsVIP=172.16.88.100host=`/bin/hostname`case "$1" instart)???????# Start LVS-DR real server on this machine.????????/sbin/ifconfig lo down????????/sbin/ifconfig lo up????????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????????/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up????????/sbin/route add -host $VIP dev lo:0;;stop)????????# Stop LVS-DR real server loopback device(s).????????/sbin/ifconfig lo:0 down????????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;;status)????????# Status of LVS-DR real server.????????islothere=`/sbin/ifconfig lo:0 | grep $VIP`????????isrothere=`netstat -rn | grep "lo:0" | grep $VIP`????????if [ ! "$islothere" -o ! "isrothere" ];then????????????# Either the route or the lo:0 device????????????# not found.????????????echo "LVS-DR real server Stopped."????????else????????????echo "LVS-DR real server Running."????????fi;;*)????????????# Invalid entry.????????????echo "$0: Usage: $0 {start|status|stop}"????????????exit 1;;esac |
第四步:給此腳本執(zhí)行權(quán)限并安裝httpd二進(jìn)制軟件包,提供web服務(wù)
| 12345678 | [root@Real1 ~]#? chmod +x /scripts/realserver.sh[root@Real1 ~]# .realserver.sh start????? ##運行此腳本,傳遞一個參數(shù)為start,即可設(shè)置vip地址、默認(rèn)路由、對與外網(wǎng)arp請求參數(shù)[root@Real1 ~]# service ntpd stop && ntpdate 172.16.0.1???? ##這里實現(xiàn)時間同步,使用的ntpdate+crontab來實現(xiàn),也可以通過system-config-date來做相關(guān)設(shè)置即可。[root@Real1 ~]# crontab -e*/3??? *?? *?? *?? *?? /sbin/ntpdate 172.16.0.1 &>/dev/null[root@Real1 ~]# yum install httpd -y[root@Real1 ~]# echo "Real1 Server-1" > /var/www/html/index.txt????? ##提供網(wǎng)頁內(nèi)容,用于測試[root@Real1 ~]# service httpd restart |
[root@Real1 ~]# netstat -ntupl | grep 80 ? && ? curl httpd://172.16.88.10
這樣Realserver1的基本設(shè)置就完成了,Realserver2的設(shè)置和Realserver1完全相同,所以筆者在這里就不再演示。
[root@Real2 ~]# curl http://172.16.88.20
Director1 Server Configure
Keepalived在這里主要用作RealServer的健康狀態(tài)檢查以及LoadBalance主機(jī)(172.16.88.88/16)和Backup主機(jī)(172.16.88.66/16)之間failover的實現(xiàn)
下面為二臺lvs調(diào)度服務(wù)器,安裝lvs+keepalived軟件包。安裝lvs軟件包,因為keepalived是運行在lvs之上的,因此lvs及keepalived必須裝在一個系統(tǒng)里面。
第一步:設(shè)置主機(jī)名和/etc/hosts對照關(guān)系及兩臺Director調(diào)度器之間建立SSH互信:
Director Router1操作步驟
| 123456789 | [root@localhost ~]# setup??? ##設(shè)置IP地址為172.16.88.88/16[root@localhost ~]# sed -i 's@\(HOSTNAME=\).*@\1Director1.example.com@g' /etc/sysconfig/network??? ##修改主機(jī)名[root@localhost ~]# hostname Director1.example.com[root@localhost ~]# logout???? ##可以選擇注銷和重啟來使配置文件生效[root@Director1 ~]# vim /etc/hosts??? ##添加IP地址和主機(jī)名的映射關(guān)系172.16.88.88??????? Director1.example.com??????? Director1172.16.88.66??????? Director2.example.com??????? Director2[root@Director1 ~]# ssh-keygen -t rsa -f ~/.ssl/id_rsa -P ''???????????????? ##建立兩臺調(diào)度服務(wù)器之間的SSH互信,用于Director服務(wù)之間復(fù)制文件,也可以使用跳板級來實現(xiàn)部署。[root@Director1 ~]# ssh-copy-id -i ./.ssl/id_rsa.pub Director2 |
第二步:IP地址信息及開路由轉(zhuǎn)發(fā)功能:
[root@Director ~]# sysctl -p ? ? ##重新加載/etc/sysctl.conf配置文件
Director Router2操作步驟:
第一步:配置IP、主機(jī)名、hosts 、SSH互信
| 123456789 | [root@localhost ~]# setup?? ##設(shè)置IP地址為172.16.88.66/16[root@localhost ~]# sed -i 's@\(HOSTNAME=\).*@\1Director2.example.com@g' /etc/sysconfig/network[root@localhost ~]# hostname Director2.example.com[root@localhost ~]# logout??? ##重新登錄,讀取配置文件(/etc/sysconfig/network)[root@Director2 ~]# vim /etc/hosts?? ##添加如下兩行,完成IP地址和主機(jī)名對應(yīng)關(guān)系,然后保存退出即可。172.16.88.88Director1.example.comDirector1172.16.88.66Director2.example.comDirector2[root@Director2 ~]# ssh-keygen -t rsa -f ~/.ssl/id_rsa -P ''[root@Director2 ~]# ssh-copy-id -i ./.ssl/id_rsa.pub Director2 ##以上的操作步驟,就完成了兩臺調(diào)度器之間建立SSH互信工作 |
第二步:安裝ipvsadm和keepalived軟件包
| 12 | [root@Director1 ~]# yum install ipvsadm -y[root@Director1 ~]# yum --nogpgcheck localinstall keepalived-1.2.7-5.el5.i386.rpm -y |
第三步:keepalived主配置文件格式及對每一個參數(shù)做詳細(xì)的解釋:
keepalived分為三個部分:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?全局配置、VRRP定義配置、虛擬服務(wù)器定義
全局配置格式:
| 123456789 | global_defs {???notification_email {?????root@localhost? ##接收郵件的用戶???}???notification_email_from keepalived@localhost?? ##發(fā)件用戶為keepalived???smtp_server 127.0.0.1? ##郵件服務(wù)器???smtp_connect_timeout 30??? ##連接請求超時時常???router_id LVS_DEVEL???? ##路由ID} |
VRRP定義配置格式:
| 1234567891011121314 | vrrp_instance VI_1 {??? ##定義虛擬路由????state MASTER??????? ##兩種狀態(tài)分別是{MASTER|BACKUP}????interface eth0????? ##對外提供服務(wù)及通告所使用的接口????virtual_router_id 51?? ##虛擬路由標(biāo)識ID????priority 101??? ##{MASTER|BACKUP}的優(yōu)先級,MASTER的優(yōu)先級比BACKUP的優(yōu)先級大????advert_int 1?? ##同步通知間隔,MASTER與BACKUP負(fù)載均衡器之間同步檢查的時間間隔,單位為秒????authentication {????????? ##驗證類型和驗證密碼,目前類型主要有PASS、AH兩種,通常使用的類型為PASS。????????auth_type PASS????????auth_pass keepalived????}????virtual_ipaddress {??? ##虛擬ip(VIP)地址,可以有多個地址,每個地址占一行,不需要指定子網(wǎng)掩碼。????????172.16.88.100/16 dev eth0 label eth0:0????}} |
虛擬服務(wù)器配置格式:
| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 | virtual_server 172.16.88.1 80 {? ##虛擬服務(wù)器(virtual_server)所使用的VIP地址及端口,實現(xiàn)負(fù)責(zé)均衡。????delay_loop 6???? ##健康狀態(tài)檢查時間間隔,單位是秒。????lb_algo rr??? ##負(fù)載均衡調(diào)度算法,LVS總共有八種調(diào)度算法,互聯(lián)網(wǎng)應(yīng)用常使用wlc或rr作為調(diào)度算法。????lb_kind DR?? ##負(fù)載均衡模型,LVS包括三種模型,分別為DR、NAT、TUN。????nat_mask 255.255.0.0????persistence_timeout 50?? ##會話保持時間(持久連接),默認(rèn)為50秒。????protocol TCP???? ##轉(zhuǎn)發(fā)所使用的協(xié)議(protocol),{TCP|UPD}????real_server 172.16.88.10 80 {??? ##后端應(yīng)用服務(wù)器(real_server),用于提供用戶的請求,有時也稱為應(yīng)用服務(wù)器群組。????????weight 1?? ##設(shè)定權(quán)值,對rr沒有意義,一般應(yīng)用服務(wù)器性能好的,可以將其權(quán)值設(shè)置大寫,這樣此應(yīng)用服務(wù)器就能分擔(dān)分擔(dān)更多的用戶請求資源并響應(yīng)。????????HTTP_GET {????? ##健康狀態(tài)檢測{HTTP_GET|SSL_GET(https)|TCP_CHECK|SMTP_CHECK|MISC_CHECK??????????? 權(quán)值小的,根據(jù)不同的調(diào)度算法分擔(dān)的請求量會少些。????????????url {??????????????path /??????????????status_code 200?? ##頁面返回代碼值????????????}????????????connect_timeout 3??? ##連接超時時常????????????nb_get_retry 3?????? ##連接重試的次數(shù)????????????delay_before_retry 3? ##延遲所使用的時間????????}????}????real_server 172.16.88.10 80 {????????weight 1????????HTTP_GET {????????????url {???????????????path /???????????????status_code 200????????????}????????????connect_timeout 3????????????nb_get_retry 3????????????delay_before_retry 3????????????}????}????real_server 172.16.88.20 80 {????????weight 1????????HTTP_GET {????????????url {???????????????path /???????????????status_code 200????????????}????????????connect_timeout 3????????????nb_get_retry 3????????????delay_before_retry 3????????????}????}} |
第四步:將此Director1上的keepalived主配置文件復(fù)制到Director2上,并將其狀態(tài)以及優(yōu)先級修改為BACKUP和100,然后保存并退出即可。
| 1234 | [root@Director2 ~]#[root@Director2 ~]# yum install ipvsadm -y[root@Director2 ~]# yum --nogpgcheck localinstall keepalived-1.2.7-5.el5.i386.rpm -y[root@Director1 ~]# scp /etc/keepalived/keepalived.conf Direcotr2:/etc/keepalived/keepalived.conf |
第五步:啟動keepalived服務(wù)器并查看vip配置在哪臺Director上。
| 123 | [root@Director1 ~]# service keepalived restart???? ##兩臺lvs同時啟動keepalived服務(wù)[root@Director2 ~]# service keepalived restart[root@Director1 ~]# ifconfig??? ##查看VIP地址是否配置在Director1調(diào)度服務(wù)器上 |
查看ipvsadm的虛擬服務(wù)器真實存在的Realserver主機(jī)記錄
| 1 | [root@Director1 ~]# ipvsadm -L -n |
第六步:如何在維護(hù)模式下,模擬LVS服務(wù)器發(fā)生故障
只需在keepalived配置文件中,添加如下內(nèi)容(vrrp實例之外添加如下內(nèi)容):
| 1234567 | vrrp_script chk_schedown {script "[ -e /etc/keepalived/down ] && exit1 || exit 0 "inerval 1weight -5fall 2rise 1} |
當(dāng)vrrps事務(wù)發(fā)生改變時,運行此腳本:只需要在vrrp實例內(nèi)添加如下內(nèi)容即可
| 123 | track_script {????chk_schedown} |
在兩臺調(diào)度服務(wù)器上,重啟keepalived進(jìn)程,加載主配置文件
當(dāng)手動在/etc/keepalived目錄中創(chuàng)建down文件時,主服務(wù)就會變成backup服務(wù)器,則從backup模式轉(zhuǎn)換為master模式
| 12 | 手動創(chuàng)建down文件,查看主從是否切換[root@Director1 ~]# touch /etc/keepalived/down |
1、查看日志信息
日志分析:
| 123 | ???通過日志信息,不難發(fā)現(xiàn)兩臺調(diào)度服務(wù)器重新選舉主服務(wù)來提供服務(wù),因為在Director1相關(guān)目錄上手動創(chuàng)建了down文件,觸發(fā)了chk_schedown腳本,所以Director1的優(yōu)先級從101變?yōu)榱?6,所以從主服務(wù)器變?yōu)榱藦姆?wù)器(BACKUP)移除vip地址,因此Director2變?yōu)橹?#xff08;MASTER)服務(wù)器,添加vip地址,以及自主發(fā)起arp請求及響應(yīng)arp請求,來更新記錄。 |
2、查看vip地址相關(guān)信息
第七步:如果提供的兩臺應(yīng)用服務(wù)里(web),由于其他原因出現(xiàn)故障,該如何解決呢:
| 12345 | 只需要在/etc/keepalived/keepalived.conf,在virtual_server中添加如下內(nèi)容:[root@Director1 ~]# vim /etc/keepalived/keepalived.confsorry_service 127.0.0.1 :80然后分別重啟keepalived服務(wù)進(jìn)程注:前提兩臺調(diào)度服務(wù)器都提供httpd服務(wù),并且提供web錯誤頁面信息 |
第八步:模擬兩臺應(yīng)用程序服務(wù)出現(xiàn)故障
| 1234 | [root@Real1 ~]# /etc/init.d/httpd stopStopping httpd:??????????????????????????????????????????? [? OK? ][root@Real1 ~]# ssh Real2 'service httpd stop'Stopping httpd: [? OK? ] |
第九步:到調(diào)度服務(wù)器上利用ipvsadm工具查看ipvs規(guī)則
測試一:利用windows客戶端訪問172.16.88.100看是否發(fā)生變化:
測試二:到其中一臺應(yīng)用程序服務(wù)器從新啟動httpd進(jìn)程,并查看ipvsadm規(guī)則
| 12 | [root@Real1 ~]# service httpd restart[root@Director2 ~]# ipvsadm -L -n |
再次通過windows客戶端訪問網(wǎng)頁,看是否提供正常web服務(wù)
三:通過corosync+pacemaker實現(xiàn)web服務(wù)高可用,主要實現(xiàn)步驟:
既然給web應(yīng)用服務(wù)器做高可用,那么httpd進(jìn)程就不能開機(jī)自動運行,而且當(dāng)前httpd服務(wù)屬于停止?fàn)顟B(tài),有corosync來自動啟動某臺的httpd進(jìn)程
| 12 | [root@Real1 ~]# service httpd stop? &&? chkconfig httpd off[root@Real2 ~]# service httpd stop? &&? chkconfig httpd off |
注:在安裝corosync+pacemaker軟件包之前,使用yum來安裝它們所依賴的軟件包:
| 1 | [root@Real1 ~]# yum install libibverbs librdmacm lm_sensors libtool-ltdl openhpi-libs openhpi perl-TimeDate -y |
第一步:在兩臺Realserver應(yīng)用服務(wù)器上安裝corosync+pacemaker軟件包,相應(yīng)軟件包列表:
| 123456789101112131415 | cluster-gluecluster-glue-libsheartbeatopenaislibresource-agentscorosyncheartbeat-libspacemakercorosyncliblibesmtppacemaker-libs注:軟件包下載地址:http://clusterlabs.org/rpm/。請根據(jù)硬件平臺及操作系統(tǒng)類型選擇對應(yīng)的軟件包;這里建議每個軟件包都使用目前最新的版本。使用如下命令安裝:# yum -y --nogpgcheck localinstall *.rpm?? 略過驗證碼檢測,使用本地安裝 |
第二步:配置corosync和authkeys文件
| 123456789101112131415 | [root@Real1 ~]# cp /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf[root@Real1 ~]# vim /etc/corosync/corosync.conf?? ##編輯corosync主配置文件,并添加如下內(nèi)容aisexec {????user: root????group: root}service {????name: pacemaker????ver: 0????use_mgmtd: yes}并設(shè)定此配置文件中 bindnetaddr后面的IP地址為你的網(wǎng)卡所在網(wǎng)絡(luò)的網(wǎng)絡(luò)地址bindnetaddr 172.16.0.0生成節(jié)點間通信時用到的認(rèn)證密鑰文件:[root@Real1 ~]# corosync-keygen |
注:Real2上也做同樣的操作,例如安裝包依賴關(guān)系及安裝corosync+pacemaker軟件包。
第三步:將Realserver1上的corosync和authkey復(fù)制至Realserver2上即可:
| 1 | [root@Real1 ~]# scp -p corosync authkey? Real2:/etc/corosync/???? ##使用-p選項可以保留原來的屬性信息 |
第四步:分別為兩個節(jié)點創(chuàng)建corosync,生成的日志所在的目錄:
| 12 | [root@Real1 ~]# mkdir /var/log/cluster[root@Real1 ~]# ssh Real2? 'mkdir /var/log/cluster' |
第五步:分別在每個節(jié)點上啟動corosync進(jìn)程服務(wù)
| 123 | [root@Real1 ~]# service corosync restart[root@Real1 ~]# ssh Real2 'service corosync restart'[root@Real1 ~]# crm status |
◆ 查看corosync啟動的相關(guān)進(jìn)程
| 1 | [root@Real1 ~]# ps auxf |
第六步:檢查corosync相關(guān)日志信息:
1:查看corosync引擎是否正常啟動:
| 1234567 | # grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/cluster/corosync.logMay 19 15:46:30 corosync [MAIN? ] Corosync Cluster Engine ('1.2.7'): started and ready to provide service.May 19 15:46:30 corosync [MAIN? ] Successfully read main configuration file '/etc/corosync/corosync.conf'.May 19 15:46:51 corosync [MAIN? ] Corosync Cluster Engine exiting with status 0 at main.c:170.May 19 15:46:54 corosync [MAIN? ] Corosync Cluster Engine ('1.2.7'): started and ready to provide service.May 19 15:46:54 corosync [MAIN? ] Successfully read main configuration file '/etc/corosync/corosync.conf'.May 19 15:48:00 corosync [MAIN? ] Corosync Cluster Engine exiting with status 0 at main.c:170. |
2、查看初始化成員節(jié)點通知是否正常發(fā)出:
| 12345 | # grep? TOTEM? /var/log/cluster/corosync.logMay 19 15:46:54 corosync [TOTEM ] Initializing transport (UDP/IP).May 19 15:46:54 corosync [TOTEM ] Initializing transmit/receive security: libtomcrypt SOBER128/SHA1HMAC (mode 0).May 19 15:46:56 corosync [TOTEM ] The network interface [172.16.88.10] is now up.May 19 15:46:57 corosync [TOTEM ] A processor joined or left the membership and a new membership was formed. |
3、查看pacemaker是否正常啟動:
| 123456 | # grep pcmk_startup /var/log/cluster/corosync.logMay 19 15:46:33 corosync [pcmk? ] info: pcmk_startup: CRM: InitializedMay 19 15:46:33 corosync [pcmk? ] Logging: Initialized pcmk_startupMay 19 15:46:33 corosync [pcmk? ] info: pcmk_startup: Maximum core file size is: 4294967295May 19 15:46:33 corosync [pcmk? ] info: pcmk_startup: Service: 9May 19 15:46:33 corosync [pcmk? ] info: pcmk_startup: Local hostname: Real1.example.com |
第七步:使用如下命令查看集群節(jié)點的啟動狀態(tài):
第八步:配置集群工作屬性及集群資源:
◆ 禁用stonith設(shè)備和關(guān)閉法定票數(shù)的默認(rèn)策略為ingore
◆ 添加集群資源(vip、httpd):
第九步:查看資源的啟用狀態(tài)(crm stauts)
◆ 如果想讓兩個資源運行在一個Realserver中的話,需要定義組資源,然后將vip和webservice加入到組中即可。
◆ 用windows客戶端測試:
第十步:如果其中一個節(jié)點發(fā)生故障,另一個節(jié)點就會取代發(fā)生故障的節(jié)點,然后對外提供服務(wù)。
| 12 | [root@Real1 ~]# crm node standby[root@Real1 ~]# crm status |
再次使用windows客戶端測試:
◆ 我們知道限制資源運行在同一個節(jié)點上,有兩種方法(定義資源組和設(shè)置排列約束),下面來如何使用排列約束來限制兩個資源在同一個節(jié)點上,在設(shè)置前,我們將資源組web收到刪除。
| 12345678 | [root@Real1 ~]# crm resourcecrm(live)resource# stop webcrm(live)resource# cleanup webcrm(live)resource# cdcrm(live)# configurecrm(live)configure# delete webcrm(live)configure# verifycrm(live)configure# commit |
◆ 下面就可以使用排列約束來限制兩個資源運行在同一個節(jié)點上:
◆ 使用crm status命令查看資源運行節(jié)點狀態(tài)并使用netstat
◆ 設(shè)置資源啟動順序
◆ 手動遷移資源到另一個節(jié)點:
◆ 用windows客戶端測試
◆ 定義資源的黏貼性(傾向性),vip資源更傾向運行在Real1主機(jī)上:
◆ 使用crm status命令查看當(dāng)前資源運行在那個節(jié)點上,并手動遷移資源,然后手動在上線,看是否vip資源更傾向于節(jié)點一上。
| 123456789101112131415161718192021222324252627282930313233343536373839 | [root@Real1 ~]# crm status???? ##查看當(dāng)前資源運行在那個節(jié)點上============Last updated: Sun May 26 22:17:02 2013Stack: openaisCurrent DC: Real1.example.com - partition with quorumVersion: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f2 Nodes configured, 2 expected votes2 Resources configured.============Online: [ Real1.example.com Real2.example.com ]?httpd? (lsb:httpd):??? Started Real1.example.com?vip??? (ocf::heartbeat:IPaddr):??? Started Real1.example.com[root@Real1 ~]# crm node standby? ##手動遷移資源,并成為被動節(jié)點[root@Real1 ~]# crm status============Last updated: Sun May 26 22:17:26 2013Stack: openaisCurrent DC: Real1.example.com - partition with quorumVersion: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f2 Nodes configured, 2 expected votes2 Resources configured.============Node Real1.example.com: standbyOnline: [ Real2.example.com ]?httpd? (lsb:httpd):??? Started Real2.example.com?vip??? (ocf::heartbeat:IPaddr):??? Started Real2.example.com[root@Real1 ~]# crm node online??? ##將節(jié)點變?yōu)橹鞴?jié)點[root@Real1 ~]# crm status?? ##再次查看資源,因為默認(rèn)黏貼值為0,所以發(fā)現(xiàn)vip更傾向運行在節(jié)點Real1節(jié)點上============Last updated: Sun May 26 22:17:48 2013Stack: openaisCurrent DC: Real1.example.com - partition with quorumVersion: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f2 Nodes configured, 2 expected votes2 Resources configured.============Online: [ Real1.example.com Real2.example.com ]?httpd? (lsb:httpd):??? Started Real1.example.com?vip??? (ocf::heartbeat:IPaddr):??? Started Real1.example.com |
◆ 設(shè)定默認(rèn)黏貼值為200,然后再手動遷移資源,看vip資源是否更傾向于運行在哪個節(jié)點上。
| 123456789101112131415161718192021222324252627282930313233343536373839 | [root@Real1 ~]# crm status============Last updated: Sun May 26 22:29:50 2013Stack: openaisCurrent DC: Real1.example.com - partition with quorumVersion: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f2 Nodes configured, 2 expected votes2 Resources configured.============Online: [ Real1.example.com Real2.example.com ]?httpd? (lsb:httpd):??? Started Real1.example.com?vip??? (ocf::heartbeat:IPaddr):??? Started Real1.example.com[root@Real1 ~]# crm node standby[root@Real1 ~]# crm status============Last updated: Sun May 26 22:30:05 2013Stack: openaisCurrent DC: Real1.example.com - partition with quorumVersion: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f2 Nodes configured, 2 expected votes2 Resources configured.============Node Real1.example.com: standbyOnline: [ Real2.example.com ]?httpd? (lsb:httpd):??? Started Real2.example.com?vip??? (ocf::heartbeat:IPaddr):??? Started Real2.example.com[root@Real1 ~]# crm node online[root@Real1 ~]# crm status??? ##因為資源的默認(rèn)粘性為200,大于Real1節(jié)點上的粘性值,所以vip資源更傾向運行在節(jié)點2上。============Last updated: Sun May 26 22:30:36 2013Stack: openaisCurrent DC: Real1.example.com - partition with quorumVersion: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f2 Nodes configured, 2 expected votes2 Resources configured.============Online: [ Real1.example.com Real2.example.com ]?httpd? (lsb:httpd):??? Started Real2.example.com?vip??? (ocf::heartbeat:IPaddr):??? Started Real2.example.com |
轉(zhuǎn)載于:https://blog.51cto.com/8718813/1610558
總結(jié)
以上是生活随笔為你收集整理的Linux集群服务知识点总结及通过案例介绍如何实现高性能web服务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3211: 花神游历各国
- 下一篇: python for CFD(前两步问题