你的位置:首页 > 软件开发 > 操作系统 > Lvs+keepAlived实现负载均衡高可用集群(DR实现)

Lvs+keepAlived实现负载均衡高可用集群(DR实现)

发布时间:2017-11-30 01:00:04
第1章 LVS 简介1.1 LVS介绍LVS是Linux Virtual Server的简写,意为Linux虚拟服务器,是虚拟的服务器集群系统,可在UNIX/LINUX平台下实现负载均衡集群功能。该项目在1998年5月由章文嵩博士组织成立,是国内最早出现的自由软件项目之一官网 & ...

Lvs+keepAlived实现负载均衡高可用集群(DR实现)

第1章 LVS 简介

1.1 LVS介绍

LVS是Linux Virtual Server的简写,意为Linux虚拟服务器,是虚拟的服务器集群系统,可在UNIX/LINUX平台下实现负载均衡集群功能。该项目在1998年5月由章文嵩博士组织成立,是国内最早出现的自由软件项目之一

官网 >中文资料:LVS项目介绍 http://www.linuxvirtualserver.org/zh/lvs1.htmlLVS集群的体系结构 http://www.linuxvirtualserver.org/zh/lvs2.htmlLVS集群中的IP负载均衡技术 http://www.linuxvirtualserver.org/zh/lvs3.htmlLVS集群的负载调度 http://www.linuxvirtualserver.org/zh/lvs4.html

简单一句话,当并发超过了Nginx上限,就可以使用LVS了。
日1000-2000W PV或并发请求1万以下都可以考虑用Nginx。
大型门户网站,电商网站需要用到LVS。

1.1.1 LVS内核模块ip_vs介绍

早在2.2内核时,IPVS就已经以内核补丁的形式出现

从2.4.23版本开始,IPVS软件就合并到Linux内核常用版本的内核补丁的集合

从2.4.24以后IPVS已经成为Linux官方标准内核的一部分

Lvs+keepAlived实现负载均衡高可用集群(DR实现)

 

 

 

 

 

说明:

LVS无需安装

安装的是管理工具,第一种叫ipvsadm,第二种叫keepalive

ipvsadm是通过命令行管理,而keepalive读取配置文件管理

后面我们会用Shell脚本实现keepalive的功能

 

第2章 LVS集群搭建

2.1 环境准备

主机名

主机IP

备注

lb03

10.0.0.15

01.Cent0S7.4系统,内存512M

02.防火墙firewall和Selinux关闭

03.web03和web04只安装Nginx软件,并满足

curl valign="top" width="160">

lb04

10.0.0.16

web03

10.0.0.17

web04

10.0.0.18

 

2.1 安装ipvsadm管理工具

 1 lsmod |grep ip_vs #查看系统的LVS模块->默认没有加载模块,需安装管理工具才会激活 2 yum -y install ipvsadm 

查看当前LVS状态,顺便激活LVS内核模块

1 [root@lb03 ~]# ipvsadm -ln2 IP Virtual Server version 1.2.1 (size=4096)3 Prot LocalAddress:Port Scheduler Flags4 -> RemoteAddress:Port   Forward Weight ActiveConn InActConn5 [root@lb03 ~]# lsmod|grep ip_vs6 ip_vs     141092 07 nf_conntrack   133387 1 ip_vs8 libcrc32c    12644 3 xfs,ip_vs,nf_conntrack

注意ipvsadm -ln作用:健康检查,即当某台web服务器出现问题时LVS将自动踢出;等恢复后再添加进来

 

2.1.1 ①在eth0网卡绑定VIP地址(高可用)

 1 ip addr add 10.0.0.13/24 dev eth0 #lb服务的IP地址可扩展性较差,故使用VIP地址(删除del;显示show) 

2.1.2 ②清除当前所有LVS规则

 1 ipvsadm -C 

2.1.3 ③设置tcp、tcpfin、udp链接超时时间(s)

 1 ipvsadm --set 30 5 60 #控制浏览器与lb01的超时时间 

2.1.4 ④添加虚拟服务,调度算法见man ipvsadm

 1 ipvsadm -A -t 10.0.0.13:80 -s wrr -p 20 2 3 #LVS默认无80端口,需另外添加新的虚拟IP记录->控制lb01与web01、web02的超时时间 

2.1.5 ⑤将虚拟服务关联到真实服务上

1 ipvsadm -a -t 10.0.0.13:80 -r 10.0.0.17:80 -g -w 12 3 ipvsadm -a -t 10.0.0.13:80 -r 10.0.0.18:80 -g -w 1

2.1.6 ⑥查看配置结果

1 [root@lb03 ~]# ipvsadm -ln2 IP Virtual Server version 1.2.1 (size=4096) #LVS版本号3 Prot LocalAddress:Port Scheduler Flags  #协议(TCP)本地IP:端口 调度算法 标志(持续时间20s)4 -> RemoteAddress:Port   Forward Weight ActiveConn InActConn5  #后端节点IP:端口   工作模式 权重 已建立连接 正在连接6 TCP 10.0.0.3:80 wrr persistent 207 -> 10.0.0.17:80     Route 1  0   08 -> 10.0.0.18:80     Route 1  0   0

2.2 web服务器配置

2.2.1 Ⅰ.在lo网卡绑定VIP地址

 1 ip addr add 10.0.0.13/32 dev lo 

2.2.2 Ⅱ.修改内核参数抑制ARP响应

1 cat >>/etc/sysctl.conf<<EOF #其目的是为了让rs顺利发送mac地址给客户端2 net.ipv4.conf.all.arp_ignore = 13 net.ipv4.conf.all.arp_announce = 24 net.ipv4.conf.lo.arp_ignore = 15 net.ipv4.conf.lo.arp_announce = 26 EOF7 8 sysctl -p

查看结果

 1 [root@lb03 ~]# ip a s eth0 2 eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 3 link/ether 00:50:56:3b:cb:36 brd ff:ff:ff:ff:ff:ff 4 inet 10.0.0.13/24 scope global secondary eth0 5  valid_lft forever preferred_lft forever 6 [root@web03 ~]# ip a s lo 7 lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 8 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 9 inet 10.0.0.13/32 scope global lo10  valid_lft forever preferred_lft forever

2.2.3 Ⅲ.web浏览器测试

 1 http://10.0.0.13/ 

说明:当lb服务器断开连接后VIP会自动消失,重新连接后需再次添加VIP

2.2.4 Ⅳ. arp解析查看

1 [root@lb04 ~]# arp -n2 Address     HWtype HWaddress   Flags Mask   Iface3 10.0.0.254    ether 00:50:56:e9:9f:2c C      eth04 10.0.0.18    ether 00:0c:29:ea:ca:55 C      eth05 10.0.0.13    ether 00:0c:29:de:7c:97 C      eth06 172.16.1.15    ether 00:0c:29:de:7c:a1 C      eth17 10.0.0.17    ether 00:0c:29:4a:ac:4a C      eth0

至此,LVS集群配置完毕

Lvs+keepAlived实现负载均衡高可用集群(DR实现)

注意:所有有访问的返回值都是10.0.0.3

lvs与nginx的不同就在于17和18并不通过IP地址访问,而是通过mac地址访问

至此,LVS集群配置完毕

2.2.4.1 存疑问题:使用抓包工具发现通信的是windows IP和lb03的80端口,但lb03没有80端口?

lvs通过mac地址访问时,访问10.0.0.3就是访问lb01

Lvs+keepAlived实现负载均衡高可用集群(DR实现)

10.0.0.3的数据包mac地址的返回值就是访问web03

Lvs+keepAlived实现负载均衡高可用集群(DR实现)

2.3 ARP协议

2.3.1 arp详解

01.ARP协议,全称"Address Resolut ion Protocol",中文名是地址解析协议,使用ARP协议可实现通过IP地址获得对应主机的物理地址(MAC地址)

 ARP协议要求通信的主机双方必须在同一个物理网段(即局域网环境)!

02.为了提高IP转换MAC的效率,系统会将解析结果保存下来,这个结果叫做ARP缓存

1 arp-a #Windows查看ARP缓存命令2 arp-n #Linux查看ARP缓存命令3 arping -c 1 -I eth0 10.0.0.64 #Linux解析IP对应的MAC地址[-c指定超时的ARP数据包数量;-I指定使用哪个网络接口]

ARP缓存表是把双刃剑

 ①主机有了arp缓存表,可以加快ARP的解析速度,减少局域网内广播风暴。因为arp是发广播解析的,频繁的解析也是消耗带宽的(尤其是机器多的时候) ②正是有了arp缓存表,给恶意黑客带来了攻击服务器主机的风险,这个就是arp欺骗攻击 ③切换路由器,负载均衡器等设备时,可能会导致短时网络中断。因为所有的客户端ARP缓存表未更新 

2.3.2 服务器切换ARP问题

当lb01宕机,VIP地址迁移到lb02时需要通过arping命令通知所有网络内机器更新本地的ARP缓存表,从而使得客户机访问时重新广播获取MAC地址

ARP广播进行新的地址解析

 1 arping -I eth0 -c 1 -U VIP 2 arping -I eth0 -c 1 -U 10.0.0.13 

测试ARP缓存切换(手动漂移VIP)

1 [root@lb03 ~]# ip addr del 10.0.0.13/24 dev eth02 [root@lb04 ~]# ip addr add 10.0.0.13/24 dev eth03 [root@lb04 ~]# arping -I eth0 -c 1 -U 10.0.0.134 ARPING 10.0.0.13 from 10.0.0.13 eth05 Sent 1 probes (1 broadcast(s))6 Received 0 response(s)

windows查看arp -a

 1 [e:\~]$ arp -a 

2.3.3 LVS集群的工作模式

DR直接路由模式

Lvs+keepAlived实现负载均衡高可用集群(DR实现)

NAT模式

Lvs+keepAlived实现负载均衡高可用集群(DR实现)

FULLNAT

Lvs+keepAlived实现负载均衡高可用集群(DR实现)

TUNNEL

Lvs+keepAlived实现负载均衡高可用集群(DR实现)

 

第3章 Keepalive+LVS实现

3.1 安装配置keepalive实例

3.1.1 ①在lb03和lb04上安装keepalive

 1 yum install -y keepalived 

3.1.2 ②编辑keepalived.conf配置文件

 1 [root@lb03 ~]# cat /etc/keepalived/keepalived.conf 2 global_defs { 3  router_id LVS_01 4 } 5  6 vrrp_instance VI_1 { 7  state MASTER 8  interface eth0 9  virtual_router_id 5110  priority 15011  advert_int 112  authentication {13   auth_type PASS14   auth_pass 111115  }16  virtual_ipaddress {17  10.0.0.13/2418  }19 }20 21 virtual_server 10.0.0.13 80 {22  delay_loop 6    23  lb_algo wrr    24  lb_kind DR    25  nat_mask 255.255.255.026  persistence_timeout 50  27  protocol TCP    28 29  real_server 10.0.0.17 80 {30   weight 1    31   TCP_CHECK {32   connect_timeout 8  33   nb_get_retry 334   delay_before_retry 335   connect_port 8036   }37  }38 39  real_server 10.0.0.18 80 {40   weight 1    41   TCP_CHECK {42   connect_timeout 8  43   nb_get_retry 344   delay_before_retry 345   connect_port 8046   }47  }48 }

 

3.1.3 ③开启keepalived服务

 1 systemctl start keepalived.service 2 ip a #查看VIP,此时应漂移到lb04上

3.1.4 ④web03/web04同时操作以下步骤

 1 ip addr add 10.0.0.13/32 dev lo 2  3 cat >>/etc/sysctl.conf<<EOF 4 net.ipv4.conf.all.arp_ignore = 1 5 net.ipv4.conf.all.arp_announce = 2 6 net.ipv4.conf.lo.arp_ignore = 1 7 net.ipv4.conf.lo.arp_announce = 2 8 EOF 9 10 sysctl -p

 

注意:因为虚拟的ip重启之后就会失效,故须加入开机启动项rc.local文件并赋予其可执行权限

3.1.5 ⑤keepalive健康检查功能

模拟web03出现问题

3.1.5.1 查看lb03 lvs状态

Lvs+keepAlived实现负载均衡高可用集群(DR实现)

3.1.5.2 关闭web03

Lvs+keepAlived实现负载均衡高可用集群(DR实现)

3.1.5.3 查看lb03状态

Lvs+keepAlived实现负载均衡高可用集群(DR实现)

如图发现,web03被剔除

3.1.5.4 开启web03

Lvs+keepAlived实现负载均衡高可用集群(DR实现)

3.1.5.5 查看lvs状态

Lvs+keepAlived实现负载均衡高可用集群(DR实现)

web03恢复

以上是健康检查功能

3.1.6 ⑥测试

 1 [root@lb04 ~]# curl 10.0.0.13 2 web03 3 [root@lb04 ~]# ipvsadm -ln  

3.2 常见LVS负载均衡高可用解决方案

01.开发类似keepalived的脚本,早期的办法(不推荐)

02.heartbeat+lvs+ldirectord脚本配置方案,复杂不易控制(不推荐使用)

03.RedHat工具piranha,一个web界面配置LVS

04.LVS-DR+keepalived方案,推荐最优方案,简单、易用、高效

 

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:Lvs+keepAlived实现负载均衡高可用集群(DR实现)

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录