keepalived高可用

keepalived:

Linux Cluster

LB: lvs, nginx

HA:keepalived, heartbeat, corosync, cman

HP:


分佈式存儲:HDFS

分佈式計算:YARN, 

batch: MapReduce

in-memory: spark

stream: storm


keepalived:

Acitve/Passive


lvs: vip, ipvs rules

nginx: vip, nginx service


resource, 高可用資源

HA Service: resources


ntp: network time protocol


vrrp:virtual route redundent protocol


Master/Backup


keepalived:

vrrp協議在Linux主機上以守護進程方式的實現;

能夠根據配置文件自動生成ipvs規則;

對各RS做健康狀態檢測;


組件:

vrrp stack

checkers

ipvs wrapper --> ipvs


配置文件的組成部分:

GLOBAL CONFIGURATION

VRRPD CONFIGURATION

vrrp instance

vrrp synchonization group

LVS CONFIGURATION


HA Cluster配置前提:

1、本機的主機名,要與hostname(uname -n)獲得的名稱保持一致;

CentOS 6: /etc/sysconfig/network

CentOS 7: hostnamectl set-hostname HOSTNAME


各節點要能互相解析主機名;一般建議通過hosts文件進行解析;


2、各節點時間同步;


3、確保iptables及selinux不會成爲服務阻礙;


           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

           }


           nopreempt:非搶佔模式;默認爲搶佔模式;


   lvs-NAT模式配置 

    vrrp_sync_group VG_1 {

    group {

             VI_1   # name of vrrp_instance (below)

             VI_2  # One for each moveable IP.

           }

    }


    vrrp_instance VI_1 {

    eth0

    vip

    }


    vrrp_instance VI_2 {

    eth1

    dip

    }


郵件通知方式:

在vi中的主機狀態發生改變生髮送通知:

        # notify scripts, alert as above

           notify_master <STRING>|<QUOTED-STRING>

           notify_backup <STRING>|<QUOTED-STRING>

           notify_fault <STRING>|<QUOTED-STRING>

           notify <STRING>|<QUOTED-STRING>

           smtp_alert


    配置示例:

! 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 LVS_DEVEL

   vrrp_mcast_group4 224.0.1.118

}


vrrp_script chk_mt {

    script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"

    interval 1

    weight -20

}


vrrp_instance VI_1 {

    state MASTER

    interface eno16777736

    virtual_router_id 144

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 84ae57f7f4f6

    }

    virtual_ipaddress {

172.16.100.88/16 dev eno16777736 label eno16777736:1

    }

    track_script {

chk_mt

    }

    notify_master "/etc/keepalived/notify.sh master"

    notify_backup "/etc/keepalived/notify.sh backup"

    notify_fault "/etc/keepalived/notify.sh fault"

}


virtual_server 172.16.100.88 80 {

    delay_loop 6

    lb_algo wrr

    lb_kind DR

    nat_mask 255.255.0.0

    protocol TCP

    sorry_server 127.0.0.1 80


    real_server 172.16.100.6 80 {

        weight 1

        HTTP_GET {

            url {

              path /

              status_code 200 

            }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

    real_server 172.16.100.69 80 {

        weight 2

        HTTP_GET {

            url {

              path /

              status_code 200 

            }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

}


通知腳本:

#!/bin/bash

# Author: zhanx <[email protected]>

# description: An example of notify script


vip=172.16.100.88

contact='root@localhost'


notify() {

    mailsubject="`hostname` to be $1: $vip floating"

    mailbody="`date '+%F %H:%M:%S'`: vrrp transition, `hostname` changed to be $1"

    echo $mailbody | mail -s "$mailsubject" $contact

}


case "$1" in

    master)

        notify master

        exit 0

    ;;

    backup)

        notify backup

        exit 0

    ;;

    fault)

        notify fault

        exit 0

    ;;

    *)

        echo 'Usage: `basename $0` {master|backup|fault}'

        exit 1

    ;;

esac


keepalived:

HTTP_GET

SSL_GET(https)

TCP_CHECK


示例:

HTTP_GET {

            url {

              path /

              status_code 200 

            }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }


TCP_CHECK {

    connect_timeout 3

}         


HA Services: 

nginx


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章