1. 程式人生 > >Keepalive配置文件說明和實現高可用

Keepalive配置文件說明和實現高可用

keepalive

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配置文件說明和實現高可用