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
下一篇 2016-11-18

相關推薦

  • 概述Windows2003的卷影副本

    原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://jeffyyko.blog.51cto.com/28563/157940      卷影副本,也就是Volume Shadow Server簡單來講,卷影副本(或稱為VSS)可以簡單…

    Linux干貨 2015-03-25
  • corosync + pacemaker + iscsi實現高可用mysql (上)

    一、實驗圖   二、準備實驗環境:  1)確保sql服務器之間可以基于主機名通信 [root@SQL1 ~]# vim /etc/hosts 172.16.2.13  SQL1.linux.com  SQL1 172.16.2.14  SQL2.li…

    Linux干貨 2015-07-09
  • 抵御DDOS攻擊,iptables限制TCP連接和頻率

    cc攻擊一到就有點兵臨城下的感覺,正確的設置防護規則可以做到臨危不亂,這里給出一個iptables對ip進行連接頻率和并發限制,限制單ip連接和頻率的設置規則的介紹 #單個IP在60秒內只允許新建20個連接,這里假設web端口就是80, iptables -I  INPUT -i eth1 -p tcp -m tcp –dpo…

    系統運維 2016-05-08
  • mysql備份還原

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

    Linux干貨 2015-11-30
  • 前三天基礎-Linux文件系統概論

    Linux之我見     在2016農歷丙申年2016年猴年,對于小白的我來說接觸到了江湖流傳的武功秘籍之-Linux心法,第一次接觸到命令行,知道在鍵盤上隨便敲擊命令就可以滿屏跑數據,就像看過的美國大片里黑客帝國里面的畫面,感覺學會好后可以裝逼了,廢話不多說了,允許在下斗膽介紹Linux文件系統。     &nbsp…

    Linux干貨 2016-03-24
  • locate、find命令使用總結

    一、簡介    在linux系統中存在"一切皆文件"的說法,這就足以說明文件的重要性,因此查找文件也是我們必須要掌握的技能。這時候熟練使用locate、find命令也就顯得至關重要。尤其是find命令常用于日常工作中如安裝完某個軟件之后要查看這些軟件的安裝配置路徑,或是需要按指定條件直接查找我們需要操作的文件。因此更需…

    Linux干貨 2015-08-31
欧美性久久久久