一、安裝
- yum install keepalived –y
- rpm -qa keepalived
二、啓動keepalived服務並檢查
- /etc/init.d/keepalived start
- ps -ef|grep keep|grep -v grep #提示:啓動後有三個keepalive 進程表示安裝正確
- ip add|grep 192.168 #提示:默認狀況會啓動三個VIP地址
- /etc/init.d/keepalived stop #關閉keepalive服務
三、配置文件說明
- ls -l /etc/keepalived/keepalived.conf 和其餘使用yum安裝的軟件同樣,keepalived軟件的配置文件默認路徑及配置文件名爲
- 這裏高可用的功能的配置文件包含了兩個重要區塊,下面分別說明:
四、全局定義部分
全局定義(Global Definitions)部分 這部分主要用來設置keepalived的故障通知機制和Router ID標識。示例配置以下:html
head -13 /etc/keepalived/keepalived.conf|cat –nios
- 1行 註釋,!開頭和#開頭同樣,都是註釋
- 3~8 行:定義服務故障報警的Email地址。做用是當服務發生切換或RS節點等有故障時,發報警郵件。這幾行是可選配置,notification_email指定在keepalived發生事件時,須要發送的Email地址,能夠有多個,每行一個
- 9行 指定發送Email的發送人,即發件人的地址,也是可選 的配置。
- 10行 smtp_server 指定發送郵件的smtp服務器,若是本機開啓了sedmail或postfix,就可使用上面默認配置實現郵件發送,也是可選 配置
- 11行 smtp_connect_timeout 是鏈接smtp超時時間,也是可選配置
注:第4~11行全部和郵件報警相關的參數均可以不配置,在實際工做中會將監控的任務交給更加擅長監控報警的Nagios或Zabbix軟件。nginx
- 12行 keepalived服務器的路由標識(router_id).在一個局域網內,這個標識應該是惟一 的。大括號 {} 用來分隔區塊,要成對出現 。如查漏了半個大括號,keepalived不會報錯,可是也不會獲得想要的效果。另外因爲區塊間存在多層嵌套關係,因此很容易遺漏區塊結尾外的大括號。
五、VRRP實例定義區塊(VRRP instance(s))部分
這部分主要用來定義具體服務的實例配置,包括keepalive主備狀態,接口、優先級、認證方式和IP信息等。配置以下:web
- 15行 表示定義一個vrrp_instance實例,名字是VI_1,每一個vrrp_instance 實例能夠認爲是keepalived服務的一個實例或者做爲一個業務服務,在keepalived服務配置中,這樣的vrrp_instance實例能夠多個。注意,存在於主節點中的vrrp_instance 實例在備節點中也要存在,這樣才能實現故障切換接管。
- 16行 state MASTER 表示當前實例VI_1的角色狀態,當前角色是MASTER,這個狀態只能有MASTER 和 BACKUP 兩種狀態,而且須要大寫這些字符。其中MASTER爲正式工做的狀態,BACKUP爲備用工做狀態。當MASTER所在的服務器故障或失效時,BACKUP 所在的服務器會接管故障的MASTER 繼續提供服務。
- 17行 interface 爲網絡通訊接口。爲對外提供服務的網絡接口,如eht0、eht一、。當前主流的服務器都有2~4 個網絡接口,在選擇服務接口時,要搞清楚了。
- 18行 virtual_router_id 爲虛擬路由ID標識,這個標識最好是一個數字,而且要在一個keepalived.conf 配置中是惟一 的,可是MASTER 和BACKUP 配置中相同實例的virtual_router_id 又必須一致,不然出現腦裂問題。
- 19行 priority 爲優先級,其後面的數值也是一個數字,數字越大,表示實例優先級越高。在同一個vrrp_instance實例裏,MASTER 的優先級配置要高於 BACKUP的。或主機的priority 值爲150 ,那麼備機的 prioriry必需要少於150,通常建議間隔50以上爲佳。
- 20行 advert_int 爲同步通知間隔。主機與備機之間通訊檢查的時間間隔,單位爲秒默認爲1
- 21~24行 authentication 爲權限認證配置,包含認證類型(auth_type)和認證密碼(auth_pass)。認證類型有PASS、AH、兩種,官方推薦爲PASS 。驗證密碼爲明文方式,最好長度不要超過8個字符,建議用4位的數字,同一vrrp實例的主機和備機使用相同的密碼才能正常通訊。
- 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運行時,不會獲得預期的結果。因爲定義塊內存在嵌套關係,所以很容易遺漏結尾處的花括號,這點要特別注意。vimglobal_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實例rubyvrrp_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 } }線上配置文件負載均衡
View Code[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 } }
七、修改keepalive日誌文件
- 默認keepalive的日誌文件是 /var/log/messages
- 修改成:
[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服務