Keepalive配置文件說明和實現高可用
Keepalived是一個免費開源的,用C編寫的,具備第3層、第4層和第7層交換機的功能。主要提供loadbalancing(負載均衡)和 high-availability(高可用)功能,負載均衡實現需要依賴Linux的虛擬服務內核模塊(ipvs),而高可用是通過VRRP協議實現多臺機器之間的故障轉移服務。
上圖是Keepalived的功能體系結構,大致分兩層:用戶空間(user space)和內核空間(kernel space)。 內核空間:主要包括IPVS(IP虛擬服務器,用於實現網絡服務的負載均衡)和NETLINK(提供高級路由及其他相關的網絡功能)兩個部分。
- WatchDog:負載監控checkers和VRRP進程的狀況
- VRRP Stack:負載負載均衡器之間的失敗切換FailOver,如果只用一個負載均稀器,則VRRP不是必須的。
- Checkers:負責真實服務器的健康檢查healthchecking,是keepalived最主要的功能。換言之,可以沒有
- VRRP Stack,但健康檢查healthchecking是一定要有的。
- IPVS wrapper:用戶發送設定的規則到內核ipvs代碼
- Netlink Reflector:用來設定vrrp的vip地址等。
Keepalived的所有功能是配置keepalived.conf文件來實現的。
安裝
[root@yxl ~]# yum install keepalived ipvsadm
[root@yxl ~]# rpm -ql keepalived
/etc/keepalived/keepalived.conf 主配置文件
/etc/sysconfig/keepalived
/usr/bin/genhash
/usr/lib/systemd/system/keepalived.service 啟動腳本
配置文件說明
[root@jspgou ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs { router_id maiya #路由id,不能重復 } vrrp_instance lvs_inst { #定義vrrp實例名 state BACKUP #定義vrrp角色,分為MASTER/BACKUP兩種 interface ens33 #指定網絡接口名 virtual_router_id 51 #同一組的vrrp成員,該id需要一致 priority 150 #優先級,範圍(0-255) nopreempt #不搶占(只針對BACKUP生效) advert_int 1 #發送hello的時間間隔 authentication { #通過密碼身份驗證 auth_type PASS auth_pass 1111 } virtual_ipaddress { #定義虛擬IP(VIP) 10.18.42.123 } } virtual_server 10.18.42.123 80 { #定義VIP相關配置 delay_loop 6 lb_algo rr #使用rr調度算法(rr|wrr|lc |wlc|lblc|sh|dh) lb_kind DR #使用DR模式 (DR/NAT/TUN) persistence_timeout 50 #定義persistence保持時間 protocol TCP #tcp協議 real_server 10.18.42.42 80 { #定義real_server weight 1 #weight權重為1 TCP_CHECK { #定義checker的方法(TCP/HTTP/SSL/MISC) connect_port 80 #定義tcp的port connect_timeout 3 #定義本次連接的超時時長為3s nb_get_retry 3 #定義嘗試3次,如果3次都失敗則宣告本real_server失效 delay_before_retry 3 #定義重連接間隔時間為3s } } real_server 10.18.42.6 80 { weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }
關於配置文件中的其它項:
HTTP_GET | SSL_GET{
url{ #根據url check,可以指定多個
path / #定義要檢查的URI地址
digest <string> #檢查後的摘要信息
#(可以使用genhash -s 目標服務器ip -p 端口號 status_code 200 -u uri地址得到摘要信息)
status_code 200 #檢查的返回狀態碼
}
}
notify_master /path/xx.sh #指定當切換到master 時執行的腳本
notify_backup /path/xx.sh #指定當切換到backup 時執行的腳本
notify_fault "path/xx.sh VG_1" #故障時執行的腳本
notify /path/xx.sh
virtualhost <string> #檢查的web服務器的虛擬主機
sorry_server <IPADDR> <port> #備用機的IP,所有的realserver失效後啟用
notify_up <string> #檢測到服務器up後執行的腳本
notify_down <string> #檢測到服務器down後執行的腳本
實現MySQL的故障轉移
1)、實現master與slave1兩臺主機的復制(AA復制)
2)、利用keepalived 的健康檢查功能,檢測本機的3306端口是否存活,如果端口失效,則自動執行自定義腳本
3)、自定義腳本的內容為:kill 本機的keepalived進程,並刪除本機VIP;當本機keepalived進程被kill掉之後,另一臺主機的keepalived進程即可獲得虛擬IP,實現的故障轉移
4)、測試:客戶端連接keepalived提供的虛擬IP(mysql需要事先授權grant連接)
[root@localhost ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id teacher
}
vrrp_instance lvs_inst {
state MASTER
interface ens33
virtual_router_id 51
priority 250
nopreempt
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.18.42.123
}
}
virtual_server 10.18.42.123 3306 {
delay_loop 6
lb_algo rr
lb_kind DR
#persistence_timeout 50
protocol TCP
real_server 10.18.42.251 3306 {
weight 1
notify_down /etc/keepalived/kill.sh
TCP_CHECK {
connect_port 3306
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
[root@localhost ~]# cat /etc/keepalived/kill.sh
#!/bin/bash
pkill keepalived
#systemctl stop keepalived #盡量使用此方式關閉keepalived
ip addr del dev ens33 10.18.42.123/32
Keepalive配置文件說明和實現高可用