第1章 LVS 简介

1.1 LVS介绍

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

官网:http://www.linuxvirtualserver.org/index.html

中文资料:
LVS项目介绍 http://www.linuxvirtualserver.org/zh/lvs1.html
LVS集群的体系结构 http://www.linuxvirtualserver.org/zh/lvs2.html
LVS集群中的IP负载均衡技术 http://www.linuxvirtualserver.org/zh/lvs3.html
LVS集群的负载调度 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无需安装

安装的是管理工具,第一种叫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 http://10.0.0.17/页尾得到结果为web03

curl http://10.0.0.18/页尾得到结果为web04

lb04

10.0.0.16

web03

10.0.0.17

web04

10.0.0.18

2.1 安装ipvsadm管理工具

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

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

 [root@lb03 ~]# ipvsadm -ln
IP Virtual Server version 1.2. (size=)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@lb03 ~]# lsmod|grep ip_vs
ip_vs
nf_conntrack ip_vs
libcrc32c xfs,ip_vs,nf_conntrack

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

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

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

2.1.2 ②清除当前所有LVS规则

ipvsadm -C

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

ipvsadm --set #控制浏览器与lb01的超时时间

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

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

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

 ipvsadm -a -t 10.0.0.13: -r 10.0.0.17: -g -w 

 ipvsadm -a -t 10.0.0.13: -r 10.0.0.18: -g -w 

2.1.6 ⑥查看配置结果

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

2.2 web服务器配置

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

ip addr add 10.0.0.13/ dev lo

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

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

查看结果

 [root@lb03 ~]# ip a s eth0
eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP qlen
link/ether :::3b:cb: brd ff:ff:ff:ff:ff:ff
inet 10.0.0.13/ scope global secondary eth0
valid_lft forever preferred_lft forever
[root@web03 ~]# ip a s lo
lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN qlen
link/loopback ::::: brd :::::
inet 10.0.0.13/ scope global lo
valid_lft forever preferred_lft forever

2.2.3 Ⅲ.web浏览器测试

http://10.0.0.13/

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

2.2.4 Ⅳ. arp解析查看

 [root@lb04 ~]# arp -n
Address HWtype HWaddress Flags Mask Iface
10.0.0.254 ether :::e9:9f:2c C eth0
10.0.0.18 ether :0c::ea:ca: C eth0
10.0.0.13 ether :0c::de:7c: C eth0
172.16.1.15 ether :0c::de:7c:a1 C eth1
10.0.0.17 ether :0c::4a:ac:4a C eth0

至此,LVS集群配置完毕

注意:所有有访问的返回值都是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

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

2.3 ARP协议

2.3.1 arp详解

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

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

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

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

ARP缓存表是把双刃剑

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

2.3.2 服务器切换ARP问题

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

ARP广播进行新的地址解析

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

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

 [root@lb03 ~]# ip addr del 10.0.0.13/ dev eth0
[root@lb04 ~]# ip addr add 10.0.0.13/ dev eth0
[root@lb04 ~]# arping -I eth0 -c -U 10.0.0.13
ARPING 10.0.0.13 from 10.0.0.13 eth0
Sent probes ( broadcast(s))
Received response(s)

windows查看arp -a

[e:\~]$ arp -a

2.3.3 LVS集群的工作模式

DR直接路由模式

NAT模式

FULLNAT

TUNNEL

第3章 Keepalive+LVS实现

3.1 安装配置keepalive实例

3.1.1 ①在lb03和lb04上安装keepalive

yum install -y keepalived

3.1.2 ②编辑keepalived.conf配置文件

 [root@lb03 ~]# cat /etc/keepalived/keepalived.conf
global_defs {
router_id LVS_01
} vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
10.0.0.13/
}
} virtual_server 10.0.0.13 {
delay_loop
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout
protocol TCP real_server 10.0.0.17 {
weight
TCP_CHECK {
connect_timeout
nb_get_retry
delay_before_retry
connect_port
}
} real_server 10.0.0.18 {
weight
TCP_CHECK {
connect_timeout
nb_get_retry
delay_before_retry
connect_port
}
}
}

3.1.3 ③开启keepalived服务

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

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

 ip addr add 10.0.0.13/ dev lo

 cat >>/etc/sysctl.conf<<EOF
net.ipv4.conf.all.arp_ignore =
net.ipv4.conf.all.arp_announce =
net.ipv4.conf.lo.arp_ignore =
net.ipv4.conf.lo.arp_announce =
EOF sysctl -p
注意:因为虚拟的ip重启之后就会失效,故须加入开机启动项rc.local文件并赋予其可执行权限

3.1.5 ⑤keepalive健康检查功能

模拟web03出现问题

3.1.5.1 查看lb03 lvs状态

3.1.5.2 关闭web03

3.1.5.3 查看lb03状态

如图发现,web03被剔除

3.1.5.4 开启web03

3.1.5.5 查看lvs状态

web03恢复

以上是健康检查功能

3.1.6 ⑥测试

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

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

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

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

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

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

此笔记是本人学习摘记整理而成,此为初稿(尚有诸多不完善之处),原创作品允许转载,转载时请务必以超链接形式标明文章原始出处,作者信息和本声明,否则将追究法律责任。http://www.cnblogs.com/bananaaa/

Lvs+keepAlived实现负载均衡高可用集群(DR实现)的更多相关文章

  1. 手把手教程: CentOS 6.5 LVS + KeepAlived 搭建 负载均衡 高可用 集群

    为了实现服务的高可用和可扩展,在网上找了几天的资料,现在终于配置完毕,现将心得公布处理,希望对和我一样刚入门的菜鸟能有一些帮助. 一.理论知识(原理) 我们不仅要知其然,而且要知其所以然,所以先给大家 ...

  2. LVS+Keepalived-DR模式负载均衡高可用集群

    LVS+Keepalived DR模式负载均衡+高可用集群架构图 工作原理: Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能. VRRP,虚拟路由冗余协议,是针对路由器的 ...

  3. lvs+heartbeat搭建负载均衡高可用集群

    [172.25.48.1]vm1.example.com [172.25.48.4]vm4.example.com 集群依赖软件:

  4. linux系统下对网站实施负载均衡+高可用集群需要考虑的几点

    随着linux系统的成熟和广泛普及,linux运维技术越来越受到企业的关注和追捧.在一些中小企业,尤其是牵涉到电子商务和电子广告类的网站,通常会要求作负载均衡和高可用的Linux集群方案. 那么如何实 ...

  5. Linux下"负载均衡+高可用"集群的考虑点 以及 高可用方案说明(Keepalive/Heartbeat)

    当下Linux运维技术越来越受到企业的关注和追捧, 在某些企业, 尤其是牵涉到电子商务和电子广告类的网站,通常会要求作负载均衡和高可用的Linux集群方案.那么如何实施Llinux集群架构,才能既有效 ...

  6. 【葵花宝典】lvs+keepalived部署kubernetes(k8s)高可用集群

    一.部署环境 1.1 主机列表 主机名 Centos版本 ip docker version flannel version Keepalived version 主机配置 备注 lvs-keepal ...

  7. Linux集群介绍、keepalived介绍及配置高可用集群

    7月3日任务 18.1 集群介绍18.2 keepalived介绍18.3/18.4/18.5 用keepalived配置高可用集群扩展heartbeat和keepalived比较http://blo ...

  8. (转)基于keepalived搭建MySQL的高可用集群

    基于keepalived搭建MySQL的高可用集群  原文:http://www.cnblogs.com/ivictor/p/5522383.html MySQL的高可用方案一般有如下几种: keep ...

  9. Nginx+keepalived实现负载均衡高可用配置

    1. 什么是负载均衡高可用 nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重点的位置,如果nginx服务器宕机后端web服务将无法提供服务,影响严重. 为了屏蔽负载均衡服务 ...

随机推荐

  1. flask 之定时任务开发

    最近开发我的接口测试平台 ,但是遇到了一个需求,需要开发定时任务,于是百度搜索,找到了这么一个叫 pFlask-APScheduler然后开始了我的第一次的学习,于是乎, 需求是这么的: 1.添加定时 ...

  2. SUCTF--WEB

    题目:flag 在哪? 介绍:网址(http://23.106.143.230/a_real_babyweb.php) 1,打开网址,抓包可以发现在 HTTP 头里面有 Cookie:suctf{Th ...

  3. SQL1

    这是社团的题目,我现在就写出来吧,总共两种方法,一种手注,一种用工具(sqlmap). 一.手注(盲注) 1,我们打开题目,可以看到一个登陆页面,这是我们在输入框里面输入万能密码:  ' and '1 ...

  4. 查看.ssh文件在哪

    输入命令 ll -d ~/.ssh 后你就都明白了.

  5. 【OCR技术系列之一】字符识别技术总览

    最近入坑研究OCR,看了比较多关于OCR的资料,对OCR的前世今生也有了一个比较清晰的了解.所以想写一篇关于OCR技术的综述,对OCR相关的知识点都好好总结一遍,以加深个人理解. 什么是OCR? OC ...

  6. Maven多模块的开发项目搭建

    系统越复杂,所有的业务逻辑都放在一个项目里,各个包之间的业务逻辑相互调用,这样添加了开发成本,同时对之后的系统维护,错误排查带来一定的麻烦. 通过Maven的多模块开发,把一个系统拆分成多个模块,通过 ...

  7. 爬起点小说 day01

    先介绍下我自己爬起点小说的思路: 1.爬取所有的类型列表 a.链接存redis中 类型表:novel_list 具体每一种类型:bnovel_all_list(把novel_list和bnovel_l ...

  8. km算法入门

    本文知识均由笔者自学,文章有错误之处请不吝指出. 笔者刷数模题的时候有一道题考到了"二分图最大权分配",需要用到KM算法,但是书上对KM算法的介绍又臭又长,更何况有些同学" ...

  9. UVA 1508 - Equipment dp状态压缩

    题意:  已知n个5元组,从中选出k组,使得这些组中5个位置,每个位置上最大数之和最大. 分析:当k>5时,就是n个5元组最大的数之和,当k<5时,就当做5元组,状态压缩,用00000表示 ...

  10. 【MySQL疑难杂症】如何将树形结构存储在数据库中(方案一、Adjacency List)

    今天来看看一个比较头疼的问题,如何在数据库中存储树形结构呢? 像mysql这样的关系型数据库,比较适合存储一些类似表格的扁平化数据,但是遇到像树形结构这样有深度的人,就很难驾驭了. 举个栗子:现在有一 ...