架構環境:html
RedHat Linux Enterprise 5.8 keepalive LVS-DRnode
注意:一、事先配置好yum源,利用yum進行相關的軟件安裝,其能夠很好的解決依賴關係linux
yum利用DVD光盤配置便可!其詳細配置能夠參考個人博文「Linux系統經常使用的軟件管理工具rpm、yum及軟件源碼編譯安裝」web
二、事先關閉掉相關的iptables規則和selinux算法
1234[root@node1 ~]# getenforce #查看selinux的設置permissive|
[root@node1 ~]# setenforce
0
|
1
#關閉或開啓selinux功能
[root@node1 ~]# vim /etc/selinux/config #selinux的配置文件
SELINUX=disabled|permissive|enforcing #禁止|禁用|啓用selinux
相關服務和名字的定義:
vim
12345Director:負載調度集羣的主機,也簡稱DR
VIP:Virtual IP,向外提供服務的IP
RIP:Real Server IP,內部真正提供服務的
DIP:與內部主機通訊的IP,在DR主機上
CIP:客戶端IP
1、架構設計bash
利用keepalive來實現lvs的Directory Server的高可用集羣,而後在利用keepalive和lvs的高可用來實現web服務的負載均衡!其架構圖以下:服務器
2、keepalive的介紹網絡
⑴、keepalive的基本工做機制和應用場景架構
keepalive是一個能夠提供vrrp已經health-check功能的服務軟件,能夠只用它提供雙機浮動的vip(vrrp虛擬路由功能),這樣能夠簡單實現一個雙機熱備高可用功能。同時咱們還能夠利用LVS+Keepalived基於完整開源軟件的架構能夠爲你提供一個負載均衡及高可用的服務器。
在本博文中Keepalived的主要用做RealServer的健康狀態檢查以及LoadBalance主機和BackUP主機之間failover的實現。Keepalived的做用是檢測web服務器的狀態,若是有一臺web服務器死機,或工做出現故障,Keepalived將檢測到,並將有故障的web服務器從系統中剔除,當web服務器工做正常後Keepalived自動將web服務器加入到服務器羣中,這些工做所有自動完成,不須要人工干涉,須要人工作的只是修復故障的web服務器。
Keepalived是一個基於VRRP協議來實現的WEB 服務高可用方案,能夠利用其來避免單點故障。一個WEB服務至少會有2臺服務器運行Keepalived,一臺爲主服務器(MASTER),一臺爲備份服務器(BACKUP),可是對外表現爲一個虛擬IP,主服務器會發送特定的消息給備份服務器,當備份服務器收不到這個消息的時候,即主服務器宕機的時候,備份服務器就會接管虛擬IP,繼續提供服務,從而保證了高可用性。
⑵、VRRP協議
上面咱們提到keepalive利用vrrp來進行health-check功能的,那麼VRRP究竟是什麼那?咱們下面來講說VRRP協議吧!
VRRP:Virtual Router Redundancy Protocol,是虛擬路由冗餘協議,經過此協議咱們能夠把多個路由器作成一個虛擬路由器,從而來保證其中某個路由宕掉的時候不會形成咱們內部外出網絡的所有中斷。
VRRP中的各個路由器都有一個惟一的標識VRID,其範圍爲0-255,路由器對外表現爲惟一的虛擬MAC地址,地址的格式爲00-00-5E-00-01-[VRID]。主控路由器負責對ARP請求用該MAC地址作應答。這樣,不管如何切換,保證給終端設備的是惟一一致的IP和MAC地址,減小了切換對終端設備的影響。其中的VRID中的0和255是保留的,0用於IP地址全部者主動放棄主控者角色時使用,255用於VRRP路由器的IP地址和虛擬路由器的接口IP地址相同時所擁有!
因爲VRRP協議比較複雜,這裏一兩句也介紹不清楚,而我理解的也不深,只是一點點而已,可是這並不影響咱們下面的使用,全部還望各位諒解不能在此詳細介紹,若是有意深刻了解能夠下載附件內的「h3c_vrrp介紹.pdf」。
3、RS上相關軟件的安裝和配置
⑴、web服務的安裝和配置
123web1和web2上分別配置相應的ip地址
RIP1:
172.16
.
7.3
/
16
RIP2:
172.16
.
7.4
/
16
一、在web1上安裝httpd服務並配置RIP和VIP,注意因爲是基於LVS的DR模型,咱們須要設置本機VIP不能響應外部主機的arp請求。
安裝httpd
12yum install httpd –y #安裝httpd
echo
"web1.chris.com"
> /
var
/www/html/index.html #添加主頁內容
配置RIP和設置arp不能被外部主機解析此處使用腳本vipset.sh進行設置,腳本以下:
###########################################################
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647#!/bin/bash
#
# Script to start LVS DR real server.
# description: LVS DR real server
#
. /etc/rc.d/init.d/functions
VIP=
172.16
.
7.5
#VIP地址
host=`/bin/hostname` #定義host變量
case
"$1"
in
start) #start的時候設置本機arp不被外部主機解析
# 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
#定義接收到ARP請求時的響應級別
echo2
> /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
#配置vip在lo:
0
,而且設置廣播地址和子網掩碼,此處使用
32
位是保證此vip不能與其餘地址通訊。
/sbin/route add -host $VIP dev lo:
0
#增長路由
;;
stop) #stop的時候恢復到系統的初始化arp參數
# 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
############################################################
在web1上執行此腳本,來完成vip和arp參數的設置
sh vipset.sh
而後查看相關IP參數信息
ifconfig
二、在web2上安裝httpd服務並配置RIP和VIP,注意因爲是基於LVS的DR模型,咱們須要設置本機VIP不能響應外部主機的arp請求。
安裝httpd
12yum install httpd –y #安裝httpd
echo
"web2.chris.com"
> /
var
/www/html/index.html #添加主頁內容
配置RIP和設置arp不能被外部主機解析此處使用腳本vipset.sh進行設置,基本內容與web1上使用的腳本相同!
4、DR上相關軟件的安裝和配置
⑴、ipvsadm軟件安裝,用於後面的ipvs規則的查看。
12yum –y install ipvsadm #安裝用戶空間工具ipvsadm
ipvsadm –L –n #查看系統ipvs規則
⑵、安裝keepalive軟件和設置相關配置
一、安裝keepalive軟件,這裏使用的是已經制做好的rpm包進行安裝,如須要請在博文附件內下載。
123456789DS1和DS2上都進行keepalive的安裝:
兩種方法:
源碼編譯安裝:
configure [--enable-vrrp] [--disable-snmp|--enable-snmp]
make
make install
rpm包安裝:
我這裏利用以及編譯製做好的rpm包進行安裝
yum -y --nogpgcheck localinstall keepalived-
1.2
.
7
-
5
.el5.i386.rpm #不校驗並自動安裝
至此咱們的keepalive軟件就安裝完畢了,簡單吧~下面來看看keepalive的配置文件吧
⑵、keepalive配置文件的詳解
keepalive的配置文件是/etc/keepalived/keepalived.conf,其文件內分爲:全局配置、vrrp配置、lvs配置、服務程序監控檢查
------------------------------------------------------------------------------
全局配置:
123456789101112! Configuration File
for
keepalived #註釋
global_defs { #全局配置,配置參數爲{}內的內容
notification_email { #keepalive服務服務信息通知郵箱,能夠爲多個
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc #發送信息的時候的發送郵箱
smtp_server
192.168
.
200.1
#smtp服務器
smtp_connect_timeout
30
#鏈接smtp超時時間
router_id LVS_DEVEL #keepalive服務器的ID標識,注意每一個服務 要有一個獨立的標識
}
-----------------------------------------------------------------------------
1234567891011121314151617vrrp的配置:
vrrp_instance VI_1 { # 定義vrrp組,VI_1表明第一個組
state MASTER #角色,master|backup,當state指定的instance的初始化狀態,在兩臺DS都啓動之後,立刻發生競選,優先級高的成爲MASTER,因此這裏的MASTER並非表示此臺服務器一直是MASTER
interface
eth0 #綁定網卡
virtual_router_id
51
#VRID標記(
1
-
244
)
priority
100
#優先級
advert_int
1
#檢查時間間隔,默認爲1s
authentication { # 認證
auth_type PASS #認證機制,PASS表明字符串
auth_pass
1111
#字符串
}
virtual_ipaddress { #指定漂移地址,此處既VIP,能夠指定多個。
192.168
.
200.16
192.168
.
200.17
192.168
.
200.18
}
}
-------------------------------------------------------------------------------------
LVS的配置:lvs的配置包括兩部分,虛擬主機組和虛擬主機,這些配置都會在傳遞給ipvsadm做爲參數的。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273virtual_server
192.168
.
200.100
443
{ #設置VIP port
delay_loop
6
#多少秒檢查一次real server的健康狀態
lb_algo rr #調度算法
lb_kind NAT #lvs模型
nat_mask
255.255
.
255.0
#虛擬VIP的掩碼
persistence_timeout
50
#長鏈接時間
protocol TCP #協議類型
real_server
192.168
.
201.100
443
{ #定義real server
weight
1
#定義權重
SSL_GET { #檢查web服務的SSL情況
url {
path /
digest ff20ad2481f97b1754ef3e12ecd3a9cc
}
url { #檢查服務器的web服務情況
path /mrtg/
digest 9b3a0c85a887a256d6939da88aabd8cd
}
connect_timeout
3
#鏈接超時時間
nb_get_retry
3
#重試次數
delay_before_retry
3
#重試鏈接時間間隔
}
}
}
⑶、keepalive在DS1和DS2上進行相關配置,並實現VIP的高可用和web集羣的負載均衡:
! Configuration File
for
keepalived
global_defs {
notification_email {
chris@localhost
}
notification_email_from root@localhsot
smtp_server
127.0
.
0.1
smtp_connect_timeout
30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface
eth0
virtual_router_id
51
priority
101
advert_int
1
authentication {
auth_type PASS
auth_pass chris
}
virtual_ipaddress {
172.16
.
7.5
}
}
virtual_server
172.16
.
7.5
80
{
delay_loop
6
lb_algo rr
lb_kind DR
protocol TCP
real_server
172.16
.
7.3
80
{
weight
2
TCP_CHECK {
connect_timeout
3
nb_get_retry
3
delay_before_retry
1
connect_port
80
}
}
real_server
172.16
.
7.4
80
{
weight
2
TCP_CHECK {
connect_timeout
3
nb_get_retry
3
delay_before_retry
1
connect_port
80
}
}
}
而後把DS1上的keepalive.conf複製到DS2上,並把其中的stata改爲BACKUP,priority修改成100,其餘的保存不變
至此咱們的DS高可用已經設置完了,啓動keepalive測試下效果吧
DS1和DS2上分別開啓keepalive服務
service keepalived start
此時利用vip訪問一下咱們的web服務,看看可否正常不吧
下面模擬一下DS1宕掉吧~看看其vip可否否自動漂移
在DS1上中止keepalive服務
service keepalived stop
DS2上查看下地址是否漂移過來了吧!
此時的vip進行web訪問
5、web服務的高可用集羣
經過上面的相關配置,咱們利用keepalive實現了DS的高可用,而後利用LVS的DR模型實現了web服務的負載均衡,那下面咱們就經過keepalive的相關功能來實現web服務的高可用!這裏keepalive經過調用相關的腳本進行對服務器的相關操做!其架構圖以下
⑴在DS1和DS2上分別安裝httpd服務,並設設置主頁內容
yum –y install httpd
echo "DS1.chris.com" > /var/www/html/index.html
啓動服務進行測試
service httpd start
⑵、配置keepalive服務
一、利用上面實驗已經安裝好的keepalive進行設置,這裏再也不從新安裝,因此配置以前先把keepalive服務關掉:service keepalived stop
相關配置以下:(配置腳本在附件內-keepalive.conf-webha)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657! Configuration File
for
keepalived
global_defs {
notification_email {
chrisli129@gmail.com
chrinux@
126
.com
}
notification_email_from root@chris.com
smtp_connect_timeout
3
smtp_server
127.0
.
0.1
router_id LVS_DEVEL
}
vrrp_script chk_httpd {
script
"killall -0 httpd"
#kill -
0
是模擬kill httpd服務,並非真的kill,只是檢查其服務是否存在
interval
2
# check every
2
seconds
weight -
2
#
if
failed, decrease
2
of the priority
fall
2
# require
2
failures
for
failures
rise
1
# require
1
sucesses
for
ok
}
vrrp_script chk_schedown {
script
"[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
#利用/etc/keepalive/下的down文件是否存在來進行服務的關閉
interval
2
#每
2
秒檢查一次
weight –
2
#若是存在,權重-
2
}
vrrp_instance VI_1 {
interface
eth0
state MASTER
priority
101
virtual_router_id
51
garp_master_delay
1
authentication {
auth_type PASS
auth_pass password
}
track_interface {
eth0
}
# optional, monitor these
as
well.
# go to FAULT state
if
any of these go down.
virtual_ipaddress {
172.16
.
7.5
/
16
dev eth0
label
eth0:
0
#配置虛擬VIP,並指定端口和別名
}
#addresses add|del on change to MASTER, to BACKUP.
#With the same entries on other machines,
#the opposite transition will be occuring.
#<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE>
label
<LABEL>
track_script {
chk_httpd
chk_schedown
}
notify_master
"/etc/keepalived/httpd.sh master"
notify_backup
"/etc/keepalived/httpd.sh backup"
notify_fault
"/etc/keepalived/httpd.sh fault"
}
而後把此配置文件複製到DS2 上,並修改其中的
state BACKUP #修改其爲從服務器
priority 100 #修改優先權低於主服務器的
二、增長服務控制腳本—httpd.sh,把其到到配置文件內定義的目錄/etc/keepalived/內,其腳本內容以下:(腳本在附件內-httpd.sh)
12345678910111213141516171819202122232425262728293031323334#!/bin/bash
# Author: MageEdu <linuxedu@foxmail.com>
# description: An example of notify script
#
ifalias=${
2
:-eth0:
0
}
interface
=$(echo $ifalias | awk -F:
'{print $1}'
)
vip=$(ip addr show $
interface
| grep $ifalias | awk
'{print $2}'
)
#contact=
'linuxedu@foxmail.com'
contact=
'root@localhost'
workspace=$(dirname $
0
)
notify() {
subject=
"$ip change to $1"
body=
"$ip change to $1 $(date '+%F %H:%M:%S')"
echo $body | mail -s
"$1 transition"
$contact
}
case
"$1"
in
master)
notify master
exit
0
;;
backup)
notify backup
/etc/rc.d/init.d/httpd restart
exit
0
;;
fault)
notify fault
exit
0
;;
*)
echo
'Usage: $(basename $0) {master|backup|fault}'
exit
1
;;
esac
⑶、在DS1和DS2上開啓keepalive服務,並進行查看相關信息
下面咱們訪問一下web服務吧~使用vip地址!
下面假設DS1服務器宕掉了,看看vip是否能自動漂移並啓動DS2上的web服務,咱們在腳本內定義了利用在/etc/keepalived/目錄下down文件是否存在來實現測試吧
看下DS2上和web服務
此此,咱們的web服務的高可用集羣已經創建完成,固然這只是比較簡單的實驗測試,在實際的工做須要中咱們能夠把web服務的主頁放到一個共享存儲上,來保證web內容的一致性!
6、雙主模型
咱們經過定義不一樣的vrrp_instance來實現兩個DS互爲雙主的架構:
vrrp_instance 1內:
DS1爲主
DS2爲從
vrrp_instance 2內:
DS1爲從
DS2爲主
其設置只須要在前面配置文件下增長以下內容便可:
123456789101112131415161718192021222324vrrp_instance VI_2 {
interface
eth0
state BACKUP # BACKUP
for
slave routers
priority
100
#
100
for
BACKUP
virtual_router_id
52
garp_master_delay
1
authentication {
auth_type PASS
auth_pass password
}
track_interface {
eth0
}
virtual_ipaddress {
172.16
.
7.6
/
16
dev eth0
label
eth0:
1
}
track_script {
chk_httpd
chk_mantaince_down
}
notify_master
"/etc/keepalived/httpd.sh master eth0:1"
notify_backup
"/etc/keepalived/httpd.sh backup eth0:1"
notify_fault
"/etc/keepalived/httpd.sh fault eth0:1"
}
而後配置DS2上的配置文件內增長以下內容:
123456789101112131415161718192021222324vrrp_instance VI_2 {
interface
eth0
state MASTER # BACKUP
for
slave routers
priority
101
#
100
for
BACKUP
virtual_router_id
52
garp_master_delay
1
authentication {
auth_type PASS
auth_pass password
}
track_interface {
eth0
}
virtual_ipaddress {
172.16
.
7.6
/
16
dev eth0
label
eth0:
1
}
track_script {
chk_httpd
chk_mantaince_down
}
notify_master
"/etc/keepalived/httpd.sh master eth0:1"
notify_backup
"/etc/keepalived/httpd.sh backup eth0:1"
notify_fault
"/etc/keepalived/httpd.sh fault eth0:1"
}
![]()
而後重啓keepalive服務,查看DS1和DS2
測試web
此時能夠把DS1宕掉,測試
此時測試web服務,其都是DS2上的了
至此咱們實現了基於keepalive的web雙主高可用集羣!
總結:經過以上實驗咱們瞭解了keepalive實現高可用,並利用lVS實現web負載均衡的架構所有過程,最後利用keepalive的雙主模型實現了web服務的高可用架構!