ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# [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>           #发出健康状态检测请求时使用的源端口;       }   } } ~~~