Linux keepalived高可用集群

                   Linux keepalived高可用集群


keepalived簡介:

   keepalived是為了高可用ipvs集群而設計的,主要用作realserver的健康狀態檢測,如果有一臺web服務器死機,或工作出現故障,keepalived將檢測到,并將有故障的服務器從系統中移除,同時使用其他服務器代替該服務器的工作,當服務器工作正常后keepalived自動將服務器加入到服務器集群中,這些工作全部自動完成,不需要人工干預,需要人工做的只是修復故障的服務器。

集群類型:LB、HA、HP

SPoF: Single Point of Failure

系統可用性的公式:A=MTBF/MTBF+MTTR

HA Cluster實現方案:

vrrp協議的實現

        vrrp:虛擬冗余路由協議;

keepalived

ais:完備HA集群;

heartbeat

corosync  

 

keepalived保持連接:

    vrrp協議:Virtual Redundant Routing Protocol 虛擬冗余路由協議

術語:

虛擬路由器:Virtual Router

虛擬路由器標識:VRID(0-255)

物理路由器:

master:主設備

backup:備用設備

priority:優先級

VIPVirtual IP

VMACVirutal MAC (00-00-5e-00-01-VRID)

通告:心跳,優先級等;周期性;

搶占式,非搶占式;

 

安全工作:

   認證:

無認證

簡單字符認證

MD5

 

工作模式:

/備:單虛擬路徑器;

/主:主/備(虛擬路徑器1),備/主(虛擬路徑器2

keepalived:為了在Linux系統中實現vrrp協議

vrrp協議的軟件實現,原生設計的目的為了高可用ipvs服務:

vrrp協議完成地址流動;

vip地址所在的節點生成ipvs規則(在配置文件中預先定義);

ipvs集群的各RS做健康狀態檢測;

基于腳本調用接口通過執行腳本完成腳本中定義的功能,進而影響集群事務;

 組件:

核心組件:

 vrrp stack

 ipvs wrapper

 checkers

控制組件:配置文件分析器

IO復用器

內存管理組件

 

HA Cluster的配置前提:

(1) 各節點時間必須同步;

    ntp, chrony

(2) 確保iptablesselinux不會成為阻礙;

(3) 各節點之間可通過主機名互相通信(對KA并非必須);

建議使用/etc/hosts文件實現;

(4) 各節點之間的root用戶可以基于密鑰認證的ssh服務完成互相通信;(并非必須)

 

keepalived安裝配置:

CentOS 6.4之后的版本keepalived已經收錄到base倉庫中了。

    程序環境:

配置文件:/etc/keepalived/keepalived.conf

  主程序:/usr/sbin/keepalived

  Unit Filekeepalived.service

配置文件組件部分:

TOP HIERACHY

GLOBAL CONFIGURATION

Global definitions

Static routes/addresses

VRRPD CONFIGURATION

VRRP synchronization group(s)

VRRP instance(s)

LVS CONFIGURATION

Virtual server group(s)

Virtual server(s)

單主配置示例:

! 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 1vrrp通告的時間間隔;

 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:搶占式模式下,節點上線后觸發新選舉操作的延遲時長;

定義keepalived主備切換郵件通知腳本:

notify_master <STRING>|<QUOTED-STRING>:當前節點成為主節點時觸發的腳本;

notify_backup <STRING>|<QUOTED-STRING>:當前節點轉為備節點時觸發的腳本;

notify_fault <STRING>|<QUOTED-STRING>:當前節點轉為“失敗”狀態時觸發的腳本;

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

 

 

keepalived單、主配置實例:

blob.png

blob.png

blob.png

定義keepalived主備切換郵件通知腳本:

blob.png

blob.png

雙主模型示例:  

! 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

}

}

 

 雙主模型配置實例:

blob.png

blob.png

blob.png

定義keepalived主備切換郵件通知腳本:

blob.png

blob.png

虛擬服務器:

配置參數:

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 {

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>:連接請求的超時時長;

}

 

實驗測試:

   部署一個lvs-dr類型的keepalived HA單主高可用集群:

   環境介紹:

   測試客戶機:

      client客戶機IP192.168.3.4

   搭建單主高可用集群:

      keepalived HA高可用集群(1IP192.168.3.7

      keepalived HA高可用集群(2IP192.168.3.5

      keepalived HA 高可用集群的vip192.168.3.6

      keepalived各節點上提供sorry_server web服務;網頁為:website maintenance

   后臺網站服務器:

      realserver1IP地址:192.168.3.2

        配置httpd服務:網頁為 keepalived server 1

        lo別名網卡上配置vip地址:192.168.3.6;關閉arp_ignorearp_announce;

       realserver2IP地址:192.168.3.8

        配置httpd服務:網頁為 keepalived server 2

        lo別名網卡上配置vip地址:192.168.3.6;關閉arp_ignorearp_announce;

 

   1)在real server 1 realserver2上分別執行此腳本,配置lo別名網卡上的viparp_ignore、arp_announce的參數。

blob.png

  2)在 keepalived HA高可用集群(1IP192.168.3.7 配置如下內容:

blob.png

blob.png

blob.png

blob.png

  3)在 keepalived HA高可用集群(2IP192.168.3.5 配置如下內容:

blob.png

blob.png

blob.png

blob.png

4)在客戶機上測試keepalived的輪循調度:

blob.png

5)故意關閉一臺realserver web進行測試:

blob.png

6)故意關閉后臺所有realserver服務,測試sorry_server web

blob.png

keepalived調用外部的輔助腳本進行資源監控,并根據監控的結果狀態能實現優先動態調整;

分兩步:(1) 先定義一個腳本;(2) 調用此腳本;

 

調用外部腳本對keepalived進行健康狀態檢測機制

定義在vrrp_instance實例之外:

vrrp_script <SCRIPT_NAME> {   //定義腳本

script ""

interval #

weight -#

}

定義在vrrp_instance實例之內:  

track_script {                //調用腳本

SCRIPT_NAME_1

SCRIPT_NAME_2

    

 }

實驗測試:

   部署一個nginxkeepalived HA單主高可用集群:

   環境介紹:

   測試客戶機:

      client客戶機IP192.168.3.4

   搭建單主高可用集群:

      keepalived HA高可用集群(1IP192.168.3.7

      keepalived HA高可用集群(2IP192.168.3.5

      keepalived兩個節點上分別配置nginx反向代理服務;

   后臺網站服務器:

      realserver1IP地址:192.168.3.2

        配置httpd服務:網頁為 nginx HA  server 1

      realserver2IP地址:192.168.3.8

        配置httpd服務:網頁為 nginx HA  server 2

 

  1)配置nginx keepalived HA高可用集群(1IP192.168.3.7

blob.png

blob.png

blob.png

 配置keepalived1)上的nginx反向代理服務:

nginx主配置文件http配置段中定義上游服務器組upstream

blob.png

blob.png

nginx默認配置文件中定義反向代理的upstream組名稱:

blob.png

blob.png

  2)配置nginx keepalived HA高可用集群(2IP192.168.3.7

 nginx keepalived HA高可用集群(2)的配置過程與 nginx keepalived HA高可用集群(1)類似,唯一的區別就是在/etc/keepalived/keepalived.conf配置文件中,如下圖:

blob.png

blob.png

3)測試HA nginx cluster

blob.png

4)調用外部腳本 chk_dow ,使其vip地址轉移到另一個keepalived節點上:

/etc/keepalived/目錄下創建一個文件down

blob.png

在去keepalived2)節點查看IP a l

blob.png

5)再次測試HA nginx cluster

blob.png

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

(0)
zhengyibozhengyibo
上一篇 2016-11-18 22:58
下一篇 2016-11-18 23:50

相關推薦

  • DNS服務器之理論基礎

    一、什么是DNS     DNS全稱為Domain Name System,即域名系統,其作用就是將我們經常使用的“網址”解析為IP地址。     在互聯網上通信需要借助于IP地址,但人類對于數字的記憶能力遠不如文字,那么將IP地址轉換成容易記憶的文字是個好辦法,可是計算機只能識…

    Linux干貨 2015-04-29
  • mysql備份還原

    一、前言 數據對于一個公司來說有多重要這點不說大家也知道,數據還在,服務崩潰還可重建。為什么要備份?很簡單,天災人禍。比如硬件故障,軟件故障,自然災害,黑客攻擊或自身誤操作等因素。這時候備份,恢復數據就顯得至關重要了。 二、基礎概念 由于備份與恢復需要用到一些必要的知識,故在此先講解下 2.1二進制日志 myql日志有多種,其中二進制日志文件對數據恢復有很大…

    Linux干貨 2015-11-30
  • Linux文本搜索工具grep

    Linux文本搜索工具grep Linux文本搜索工具grep grep 基本正則表達式 egrep 擴展正則表達式 fgrep 簡介 grep(全稱Globally search a Regular Expression and Print,全面搜索正則表達式并把行打印出來)是一種強大的文本搜索工具,根據用戶指定的“模式(pattern)”對目標文本進行匹…

    2016-04-05
  • CPU 處理器架構知識

    CPU處理器架構: 主要有ARM、X86/Atom、MIPS、PowerPC,其中ARM在智能手機上面一枝獨秀;其中ARM/MIPS/PowerPC均是基于精簡指令集機器處理器的架構;X86則是基于復雜指令集的架構,Atom是x86或者是x86指令集的精簡版。 Android在支持各種處理器的現狀: ARM+Android 最早發展、完善的支持,主要在手機市…

    Linux干貨 2015-08-03
  • 使用httpd反向代理模塊實現tomcat負載均衡集群(上)

    前言  tomcat介紹:   tomcat是一個免費開放源代碼的web應用服務器,不是一個完整意義上的Java EE服務器;它甚至都沒有提供哪怕對一個主Java EE API的實現,但由于遵守apache開源協議,tomcat卻有為眾多的java應用程序服務器嵌入自己的產品中構建商業的java應用程序服務器,如JBoss和JOnAS等?!?/p>

    Linux干貨 2015-07-21
  • 軟件包管理器之一——RPM介紹及應用

    一、前言:     在沒有軟件包管理器前,用戶都是通過源代碼的方式來安裝軟件。但是我們很容易發現,在每次安裝軟件時都必須對操作系統的境、編譯的參數進行對應的編譯,并且操作過程很是復雜,這對于不熟悉操作系統的朋友來說真心困難,那么有沒有一款軟件能讓用戶能很簡單的安裝所需的軟件呢?    &n…

    Linux干貨 2015-07-20
欧美性久久久久