01,keeplived 是什么?

     Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,它根据TCP/IP参考模型的第三、第四层、第五层交换机制检测每个服务节点的状态,如果某个服务器节点出现异常,或者工作出现故障,Keepalived将检测到,并将出现的故障的服务器节点从集群系统中剔除,这些工作全部是自动完成的,不需要人工干涉,需要人工完成的只是修复出现故障的服务节点。后来Keepalived又加入了VRRP的功能,VRRP(Vritrual Router Redundancy Protocol,虚拟路由冗余协议)出现的目的是解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断稳定运行,因此Keepalvied 一方面具有服务器状态检测和故障隔离功能,另外一方面也有HA cluster功能.

  02,keeplived 工作原理

      Keepalived工作在TCP/IP 参考模型的 三层、四层、五层,也就是分别为:网络层,传输层和应用层,根据TCP、IP参数模型隔层所能实现的功能,Keepalived运行机制如下:

     在网络层:我们知道运行这4个重要的协议,互联网络IP协议,互联网络可控制报文协议ICMP、地址转换协议ARP、反向地址转换协议RARP在网络层Keepalived在网络层采用最常见的工作方式是通过ICMP协议向服务器集群中的每一个节点发送一个ICMP数据包(有点类似与Ping的功能),如果某个节点没有返回响应数据包,那么认为该节点发生了故障,Keepalived将报告这个节点失效,并从服务器集群中剔除故障节点

     在传输层:提供了两个主要的协议:传输控制协议TCP和用户数据协议UDP,传输控制协议TCP可以提供可靠的数据输出服务、IP地址和端口,代表TCP的一个连接端,要获得TCP服务,需要在发送机的一个端口和接收机的一个端口上建立连接,Keepalived在传输层里利用了TCP协议的端口连接和扫描技术来判断集群节点的端口是否正常,比如对于常见的WEB服务器80端口。或者SSH服务22端口,Keepalived一旦在传输层探测到这些端口号没有数据响应和数据返回,就认为这些端口发生异常,然后强制将这些端口所对应的节点从服务器集群中剔除掉。

在应用层:可以运行FTP,TELNET,SMTP,DNS等各种不同类型的高层协议,Keepalived的运行方式也更加全面化和复杂化,用户可以通过自定义Keepalived工作方式,例如:可以通过编写程序或者脚本来运行Keepalived,而Keepalived将根据用户的设定参数检测各种程序或者服务是否允许正常,如果Keepalived的检测结果和用户设定的不一致时,Keepalived将把对应的服务器从服务器集群中剔除

  03,keeplived主配置文件详解

      keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。keepalived只有一个配置文件keepalived.conf,里面主要包括以下几个配置区域,
分别是global_defs、static_ipaddress、static_routes、vrrp_script、vrrp_instance和virtual_server。

               配置文件实例介绍:  

 1 global_defs {
 2     notification_email {   #故障发生时给谁发邮件通知。
 3         a@abc.com  
 4         b@abc.com
 5         ...
 6     }
 7     notification_email_from alert@abc.com   #通知邮件从哪个地址发出。
 8     smtp_server smtp.abc.com   #通知邮件的smtp地址。
 9     smtp_connect_timeout 30 # 连接smtp服务器的超时时间。
10     enable_traps   #连接smtp服务器的超时时间。
11     router_id host163 #标识本节点的字条串,通常为hostname,但不一定非得是hostname。故障发生时,邮件通知会用到。
12 }
13 
14 
15 static_ipaddress {
16     10.210.214.163/24 brd 10.210.214.255 dev eth0 配置的是是本节点的IP和路由信息
17     ...
18 }
19 
20 
21 static_routes {
22     10.0.0.0/8 via 10.210.214.1 dev eth0  配置的是是本节点的IP和路由信息
23     ...
24 }
25 
26 vrrp_script chk_http_port {    #用来做健康检查的,当时检查失败时会将vrrp_instance的priority减少相应的值。
27 
28     script "</dev/tcp/127.0.0.1/80"
29     interval 1
30     weight -10
31 }
32 
33 
34 vrrp_sync_group VG_1 {  
35     group {
36         inside_network   # name of vrrp_instance (below)
37         outside_network  # One for each moveable IP.
38         ...
39     }
40     notify_master /path/to_master.sh   #分别表示切换为主/备/出错时所执行的脚本
41     notify_backup /path/to_backup.sh 
42     notify_fault "/path/fault.sh VG_1"
43     notify /path/notify.sh
44     smtp_alert    表示是否开启邮件通知
45 }
46 vrrp_instance VI_1 {
47     state MASTER   #可以是MASTER或BACKUP,不过当其他节点keepalived启动时会将priority比较大的节点选 举为MASTER,因此该项其实没有实质用途。
48     interface eth0   #节点固有IP(非VIP)的网卡,用来发VRRP包。
49     use_vmac <VMAC_INTERFACE>  #是否使用VRRP的虚拟MAC地址。
50     dont_track_primary  $#忽略VRRP网卡错误
51     track_interface { #监控以下网卡,如果任何一个不通就会切换到FALT状态
52         eth0 
53         eth1
54     }
55     mcast_src_ip <IPADDR>   #修改vrrp组播包的源地址,默认源地址为master的IP。(由于是组播,因此即使修改了源地址,该master还是能收到回应的)
56     lvs_sync_daemon_interface eth1     #绑定lvs syncd的网卡。
57     garp_master_delay 10   #当切为主状态后多久更新ARP缓存,默认5秒
58     virtual_router_id 1  #取值在0-255之间,用来区分多个instance的VRRP组播。
59     priority 100  #用来选举master的,要成为master,那么这个选项的值最好高于其他机器50个点,该项取值范围是1-255(在此范围之外会被识别成默认值100)
60     advert_int 1   #发VRRP包的时间间隔,即多久进行一次master选举(可以认为是健康查检时间间隔)。
61     authentication {   #认证区域,认证类型有PASS和HA(IPSEC),推荐使用PASS(密码只识别前8位)。
62         auth_type PASS   
63         auth_pass 12345678
64     }
65     virtual_ipaddress {    
66         10.210.214.253/24 brd 10.210.214.255 dev eth0
67         192.168.1.11/24 brd 192.168.1.255 dev eth1
68     }
69     virtual_routes { #虚拟路由,当IP漂过来之后需要添加的路由信息。
70         172.16.0.0/12 via 10.210.214.1
71         192.168.1.0/24 via 192.168.1.1 dev eth1
72         default via 202.102.152.1
73     }
74     track_script {  脚本
75         chk_http_port 
76     } 
77     nopreempt   #允许一个priority比较低的节点作为master,即使有priority更高的节点启动
78     preempt_delay 300   #启动多久之后进行接管资源(VIP/Route信息等),并提是没有nopreempt选项。
79     debug
80     notify_master <STRING>|<QUOTED-STRING>
81     notify_backup <STRING>|<QUOTED-STRING>
82     notify_fault <STRING>|<QUOTED-STRING>
83     notify <STRING>|<QUOTED-STRING>
84     smtp_alert
85 }
View Code

相关文章: