1. 程式人生 > 其它 >LVS+Keepalived群集

LVS+Keepalived群集

一。Keepalived工具

叢集需要滿足的特點:負載均衡,健康檢查,故障切換

在應用中單臺伺服器承擔負載應用存在單點故障的危險,一旦發生故障,企業服務將發生中斷,造成損失

Keepalived工具專為LVS和HA(高可用)設計的一款健康檢查工具

(1)支援故障自動切換(Failover)

(2)支援節點健康狀態檢查(Health Checking)

判斷LVS負載排程器、節點伺服器的可用性,當master主機出現故障即時切換到backup節點保證業務正常,當master故障主機恢復後將其重新加入群集並且業務重新切回master節點

(3)官方網站:http://www.keepalived.org/

二。Keepalived及工作原理

Keepalived是一個基於底層協議是VRRP熱備份協議來實現的LVS服務高可用方案,可以解決靜態路由出現的單點故障問題。

2.1)工作原理

在一個LVS服務叢集中通常有主伺服器 (MASTER)和備份伺服器(BACKUP) 兩種角色的伺服器,但是對外表現為一個虛擬IP,主伺服器會發送VRRP通告資訊給備份伺服器, 當備份伺服器收不到VRRP訊息的時候,即主伺服器異常的時候,備份伺服器就會接管虛擬IP,繼續提供服務,從而保證了高可用性。

2.2)Keepalived體系主要模組及其作用

keepalived體系架構中主要有三個模組,分別是core、check和

vrrp。

core模組∶為keepalived的核心,負責主程序的啟動、維護及全域性配置檔案的載入和解析。

vrrp模組∶是來實現VRRP協議的。

check模組∶負責健康檢查,常見的方式有埠檢查及URIL檢查。

2.3)VRRP(虛擬路由冗餘協議)

1. 是針對路由器的一種備份解決方案

2. 多臺路由器組成一個熱備組,通過共用的虛擬IP地址對外提供服務

3. 每個熱備組內同時只有一臺主路由器提供服務,其他路由器處於冗餘狀態

4. 若當前線上的路由器失效,則其他路由器會根據設定的優先順序自動接替虛擬IP地址,繼續提供服務

工作原理

1VRRP會把多臺路由器組成一個虛擬路由器組vrid,VRRP會生成一個虛擬路由器 (包含虛擬

IP和虛擬mac)

2區域網內的使用者不關心哪個是主哪個是備,他們只用虛擬路由器的虛擬IP作為他們的閘道器實際上虛擬IP是承載在master路由器也就是說實際的資料包是通過master進行轉發

3masterbackup是通過優先順序來決定哪個是master,優先順序最大的那臺就是 master其餘小的都是backup

4backup只是用來監聽Master定時發來的vrrp報文,如果超時未收到 master 發來的vrrp報文backup就會搶佔master地位虛擬IP也會一起漂移到backup 上

三。keepalived 腦裂現象是如何產生的?那又如何解決?

在某一次故障切換後,原來的master並沒有真正的掛掉 ,VIP還在而backup 則已經搶佔master地位,並也在本地配置了VIP,本來為一整體、動作協調的HA系統,就分裂成為2個獨立的個體。由於相互失去了聯絡,都以為是對方出了故障。兩個節點上的HA軟體像“裂腦人”一樣,爭搶“共享資源”、爭起“應用服務”,就會發生嚴重後果——或者共享資源被瓜分、2邊“服務”都起不來了;或者2邊“服務”都起來了,但同時讀寫“共享儲存”,導致資料損壞(常見如資料庫輪詢著的聯機日誌出錯)。這時客戶端傳送請求都能夠做出響應造成資源的爭奪

解決思路

1.網路的層面來解決 再加一條鏈路需要一定的成本

2.通過第三方監控軟體的方式來解決 zabbix

監控伺服器的狀態,也監控網路的流量

3.在本地通過指令碼方式來解決

在master主機通過if判斷是否能夠ping通backup主機,ping不通2種可能性中間鏈路斷掉了backup宕機再使用if判斷使用ssh跳到某一臺節點伺服器ping backup主機,如果也ping 不通則判斷backup宕機,如果Ping通則說明是中間鏈路問題鏈路問題就手動關閉maseter的keepalived工具,讓backup主機頂上

4. 編寫監控腦裂指令碼

vim check_keepalived.sh

#!/bin/bash

state=$(ip addrshow ens33|grep 192.168.150.200 |wc -l)

while true

do

if [$state-ne 0 ]

then

echo "建立VIP"

else

echo "未建立VIP"

fi

done

5. 命令測試確保兩臺負載均衡能夠正常負載

例如:

[root@dd ~]#curl -H Host:www.kgc.com 192.168.150.15

<h1>this is first 1 web!</h1>

四。實驗搭建LVS+Keepalived高可用群集

主DR伺服器:192.168.150.5

備DR伺服器:192.168.150.10

web伺服器1:192.168.150.15

web伺服器2:192.168.150.20

VIP:192.168.150.200

客戶端:192.168.150.100

1.配置負載排程器 (主、備相同)

systemctl stop firewalld.service

setenforce 0

yum -y install ipvsadm keepalived

modprobe ip_vs

cat /proc/net/ip_vs

1需要關閉icmp的重定向,不充當路由器

vim /etc/sysctl.conf

net.ipv4.ip_forward = 0

net.ipv4.conf.all.send_redirects = 0

net.ipv4.conf.default.send_redirects = 0

net.ipv4.conf.ens33.send_redirects = 0

sysctl -p

(2)啟動ipvsadm工具

ipvsadm-save > /etc/sysconfig/ipvsadm

systemctl start ipvsadm

ipvsadm -C #清空規則

3)配置keeplived(主、備DR伺服器上都要設定)

cd /etc/keepalived/

cp keepalived.conf keepalived.conf.bak #備份一下配置檔案

vim keepalived.conf

。。。。。。。

global_defs{ #定義全域性引數

--10行--修改,郵件服務指向本地

smtp_server 127.0.0.1 #該IP是本機迴環地址

--12行--修改,指定伺服器(路由器)的名稱,主備伺服器名稱須不同,例如主為LVS_01,備為LVS_02

router_id LVS_01

--14行--註釋或刪除,取消嚴格遵守VRRP協議功能,否則VIP無法被連線

#vIrp_strict

}

vrrp_ instance VI_1{ #定義VRRP熱備例項引數

--20行--修改,指定熱備狀態,主為MASTER,備為BACKUP

state MASTER

--21行--修改,指定承載vip地址的物理介面

interface ens33

-22行--修改,指定虛擬路由器的ID號,每個熱備組保持一致

virtual_router_id 10

#如果設定非搶佔模式,兩個節點都必須加上配置nopreempt搶佔模式主機宕機,備機頂上,主機恢復則搶回master位,非搶佔不會主動搶回

nopreempt

-23行--修改,指定優先順序,數值越大優先順序越高,這裡設定主為100,備為90

priority 100

advert_int 1#通告間隔秒數(心跳頻率)

authentication { #定義認證資訊,每個熱備組保持一致

auth_type PASS #認證型別

--27行--修改,指定驗證密碼,主備伺服器保持一致

auth_pass abc123

}

virtual_ipaddress{ #指定群集vip地址

192.168.150.200

}

}

--36行--修改,指定虛擬伺服器地址(VIP)、埠,定義虛擬伺服器和Web伺服器池引數

virtual server 192.168.150.20080 {

delay_loop 6 #健康檢查的間隔時間(秒)

lb_algo rr #指定排程演算法,輪詢(rr

--39行--修改,指定群集工作模式,直接路由(DR)

lb_kind DR

persistence_timeout 50 #連線保持時間(秒)

protocol TCP#應用服務採用的是TCP協議

-43行--修改,指定第一個Web節點的地址、埠

real server 192.168.150.1580 {

weight 1#節點的權重

-45行--刪除,新增以下健康檢查方式

TCP_CHECK {

connect_port 80 #新增檢查的目標埠

connect_timeout 5 #新增連線超時(秒)

nb_get_retry 4 #新增重試次數

delay_before_retry 3 #新增重試間隔

}

}

#新增第二個web節點的地址,埠以及健康檢查方式

real server 192.168.150.2080 {

weight 1

TCP_CHECK {

connect_port 80

connect_timeout 5

nb_get_retry 4

delay_before_retry 3

}

}

###刪除後面多餘配置項

}

systemctl start keepalived

ip addr #檢視虛擬網絡卡vip

*注意刪除多餘配置項後括號是否都補全,少括號依然可以啟動成功但無法加載出虛擬網絡卡ip

2. 節點伺服器配置

systemctl stop firewalld.service

setenforce 0

(1)配置承載VIP的虛擬口

cd /etc/sysconfig/network-scripts/

cp ifcfg-lo ifcfg-lo:0

vim ifcfg-lo:0

DEVICE=lo:0

ONBOOT=yes

IPADDR=192.168.150.200

NETMASK=255.255.255.255

ifup lo:0

ifconfig

#臨時新增路由指定該介面承載VIP地址

route add -host 192.168.150.200dev lo:0

或新增到開機自啟

vim /etc/rc.d/rc.local

/usr/sbin/route add -host 192.168.150.200dev lo:0

chmod +x /etc/rc.d/rc.local

(2)調整核心的ARP響應引數

vim /etc/sysctl.conf

net.ipv4.conf.lo.arp_ignore = 1 #系統只響應目的IP為本地IP的ARP請求

net.ipv4.conf.lo.arp_announce = 2 #系統不使用IP包的源地址來設定ARP請求的源地址,而選擇傳送介面的IP地址

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

sysctl -p

(3)設定首頁檔案啟動web服務

yum -y installhttpd

192.168.150.15伺服器

echo <h1>this is first 1 web!</h1>> /var/www/html/index.html

192.168.150.20伺服器

echo <h1>this is first 2 web!</h1>> /var/www/html/index.html

systemctl start httpd

3. 測試驗證

客戶端訪問http://192.168.150.200

再在主伺服器關閉Keepalived進行測試

手動停止master上的keepalived服務,檢視是否進行主備切換