首先了解七层OSI模型
第一层:物理层 对应硬件设置:负载均衡中F5 readware
第二层:数据链路层 例:lvs的dr模型中修改mac地址
第三层:网络层 例:ip,icmp
第四层:传输层 例:tcp、udp(个人浅见,lvs本身只做流量分发,本身无流量)
第五层:会话层 例:DNS、smtp
第六层:表示层 例:telnet、snmp(zabbix网页监控中使用了该协议)
第七层:应用层 例:nfs、ftp、tftp、http等
第1层有硬件必会有软件,笔者目前所知有lvs、nginx、haproxy
这7层模型又可分为四层协议结构和五层协议结构
四层协议结构将物理层和数据链路层划为网络接口层,3层4层不变,5层6层7层统称为应用层
五层协议结构1层2层3层4层不变,5层6层7层统称为应用层
个人理解7层模型结构主要点在于
(1)划分层级,用于排错
(2)便于管理
LVS在提供服务时其实划分为三层
(1)DS或LB
(2)RS群
(3)存储区
存储区的理解可认为当在某购物软件进行购物时,你将你喜欢的东西加入了购物车,此时发现当前页面展示的商品已经完毕,需要刷新展示后面的商品内容时,由于lvs的调度算法,此时将你的请求分发给另一台服务器提供,由于没有存储区的原因,购物车的商品随着你的刷新而清空,这是给人非常不爽的体验。存储区的作用其实个人认为两个(1)提供相同的内容,提供相同的服务(2)数据本身存储以及持久化
lvs在设计时分为两部分
(1)ipvs,该部分工作于内核空间,调度代码
(2)ipvsadm,该部分工作于用户空间,个人理解为定义的vip,rs集群节点,调度算法等
调度算法笔者目前接触到的是rr和wrr
静态:rr、wrr、sh、dh
动态:lc、wlc、sed、nq、lblc、lblcr
LVS支持的负载均衡策略分为三种:NAT、DR、TUN
nat(个人理解):LB收到用户请求后,将请求包中的IP地址转换为某个特定RS的ip地址,转发给RS,RS将应答包发送给LB,LB将应答包中的ip转为虚拟服务ip回送给用户
要求:RS与LB在一个网段;请求响应报文均经过LB。对LB的性能要求比较高;支持端口映射(笔者目前没有理解其含义)
nat模式符合lvs在OSI的第三层模型(网络层)的负载均衡策略
DR(个人理解):LB收到用户请求后,将请求包中的mac地址转为某个特定RS的mac地址,转发给RS,RS可直接将应答包回送给客户
要求:LB与RS在同一个物理段,共享一个虚拟ip;RS的网关不允许指向LB,应为响应报文不通过LB;不支持端口映射(没有理解含义)
DR模式为7层网络模型中的第2层(数据链路层)做负载均衡策略
TUN(个人理解):LB收到用户请求后,根据ip隧道协议封装该包转发给某个特定的RS,RS解出请求信息之后,将应答内容回送给用户
要求:RS与LB都要支持ip隧道协议
到此四层负载均衡其实已经说完三层,第一层物理层硬件方面,第二层,可理解为DR模式的负载均衡策略,第三层是NAT模式的负载均衡策略,第四层其实就是lvs本身,lvs本身只做分发请求,本身没有流量。
负载均衡个人认为实现三点目的
(1)转发功能,将请求按照调度算法均匀分发给真实的服务节点
(2)故障隔离:将有故障的节点剔除,使用备用节点
(3)恢复添加:人工修复故障节点,ok后自动加入
在LVS的故障隔离与恢复添加不得不说keepalived,keepalived起初主要为lvs设计,后加入vrrp功能
keepalived轻量级高可用集群软件,vrrp虚拟路由冗余协议
在keepalived中核心分为三个模块
(1)core:负责核心启动,配置文件的解析
(2)check:健康检查等
(3)vrrp:故障隔离,恢复添加。选举机制
vrrp(虚拟路由冗余协议)理解:在虚拟路由器中,只有处于master的节点会一直发送vrrp数据包,处于backup节点只接收来自master的报文信息,当master出现故障时,处于backup的节点就收不到来自master的报文信息,认为master出现故障。此时选举一个优先级更高的backup称为新的master,过程迅速,保证服务的持续性。
keepalived配置文件分为三部分
(1)global部分(全局配置),笔者目前对这一部分不太清楚
(2)vrrp部分,主要有互为主备配置等
(3)lvs部分:此部分配置其实做了检查,连接超时,重连次数等;这部分配置好后少了lvs在rs端进行的ipsadm -a vip -r rip -m/g/i (-w) 值;ds端的ifconfig 网卡:0 vip broadcast vip netmask 子网掩码 up;route add -host vip dev 网卡名:0
但arp抑制以及添加网卡路由等操作还要执行
ifconfig lo:0 vip broadcast vip netmask 子网掩码 up (1)
route add -host vip dev lo:0 (2)
(1)和(2)可替换为ip a a vip/多少位子网掩码 dev lo:0
echo "1" > /proc/sys/net/ipv4/config/lo/arp_ignore
echo "1" > /proc/sys/net/ipv4/config/lo/arp_announce
echo "2" > /proc/sys/net/ipv4/config/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/config/all/arp_announce
arp抑制可以写入到/etc/sysctl.conf
该配置文件涉及到linux的内核调优。内核调优与数据库参数优化是一项艰巨的任务,参考网络各种大牛文章进行修改
sysctl -p "永久"生效
keepalived高可用中可能出现的问题:脑裂
脑裂:当链接集群线路出现故障时,节点均认为对方出现问题,从而导致可能两边服务均起来,争抢资源,如存储数据等;或两边服务都不起来,服务挂掉。脑裂在HA系统中为非常严重问题。
脑裂可能出现情况:
(1)主节点与服务节点之间链接故障
(2)主节点防火墙策略
(3)节点故障
(4)节点网络配置问题
(5)其他问题,软件bug等
解决方案:
(1)多条线路链接
(2)防火墙配置
(3)节点检查(若检查方案zabbix,注:zabbix的脑裂监控其实监控的是主节点的vip是否存活,但不一定出现脑裂)
(4)网络配置
最后总结LVS的优点:
(1)抗负载能力强,
(2)配置简单,配置好之后不需要认为去过多操作,避免了误操作导致的错误,工作稳定。
出现问题网上大牛的总结大多都在内存、cpu、网络等方面
lvs出错大部分原因还是在于网络问题,笔者在进行试验测试是由于网络问题失败很多次,后查阅各大牛的文章,使用ip a a 绑定后终于成功
(3)仅做请求分发,本身无流量
(4)lvs由于工作在第四层,可对大多数应用做负载均衡