LVS - 使用用Keepalived實現健康檢查的示例
一、說明和準備
Keepalived是基於VRRP協議實現的保證叢集高可用的一個服務軟體,執行在LVS之上,它的主要功能是實現真機的故障隔離及負載均衡器間的失敗切換,用來防止單點故障
keepalived主要有三個模組,分別是core、check和vrrp。core模組為keepalived的核心,負責主程式的啟動、維護以及全域性配置檔案的載入和解析。check負責健康檢查,包括常見的各種檢查方式。vrrp模組是來實現VRRP協議的
keepalived只有一個配置檔案keepalived.conf,裡面主要包括以下幾個配置區域,分別是global_defs、static_ipaddress、static_routes、vrrp_script、vrrp_instance和virtual_server
# 安裝IPVS管理模組
yum install ipvsadm -y
# 安裝keepalived
yum install keepalived -y
二、配置keepalived節點
! Configuration File for keepalived
# vi /etc/keepalived/keepalived.conf
# 全域性配置 主要是配置故障發生時的通知物件以及機器標識
global_defs {
notification_email {
r_xl@xl.com # 設定報警郵件接收地址,需要開啟 sendmail 服務
}
notification_email_from s_xl@xl.com # 設定郵件的傳送地址
smtp_server 192.168.2.241 # 設定通知的 SMTP Server 地址
smtp_connect_timeout 30 # 設定通知的 SMTP Server 的超時時間
router_id LVS_DEVEL_1 # 路由ID,標識本節點的字串,郵件通知時會用到
}
# 自定義VRRP例項健康檢查指令碼 keepalived只能做到對自身問題和網路故障的監控,Script可以增加其他的監控來判定是否需要切換主備
vrrp_script chk_sshd {
script "killall -0 sshd" # 示例為檢查sshd服務是否執行中
interval 2 # 檢查間隔時間
weight -4 # 檢查失敗降低的權重
}
# VRRP例項 定義對外提供服務的VIP區域及其相關屬性
vrrp_instance VI_1 {
state MASTER # 狀態只有 MASTER 和 BACKUP 兩種,並且要大寫,MASTER 為工作狀態,BACKUP 是備用狀態
interface eth0 # 節點固有IP(非VIP)的網路卡,用來發VRRP包
virtual_router_id 51 # 虛擬路由標識,同一個 vrrp_instance 的 MASTER 和 BACKUP 的 vitrual_router_id 需要一致
priority 100 # 優先順序,同一個 vrrp_instance 的 MASTER 優先順序必須比 BACKUP 高
advert_int 1 # MASTER 與 BACKUP 負載均衡器之間同步檢查的時間間隔,單位為秒
authentication { # 設定認證
auth_type PASS # 認證方式,支援 PASS 和 HA
auth_pass 1111 # 證密碼為明文,同一 vrrp 例項 MASTER 與 BACKUP 使用相同的密碼才能正常通訊
}
virtual_ipaddress { # 虛擬IP地址(VIP),可以有多個地址,每個地址佔一行
192.168.12.200
}
track_script { # 自定義健康檢查指令碼
chk_sshd # 配置上面自定義的vrrp指令碼呼叫名
}
}
# 設定虛擬伺服器
virtual_server 192.168.12.200 6500 { # 指定虛擬IP地址和服務埠
delay_loop 6 # 服務健康檢查週期,6秒
lb_algo rr # 負載均衡排程演算法,一般用wrr、rr、wlc
lb_kind DR # 負載均衡轉發規則。一般包括DR,NAT,TUN 3種
persistence_timeout 5 # 會話保持時間。把使用者請求請求間隔在未超過保持時間時,一直分發到某個服務節點
protocol TCP # 轉發協議 有TCP和UDP兩種
# 配置真實伺服器
real_server 192.168.2.222 6500 { #指定IP和埠
weight 1 # 權重,數值越大,權重越高
# 健康檢查方式 常見有 TCP_CHECK, HTTP_GET, SSL_GET, MISC_CHECK(自定義指令碼)
TCP_CHECK { # 通過TcpCheck方式判斷RealServer的健康狀態
connect_timeout 10 # 連線超時時間
nb_get_retry 3 # 重連次數
delay_before_retry 3 # 重連時間間隔
connect_port 6500 # 檢測埠
}
}
# 配置真實伺服器
real_server 192.168.2.222 6500 { #指定IP和埠
weight 1 # 權重,數值越大,權重越高
# 健康檢查方式 常見有 TCP_CHECK, HTTP_GET, SSL_GET, MISC_CHECK(自定義指令碼)
TCP_CHECK { # 通過TcpCheck判斷RealServer的健康狀態
connect_timeout 10 # 連線超時時間
nb_get_retry 3 # 重連次數
delay_before_retry 3 # 重連時間間隔
connect_port 6500 # 檢測埠
}
}
}
1、DS通過啟動keepalived開啟排程器的負載均衡
[root@DR1 keepalived]# service keepalived start
2、ipvs預設超時時間#### 檢視預設超時時間
[root@DR1 keepalived]# ipvsadm -L --timeout
Timeout (tcp tcpfin udp): 900 120 300
# 也就是說一條tcp的連線經過lvs後,lvs會把這臺記錄儲存15分鐘,就是因為這個時間過長,所以容易發生做好 LVS DR 之後輪詢的現象並沒有發生
#### 調整預設超時時間
[root@DR1 ~]# ipvsadm --set 1 2 1
3、監測連線保持狀態(2s重新整理一次狀態)
[root@DR1 keepalived]# watch ipvsadm -L -n -c
4、RS實伺服器參考LVS - 直接路由(DR)模式示例中真實伺服器的lvs_real_dr.sh指令碼部分
四、常用keepalived檢查型別
1、TCP_CHECK
TCP_CHECK { # 通過TcpCheck判斷RealServer的健康狀態
connect_timeout 10 # 連線超時時間
nb_get_retry 3 # 重連次數
delay_before_retry 3 # 重連時間間隔
connect_port 6500 # 檢測埠
}
2、HTTP_GET HTTP_GET {
url {
path check/200.jsp # 檢查的uri地址
digest 1362a91278f0806aa1d33e1e26d67763 # 用keepalived自帶的genhash生成,/usr/bin/genhash -s rsIP -p port -u uri
}
connect_timeout 3 # 連結超時時間
nb_get_retry 3 # 重連次數
delay_before_retry 3 # 重連時間間隔
connect_port 6500 # 檢測埠
}
3、MISC_CHECK keepalived.conf配置:
MISC_CHECK {
misc_path "/etc/keepalived/misc_check.sh http://192.168.2.222:6500/check/200.jsp" # 外部程式或者指令碼的路徑和引數
misc_timeout 10 # 指令碼執行的超時時間
misc_dynamic #動態權重標誌。指令碼返回0則檢測成功權重不變,返回1表示失敗權重設定為0
}
misc_check.sh指令碼示例:#!/bin/bash
# ./misc_check.sh http://192.168.2.222:6500/check/200.jsp
if [ $# -ne 1 ]; then
echo "Warning: command param error."
exit 1
else
CHECK_URL=$1
CMD=`/usr/bin/curl -I ${CHECK_URL} 2>/dev/null | grep "200 OK" | wc -l`
if [ ${CMD} -eq 1 ]; then
echo "Succ: Check proxy ${CHECK_URL} is succeed."
exit 0
else
echo "Fail: check proxy ${CHECK_URL} is failed."
exit 1
fi
fi
五、參考資料
http://www.cnblogs.com/liwei0526vip/p/6370103.html
http://blog.csdn.net/traumerei/article/details/63686693
http://outofmemory.cn/wiki/keepalived-configuration
相關文章
- 在.NET Core 中實現健康檢查
- LVS+Keepalived實現負載均衡負載
- LVS+Keepalived 實現高可用負載均衡負載
- 如何在 ASP.Net Core 中實現 健康檢查ASP.NET
- 使用Spring Boot實現動態健康檢查HealthChecksSpring Boot
- keepalived+lvs實現mysql叢集負載均衡MySql負載
- Linux CentOs叢集LVS+Keepalived負載均衡的實現LinuxCentOS負載
- EntityFramework Core健康檢查Framework
- Health Monitor 健康檢查
- LVS+KEEPALIVED負載均衡實驗負載
- KeepAlived+LVS+NginxNginx
- SOFABoot 健康檢查能力分析boot
- .Net Core基礎的健康檢查
- Docker 容器的健康狀態檢查Docker
- Kubernetes叢集健康檢查最佳實踐
- 【Mysql】MySQL 主主複製 + LVS + Keepalived 實現 MySQL 高可用性MySql
- Kubernetes-POD的健康檢查
- Oracle SCN健康狀態檢查Oracle
- 資料庫健康檢查(轉)資料庫
- LVS+keepalived負載均衡負載
- 負載均衡 LVS+Keepalived負載
- 如何在Java服務中實現自動化的健康檢查與自愈機制Java
- kubernetes實踐之三十七:Pod健康檢查
- MySQL資料庫健康檢查--MySQL巡檢MySql資料庫
- LVS+Keepalived 高可用群集(理論+實戰部署)
- lvs+keepAlived→效率最高的負載均衡負載
- 解決pod健康檢查問題
- 構建api gateway之 健康檢查APIGateway
- redis健康檢查與故障轉移Redis
- Kubernetes應用健康檢查
- Oracle ERP系統健康檢查Oracle
- Nginx負載均衡之健康檢查Nginx負載
- 利用RDA對Oracle做健康檢查Oracle
- ORAchk-資料庫健康檢查資料庫
- MSSQL資料庫健康檢查--SQL Server巡檢SQL資料庫Server
- 系統高可用之健康檢查和健康度量那些事
- 如何給mac硬體做健康檢查Mac
- 教你如何mac硬體做健康檢查Mac