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

Keepalive概述:

Keepalived是一個免費開源的,用C編寫的,具有第3層、第4層和第7層交換機的功能。主要提供loadbalancing(負載均衡)和 high-availability(高可用)功能,負載均衡實現須要依賴Linux的虛擬服務內核模塊(ipvs),而高可用是經過VRRP協議實現多臺機器之間的故障轉移服務。
Keepalive配置文件說明和實現高可用
上圖是Keepalived的功能體系結構,大體分兩層:用戶空間(user space)和內核空間(kernel space)。 內核空間:主要包括IPVS(IP虛擬服務器,用於實現網絡服務的負載均衡)和NETLINK(提供高級路由及其餘相關的網絡功能)兩個部分。
用戶空間:mysql

  • WatchDog:負載監控checkers和VRRP進程的情況
  • VRRP Stack:負載負載均衡器之間的失敗切換FailOver,若是隻用一個負載均稀器,則VRRP不是必須的。
  • Checkers:負責真實服務器的健康檢查healthchecking,是keepalived最主要的功能。換言之,能夠沒有
  • VRRP Stack,但健康檢查healthchecking是必定要有的。
  • IPVS wrapper:用戶發送設定的規則到內核ipvs代碼
  • Netlink Reflector:用來設定vrrp的vip地址等。

Keepalived的全部功能是配置keepalived.conf文件來實現的。web

安裝

[root@localhost ~]# yum install keepalived ipvsadm
[root@localhost ~]# rpm -ql keepalived
/etc/keepalived/keepalived.conf 主配置文件
/etc/sysconfig/keepalived
/usr/bin/genhash
/usr/lib/systemd/system/keepalived.service 啓動腳本算法

配置文件說明

[root@localhost ~]# cat /etc/keepalived/keepalived.confsql

! 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鏈接)bash

[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

haproxy的故障轉移

[root@localhost ~]# 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
          }
}
相關文章
相關標籤/搜索