Linux集羣服務知識點總結及經過案例介紹如何實現高性能web服務

一:集羣相關概念及知識點介紹:html

LVS(Linux Virtual System)前端

   本項目在19985月由章文嵩博士成立,是中國國內最先出現的Free Software項目之一。linux虛擬服務器(LVS)項目在linux操做系統上提供了最多見的負載均衡軟件。node

集羣定義
linux

   集羣(cluster)技術是一種較新的技術,經過集羣技術,能夠在付出較低成本的狀況下得到在性能、可靠性、靈活性方面的相對較高的收益,其任務調度則是集羣系統中web

的核心技術。本文就集羣系統的定義、發展趨勢、任務調度等問題進行了簡要論述。集羣是一組相互獨立的、經過高速網絡互聯的計算機,它們構成了一個組,並以單一系統的模式加以管理。一個客戶與集羣相互做用時,集羣像是一個獨立的服務器。集羣配置是用於提升可用性和可縮放性。算法

集羣系統的主要優勢:(高可擴展性、高可用性、高性能、高性價比)vim

目前運行在LINUX最主流的三種集羣:windows

負載集羣之一: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)

230842187.png\"

          原理:把用戶的請求發來的IP包的IP報頭目的地址,經過LVS服務器轉換至後端提供服務的Real Server的地址並將用戶的請求報文發送至應用服務器。而應用服務器打開報文並響應用戶請求發送並通過LVS服務器,LVS服務器將源地址修改成LVS服務器接口上的VIP地址。

NAT模式特色:

1
2
3
4
5
6
7
8
9
用戶發來的請求和響應,都必須通過LVS服務器。
集羣節點跟Director必須在同一個IP網絡中;
RIP一般是私有地址,僅用於各集羣節點間的通訊;
Director位於Client和Real Server之間,並負責處理進出的全部通訊;
Realserver必須將網關指向DIP地址;
支持端口映射;
Realserver可使用任意OS;
LVS服務器必須有兩塊網卡
較大規模應該場景中,Director易成爲系統瓶頸;


DR:(Direct routing)

231505205.png\"

          DR模式工做在數據鏈路層,其原理,LVS服務器和應用服務器使用同一個IP地址對外服務,但只有LVS服務器對ARP請求進行響應,全部應用服務器對自己這個IP地址的ARP請求保持靜默。網關會把全部的ARP請求定向至LVS服務器,而LVS服務器收到用戶請求數據報文,根據調度算法進行IP分流,而後相應的MAC地址的修改,發送至後端對應的應用服務器。

注:因爲LVS服務器對二層數據包進行修改,因此LVS服務器和應用服務器必須在同一個廣播域。

DR模式特色

1
2
3
4
5
集羣節點跟director必須在同一個物理網絡中;
RIP可使用公網地址,實現便捷的遠程管理和監控;
Director僅負責處理入站請求,響應報文則由Real Server直接發往客戶端;
Real Server不能將網關指向DIP;
不支持端口映射;


注:在DR模式中,LVS服務器只負責接收用戶請求,根據調度算法及IP分流,直接路由轉發,其響應報文交給Real Server自行處理。

          DR模式是三種模式當中性能最好的,惟一的缺陷是LVS服務器和後端的應用服務器必須在同一個廣播域中,所以不能實現集羣的跨網端應用。

TUN (IP Tunnel模式)

180054206.png\"

          TUN模式,LVS將TCP/IP請求進行從新封裝並轉發給目標應用服務器,有目標應用程序服務器對用戶請求作出相應。LVS Router和Real Server經過Tp Tunnel經過隧道技術

進行轉發,所以二者能夠存在不一樣的網絡當中。

注:因爲應用服務器須要對LVS發送的報文進行還原,也就是說應用服務器也要支持Ip Tunnel協議。(Network options)

TUN模式特色:

1
2
3
4
5
6
集羣節點能夠跨越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 命名規範)

181043708.png\"

1
2
3
4
5
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命令的基本使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
-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


實驗拓撲圖以下:
133002225.png\"

配置過程以下:

Realserver1:172.16.88.10/16配置

第一步:設置主機名、IP地址、hosts文件IP地址和主機名對應關係,及關閉selinux

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@localhost ~]# sed -i 's@\\(HOSTNAME=\\).*@\\1Real1.example.com@g' /etc/sysconfig/network
[root@localhost ~]# hostname Real1.example..com
[root@localhost ~]# vim /etc/hosts
172.16 . 88.10 Real1.example.com   Real1
172.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 Information
DEVICE=eth0
BOOTPROTO= static
IPADDR= 172.16 . 88.10
NETMASK= 255.255 . 0.0
GATEWAY= 172.16 . 0.1
ONBOOT=yes
HWADDR= 00 :0c: 29 :4b: 88 :1f
[root@Real1 ~]# service network restart

第二步:創建Realserver之間創建SSH互信及時間同步:

1
2
3
4
5
[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請求的相關設置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/bin/bash
#
# Script to start LVS DR real server.
# chkconfig: - 90 10
# description: LVS DR real server
#
.  /etc/rc.d/init.d/functions
VIP= 172.16 . 88.100
host=`/bin/hostname`
case "$1" in
start)
# 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服務

1
2
3
4
5
6
7
8
[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

210706998.png\"

這樣Realserver1的基本設置就完成了,Realserver2的設置和Realserver1徹底相同,因此筆者在這裏就再也不演示。

[root@Real2 ~]# curl http://172.16.88.20

211812909.png\"


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操做步驟

1
2
3
4
5
6
7
8
9
[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        Director1
172.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地址信息及開路由轉發功能:

191512348.png\"

192231335.png\"

[root@Director ~]# sysctl -p     ##從新加載/etc/sysctl.conf配置文件


Director Router2操做步驟:

第一步:配置IP、主機名、hosts 、SSH互信

1
2
3
4
5
6
7
8
9
[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.comDirector1
172.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軟件包

1
2
[root@Director1 ~]# yum install ipvsadm -y
[root@Director1 ~]# yum --nogpgcheck localinstall keepalived- 1.2 . 7 - 5 .el5.i386.rpm -y

第三步:keepalived主配置文件格式及對每個參數作詳細的解釋:

keepalived分爲三個部分:

                                      全局配置、VRRP定義配置、虛擬服務器定義

全局配置格式:

1
2
3
4
5
6
7
8
9
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定義配置格式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
}
}

虛擬服務器配置格式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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,而後保存並退出便可。

1
2
3
4
[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上。

1
2
3
[root@Director1 ~]# service keepalived restart     ##兩臺lvs同時啓動keepalived服務
[root@Director2 ~]# service keepalived restart
[root@Director1 ~]# ifconfig    ##查看VIP地址是否配置在Director1調度服務器上


193746243.png\"

查看ipvsadm的虛擬服務器真實存在的Realserver主機記錄

1
[root@Director1 ~]# ipvsadm -L -n

194431212.png\"

第六步:如何在維護模式下,模擬LVS服務器發生故障

只需在keepalived配置文件中,添加以下內容(vrrp實例以外添加以下內容):

1
2
3
4
5
6
7
vrrp_script chk_schedown {
script "[ -e /etc/keepalived/down ] && exit1 || exit 0 "
inerval 1
weight - 5
fall 2
rise 1
}

當vrrps事務發生改變時,運行此腳本:只須要在vrrp實例內添加以下內容便可

1
2
3
track_script {
chk_schedown
}

在兩臺調度服務器上,重啓keepalived進程,加載主配置文件

195516535.png\"

當手動在/etc/keepalived目錄中建立down文件時,主服務就會變成backup服務器,則從backup模式轉換爲master模式

1
2
手動建立down文件,查看主從是否切換
[root@Director1 ~]# touch /etc/keepalived/down

一、查看日誌信息

201131932.png\"

日誌分析:

1
2
3
經過日誌信息,不難發現兩臺調度服務器從新選舉主服務來提供服務,由於在Director1相關目錄上手動建立了down文件,觸發了chk_schedown腳本,
因此Director1的優先級從 101 變爲了 96 ,因此從主服務器變爲了從服務器(BACKUP)移除vip地址,所以Director2變爲主(MASTER)服務器,添加vip地址,
以及自主發起arp請求及響應arp請求,來更新記錄。

二、查看vip地址相關信息

201215491.png\"

第七步:若是提供的兩臺應用服務裏(web),因爲其餘緣由出現故障,該如何解決呢:

1
2
3
4
5
只須要在/etc/keepalived/keepalived.conf,在virtual_server中添加以下內容:
[root@Director1 ~]# vim /etc/keepalived/keepalived.conf
sorry_service 127.0 . 0.1 : 80
而後分別重啓keepalived服務進程
注:前提兩臺調度服務器都提供httpd服務,而且提供web錯誤頁面信息


第八步:模擬兩臺應用程序服務出現故障

1
2
3
4
[root@Real1 ~]# /etc/init.d/httpd stop
Stopping httpd:                                            [  OK  ]
[root@Real1 ~]# ssh Real2 'service httpd stop'
Stopping httpd: [  OK  ]

第九步:到調度服務器上利用ipvsadm工具查看ipvs規則

202933366.png\"

測試一:利用windows客戶端訪問172.16.88.100看是否發生變化:

203306699.png\"

測試二:到其中一臺應用程序服務器重新啓動httpd進程,並查看ipvsadm規則

1
2
[root@Real1 ~]# service httpd restart
[root@Director2 ~]# ipvsadm -L -n

203855448.png\"

再次經過windows客戶端訪問網頁,看是否提供正常web服務

204525761.png\"


三:經過corosync+pacemaker實現web服務高可用,主要實現步驟:

既然給web應用服務器作高可用,那麼httpd進程就不能開機自動運行,並且當前httpd服務屬於中止狀態,有corosync來自動啓動某臺的httpd進程

1
2
[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軟件包,相應軟件包列表:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cluster-glue
cluster-glue-libs
heartbeat
openaislib
resource-agents
corosync
heartbeat-libs
pacemaker
corosynclib
libesmtp
pacemaker-libs
注:軟件包下載地址:http: //clusterlabs.org/rpm/。
請根據硬件平臺及操做系統類型選擇對應的軟件包;這裏建議每一個軟件包都使用目前最新的版本。
使用以下命令安裝:
# yum -y --nogpgcheck localinstall *.rpm   略過驗證碼檢測,使用本地安裝


第二步:配置corosync和authkeys文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[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,生成的日誌所在的目錄:

1
2
[root@Real1 ~]# mkdir / var /log/cluster
[root@Real1 ~]# ssh Real2   'mkdir /var/log/cluster'

第五步:分別在每一個節點上啓動corosync進程服務

1
2
3
[root@Real1 ~]# service corosync restart
[root@Real1 ~]# ssh Real2 'service corosync restart'
[root@Real1 ~]# crm status

192956510.png\"

◆ 查看corosync啓動的相關進程

1
[root@Real1 ~]# ps auxf

193140206.png\"

第六步:檢查corosync相關日誌信息:

1:查看corosync引擎是否正常啓動

1
2
3
4
5
6
7
# grep -e "Corosync Cluster Engine" -e "configuration file" / var /log/cluster/corosync.log
May 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 .

二、查看初始化成員節點通知是否正常發出:

1
2
3
4
5
# grep  TOTEM  / var /log/cluster/corosync.log
May 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.

三、查看pacemaker是否正常啓動:

1
2
3
4
5
6
# grep pcmk_startup / var /log/cluster/corosync.log
May 19 15 : 46 : 33 corosync [pcmk  ] info: pcmk_startup: CRM: Initialized
May 19 15 : 46 : 33 corosync [pcmk  ] Logging: Initialized pcmk_startup
May 19 15 : 46 : 33 corosync [pcmk  ] info: pcmk_startup: Maximum core file size is : 4294967295
May 19 15 : 46 : 33 corosync [pcmk  ] info: pcmk_startup: Service: 9
May 19 15 : 46 : 33 corosync [pcmk  ] info: pcmk_startup: Local hostname: Real1.example.com

第七步:使用以下命令查看集羣節點的啓動狀態:

190420704.png\"

第八步:配置集羣工做屬性及集羣資源:

◆ 禁用stonith設備和關閉法定票數的默認策略爲ingore

190611603.png\"

191601469.png\"

◆ 添加集羣資源(vip、httpd):

213905392.png\"

第九步:查看資源的啓用狀態(crm stauts)

214314860.png\"

◆ 若是想讓兩個資源運行在一個Realserver中的話,須要定義組資源,而後將vip和webservice加入到組中便可。

220057935.png\"

220058961.png\"

◆ 用windows客戶端測試:

220354272.png\"

第十步:若是其中一個節點發生故障,另外一個節點就會取代發生故障的節點,而後對外提供服務。

1
2
[root@Real1 ~]# crm node standby
[root@Real1 ~]# crm status

221218976.png\"

再次使用windows客戶端測試:

221256566.png\"

◆ 咱們知道限制資源運行在同一個節點上,有兩種方法(定義資源組和設置排列約束),下面來如何使用排列約束來限制兩個資源在同一個節點上,在設置前,咱們將資源組web收到刪除。

1
2
3
4
5
6
7
8
[root@Real1 ~]# crm resource
crm(live)resource# stop web
crm(live)resource# cleanup web
crm(live)resource# cd
crm(live)# configure
crm(live)configure# delete web
crm(live)configure# verify
crm(live)configure# commit

下面就可使用排列約束來限制兩個資源運行在同一個節點上:

201351347.png\"

◆ 使用crm status命令查看資源運行節點狀態並使用netstat

201759940.png\"


202009220.png\"

◆ 設置資源啓動順序

202821636.png\"

210144554.png\"

◆ 手動遷移資源到另外一個節點:

205215368.png\"

◆ 用windows客戶端測試

205539818.png\"

◆ 定義資源的黏貼性(傾向性),vip資源更傾向運行在Real1主機上:

220847306.png\"

◆ 使用crm status命令查看當前資源運行在那個節點上,並手動遷移資源,而後手動在上線,看是否vip資源更傾向於節點一上。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
[root@Real1 ~]# crm status     ##查看當前資源運行在那個節點上
============
Last updated: Sun May 26 22 : 17 : 02 2013
Stack: openais
Current DC: Real1.example.com - partition with quorum
Version: 1.1 . 5 - 1.1 .el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f
2 Nodes configured, 2 expected votes
2 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 2013
Stack: openais
Current DC: Real1.example.com - partition with quorum
Version: 1.1 . 5 - 1.1 .el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f
2 Nodes configured, 2 expected votes
2 Resources configured.
============
Node Real1.example.com: standby
Online: [ 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 2013
Stack: openais
Current DC: Real1.example.com - partition with quorum
Version: 1.1 . 5 - 1.1 .el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f
2 Nodes configured, 2 expected votes
2 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資源是否更傾向於運行在哪一個節點上。

222707197.png\"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
[root@Real1 ~]# crm status
============
Last updated: Sun May 26 22 : 29 : 50 2013
Stack: openais
Current DC: Real1.example.com - partition with quorum
Version: 1.1 . 5 - 1.1 .el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f
2 Nodes configured, 2 expected votes
2 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 2013
Stack: openais
Current DC: Real1.example.com - partition with quorum
Version: 1.1 . 5 - 1.1 .el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f
2 Nodes configured, 2 expected votes
2 Resources configured.
============
Node Real1.example.com: standby
Online: [ 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 2013
Stack: openais
Current DC: Real1.example.com - partition with quorum
Version: 1.1 . 5 - 1.1 .el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f
2 Nodes configured, 2 expected votes
2 Resources configured.
============
Online: [ Real1.example.com Real2.example.com ]
httpd  (lsb:httpd):    Started Real2.example.com
vip    (ocf::heartbeat:IPaddr):    Started Real2.example.com




本文出自 「See you next year CA」 博客,請務必保留此出處

http://guodayong.blog.51cto.com/263451/1201101

相關文章
相關標籤/搜索