Linux集群服务知识点总结及通过案例介绍如何实现高性能web服务
轉自:http://guodayong.blog.51cto.com/263451/1201101
一:集群相關概念及知識點介紹:
LVS(Linux Virtual System)
? ? ? ? ? ?本項目在1998年5月由章文嵩博士成立,是中國國內最早出現的Free Software項目之一。linux虛擬服務器(LVS)項目在linux操作系統上提供了最常見的負載均衡軟件。
集群定義:
? ? ? ? ? ?集群(cluster)技術是一種較新的技術,通過集群技術,可以在付出較低成本的情況下獲得在性能、可靠性、靈活性方面的相對較高的收益,其任務調度則是集群系統中
的核心技術。本文就集群系統的定義、發展趨勢、任務調度等問題進行了簡要論述。集群是一組相互獨立的、通過高速網絡互聯的計算機,它們構成了一個組,并以單一系統的模式加以管理。一個客戶與集群相互作用時,集群像是一個獨立的服務器。集群配置是用于提高可用性和可縮放性。
集群系統的主要優點:(高可擴展性、高可用性、高性能、高性價比)
目前運行在LINUX最主流的三種集群:
負載集群之一:LB(Load Balancing)
? ? ? ?負載均衡集群運行時,一般通過一個或者多個前端負載均衡器(Director Server),將用戶發來的請求資源信息,通過一種調度算法發送至到后端的一組應用服務器(Real Server)上,從而達到整個系統的高性能和高可用性。這樣的計算機集群有時也被稱為服務器群(Server Farm)
一般高可用性集群和負載均衡集群會使用類似的技術,或同時具有高可用性與負載均衡的特點。
負載集群之二:HA(High-Availability)
? ? ? ? 一般是指當集群中有某個節點失效的情況下,其上的任務會自動轉移到其他正常的節點上。并且還可以將集群中的某節點進行離線維護再上線,該過程并不影響
整個集群的運行。
高可用集群:為了保證服務一直在線的高可用能力的集群
衡量標準:可用性=在線時間/(在線時間+故障處理時間)
負載集群之三:HP
? ? ? ? ?高性能計算集群采用將計算任務分配到集群的不同計算節點從而提高計算能力,因而主要應用在科學計算領域。比較流行的HPC采用Linux操作系統和其它一些免費軟
件來完成并行運算。這一集群配置通常被稱為Beowulf集群。這類集群通常運行特定的程序以發揮HPC cluster的并行能力。這類程序一般應用特定的運行庫, 比如專為科學計算設計的MPI庫。
HPC集群特別適合于在計算中各計算節點之間發生大量數據通訊的計算作業,比如一個節點的中間結果或影響到其它節點計算結果的情況。
高性能處理集群:
? ? ? ? ?利用的是分布式存儲:分布式文件系統,分布式文件系統把一個大任務切割為小任務、分別進行處理
LVS系統結構:
? ? ? ? ? ? ? ? ? ? ?負載均衡器(Load Balancer)、服務器群組(Server Aarry)、共享存儲(Shared Storage)
負載均衡層:
? ? ? ? ? 整個集群服務最前端設備,它有一個或多個調度器(Director Server)組成,LVS軟件運行在調度服務器上。
調度服務器的功能:
?將用戶的請求,根據調度算法進行IP分流,將數據包發送到后端應用服務器上(Real Server),如果調度服務器安裝了監控模塊Ldirectord,那么調度服務器會將出現故障的應用服務器標記為不可用,知道此應用服務器恢復正常。
服務器群組層:
? ? ? ? ? ?這是由一個或者多個應用程序服務器(Real Server)組成,并且每個應用服務器提供相同的服務,調度服務器會將用戶的請求定向到具體的應用服務器上,然后由后端的應用服務器響應客戶端。
共享存儲層:
? ? ? ? ? ?功能只要是保證服務器群組中的應用服務器提供數據的一致性。
共享存儲的實現方式:
? ? ? ? ? ?磁盤陣列、集群文件系統(OCFS2)
LVS是linux系統上的一種機制,類似于iptables,其相關屬性也是通過(ipvsadm)與iptables命令類似的方式定義的,
LVS是工作于linux系統內核空間,通過內核來提供工作,其工作空間在iptables的INPUT鏈上,當客戶端請求到達INPUT鏈上以后,通過LVS規則的驗證,如果是內部請求,發送至用戶空間,如果發現是集群,將此請求發送至POSTROUTING鏈,并交給后端應用程序服務器來響應用戶的請求。
注意:上面所提到LVS其實是工作在iptables的INPUT和postrouting鏈上的,所以在此系統上iptables和LVS不能同時存在。
LVS的組成:
ipvsadm:用于管理集群服務的命令行工具,工作于Linux系統中的用戶空間
ipvs:為lvs提供服務的內核模塊,工作于內核空間 (相對于是框架,通過ipvsadm添加規則,來實現ipvs功能)
注:在linux內核2.4.23之前的內核中模塊默認是不存在的,需要自己手動打補丁,然后把此模塊編譯進內核才可以使用此功能
LVS類型:
? ? ? ? ? ? ? ? LVS-NAT模式、LVS-DR模式、LVS-TUN模式
NAT:(Network address translation)
? ? ? ? ? ?原理:把用戶的請求發來的IP包的IP報頭目的地址,通過LVS服務器轉換至后端提供服務的Real Server的地址并將用戶的請求報文發送至應用服務器。而應用服務器打開報文并響應用戶請求發送并經過LVS服務器,LVS服務器將源地址修改為LVS服務器接口上的VIP地址。
NAT模式特點:
| 123456789 | 用戶發來的請求和響應,都必須經過LVS服務器。集群節點跟Director必須在同一個IP網絡中;RIP通常是私有地址,僅用于各集群節點間的通信;Director位于Client和Real Server之間,并負責處理進出的所有通信;Realserver必須將網關指向DIP地址;支持端口映射;Realserver可以使用任意OS;LVS服務器必須有兩塊網卡較大規模應該場景中,Director易成為系統瓶頸; |
DR:(Direct routing)
? ? ? ? ? ?DR模式工作在數據鏈路層,其原理,LVS服務器和應用服務器使用同一個IP地址對外服務,但只有LVS服務器對ARP請求進行響應,所有應用服務器對本身這個IP地址的ARP請求保持靜默。網關會把所有的ARP請求定向至LVS服務器,而LVS服務器收到用戶請求數據報文,根據調度算法進行IP分流,然后相應的MAC地址的修改,發送至后端對應的應用服務器。
注:由于LVS服務器對二層數據包進行修改,所以LVS服務器和應用服務器必須在同一個廣播域。
DR模式特點:
| 12345 | 集群節點跟director必須在同一個物理網絡中;RIP可以使用公網地址,實現便捷的遠程管理和監控;Director僅負責處理入站請求,響應報文則由Real Server直接發往客戶端;Real Server不能將網關指向DIP;不支持端口映射; |
注:在DR模式中,LVS服務器只負責接收用戶請求,根據調度算法及IP分流,直接路由轉發,其響應報文交給Real Server自行處理。
? ? ? ? ? ?DR模式是三種模式當中性能最好的,唯一的缺陷是LVS服務器和后端的應用服務器必須在同一個廣播域中,因此不能實現集群的跨網端應用。
TUN (IP Tunnel模式)
? ? ? ? ? ?TUN模式,LVS將TCP/IP請求進行重新封裝并轉發給目標應用服務器,有目標應用程序服務器對用戶請求做出相應。LVS Router和Real Server通過Tp Tunnel通過隧道技術
進行轉發,因此兩者可以存在不同的網絡當中。
注:由于應用服務器需要對LVS發送的報文進行還原,也就是說應用服務器也要支持Ip Tunnel協議。(Network options)
TUN模式特點:
| 123456 | 集群節點可以跨越Internet;RIP必須是公網地址;Director僅負責處理入站請求,響應報文則由Real Server直接發往客戶端;Real Server網關不能指向director;只有支持隧道功能的OS才能用于Real Server;不支持端口映射; |
LVS負載均衡八種調度算法:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?rr-->wrr-->lc-->wlc-->lblc-->lblcr-->dh-->sh
輪叫(Round Robin):
? ? ? ? ? ?該算法將用戶請求有次序地分發到后端的應用服務器,均等看待所有Real Server,而并不計算具體服務器上的鏈接和負載。
加權輪叫(Weighted Round Robin):
? ? ? ? ? ?該調度算法根據各個應用服務器的不同負載能力,給服務器設置不同的權值,處理能力強的應用服務器的權值設置大點,來響應更多的用戶請求。
最少連接(Least Connections):
? ? ? ? ? ?該算法將用戶發送的請求分配到連接做少的應用服務器上。
加權最少連接(Weighted Least Connections):
? ? ? ? ? ?該算法根據應用服務器的不同負載能力,設置不同大小不同的權值,權值較大并且連接請求數少的應用服務器則優先分配用戶請求信息。
基于局部性最少連接:(Locality-Based Least Connections):
? ? ? ? ? ?該算法針對目標IP地址的負載均衡算法,主要用于緩存集群系統。此算法會根據用戶請求的目標IP地址找出與目標地址最近的應用服務器,如果服務器沒有超載,則請求被分發到該應用服務器,如果服務器不可用或者負載較大,則使用最少連接算法,選擇目標應用服務器
帶復制的基于局部性最少連接(Locality-Based Least Connections wiht Replication)
? ? ? ? ? ?該算法也是針對目標IP地址的負載均衡算法,主要用于緩存集群系統。域LBLC區別在于,前者維護一個IP地址到一組服務器的映射。而后者則是維護一個IP地址到一臺應用服務器的映射。
目標地址散列(Destination Hashing)
? ? ? ? ? ?該算法將用戶請求的目標地址作為散列鍵,并嘗試從靜態分配的散列表中找出對應的應用服務器。如果目標應用服務器沒有超載,那么將用戶的請求信息分發至該應用服務里,否則返回空。
源地址散列(Source Hashing)
? ? ? ? ? ?該算法將請求的源地址作為散列鍵,并嘗試從靜態分配的散列表中找出對應的應用服務器。如果目標應用服務器可用并且沒有超載,那么將用戶請求的信息分發至此應用服務器,否則返回空。
LVS IP Address Name Conventions:(LVS Ip-address 命名規范)
| 12345 | Director's IP (DIP) address :中間層,根據不同模式,來接收并響應用戶的請求。Virtual IP (VIP) address:向外提供服務的地址。Real IP (RIP) address :Real Server IP:后端提供應用服務的主機地址。Director's IP (DIP) address :和內部的IP通信所使用的地址:設置在Director Server上Client computer's IP (CIP) address:客戶端地址 |
ipvsadm命令詳細介紹:
pvsadm: 管理集群服務的命令行工具,而ipvs系統內核中的一個模塊
ipvsadm命令的基本使用:
| 1234567891011121314151617181920 | -A:在內核的虛擬服務器列表中添加一條VIP記錄-E:修改內核虛擬服務器列表中的一條VIP記錄-D:刪除內核虛擬服務器列表中的一條VIP記錄-C:清空內核虛擬服務器列表中的所有VIP記錄-S:保存虛擬服務器規則-R:恢復虛擬服務器策略規則-a:在內核虛擬服務器列表中添加一個應用服務器的地址。-e:修改一個虛擬服務器列表中的一條應用服務器地址記錄-d:刪除一個虛擬服務器列表中的一條應用服務器地址記錄-L/-l: 查看內核虛擬服務器列表-Z:將內核中的虛擬服務器計數清為0-t service-address:指定虛擬服務器使用TCP服務-u service-address:指定虛擬服務器使用UDP服務-s scheduler:指定調度算法:-p timeout:在應用服務器上的持續服務時間,單位為秒-r service-address:指定應用服務器的地址-g:指定LVS工作模式為直接路由(DR-defalut)-I:指定LVS工作模式為隧道模式(Ip Tunnel)-m:指定LVS工作模式為地址轉換模式(NAT)-w:設定應用服務器的權值 |
二:項目案例-如圖
LVS/DR+Keepalived 實現lvs高可用,并提供web服務負載均衡
案例環境:版本及相及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) | |
實驗拓撲圖如下:
配置過程如下:
Realserver1:172.16.88.10/16配置
第一步:設置主機名、IP地址、hosts文件IP地址和主機名對應關系,及關閉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 |
第三步:創建Shell_Scripts,在這里,我們的RealServer提供的是web服務器,所以在這里我們采用腳本的方式來對Realserver進行配置,腳本內容如下:
[root@Real1 ~]# vim /scripts/realserver.sh ? ? ? ? ? ? ?##創建腳本實現vip地址以和默認路由的設置以及對外網ARP請求的相關設置
| 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 |
第四步:給此腳本執行權限并安裝httpd二進制軟件包,提供web服務
| 12345678 | [root@Real1 ~]#? chmod +x /scripts/realserver.sh[root@Real1 ~]# .realserver.sh start????? ##運行此腳本,傳遞一個參數為start,即可設置vip地址、默認路由、對與外網arp請求參數[root@Real1 ~]# service ntpd stop && ntpdate 172.16.0.1???? ##這里實現時間同步,使用的ntpdate+crontab來實現,也可以通過system-config-date來做相關設置即可。[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????? ##提供網頁內容,用于測試[root@Real1 ~]# service httpd restart |
[root@Real1 ~]# netstat -ntupl | grep 80 ? && ? curl httpd://172.16.88.10
這樣Realserver1的基本設置就完成了,Realserver2的設置和Realserver1完全相同,所以筆者在這里就不再演示。
[root@Real2 ~]# curl http://172.16.88.20
Director1 Server Configure
Keepalived在這里主要用作RealServer的健康狀態檢查以及LoadBalance主機(172.16.88.88/16)和Backup主機(172.16.88.66/16)之間failover的實現
下面為二臺lvs調度服務器,安裝lvs+keepalived軟件包。安裝lvs軟件包,因為keepalived是運行在lvs之上的,因此lvs及keepalived必須裝在一個系統里面。
第一步:設置主機名和/etc/hosts對照關系及兩臺Director調度器之間建立SSH互信:
Director Router1操作步驟
| 123456789 | [root@localhost ~]# setup??? ##設置IP地址為172.16.88.88/16[root@localhost ~]# sed -i 's@\(HOSTNAME=\).*@\1Director1.example.com@g' /etc/sysconfig/network??? ##修改主機名[root@localhost ~]# hostname Director1.example.com[root@localhost ~]# logout???? ##可以選擇注銷和重啟來使配置文件生效[root@Director1 ~]# vim /etc/hosts??? ##添加IP地址和主機名的映射關系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 ''???????????????? ##建立兩臺調度服務器之間的SSH互信,用于Director服務之間復制文件,也可以使用跳板級來實現部署。[root@Director1 ~]# ssh-copy-id -i ./.ssl/id_rsa.pub Director2 |
第二步:IP地址信息及開路由轉發功能:
[root@Director ~]# sysctl -p ? ? ##重新加載/etc/sysctl.conf配置文件
Director Router2操作步驟:
第一步:配置IP、主機名、hosts 、SSH互信
| 123456789 | [root@localhost ~]# setup?? ##設置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地址和主機名對應關系,然后保存退出即可。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 ##以上的操作步驟,就完成了兩臺調度器之間建立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主配置文件格式及對每一個參數做詳細的解釋:
keepalived分為三個部分:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?全局配置、VRRP定義配置、虛擬服務器定義
全局配置格式:
| 123456789 | global_defs {???notification_email {?????root@localhost? ##接收郵件的用戶???}???notification_email_from keepalived@localhost?? ##發件用戶為keepalived???smtp_server 127.0.0.1? ##郵件服務器???smtp_connect_timeout 30??? ##連接請求超時時常???router_id LVS_DEVEL???? ##路由ID} |
VRRP定義配置格式:
| 1234567891011121314 | vrrp_instance VI_1 {??? ##定義虛擬路由????state MASTER??????? ##兩種狀態分別是{MASTER|BACKUP}????interface eth0????? ##對外提供服務及通告所使用的接口????virtual_router_id 51?? ##虛擬路由標識ID????priority 101??? ##{MASTER|BACKUP}的優先級,MASTER的優先級比BACKUP的優先級大????advert_int 1?? ##同步通知間隔,MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,單位為秒????authentication {????????? ##驗證類型和驗證密碼,目前類型主要有PASS、AH兩種,通常使用的類型為PASS。????????auth_type PASS????????auth_pass keepalived????}????virtual_ipaddress {??? ##虛擬ip(VIP)地址,可以有多個地址,每個地址占一行,不需要指定子網掩碼。????????172.16.88.100/16 dev eth0 label eth0:0????}} |
虛擬服務器配置格式:
| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 | virtual_server 172.16.88.1 80 {? ##虛擬服務器(virtual_server)所使用的VIP地址及端口,實現負責均衡。????delay_loop 6???? ##健康狀態檢查時間間隔,單位是秒。????lb_algo rr??? ##負載均衡調度算法,LVS總共有八種調度算法,互聯網應用常使用wlc或rr作為調度算法。????lb_kind DR?? ##負載均衡模型,LVS包括三種模型,分別為DR、NAT、TUN。????nat_mask 255.255.0.0????persistence_timeout 50?? ##會話保持時間(持久連接),默認為50秒。????protocol TCP???? ##轉發所使用的協議(protocol),{TCP|UPD}????real_server 172.16.88.10 80 {??? ##后端應用服務器(real_server),用于提供用戶的請求,有時也稱為應用服務器群組。????????weight 1?? ##設定權值,對rr沒有意義,一般應用服務器性能好的,可以將其權值設置大寫,這樣此應用服務器就能分擔分擔更多的用戶請求資源并響應。????????HTTP_GET {????? ##健康狀態檢測{HTTP_GET|SSL_GET(https)|TCP_CHECK|SMTP_CHECK|MISC_CHECK??????????? 權值小的,根據不同的調度算法分擔的請求量會少些。????????????url {??????????????path /??????????????status_code 200?? ##頁面返回代碼值????????????}????????????connect_timeout 3??? ##連接超時時常????????????nb_get_retry 3?????? ##連接重試的次數????????????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主配置文件復制到Director2上,并將其狀態以及優先級修改為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服務器并查看vip配置在哪臺Director上。
| 123 | [root@Director1 ~]# service keepalived restart???? ##兩臺lvs同時啟動keepalived服務[root@Director2 ~]# service keepalived restart[root@Director1 ~]# ifconfig??? ##查看VIP地址是否配置在Director1調度服務器上 |
查看ipvsadm的虛擬服務器真實存在的Realserver主機記錄
| 1 | [root@Director1 ~]# ipvsadm -L -n |
第六步:如何在維護模式下,模擬LVS服務器發生故障
只需在keepalived配置文件中,添加如下內容(vrrp實例之外添加如下內容):
| 1234567 | vrrp_script chk_schedown {script "[ -e /etc/keepalived/down ] && exit1 || exit 0 "inerval 1weight -5fall 2rise 1} |
當vrrps事務發生改變時,運行此腳本:只需要在vrrp實例內添加如下內容即可
| 123 | track_script {????chk_schedown} |
在兩臺調度服務器上,重啟keepalived進程,加載主配置文件
當手動在/etc/keepalived目錄中創建down文件時,主服務就會變成backup服務器,則從backup模式轉換為master模式
| 12 | 手動創建down文件,查看主從是否切換[root@Director1 ~]# touch /etc/keepalived/down |
1、查看日志信息
日志分析:
| 123 | ???通過日志信息,不難發現兩臺調度服務器重新選舉主服務來提供服務,因為在Director1相關目錄上手動創建了down文件,觸發了chk_schedown腳本,所以Director1的優先級從101變為了96,所以從主服務器變為了從服務器(BACKUP)移除vip地址,因此Director2變為主(MASTER)服務器,添加vip地址,以及自主發起arp請求及響應arp請求,來更新記錄。 |
2、查看vip地址相關信息
第七步:如果提供的兩臺應用服務里(web),由于其他原因出現故障,該如何解決呢:
| 12345 | 只需要在/etc/keepalived/keepalived.conf,在virtual_server中添加如下內容:[root@Director1 ~]# vim /etc/keepalived/keepalived.confsorry_service 127.0.0.1 :80然后分別重啟keepalived服務進程注:前提兩臺調度服務器都提供httpd服務,并且提供web錯誤頁面信息 |
第八步:模擬兩臺應用程序服務出現故障
| 1234 | [root@Real1 ~]# /etc/init.d/httpd stopStopping httpd:??????????????????????????????????????????? [? OK? ][root@Real1 ~]# ssh Real2 'service httpd stop'Stopping httpd: [? OK? ] |
第九步:到調度服務器上利用ipvsadm工具查看ipvs規則
測試一:利用windows客戶端訪問172.16.88.100看是否發生變化:
測試二:到其中一臺應用程序服務器從新啟動httpd進程,并查看ipvsadm規則
| 12 | [root@Real1 ~]# service httpd restart[root@Director2 ~]# ipvsadm -L -n |
再次通過windows客戶端訪問網頁,看是否提供正常web服務
三:通過corosync+pacemaker實現web服務高可用,主要實現步驟:
既然給web應用服務器做高可用,那么httpd進程就不能開機自動運行,而且當前httpd服務屬于停止狀態,有corosync來自動啟動某臺的httpd進程
| 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應用服務器上安裝corosync+pacemaker軟件包,相應軟件包列表:
| 123456789101112131415 | cluster-gluecluster-glue-libsheartbeatopenaislibresource-agentscorosyncheartbeat-libspacemakercorosyncliblibesmtppacemaker-libs注:軟件包下載地址:http://clusterlabs.org/rpm/。請根據硬件平臺及操作系統類型選擇對應的軟件包;這里建議每個軟件包都使用目前最新的版本。使用如下命令安裝:# 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主配置文件,并添加如下內容aisexec {????user: root????group: root}service {????name: pacemaker????ver: 0????use_mgmtd: yes}并設定此配置文件中 bindnetaddr后面的IP地址為你的網卡所在網絡的網絡地址bindnetaddr 172.16.0.0生成節點間通信時用到的認證密鑰文件:[root@Real1 ~]# corosync-keygen |
注:Real2上也做同樣的操作,例如安裝包依賴關系及安裝corosync+pacemaker軟件包。
第三步:將Realserver1上的corosync和authkey復制至Realserver2上即可:
| 1 | [root@Real1 ~]# scp -p corosync authkey? Real2:/etc/corosync/???? ##使用-p選項可以保留原來的屬性信息 |
第四步:分別為兩個節點創建corosync,生成的日志所在的目錄:
| 12 | [root@Real1 ~]# mkdir /var/log/cluster[root@Real1 ~]# ssh Real2? 'mkdir /var/log/cluster' |
第五步:分別在每個節點上啟動corosync進程服務
| 123 | [root@Real1 ~]# service corosync restart[root@Real1 ~]# ssh Real2 'service corosync restart'[root@Real1 ~]# crm status |
◆ 查看corosync啟動的相關進程
| 1 | [root@Real1 ~]# ps auxf |
第六步:檢查corosync相關日志信息:
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、查看初始化成員節點通知是否正常發出:
| 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 |
第七步:使用如下命令查看集群節點的啟動狀態:
第八步:配置集群工作屬性及集群資源:
◆ 禁用stonith設備和關閉法定票數的默認策略為ingore
◆ 添加集群資源(vip、httpd):
第九步:查看資源的啟用狀態(crm stauts)
◆ 如果想讓兩個資源運行在一個Realserver中的話,需要定義組資源,然后將vip和webservice加入到組中即可。
◆ 用windows客戶端測試:
第十步:如果其中一個節點發生故障,另一個節點就會取代發生故障的節點,然后對外提供服務。
| 12 | [root@Real1 ~]# crm node standby[root@Real1 ~]# crm status |
再次使用windows客戶端測試:
◆ 我們知道限制資源運行在同一個節點上,有兩種方法(定義資源組和設置排列約束),下面來如何使用排列約束來限制兩個資源在同一個節點上,在設置前,我們將資源組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 |
◆ 下面就可以使用排列約束來限制兩個資源運行在同一個節點上:
◆ 使用crm status命令查看資源運行節點狀態并使用netstat
◆ 設置資源啟動順序
◆ 手動遷移資源到另一個節點:
◆ 用windows客戶端測試
◆ 定義資源的黏貼性(傾向性),vip資源更傾向運行在Real1主機上:
◆ 使用crm status命令查看當前資源運行在那個節點上,并手動遷移資源,然后手動在上線,看是否vip資源更傾向于節點一上。
| 123456789101112131415161718192021222324252627282930313233343536373839 | [root@Real1 ~]# crm status???? ##查看當前資源運行在那個節點上============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? ##手動遷移資源,并成為被動節點[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??? ##將節點變為主節點[root@Real1 ~]# crm status?? ##再次查看資源,因為默認黏貼值為0,所以發現vip更傾向運行在節點Real1節點上============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 |
◆ 設定默認黏貼值為200,然后再手動遷移資源,看vip資源是否更傾向于運行在哪個節點上。
| 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??? ##因為資源的默認粘性為200,大于Real1節點上的粘性值,所以vip資源更傾向運行在節點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 |
轉載于:https://blog.51cto.com/8718813/1610558
總結
以上是生活随笔為你收集整理的Linux集群服务知识点总结及通过案例介绍如何实现高性能web服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3211: 花神游历各国
- 下一篇: Linux网络编程之select