keepAlived 安裝及配置

一、安裝

  1. yum install keepalived –y
  2. rpm -qa keepalived

二、啓動keepalived服務並檢查

    1. /etc/init.d/keepalived start
    2. ps -ef|grep keep|grep -v grep   #提示:啓動後有三個keepalive 進程表示安裝正確
    3. ip add|grep 192.168  #提示:默認狀況會啓動三個VIP地址

clipboard

  • /etc/init.d/keepalived stop #關閉keepalive服務

 

三、配置文件說明

  1. ls -l /etc/keepalived/keepalived.conf     和其餘使用yum安裝的軟件同樣,keepalived軟件的配置文件默認路徑及配置文件名爲
  2. 這裏高可用的功能的配置文件包含了兩個重要區塊,下面分別說明:

四、全局定義部分

全局定義(Global Definitions)部分  這部分主要用來設置keepalived的故障通知機制和Router ID標識。示例配置以下:html

head -13 /etc/keepalived/keepalived.conf|cat –nios

image

    1. 1行 註釋,!開頭和#開頭同樣,都是註釋
    2. 3~8 行:定義服務故障報警的Email地址。做用是當服務發生切換或RS節點等有故障時,發報警郵件。這幾行是可選配置,notification_email指定在keepalived發生事件時,須要發送的Email地址,能夠有多個,每行一個
    3. 9行 指定發送Email的發送人,即發件人的地址,也是可選 的配置。
    4. 10行 smtp_server 指定發送郵件的smtp服務器,若是本機開啓了sedmail或postfix,就可使用上面默認配置實現郵件發送,也是可選 配置
    5. 11行  smtp_connect_timeout 是鏈接smtp超時時間,也是可選配置

注:第4~11行全部和郵件報警相關的參數均可以不配置,在實際工做中會將監控的任務交給更加擅長監控報警的Nagios或Zabbix軟件。nginx

  • 12行 keepalived服務器的路由標識(router_id).在一個局域網內,這個標識應該是惟一 的。大括號 {} 用來分隔區塊,要成對出現 。如查漏了半個大括號,keepalived不會報錯,可是也不會獲得想要的效果。另外因爲區塊間存在多層嵌套關係,因此很容易遺漏區塊結尾外的大括號。

 

五、VRRP實例定義區塊(VRRP instance(s))部分

這部分主要用來定義具體服務的實例配置,包括keepalive主備狀態,接口、優先級、認證方式和IP信息等。配置以下:web

clipboardimage

  1. 15行  表示定義一個vrrp_instance實例,名字是VI_1,每一個vrrp_instance 實例能夠認爲是keepalived服務的一個實例或者做爲一個業務服務,在keepalived服務配置中,這樣的vrrp_instance實例能夠多個。注意,存在於主節點中的vrrp_instance 實例在備節點中也要存在,這樣才能實現故障切換接管。
  2. 16行  state MASTER 表示當前實例VI_1的角色狀態,當前角色是MASTER,這個狀態只能有MASTER 和 BACKUP 兩種狀態,而且須要大寫這些字符。其中MASTER爲正式工做的狀態,BACKUP爲備用工做狀態。當MASTER所在的服務器故障或失效時,BACKUP 所在的服務器會接管故障的MASTER 繼續提供服務。
  3. 17行  interface 爲網絡通訊接口。爲對外提供服務的網絡接口,如eht0、eht一、。當前主流的服務器都有2~4 個網絡接口,在選擇服務接口時,要搞清楚了。
  4. 18行  virtual_router_id 爲虛擬路由ID標識,這個標識最好是一個數字,而且要在一個keepalived.conf 配置中是惟一 的,可是MASTER 和BACKUP 配置中相同實例的virtual_router_id 又必須一致,不然出現腦裂問題。
  5. 19行  priority 爲優先級,其後面的數值也是一個數字,數字越大,表示實例優先級越高。在同一個vrrp_instance實例裏,MASTER 的優先級配置要高於 BACKUP的。或主機的priority 值爲150 ,那麼備機的 prioriry必需要少於150,通常建議間隔50以上爲佳。
  6. 20行  advert_int 爲同步通知間隔。主機與備機之間通訊檢查的時間間隔,單位爲秒默認爲1
  7. 21~24行  authentication 爲權限認證配置,包含認證類型(auth_type)和認證密碼(auth_pass)。認證類型有PASS、AH、兩種,官方推薦爲PASS 。驗證密碼爲明文方式,最好長度不要超過8個字符,建議用4位的數字,同一vrrp實例的主機和備機使用相同的密碼才能正常通訊。
  8. 25~29行  virtual_ipaddress 爲虛擬IP地址。能夠配置多個Ip地址,每一個地址佔一行,配置時最好明確指定子網掩碼以及虛擬IP 綁定的網絡接口。不然子網掩碼默認是32爲,綁定的接口和前面的insterface參數配置的一致。注意,這裏的虛擬IP是在工做中須要和域名綁定的iP,即和配置的高可用服務監聽的IP要保持一

如下內容轉載自:https://www.cnblogs.com/along1226/p/5027838.html算法

六、配置文件詳解

第一部分:全局定義塊
  一、email通知。做用:有故障,發郵件報警。 
  二、Lvs負載均衡器標識(lvs_id)。在一個網絡內,它應該是惟一的。 
  三、花括號「{}」。用來分隔定義塊,所以必須成對出現。若是寫漏了,keepalived運行時,不會獲得預期的結果。因爲定義塊內存在嵌套關係,所以很容易遺漏結尾處的花括號,這點要特別注意。vim

global_defs {
	notification_email {  #指定keepalived在發生切換時須要發送email到的對象,一行一個
       		sysadmin@fire.loc
	}
	notification_email_from Alexandre.Cassen@firewall.loc #指定發件人
	smtp_server localhost #指定smtp服務器地址
	smtp_connect_timeout 30 #指定smtp鏈接超時時間
	router_id LVS_DEVEL #運行keepalived機器的一個標識
}
vrrp_script chk_http_port {
    script "/data/script/nginx.sh"                  #監控服務腳步
    interval 2                    #檢測時間間隔(執行腳步間隔)
    weight 2
}


第二部分:vrrp_sync_group做用:肯定失敗切換(FailOver)包含的路由實例個數。即在有2個負載均衡器的場景,一旦某個負載均衡器失效,須要自動切換到另一個負載均衡器的實例是哪些? 實例組group{}至少包含一個vrrp實例ruby

vrrp_sync_group VG_1{ #監控多個網段的實例
	group {
		VI_1 #實例名
		VI_2
   		......
	}
	notify_master /path/xx.sh #指定當切換到master時,執行的腳本
	netify_backup /path/xx.sh #指定當切換到backup時,執行的腳本
	notify_fault "path/xx.sh VG_1" #故障時執行的腳本
	notify /path/xx.sh
	smtp_alert #使用global_defs中提供的郵件地址和smtp服務器發送郵件通知
}


第三部分:vrrp_instance,實例名出自實例組group所包含的那些名字。  服務器

vrrp_instance VI_1 {
	state BACKUP #指定那個爲master,那個爲backup,若是設置了nopreempt這個值不起做用,主備考priority決定
   	interface eth0 #設置實例綁定的網卡
    	dont_track_primary #忽略vrrp的interface錯誤(默認不設置)
    	track_interface{ #設置額外的監控,裏面那個網卡出現問題都會切換
		eth0
		eth1
	}
   	mcast_src_ip #發送多播包的地址,若是不設置默認使用綁定網卡的primary ip
  	garp_master_delay #在切換到master狀態後,延遲進行gratuitous ARP請求
  	virtual_router_id 50 #VPID標記
   	priority 99 #優先級,高優先級競選爲master
   	advert_int 1 #檢查間隔,默認1秒
  	nopreempt #設置爲不搶佔 注:這個配置只能設置在backup主機上,並且這個主機優先級要比另一臺高
   	preempt_delay #搶佔延時,默認5分鐘
   	debug #debug級別
     track_interface {              #監控的網卡。若是隻監控服務,這裏能夠不填
      eth1
    } 
   
authentication { #設置認證 auth_type PASS #認證方式 auth_pass 111111 #認證密碼 } virtual_ipaddress { #設置vip 192.168.202.200 }
track_script {                      #以腳本爲監控chk_http_port是前面填寫的
        chk_http_port#p#分頁標題#e#
    }
#檢測腳本必定要寫在vrrp_instance的前面也就是上面,並且花括號必定要有空格,追蹤trace_script要定在vip的後面,多少人栽在了這上面好多小時
}

 

第四部分: 虛擬服務器virtual_server定義塊 ,虛擬服務器定義是keepalived框架最重要的項目了,是keepalived.conf必不可少的部分。 該部分是用來管理LVS的,是實現keepalive和LVS相結合的模塊。ipvsadm命令能夠實現的管理在這裏均可以經過參數配置實現,注意:real_server是被包含在viyual_server模塊中的,是子模塊。網絡

virtual_server 192.168.202.200 23 {        #VIP地址,要和vrrp_instance模塊中的virtual_ipaddress地址一致
	delay_loop 6 #健康檢查時間間隔 
	lb_algo rr #lvs調度算法rr|wrr|lc|wlc|lblc|sh|dh 
	lb_kind DR #負載均衡轉發規則NAT|DR|RUN 
	persistence_timeout 5 #會話保持時間 
  	protocol TCP #使用的協議 
	persistence_granularity <NETMASK> #lvs會話保持粒度 
	virtualhost <string> #檢查的web服務器的虛擬主機(host:頭) 
	sorry_server<IPADDR> <port> #備用機,全部realserver失效後啓用


	real_server 192.168.200.5 23 {             #RS的真實IP地址
		weight 1 #默認爲1,0爲失效
		inhibit_on_failure #在服務器健康檢查失效時,將其設爲0,而不是直接從ipvs中刪除 
		notify_up <string> | <quoted-string> #在檢測到server up後執行腳本
		notify_down <string> | <quoted-string> #在檢測到server down後執行腳本 
	}
	TCP_CHECK {                    #經常使用
		connect_timeout 3 #鏈接超時時間
		nb_get_retry 3 #重連次數
		delay_before_retry 3 #重連間隔時間
		connect_port 23  #健康檢查的端口的端口
		bindto <ip>
	}

	HTTP_GET | SSL_GET{          #不經常使用
		url{ #檢查url,能夠指定多個
			path /
			digest <string> #檢查後的摘要信息
			status_code 200 #檢查的返回狀態碼
        	}
		connect_port <port>
		bindto <IPADD>
		connect_timeout 5
		nb_get_retry 3
		delay_before_retry 2
	}

	SMTP_CHECK{                 #不經常使用
		host{
			connect_ip <IP ADDRESS>
			connect_port <port> #默認檢查25端口
			bindto <IP ADDRESS>
		}
		connect_timeout 5
		retry 3
		delay_before_retry 2
		helo_name <string> | <quoted-string> #smtp helo請求命令參數,可選
	}

	MISC_CHECK{                 #不經常使用
		misc_path <string> | <quoted-string> #外部腳本路徑
		misc_timeout #腳本執行超時時間
		misc_dynamic #如設置該項,則退出狀態碼會用來動態調整服務器的權重,返回0 正常,不修改;返回1,檢查失敗,權重改成0;返回2-255,正常,權重設置爲:返回狀態碼-2
	}
}

線上配置文件負載均衡

[root@LB2 ~]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived
global_defs {
	notification_email {
		49000448@qq.com
	}
	notification_email_from Alexandre.Cassen@firewall.loc
	smtp_server 10.0.0.1
	smtp_connect_timeout 30
	router_id LVS_2
}

vrrp_instance VI_1 {
	state BACKUP
	interface eth0
	virtual_router_id 55
	priority 100
	advert_int 1
	authentication {
		auth_type PASS
		auth_pass 1111
	}
	virtual_ipaddress {
		192.168.220.110/24
	}
}

virtual_server 192.168.220.110 80 {
	delay_loop 6
	lb_algo wrr
	lb_kind DR
	nat_mask 255.255.255.0
	persistence_timeout 300
	protocol TCP
}

real_server 192.168.220.129 80 {
	weight 1
	TCP_CHECK {
		connect_timeout 8
			nb_get_retry 3
			delay_before_retry 3
			connect_port 80
		}
	}
}

real_server 192.168.220.138 80 {
	weight 1
	TCP_CHECK {
		connect_timeout 8
		nb_get_retry 3
		delay_before_retry 3
		connect_port 80
	}
}
View Code

 

七、修改keepalive日誌文件

  1. 默認keepalive的日誌文件是 /var/log/messages
  2. 修改成:
[root@LB2 ~]# vim /etc/sysconfig/keepalived ...... #KEEPALIVED_OPTIONS="-D" //註釋掉行 KEEPALIVED_OPTIONS="-D -d -S 0" //添加行 ...... 
[root@LB2 ~]# vim /etc/rsyslog.conf ...... local0.* /var/log/keepalived.log //添加行
在約第42行信息末尾加入:;local0.none
變爲:*.info;mail.none;authpriv.none;cron.none;local0.none                /var/log/messages
以上配置是表示來自local0設備的全部日誌信息再也不記錄於/var/log/messages 裏
[root@LB2 ~]# /etc/init.d/rsyslog restart //重啓日誌服務 [root@LB2 ~]# /etc/init.d/keepalived restart //重啓keepalive服務
相關文章
相關標籤/搜索