# [keepalived基本理解](https://www.cnblogs.com/g2thend/p/10858392.html)
#### 一, ARRP背景[#](https://www.cnblogs.com/g2thend/p/10858392.html#%E4%B8%80,-arrp%E8%83%8C%E6%99%AF)
兩臺需要通信的主機大多數情況沒有直接物理連接,主機選擇下一跳主要有:
* 在主機使用動態路由協議
* 主機配置靜態路由
主機配置靜態路由導致路由器成為單點,為避免單點故障,使用VRRP解決。
ARRP使用一種競選(election)協議來動態的將路由任務交給LAN虛擬路由器中某臺VRRP路由器。
關鍵字:**虛擬路由器**,**VRRP路由器**
#### 二,原理[#](https://www.cnblogs.com/g2thend/p/10858392.html#%E4%BA%8C%EF%BC%8C%E5%8E%9F%E7%90%86)
##### 1,簡介
keepalived是一個類似于layer3, 4 & 5交換機制的軟件,也就是我們平時說的第3層、第4層和第5層交換。Keepalived的作用是檢測web服務器的狀態,如果有一臺web服務器死機,或工作出現故障,Keepalived將檢測到,并將有故障的web服務器從系統中剔除,當web服務器工作正常后Keepalived自動將web服務器加入到服務器群中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復故障的web服務器。(這些工作時通過編寫腳本檢測服務的可用性的,實際上應該是通過檢測VRRP廣播來判定MASTER是否存活,如果一定時間內BACKUP未接收到VRRP信號,UPBACK們就會根據自身的優先級推舉出新的MASTER)。
(如果vip是組內某一個主機的接口ip,該主機的則成為ip擁有者)
##### 2,VRRP協議原理
一個VRRP路由器有唯一的標識:VRID,范圍為0—255該路由器對外表現為唯一的虛擬MAC地址,地址的格式為00-00-5E-00-01-\[VRID\]主控路由器負責對ARP請求用該MAC地址做應答這樣,無論如何切換,保證給終端設備的是唯一一致的IP和MAC地址,減少了切換對終端設備的影響。
VRRP控制報文只有一種:VRRP通告(advertisement),它使用IP多播數據包進行封裝,發布范圍只限于同一局域網內這保證了VRID在不同網絡中可以重復使用為了減少網絡帶寬消耗,只有主控路由器才可以周期性的發送VRRP通告報文,備份路由器在連續三個通告間隔內(???怎么會,測試時反應老慢了,還以為配置有問題)收不到VRRP或收到優先級為0的通告后啟動新的一輪VRRP選舉。
在VRRP路由器組中,按優先級選舉主控路由器,VRRP協議中優先級范圍是0—255若VRRP路由器的IP地址和虛擬路由器的接口IP地址相同,則稱該虛擬路由器作VRRP組中的IP地址所有者;IP地址所有者自動具有最高優先級:255.優先級0一般用在IP地址所有者主動放棄主控者角色時使用,可配置的優先級范圍為1—254.優先級的配置原則可以依據鏈路的速度和成本路由器性能和可靠性以及其它管理策略設定主控路由器的選舉中,高優先級的虛擬路由器獲勝,因此,如果在VRRP組中有IP地址所有者,則它總是作為主控路由的角色出現對于相同優先級的候選路由器,按照IP地址大小順序選舉VRRP還提供了優先級搶占策略,如果配置了該策略,高優先級的備份路由器便會剝奪當前低優先級的主控路由器而成為新的主控路由器。
為了保證VRRP協議的安全性,提供了兩種安全認證措施:明文認證和IP頭認證明文認證方式
要求:在加入一個VRRP路由器組時,必須同時提供相同的VRID和明文密碼適合于避免在局域網內的配置錯誤,但不能防止通過網絡監聽方式獲得密碼IP頭認證的方式提供了更高的安全性,能夠防止報文重放和修改等攻擊。
VRRP路由器:
一臺運行了VRRPD程序的機器來實現該協議,是一臺物理路由器,一臺VRRP路由器可位于多個虛擬路由器。
VRRP虛擬路由器:
虛擬路由器通常由多臺物理VRRP路由器虛擬而成,是一個邏輯上的整體,對外提供統一的vip和MAC提供服務。
#### 三,KEEPALIVED[#](https://www.cnblogs.com/g2thend/p/10858392.html#%E4%B8%89%EF%BC%8Ckeepalived)
##### 1) lvs 組件
* VIP: The Virtual IP is the IP address that will be accessed by all the clients. The clients onlyaccess this IP address
* Real server: A real server hosts the application accessed by client requests. WEB SERVER 1& WEB SERVER 2 in our synopsis.
* Server pool: A farm of real servers.
* Virtual server: The access point to a Server pool.Virtual Service: A TCP/UDP service associated with the VIP.
##### 2) VRRP 組件
**VRRP**: The protocol implemented for the directors’ failover/virtualization.
**VRRP Instance**: A thread manipulating VRRPv2 specific set of IP addresses. A VRRPInstance may backup one or more VRRP Instance. In our “Case study: Failover”, we aredealing with 4 VRRP Instances. One owning (VIP1,VIP2), one owning (VIP3,VIP4), oneowning (DIP1) and one owning (DIP2). It may participate in one or more virtual routers.
**IP Address owner**: The VRRP Instance that has the IP address(es) as real interfaceaddress(es). This is the VRRP Instance that, when up, will respond to packets addressed toone of these IP address(es) for ICMP, TCP connections, …
**MASTER state**: VRRP Instance state when it is assuming the responsibility of forwardingpackets sent to the IP address(es) associated with the VRRP Instance. This state is illustratedon “Case study: Failover” by a red line.
**BACKUP state**: VRRP Instance state when it is capable of forwarding packets in the eventthat the current VRRP Instance MASTER fails.
**Real Load balancer**: An LVS director running one or many VRRP Instances.Virtual Load balancer: A set of Real Load balancers.
**Synchronized Instance**: VRRP Instance with which we want to be synchronized. Thisprovides VRRP Instance monitoring.
**Advertisement**: The name of a simple VRRPv2 packet sent to a set of VRRP Instances whilein the MASTER state
> 參考[https://www.keepalived.org](https://www.keepalived.org/pdf/UserGuide.pdf)
##### 3)配置文件
* 全局配置
~~~
global_defs {
? notification_email { ? ? ? ? #發送報警郵件收件地址
? ?2012@qq.com
? }
? notification_email_from ? keepalive@localhost ? #指明報警郵件的發送地址
? smtp_server 192.168.200.1 ? ? ? ? ? ? ? ? ? ? ? #郵件服務器地址
? smtp_connect_timeout 30 ? ? ? ? ? ? ? ? ? ? ? ? #smtp的超時時間
? router_id LVS_DEVEL ? ? ? ? ? ? ? ? ? ? ? ? ? ? #運行keepalived物理服務器的標識
? lvs_id ? LVS_MAIN ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #指定lvs directory 的名稱
~~~
* VRRP實例(instance)配置
~~~
vrrp_sync_group VG_1 { ? ? ? ? ? ? ?
? ? ? group {
? ? ? ? ? VI1 ? ? # name of vrrp_instance (below) ? ? ? ?
? ? ? ? ? VI2 ? ? # One for each moveable IP
? ? ? ? ? ? }
? }
##如果機器有兩個網段(內外網),每個網段開啟一個VRRPD實例,假設VRRP配置檢測內網,當外網出現問題時,VRRPD認為自己仍然健康,可以把實例都放置在一個SYNC group 內,任意一個實例出現問題都會發生切換。
vrrp_instance VI { ? ? ? ? #定義一個虛擬路由
? state MASTER|BACKUP ? ? #當前節點在此虛擬路由器上的初始狀態;只能有一個是MASTER,余下的都應該為BACKUP,啟動后根據priority競選;
? interface eth0 ? ? ? ? #綁定為當前虛擬路由器使用的物理接口;
? virtual_router_id 51 ? #當前虛擬路由器的惟一標識,范圍是0-255;
? priority 100 ? ? ? ? ? #當前主機在此虛擬路由器中的優先級;范圍1-254;MASTER 至少高于BACKUP50
? advert_int 1 ? ? ? ? ? #通告發送間隔,包含主機優先級、心跳等,默認為1。
? authentication { ? ? ? #認證配置 ?
? ? ? auth_type PASS ? ? #認證類型,PASS表示簡單字符串認證
? ? ? auth_pass 1111 ? ? #密碼,PASS密碼最長為8位
?
? virtual_ipaddress { ? ? ? ? ? #指定漂移地址,切換到MASTERS時該IP會被添加,切換到BACKUP,ip被刪除并傳給BACKUP(使用ip addr綁定)
? 192.168.200.16 ? ? ? ? ? ? ? ? ? ? ? ? #虛擬路由IP地址,以輔助地址方式設置
? 192.168.200.18/24 dev eth2 label eth2:1 #以別名的方式設置
? }
?
track_interface { ? ? ? ? ? #配置額外的監控,里面任意一個網卡出現問題,都會進入FAULT(故障)狀態
? ? ? eth0
? ? ? eth1
?
} ? ? ? ? ? ? ? ? ? ? ? ? ?
nopreempt ? ? ? ? ? ? ? ? ? #定義工作模式為非搶占模式;
preempt_delay 300 ? ? ? ? ? #搶占式模式下,節點上線后觸發新選舉操作的延遲時長,默認5分鐘;
? virtual_routes { ? ? ? ? #配置路由信息,可選項,與virtual_ipaddress 類似
? ? ? ? ? ? ? # src <IPADDR> [to] <IPADDR>/<MASK> via|gw <IPADDR> [or <IPADDR>] dev <STRING> scope
? ? ? <SCOPE> tab
? ? ? ? ? ? ? src 192.168.100.1 to 192.168.109.0/24 via 192.168.200.254 dev eth1
? ? ? ? ? ? ? 192.168.112.0/24 via 192.168.100.254 ? ? ? 192.168.113.0/24 via 192.168.200.254 or 192.168.100.254 dev eth1 ? ? blackhole 192.168.114.0/24
? ? ? ? ? }
?
?
? notify_master /path/to/to_master.sh ? ? ? ? #當前節點成為主節點時觸發的腳本。
? notify_backup <STRING>|<QUOTED-STRING> ? ? ? #當前節點轉為備節點時觸發的腳本。
? notify_fault <STRING>|<QUOTED-STRING> ? ? ? #當前節點轉為“失敗”狀態時觸發的腳本。
? notify <STRING>|<QUOTED-STRING> ? ? ? ? ? ? #通用格式的通知觸發機制,一個腳本可完成以上三種狀態的轉換時的通知。
? smtp_alert ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #調用golbal_defs設置的郵件設置,切換后發送郵件
}
~~~
* LVS 配置
lvs配置包括兩部分:虛擬主機組(virtual server group ) 和虛擬主機(virtual server)
虛擬主機組:目的是為了讓一臺RealServer 上某個service 可以屬于多個Virtual Server ,并且只做一次健康檢查。
~~~
virtual_server 192.168.200.100 443 { ? #LVS配置段 ,設置LVS的VIP地址和端口
? delay_loop ? ? ? ? ? ? ? ? ? ? ? ? #服務輪詢的時間間隔;檢測RS服務器的狀態。
? lb_algo rr ? ? ? ? ? ? ? ? ? ? ? ? #調度算法,可選rr|wrr|lc|wlc|lblc|sh|dh。
? lb_kind NAT ? ? ? ? ? ? ? ? ? ? ? ? #集群類型。
? nat_mask 255.255.255.0 ? ? ? ? ? ? #子網掩碼,可選項。
? persistence_timeout 50 ? ? ? ? ? ? #是否啟用持久連接,連接保存時長
? protocol TCP ? ? ? ? ? ? ? ? ? ? ? #協議,只支持TCP
? sorry_server <IPADDR> <PORT> ? ? ? #備用服務器地址,可選項。
?
? real_server 192.168.201.100 443 { ? #配置RS服務器的地址和端口
? ? ? weight 1 ? ? ? ? ? ? ? ? ? ? ? #權重
? ? SSL_GET { ? ? ? ? ? ? ? ? ? ? ? ? #檢測RS服務器的狀態,發送請求報文
? ? ? ? ? url {
? ? ? ? ? ? path / ? ? ? ? ? ? ? ? ? #請求的URL
? ? ? ? ? ? digest ff20ad2481f97b1754ef3e12ecd3a9cc #對請求的頁面進行hash運算,然后和這個hash碼進行比對,如果hash碼一樣就表示狀態正常
? ? ? ? ? ? status_code <INT> ? ? ? ? #判斷上述檢測機制為健康狀態的響應碼,和digest二選一即可。
?
? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? ? #這個hash碼可以使用genhash命令請求這個頁面生成
? ? ? ? ? connect_timeout 3 ? ? ? ? ? #連接超時時間
? ? ? ? ? nb_get_retry 3 ? ? ? ? ? ? #超時重試次數
? ? ? ? ? delay_before_retry 3 ? ? ? #每次超時過后多久再進行連接
? ? ? ? ? connect_ip <IP ADDRESS> ? ? #向當前RS的哪個IP地址發起健康狀態檢測請求
? ? ? ? ? connect_port <PORT> ? ? ? ? #向當前RS的哪個PORT發起健康狀態檢測請求
? ? ? ? ? bindto <IP ADDRESS> ? ? ? ? #發出健康狀態檢測請求時使用的源地址;
? ? ? ? ? bind_port <PORT> ? ? ? ? ? #發出健康狀態檢測請求時使用的源端口;
? ? ? }
? }
}
~~~
- 前言
- 服務器開發設計
- Reactor模式
- 一種心跳,兩種設計
- 聊聊 TCP 長連接和心跳那些事
- 學習TCP三次握手和四次揮手
- Linux基礎
- Linux的inode的理解
- 異步IO模型介紹
- 20個最常用的GCC編譯器參數
- epoll
- epoll精髓
- epoll原理詳解及epoll反應堆模型
- epoll的坑
- epoll的本質
- socket的SO_REUSEADDR參數全面分析
- 服務器網絡
- Protobuf
- Protobuf2 語法指南
- 一種自動反射消息類型的 Protobuf 網絡傳輸方案
- 微服務
- RPC框架
- 什么是RPC
- 如何科學的解釋RPC
- RPC 消息協議
- 實現一個極簡版的RPC
- 一個基于protobuf的極簡RPC
- 如何基于protobuf實現一個極簡版的RPC
- 開源RPC框架
- thrift
- grpc
- brpc
- Dubbo
- 服務注冊,發現,治理
- Redis
- Redis發布訂閱
- Redis分布式鎖
- 一致性哈希算法
- Redis常見問題
- Redis數據類型
- 緩存一致性
- LevelDB
- 高可用
- keepalived基本理解
- keepalived操做
- LVS 學習
- 性能優化
- Linux服務器程序性能優化方法
- SRS性能(CPU)、內存優化工具用法
- centos6的性能分析工具集合
- CentOS系統性能工具 sar 示例!
- Linux性能監控工具集sysstat
- gdb相關
- Linux 下如何產生core文件(core dump設置)