lvs-keepalived

keepalived:

vrrp協議:Virtual Redundant Routing Protocol
        術語:
        虛擬路由器:Virtual Router 
        虛擬路由器標識:VRID(0-255)
        物理路由器:
                master:主設備
                backup:備用設備
                priority:優先級
                VIP:Virtual IP 
                VMAC:Virutal MAC (00-00-5e-00-01-VRID)
                GraciousARP

            通告:心跳,優先級等;周期性;
            搶占式,非搶占式;
            安全工作:
            認證:
            無認證:
            簡單字符認證
            MD5

工作模式:
         主/備:單虛擬路徑器;
         主/主:主/備(虛擬路徑器1),備/主(虛擬路徑器2)

keepalived:
        vrrp協議的軟件實現,原生設計的目的為了高可用ipvs服務:
        vrrp協議完成地址流動;
        為vip地址所在的節點生成ipvs規則(在配置文件中預先定義);
        為ipvs集群的各RS做健康狀態檢測;
        基于腳本調用接口通過執行腳本完成腳本中定義的功能,進而影響集群事務;

組件:
       核心組件:
       vrrp stack
       ipvs wrapper
       checkers
       控制組件:配置文件分析器
      IO復用器
      內存管理組件

HA Cluster的配置前提:
              (1) 各節點時間必須同步;
                         ntp, chrony
              (2) 確保iptables及selinux不會成為阻礙;
              (3) 各節點之間可通過主機名互相通信(對KA并非必須);
                   建議使用/etc/hosts文件實現; 
              (4) 各節點之間的root用戶可以基于密鑰認證的ssh服務完成互相通信;(并非必須)

程序環境:
           主配置文件:/etc/keepalived/keepalived.conf
           主程序文件:/usr/sbin/keepalived
           Unit File:keepalived.service
           Unit File的環境配置文件:/etc/sysconfig/keepalived

配置文件組件部分:
TOP HIERACHY
GLOBAL CONFIGURATION
Global definitions
Static routes/addresses
VRRPD CONFIGURATION
VRRP synchronization group(s):vrrp同步組;
VRRP instance(s):每個vrrp instance即一個vrrp路由器;
LVS CONFIGURATION
Virtual server group(s)
Virtual server(s):ipvs集群的vs和rs;

單主配置示例:
! Configuration File for keepalived

global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node1
vrrp_mcast_group4 224.0.100.19
}

vrrp_instance VI_1 {
state BACKUP
interface eno16777736
virtual_router_id 14
priority 98
advert_int 1
authentication {
auth_type PASS
auth_pass 571f97b2
}
virtual_ipaddress {
10.1.0.91/16 dev eno16777736
}
}

配置語法:
配置虛擬路由器:
vrrp_instance <STRING> {
….
}

專用參數:
state MASTER|BACKUP:當前節點在此虛擬路由器上的初始狀態;只能有一個是MASTER,余下的都應該為BACKUP;
interface IFACE_NAME:綁定為當前虛擬路由器使用的物理接口;
virtual_router_id VRID:當前虛擬路由器的惟一標識,范圍是0-255;
priority 100:當前主機在此虛擬路徑器中的優先級;范圍1-254;
advert_int 1:vrrp通告的時間間隔;
authentication {
auth_type AH|PASS
auth_pass <PASSWORD>
}
virtual_ipaddress {
<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
192.168.200.17/24 dev eth1
192.168.200.18/24 dev eth2 label eth2:1
}
track_interface {
eth0
eth1

}
配置要監控的網絡接口,一旦接口出現故障,則轉為FAULT狀態;
                       nopreempt:定義工作模式為非搶占模式;
                       preempt_delay 300:搶占式模式下,節點上線后觸發新選舉操作的延遲時長;

定義通知腳本:
notify_master <STRING>|<QUOTED-STRING>:當前節點成為主節點時觸發的腳本;
notify_backup <STRING>|<QUOTED-STRING>:當前節點轉為備節點時觸發的腳本;
notify_fault <STRING>|<QUOTED-STRING>:當前節點轉為“失敗”狀態時觸發的腳本;

notify <STRING>|<QUOTED-STRING>:通用格式的通知觸發機制,一個腳本可完成以上三種狀態的轉換時的通知;

keepalived(2)

雙主模型示例:
! Configuration File for keepalived

global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node1
vrrp_mcast_group4 224.0.100.19
}

vrrp_instance VI_1 {
state MASTER
interface eno16777736
virtual_router_id 14
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 571f97b2
}
virtual_ipaddress {
10.1.0.91/16 dev eno16777736
}
}

vrrp_instance VI_2 {
state BACKUP
interface eno16777736
virtual_router_id 15
priority 98
advert_int 1
authentication {
auth_type PASS
auth_pass 578f07b2
}
virtual_ipaddress {
10.1.0.92/16 dev eno16777736
}
}

通知腳本的使用方式:
示例通知腳本:

!/bin/bash

contact=’root@localhost’

notify() {
mailsubject=”$(hostname) to be $1, vip floating”
mailbody=”$(date +’%F %T’): vrrp transition, $(hostname) changed to be $1″
echo “$mailbody” | mail -s “$mailsubject” $contact
}

case $1 in
master)
notify master
;;
backup)
notify backup
;;
fault)
notify fault
;;
*)
echo “Usage: $(basename $0) {master|backup|fault}”
exit 1
;;
esac

腳本的調用方法:
notify_master “/etc/keepalived/notify.sh master”
notify_backup “/etc/keepalived/notify.sh backup”
notify_fault “/etc/keepalived/notify.sh fault”

虛擬服務器:
配置參數:
virtual_server IP port |
virtual_server fwmark int 
{

real_server {

}

}

常用參數:
delay_loop <INT>:服務輪詢的時間間隔;
lb_algo rr|wrr|lc|wlc|lblc|sh|dh:定義調度方法;
lb_kind NAT|DR|TUN:集群的類型;
persistence_timeout <INT>:持久連接時長;
protocol TCP:服務協議,僅支持TCP;
sorry_server <IPADDR> <PORT>:備用服務器地址;
real_server <IPADDR> <PORT>
{
weight <INT>
notify_up <STRING>|<QUOTED-STRING>
notify_down <STRING>|<QUOTED-STRING>
HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK { … }:定義當前主機的健康狀態檢測方法;
}

HTTP_GET|SSL_GET:應用層檢測

HTTP_GET|SSL_GET {
url {
path <URL_PATH>:定義要監控的URL;
status_code <INT>:判斷上述檢測機制為健康狀態的響應碼;
digest <STRING>:判斷上述檢測機制為健康狀態的響應的內容的校驗碼;
}
nb_get_retry <INT>:重試次數;
delay_before_retry <INT>:重試之前的延遲時長;
connect_ip <IP ADDRESS>:向當前RS的哪個IP地址發起健康狀態檢測請求
connect_port <PORT>:向當前RS的哪個PORT發起健康狀態檢測請求
bindto <IP ADDRESS>:發出健康狀態檢測請求時使用的源地址;
bind_port <PORT>:發出健康狀態檢測請求時使用的源端口;
connect_timeout <INTEGER>:連接請求的超時時長;
}

TCP_CHECK {
connect_ip <IP ADDRESS>:向當前RS的哪個IP地址發起健康狀態檢測請求
connect_port <PORT>:向當前RS的哪個PORT發起健康狀態檢測請求
bindto <IP ADDRESS>:發出健康狀態檢測請求時使用的源地址;
bind_port <PORT>:發出健康狀態檢測請求時使用的源端口;
connect_timeout <INTEGER>:連接請求的超時時長;
}

高可用的ipvs集群示例:
! Configuration File for keepalived

global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node1
vrrp_mcast_group4 224.0.100.19
}

vrrp_instance VI_1 {
state MASTER
interface eno16777736
virtual_router_id 14
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 571f97b2
}
virtual_ipaddress {
10.1.0.93/16 dev eno16777736
}
notify_master “/etc/keepalived/notify.sh master”
notify_backup “/etc/keepalived/notify.sh backup”
notify_fault “/etc/keepalived/notify.sh fault”
}

virtual_server 10.1.0.93 80 {
delay_loop 3
lb_algo rr
lb_kind DR
protocol TCP

sorry_server 127.0.0.1 80

real_server 10.1.0.69 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 1
nb_get_retry 3
delay_before_retry 1
}
}
real_server 10.1.0.71 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 1
nb_get_retry 3
delay_before_retry 1
}
}
}

配置示例(一個節點):

! Configuration File for keepalived

global_defs {
notification_email {
root@localhost
}
notification_email_from kaadmin@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node1
vrrp_mcast_group4 224.0.100.67
}

vrrp_instance VI_1 {
state MASTER
interface eno16777736
virtual_router_id 44
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass f1bf7fde
}
virtual_ipaddress {
172.16.0.80/16 dev eno16777736 label eno16777736:0
}
track_interface {
eno16777736
}
notify_master “/etc/keepalived/notify.sh master”
notify_backup “/etc/keepalived/notify.sh backup”
notify_fault “/etc/keepalived/notify.sh fault”
}

vrrp_instance VI_2 {
state BACKUP
interface eno16777736
virtual_router_id 45
priority 98
advert_int 1
authentication {
auth_type PASS
auth_pass f2bf7ade
}
virtual_ipaddress {
172.16.0.90/16 dev eno16777736 label eno16777736:1
}
track_interface {
eno16777736
}
notify_master “/etc/keepalived/notify.sh master”
notify_backup “/etc/keepalived/notify.sh backup”
notify_fault “/etc/keepalived/notify.sh fault”
}

virtual_server fwmark 3 {
delay_loop 2
lb_algo rr
lb_kind DR
nat_mask 255.255.0.0
protocol TCP
sorry_server 127.0.0.1 80

real_server 172.16.0.69 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 2
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.16.0.6 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 2
nb_get_retry 3
delay_before_retry 3
}
}
}

keepalived調用外部的輔助腳本進行資源監控,并根據監控的結果狀態能實現優先動態調整;
分兩步:(1) 先定義一個腳本;(2) 調用此腳本;
vrrp_script <SCRIPT_NAME> {
script “”
interval INT 
weight -INT 
}

track_script {
SCRIPT_NAME_1
SCRIPT_NAME_2

}

示例:高可用nginx服務

! Configuration File for keepalived

global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node1
vrrp_mcast_group4 224.0.100.19
}

vrrp_script chk_down {
script “[[ -f /etc/keepalived/down ]] && exit 1 || exit 0”
interval 1
weight -5
}

vrrp_script chk_nginx {
script “killall -0 nginx && exit 0 || exit 1”
interval 1
weight -5
fall 2
rise 1
}

vrrp_instance VI_1 {
state MASTER
interface eno16777736
virtual_router_id 14
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 571f97b2
}
virtual_ipaddress {
10.1.0.93/16 dev eno16777736
}
track_script {
chk_down
chk_nginx
}
notify_master “/etc/keepalived/notify.sh master”
notify_backup “/etc/keepalived/notify.sh backup”
notify_fault “/etc/keepalived/notify.sh fault”
}

原創文章,作者:shewei,如若轉載,請注明出處:http://www.www58058.com/75368

(0)
sheweishewei
上一篇 2017-05-13
下一篇 2017-05-13

相關推薦

  • Python基礎篇之過程型程序設計

    一、Python過程型程序設計 面向過程 以指令為中心,由指令處理數據 如何組織代碼解碼問題 面向對象 以數據為中心,所有的處理代碼都圍繞數據展開 如何設計數據結構組織數據,并提供對此類數據所允許處理操作 簡單方法: 1)、編譯安裝新版本至某特定路徑 # yum install readline-devel # tar xf Python-2.7.6.tar…

    2018-01-11
  • Linux 命令小結

    cat /proc/meminfo 校驗內存使用 cat /proc/swaps 顯示哪些swap被使用 cat /proc/version 顯示內核的版本 cat /proc/net/dev 顯示網絡適配器及統計 cat /proc/mounts 顯示已加載的文件系統 lspci -tv 羅列 PCI 設備…

    Linux干貨 2017-06-18
  • 從Linux小白到大?!c狼共舞的日子2

    馬哥教育網絡班21期+第2周課程練習 1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 cp:copy,復制文件 cp SRC DEST   SRC為文件     如果目錄不存在:新建DEST,并將SRC中內容填充至DEST中     如果目…

    Linux干貨 2016-07-17
  • 高可用Nginx

    高可用Nginx 基于vrrp流動一個IP地址 各節點時間必須同步; 確保iptables以及selinux不會成為阻礙; 各節點之間可通過主機名互相同喜(對KA而言并非必須) 確保各節點的用于集群服務的接口支持MULTICAST通信 IPv4,D類地址224-239 環境: node1:172.16.253.223 li1.jing.io node1 no…

    Linux干貨 2017-06-28
  • LVS負載均衡初接觸

    Linux Cluster : Cluster : 計算機集合, 為解決某個特定問題組合起來形成的單個系統; Linux Cluster 類型 : LB : Load Balancing, 負載均衡;()HA : High Avaiibality, 高可用;( 通過冗余的方式讓活動主機出現問題時取而代之, 并具有原主機一致的功能)HP : High Perf…

    Linux干貨 2016-10-28
  • Linux 第十天: Linux文件查找和壓縮

      Linux 第十天: Linux文件查找和壓縮                     使用Linux的時候, 經常需要查找文件, 在Linux中, 有很多方法可以做到這一點.…

    Linux干貨 2016-08-18
欧美性久久久久