1. 程式人生 > 實用技巧 >基於keepalived構建HA叢集

基於keepalived構建HA叢集

一、keepalived簡介

1.Keepalived的作用是檢RealServer的健康狀態,如果有一臺RealServer伺服器宕機Keepalived將檢測到,並將宕掉RealServer伺服器從系統中剔除,當RealServer伺服器重新恢復正常工作Keepalived自動將RealServer伺服器加入到伺服器群中

2.keeepalived常見模型

<1>主從模型:(主節點修復後服務返回主節點)

定義一個VIP(定義在網絡卡別名之上)

vrrp_instance做如下修改:

stateMASTER#從節點為BACKUP

priority101#指定優先順序,數字越大優先順序越高,主節點的優先順序高於從節點


<2>雙主模型:

建立兩個虛擬路由器,兩個節點互為主從

指定兩個vrrp_instance互為主從

virtual_router_id不相同

<3>LVS+keepalived

首先配置LVS

配置keepalived,新增虛擬服務,指定lvs模型及排程演算法

實戰篇

系統環境:centos6.4-i386

yum-yinstallkeepalived

keepalivedi686-1.2.7-3

二、主從模型HA叢集

修改主配置檔案:vim/etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
[email protected] } notification_email_from [email protected] smtp_connect_timeout 3 smtp_server 127.0.0.1 #郵件傳送者為本地主機 router_id LVS_DEVEL } vrrp_script chk_haproxy { script "killall -0 haproxy" interval 1 weight 2 } vrrp_script chk_mantaince_down { script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0" interval 1 weight -2 } vrrp_instance VI_1 { #vrrp例項 interface eth0 state MASTER # 從節點為BACKUP priority 101 # 指定優先順序,數字越大優先順序越高 virtual_router_id 51 garp_master_delay 1 authentication { auth_type PASS auth_pass password } track_interface { eth1 } virtual_ipaddress { 172.16.15.114/16 dev eth1 label eth1:0 #指定VIP及網絡卡別名 } track_script { chk_haproxy chk_mantaince_down } notify_master "/etc/keepalived/notify.sh master" notify_backup "/etc/keepalived/notify.sh backup" notify_fault "/etc/keepalived/notify.sh fault" }

notify指令碼:

#!/bin/bash
vip=172.16.15.114 #指定vip
contact='[email protected]'
notify() {
mailsubject="`hostname` to be $1: $vip floating"
mailbody="`date '+%F %H:%M:%S'`: vrrp transition, `hostname` changed to be $1"
echo $mailbody | mail -s "$mailsubject" $contact
}
case "$1" in
master)
notify master
/etc/rc.d/init.d/haproxy start
exit 0
;;
backup)
notify backup
/etc/rc.d/init.d/haproxy stop
exit 0
;;
fault)
notify fault
exit 0
;;
*)
echo 'Usage: `basename $0` {master|backup|fault}'
exit 1
;;
esac

以windows作為客戶端訪問172.16.15.114

161926110.png

關掉主服務:servicekeepalivedstop

162020933.png

三、雙主模型

原理:建立兩個虛擬路由器,兩個節點互為主從。

! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_connect_timeout 3
smtp_server 127.0.0.1
router_id LVS_DEVEL
}
vrrp_script chk_haproxy {
script "killall -0 haproxy"
interval 1
weight 2
}
vrrp_script chk_mantaince_down {
script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
interval 1
weight 2
}
vrrp_instance VI_1 {  #例項1
interface eth1
state MASTER  # BACKUP for slave routers
priority 101  # 100 for BACKUP
virtual_router_id 51
garp_master_delay 1
authentication {
auth_type PASS
auth_pass password
}
track_interface {
eth1
}
virtual_ipaddress {  #VIP1
172.16.15.115/16 dev eth1 label eth1:1
}
track_script {
chk_haproxy
chk_mantaince_down
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
vrrp_instance VI_2 {  #例項2
interface eth1
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 {
eth1
}
virtual_ipaddress {  #VIP2
172.16.15.116/16 dev eth1 label eth1:2
}
track_script {
chk_haproxy
chk_mantaince_down
}
}

在客戶端訪問172.16.15.115172.16.15.116

162517180.png

檢視IP

164934163.png

165000572.png

四、實現LVS+keepalivedLVS--DR

1、首先配置LVS負載均衡叢集

注:LVS在會後續博文中做詳細介紹!!!

新增ipvsadm規則

#yum -y install ipvsadm #安裝ipvsadm
#ipvsadm #檢視ipvsadm資訊及規則
#ipvsadm -A -t 172.16.15.117:80 -s rr  #指定Director(排程器)

註釋:A(新增規則)

-t(指定協議為TCP)

172.16.15.117:80(指定VIP及埠)

-srr(指定排程演算法為rr)

#新增real_server

#ipvsadm -a -t 172.16.15.117:80 -r 172.16.15.5 -g
#ipvsadm -a -t 172.16.15.117:80 -r 172.16.15.14 -g
#ifconfig lo:0 $WEB_VIP netmask 255.255.255.255 broadcast $WEB_VIP  #配置VIP,只允許本地迴環
# /sbin/route add -host $WEB_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

註釋:在此只新增兩個節點

-a:新增服務

-r172.16.15.5:指定服務IP

-g:指定lvs模型(預設DR

2、配置基於keepalived(主從)高可用叢集

! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_connect_timeout 3
smtp_server 127.0.0.1
router_id LVS_DEVEL
}
vrrp_script chk_schedown {
script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
interval 2
weight -2
}
vrrp_instance VI_1 {
interface eth1
state MASTER
priority 101
virtual_router_id 51
garp_master_delay 1
authentication {
auth_type PASS
auth_pass password
}
track_interface {
eth1
}
virtual_ipaddress {
172.16.15.117/16 #指定VIP,此處的VIP和lvs的VIP相同,因此不指定網絡卡
}
track_script {
chk_schedown
}
}
virtual_server 172.16.15.117 80 { #指定虛擬服務
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 50
protocol TCP
sorry_server 172.16.15.14 80 #錯誤頁面
real_server 172.16.15.5 80 {  #指定rserver1
weight 1
HTTP_GET {
url {
path /
status_code 200 #狀態碼
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.16.15.14 80 {  #指定rserver2
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3 #連線超時時間
nb_get_retry 3 #嘗試連線次數
delay_before_retry 3 #每次嘗試之前等待的時間
}
}
}

在客戶端訪問172.16.15.117

165123558.png

165139941.png

轉載於:https://blog.51cto.com/dreamwolf/1301660