keepalived
keepalived三大核心模块:
1 core模块 功能是主进程的管理维护,全局配置文件的解析和加载
2 vrrp模块 功能是来实现vrrp协议
3 check模块 功能是负责健康检查,主要对端口和url进行健康检查
keepalived的工作原理:
keepalived是通过vrrp协议进行通信的,那么就要从vrrp协议说起。
1 vrrp协议是虚拟路由冗余协议,作用是为了解决静态路由的单点故障。
vrrp协议的原理:是一种容错的主备模式的协议。保证当主机的下一跳路由出现故障时会转发到另一个路由器上来代替出现故障的路由器,通过vrrp可以在网络发生故障时进行设备切换而不影响主机见的通信。
2 vrrp是通过一种竞选机制来将路由任务交由某台路由器的。
3 vrrp是用IP多播的方式实现高可用对之间的通信。
4 工作时主节点发包,备节点收包。当备节点接收不到主节点发送的包时,就会启动管理程序来接管主节点。
5 vrrp协议使用了加密协议加密数据。
keepalived服务的工作原理:
keepalived高可用对是通过vrrp协议进行通信的。vrrp协议时通过主备机制来确定主备的。主节点的优先级高于备节点。那么,主节点会获得所有的资源,备节点处于等待状态,当主节点出现故障时,备节点会接管主节点的资源,顶替主节点对外提供服务。
keepalived服务对之间,只有作为主节点会不断向备节点发送vrrp广播包,高速备节点自己还活着,此时备节点不会抢占主节点。当主节点不能发送广播包时,即备节点接收不到主节点的vrrp广播包,就会启动相关的程序来接管主节点的资源,保证业务的连续性。
keepalived是如何通过健康检查来实现高可用的?
keepalived工作再TCP/IP模型的网络层,传输层,应用层。
网络层:keepalived采用ICMP协议向服务器集群节点发送icmp数据包,当某个节点没有返回响应的数据包,就认为此节点已经发生故障。那么keepalived就会将此节点剔除服务器集群。
传输层:利用TCP端口连接和扫描技术来判断集群节点是否正常。一旦在传输层探测相应的端口没有响应的数据包,就会认为此端口发生异常,从而将此端口对应的节点从集群中剔除。
应用层:运行如FTP,SMTP,telnet,dns等不同的协议,还可以自定义keepalived的工作模式,来设定监控各种程序或服务是否正常,若与设定的结果不一致,则认为服务对应的节点发生异常,并将其剔除服务器集群。
keepalived通过完整的健康检查机制,保证集群中所有的节点都有效以此来实现高可用。
LVS
LVS,即Linux虚拟服务器。基于IP地址的虚拟化应用,为基于IP地址和内容请求的负载均衡提出的高效解决方法。
LVS是由两部分组成:
1 ipvs是基于内核态的 Netfilter 框架实现的 IPVS 功能,工作在内核态
2 ipvsadm是基于 Netlink 或 raw socket 方式与内核 LVS 进行通信的,是 LVS 用户态的配套工具
LVS的功能是:
1 实现服务器集群的负载均衡
2 可扩展性 安全 可靠 廉价 易用
3 工作在网络层
LVS的逻辑架构:
1 调度层
2 服务器集群层
3 共享存储层
LVS的工作原理: LVS 基于 Netfilter 框架,工作在 INPUT 链上,在 INPUT 链上注册 ip_vs_in HOOK 函数,进行 IPVS 相关主流程。
① 当客户端用户访问 www.baidu.com 网站时,用户访问请求通过层层网络,最终通过交换机进入 LVS 服务器网卡进入内核空间层。 ② 进入 PREROUTING 后通过查找路由,确定访问目的 VIP 是本机 IP 地址的话,数据包将进入 INPUT 链中。 ③ 因为 IPVS 工作在 INPUT 链上,会根据访问的 VIP 和端口判断请求是否为 IPVS 服务,是的情况 下,则调用注册的 IPVS HOOK 函数,进行 IPVS 相关流程,并强制修改数据包的相关数据,并将数据包发往 POSTROUTING 链中。 ④ POSTROUTING 链收到数据包后,将根据目标 IP 地址服务器,通过路由选路,将数据包最终发送至 后端真实服务器中。 LVS 负载均衡还包括三种工作模式,且每种模式工作原理都有所不同,适用于不同应用场景,其最终目的都是能实现均衡的流量调度和良好的扩展性。LVS的负载均衡原理:
LVS是基于内核的Netfilter网络框架来是实现的负载均衡系统。
Netfilter 的基本原理
在介绍 LVS 负载均衡基本原理之前,先说一下 Netfilter 的基本原理。因为 LVS 是基于 Linux 内核中 Netfilter 框架实现的负载均衡系统
Netfilter 其实很复杂也很重要,平时说的 Linux 防火墙就是 Netfilter,不过我们操作 的还iptables,iptables 和 Netfilter 是 Linux 防火墙组合工具,是一起来完成系统 防护工作的。 iptables 是位于用户空间,而 Netfilter 是位于内核空间。iptables 只是用户空间编写 和传递规则的工具而已,真正工作的还是 Netfilter。 两者间的区别: Netfilter 是内核态的 Linux 防火墙机制,它作为一个通用、抽象的框 架,提供了一整套的 hook 函数管理机制,提供数据包过滤、网络地址转换、基于协议类 型的连接跟踪的功能,可在数据包流经过程中,根据规则设置若干个关卡(hook 函数) 来执行相关操作。 它共设置了 5 个点,包括: prerouting: 在对数据包做路由选择之前,将应用此链中的规则。 input: 当收到访问防火墙本机地址的数据包时,将应用此链中的规则。 forward: 当收到需要通过防火中转发给其他地址的数据包时,将应用此链中的规则。 output: 当防火墙本机向外发送数据包时,将应用此链中的规则。 postrouting: 在对数据包做路由选择之后,将应用此链中的规则。 iptable 是用户层的工具,提供命令行接口,能够向 Netfilter 中添加规则策略,从而实现报文滤,修改等功能。 通过下图我们可以来了解下 Netfilter 的工作机制: 当数据包通过网络接口进入时,经过链路层之后进入网络层到达 PREROUTING,然后根据目标IP 地址进行查找路由。 如目标 IP 是本机,数据包会传到 INPUT 上,经过协议栈后根据端口将数据送到相应的应用程序;应用程序将请求处理后把响应数据包发送至 OUTPUT 里,最终通过POSTROUTING 后发送出网络接口。 如目标 IP 不是本机,并且服务器开启了 FORWARD 参数,这时会将数据包递送给 FORWARD,最后通过 POSTROUTING 后发送出网络接口。


