天天看點

linux核心vrrp配置,Keepalive配置檔案說明和實作高可用

Keepalive概述:

Keepalived是一個免費開源的,用C編寫的,具備第3層、第4層和第7層交換機的功能。主要提供loadbalancing(負載均衡)和 high-availability(高可用)功能,負載均衡實作需要依賴Linux的虛拟服務核心子產品(ipvs),而高可用是通過VRRP協定實作多台機器之間的故障轉移服務。

linux核心vrrp配置,Keepalive配置檔案說明和實作高可用

上圖是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檔案來實作的。

安裝

[[email protected] ~]# yum install keepalived ipvsadm

[[email protected] ~]# rpm -ql keepalived

/etc/keepalived/keepalived.conf 主配置檔案

/etc/sysconfig/keepalived

/usr/bin/genhash

/usr/lib/systemd/system/keepalived.service 啟動腳本

配置檔案說明

[[email protected] ~]# 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             #檢查後的摘要資訊

#(可以使用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                     #檢查的web伺服器的虛拟主機

sorry_server         #備用機的IP,所有的realserver失效後啟用

notify_up                         #檢測到伺服器up後執行的腳本

notify_down                 #檢測到伺服器down後執行的腳本

實作MySQL的故障轉移

1)、實作master與slave1兩台主機的複制(AA複制)

2)、利用keepalived 的健康檢查功能,檢測本機的3306端口是否存活,如果端口失效,則自動執行自定義腳本

3)、自定義腳本的内容為:kill 本機的keepalived程序,并删除本機VIP;當本機keepalived程序被kill掉之後,另一台主機的keepalived程序即可獲得虛拟IP,實作的故障轉移

4)、測試:用戶端連接配接keepalived提供的虛拟IP(mysql需要事先授權grant連接配接)

[[email protected] ~]# 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

}

}

}

[[email protected] ~]# cat /etc/keepalived/kill.sh

#!/bin/bash

pkill keepalived

#systemctl stop keepalived #盡量使用此方式關閉keepalived

ip addr del dev ens33 10.18.42.123/32

haproxy的故障轉移

[[email protected] ~]# cat /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

router_id teacher

}

vrrp_script chk_haproxy {

script "lsof -i:80 | grep haproxy || exit 1"

interval 2

fail 1

}

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

}

track_script {

chk_haproxy

}

virtual_ipaddress {

10.18.42.124

}

}

linux核心vrrp配置,Keepalive配置檔案說明和實作高可用