赞
踩
lvs(linux virtual server ):阿里的章文嵩发起的开源项目,linux的内核层面实现负载均衡的软件。
主要作用:将多个后端服务器组成一个高可用,高性能的服务器集群,通过负载均衡的算法将客户端的请求分发到后端的服务器上,来实现高可用和负载均衡。
集群:为了解决某个特定的问题,将多台计算机组合起来形成的单个系统。
垂直扩展:向上扩展,增强,性能更强的计算机,瓶颈,计算机本身设备的限制,硬件本身的性能瓶颈。
水平扩展:向外扩展,增加设备,并行的运行多个服务,依靠网络解决内部通信的问题,cluster集群。
LB:load balance 负载均衡集群,多个主机组成,每个主机只承担一部分的访问请求。
HA:high availiablity 高可用,这设计系统时,采取一定的措施确保系统当中某一组件或者部分出现故障,整个系统依然能够正常的运行,为了维护整个系统的可用性,可靠性,容错性。
HPC:high-performance computing 高性能 对响应时间,处理能力要求更高。
MTBF:Mean time Between Failure 平均无故障时间
MTTR:Mean Time Resotration repair 平均故障恢复时间
A= MTBF/(MTBF+MTTR)
A指标的范围在0-1之间,A指标就是系统可用性的度量,0表示系统越不可以,1表示系统越可用。
A指标要无限接近于1(99.99%)
90%-95% 不合格 98-99% 接受范围内
都是以小时为单位:1年365天=8760小时
计划内时间,计划内的时间可以不计,但是现在也算在内
计划外时间就是故障时间,从故障发生到故障解决的总时间,计划外时间是我们必须关注的一个指标
当天事必须当天解决-----------没有解决之间人是不可以离开的------------解决完之后必须生成报告,备案以及日报,周边,月报,年报等。
小集群不需要使用lvs,大集群适应lvs
vs vittual server lvs 服务的逻辑名称,也就是我们外部访问lvs集群时使用的ip地址和端口
DS director server lvs集群中的主服务器,也是调度器(nginx的代理服务器)是集群的核心,调度器就是用来接受客户端的请求转发到后端的服务器。
RS real server lvs集群中的真实服务器,后端服务器,用来接收DS转发来的请求,并且响应结果。
CIP Client ip 客户端的地址,发起请求的客户端地址。
VIP virtual ip lvs 集群使用的ip地址,对外提供集群访问的虚拟ip地址。
DIP dirextor ip 调度器在集群当中的地址,用于和RS通信。
RIP real ip 后端服务器在集群当中的ip地址。
NAT模式 :响应要有调度器响应给客户端
DR模式 :直接路由模式 真实服务器直接响应给客户端
TUN: 隧道模式
常用的模式:NAT和DR模式
nat模式是常用的lvs的模式之一。
在nat模式下,lvs会将来自客户端的请求报文中的目标ip地址和端口修改为lvs内部的ip地址和端口,然后把请求转发到后端服务器。
响应之后,响应结果返回客户端的过程中,响应报文经过lvs的处理,把目标ip和端口修改成客户端的ip地址和端口。
好处在于对客户端来说,请求的目标地址始终不变,客户端的配置不需要做特殊修改,只是调度器在对ip和端口进行转换,后端的服务器也不需要修改任何配置。
缺点:性能损失,请求和响应都需要调度器做地址转换,影响性能,net模式只能有一个调度,调度器故障,整个集群就不能正常工作。
内网-----外网 转换的是源ip地址 snat
外网-----内网 转换的是目的ip dnat
1、客户端发起请求,访问的是vip地址,到达调度器
2、调度器接收到请求之后,根据负载均衡算法选一个后端服务器
3、把请求的地址转换成可以直接和内部RS通信的ip地址(源地址转换)
4、后端服务器处理请求
5、目的地址转换,转换成vip地址
6、调度器的vip响应给客户端。
ipvsadm工具,用来配置和管理lvs集群的工具
-A 添加虚拟服务器 vip
-D 删除虚拟服务器地址
-s 指定负载均衡的调度算法
rr默认轮询
wrr加权轮询
最小连接lc
加权最小连接 wlc
-a 添加真实服务器
-d 删除真实服务器
-t 指定vip地址和端口
-r 指定rip真实服务器的地址和端口
-m 使用nat模式
-g 使用DR模式
-i 使用隧道模式
-w 设置权重
-p 60 设置连接保持时间
-l 列表查看
-n 数字化展示
备配置
nginx1 RS1
nginx2 RS2
test1 调度器 ens33 ens36
test2 客户端
实现使用客户端访问真实服务器RS1,RS2
nginx1配置
nginx1的网卡设置
访问nginx1页面
nginx2配置
访问nginx2页面
test2-1 调度器 配置
- modprobe ip_vs //手动加载 ip_vs 模块
- cat /proc/net/ip_vs //查看当前系统中ip_vs模块的版本信息
[root@localhost ~]# yum -y install ipvsadm* -y #更新ip_vs模块的版本信息
新增一个网卡并修改对应的配置
ens33网卡配置
ens36网卡配置
地址转换:从内到外将源地址地址转换,转换成vip地址
使用iptables查看nat是否已存在策略
- [root@localhost network-scripts]# iptables -t nat -vnL
- #-t 指定表
添加策略
- [root@localhost network-scripts]# iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o ens36 -j SNAT --to 12.0.0.1
- #-t指定表
- #-A 添加链
- #-s指定源地址
- #-o指定设备
- #-j 控制类型
- #--to 转换
配置ipvsadm
由于/etc/sysconfig/ipvsadm目录配置最开始为空,因为不能直接进行重启操作,需要先设置并将生成的文件保存到此目录下
- [root@localhost opt]# ipvsadm -C #清空原有的策略
- [root@localhost opt]# ipvsadm -A -t 12.0.0.1:80 -s rr #指定好vip地址和端口
- #-A添加虚拟服务器 vip
- #-t 添加指定的vip地址
- #-s 添加指定算法
- #rr 默认轮询算法
也可以添加其他策略
- [root@localhost opt]# ipvsadm -A -t 12.0.0.1:80 -s wrr #创建加权伦询
- [root@localhost opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.10.41:80 -m -w 2 #加权
- [root@localhost opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.10.42:80 -m -w 3 #加权
- [root@localhost opt]# ipvsadm -ln
选添加vip,虚拟服务器的ip和端口,然后再添加真实服务器
- #vip转发到那个真实服务器
- [root@localhost opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.10.41:80 -m
- [root@localhost opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.10.42:80 -m
- #-a添加真实服务器
- #-t指定vip地址
- #-r指定真实服务器的地址和端口
- #-m指定模式为nat模式
查看
[root@localhost opt]# ipvsadm -ln
保存
[root@localhost opt]# ipvsadm-save >/etc/sysconfig/ipvsadm
重启的时候可能会出现bug,策略可能会被情况,重启之后,重新查看一下策略
- [root@localhost opt]# systemctl restart ipvsadm.service
- [root@localhost opt]# ipvsadm -ln
出现bug,vip地址与一开始配置不一样,只能进行删除,不可修改
删除策略,并查看
- [root@localhost opt]# ipvsadm -D -t 127.0.0.1:80
- #-D删除
- #-t指定vip(与bug一致的内容)
- [root@localhost opt]# ipvsadm -ln
由于两个真实服务器从属于虚拟服务器下面,因此删除虚拟服务器,两个虚拟服务器也会被删除
重新添加,并重启
保留策略,删除单个节点服务器
例如:删除192.168.10.42:80服务器
[root@localhost opt]# ipvsadm -d -r 192.168.10.42:80 -t 12.0.0.1:80
开启路由转发功能
- [root@localhost opt]# vim /etc/sysctl.conf
- --------------------------------------------
- net.ipv4.ip_forward=1
- wq
- [root@localhost opt]# sysctl -p #生效
用本机进行测试,实现轮询功能
接下来进入客户端test2-2的配置
test2-2的网卡设置
使用客户端test2-2访问test2-1调度器,并在两个nginx后台服务器上动态的查看nginx的访问日志
tail -f /usr/local/nginx/logs/access.log #动态查看
查看访问日志记录的仍是真实的客户端ip地址
DR模式(直接路由模式)
调度器在整个lvs集群当中是最重要的,在net模式下,即负责接受请求,同时根据负载均衡的算法转发流量,响应发送给客户端
DR模式下调度器依然负责接收请求,同时也根据负载均衡算法转发流量到RS,响应直接由RS响应给客户端。
直接路由Direct Routing 是一种二层转发模式。二层转发的是数据帧,根据源mac地址和目的mac地址进行转发。不会修改数据包源ip和目的ip,根据数据包的mac地址进行转发。
DR模式下,lvs也是维护一个虚拟的ip地址,所有的请求都是发送到这个vip,既然是走二层转发,当客户端的请求到底调度器之后,根据负载均衡的算法选择一个RS,修改vip服务器的目的mac变成RS的MAC地址,RS处理完请求之后,根据报文当中客户端的源mac地址直接把响应发送到客户端即可,不需要走调度器,调度器的压力相对较小。
1、调度器的ip地址和RS的ip要在同一网段,数据才能进行二层转发。
2、RS是一个公网地址,互联网可以直接访问RS的地址。(基本不用)
3、DR模式是走内核转发,内核来判断数据包的地址,根据RS的地址把数据包重新封装,修改MAC地址。
4、调度器的地址只可以作为集群访问的入口,不能作为网关
5、所有的RS 上的lo(本地回环地址)都要配置vip地址
lvs是四层转发 内核态 ip+端口 四层代理
nginx 四层代理也可以七层代理
lvs(DR模式) +nginx+tomcat
lvs实现四层转发+nginx实现7层转发(动态)
访问lvs的vip地址可以实现动静分里
nginx1 RS1 192.168.10.41
nginx2 RS 2 192.168.10.42
vip 192.168.10.100
test2-1 调度器 192.168.10. 20
test2-2 客户端 192.168.10.30
test2-1调度器的配置
- [root@localhost ~]# modprobe ip_vs #加载内核
- [root@localhost ~]# yum -y install ipvsadm* #更新ip_vs模块的版本信息
创建vip地址
- [root@localhost ~]# cd /etc/sysconfig/network-scripts/
- 通过编辑配置文件的方式
- [root@localhost network-scripts]# vim ifcfg-ens33:0
- -----------------------------------------------------
- DEVICE=ens33:0
- ONBOOT=yes
- IPADDR=192.168.10.100
- NETMASK=255.255.255.255
- ~
- wq
- #临时启动
- [root@localhost network-scripts]# ifup ifcfg-ens33:0
修改调度器的响应参数
- [root@localhost network-scripts]# vim /etc/sysctl.conf
- -------------------------------------------------------
- net.ipv4.ip_forward=0
- #关闭数据包转发功能
- net.ipv4.conf.all.send_redirects=0
- #禁止系统发生icmp重定向的消息
- net.ipv4.conf.default.send_redirects=0
- #禁止默认网络接口发送icmp重定向的消息
- net.ipv4.conf.ens33.send_redirects=0
- #针对ens33设备。禁止发生icmp重定向消息
- ~
- wq
- [root@localhost network-scripts]# sysctl -p #配置立即生效
分配策略
- 清空策略并查看
- [root@localhost network-scripts]# ipvsadm -C
- [root@localhost network-scripts]# ipvsadm -ln
- Try `ipvsadm -h' or 'ipvsadm --help' for more information.
-
- 指定负载的vip和策略
- [root@localhost network-scripts]# ipvsadm -A -t 192.168.10.100:80 -s rr
- 添加真实服务器
- [root@localhost network-scripts]# ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.41:80 -g
- [root@localhost network-scripts]# ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.42:80 -g
重启查看是否会出现bug
- [root@localhost network-scripts]# systemctl restart ipvsadm
- [root@localhost network-scripts]# ipvsadm -ln
nginx1添加回环地址
- [root@localhost html]# cd /etc/sysconfig/network-scripts/
- [root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
- [root@localhost network-scripts]# vim ifcfg-lo:0
- ------------------------------------------------
- DEVICE=lo:0
- IPADDR=192.168.10.100
- NETMASK=255.255.255.255
- # If you're having problems with gated making 127.0.0.0/8 a martian,
- # you can change this to something else (255.255.255.255, for example)
- ONBOOT=yes
-
- wq
- [root@localhost network-scripts]# ifup ifcfg-lo:0 #重启端口
添加lo接口作为vip
- [root@localhost network-scripts]# route add -host 192.168.10.100 dev lo:0
- #设置ip地址为192.168.10.100的只添加到回环接口,作为lvs的vip,通过路由的模式转发到RS
- #能让vip识别到真实的服务器
调整真实服务器的内核响应
- [root@localhost network-scripts]# vim /etc/sysctl.conf
- -------------------------------------------------------
- net.ipv4.conf.lo.arp_ignore=1
- #设置回环接口忽略来自任何接口的ARP请求
- net.ipv4.conf.lo.arp_announce=2
- #设置回环地址仅仅公告本地的ip地址,但不响应ARP请求
- net.ipv4.conf.all.arp_ignore=1
- #设置所有接口忽略来自任何接口的ARP请求
- net.ipv4.conf.all.arp_announce=2
- #设置所有接口仅仅公告本地的ip地址,但是不响应ARP请求
- wq
查看
访问nginx1
nginx2添加回环地址
- [root@localhost html]# cd /etc/sysconfig/network-scripts/
- [root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
- [root@localhost network-scripts]# vim ifcfg-lo:0
- ------------------------------------------------
- DEVICE=lo:0
- IPADDR=192.168.10.100
- NETMASK=255.255.255.255
- # If you're having problems with gated making 127.0.0.0/8 a martian,
- # you can change this to something else (255.255.255.255, for example)
- ONBOOT=yes
-
- wq
- [root@localhost network-scripts]# ifup ifcfg-lo:0 #重启端口
查看
添加lo接口作为vip
- [root@localhost network-scripts]# route add -host 192.168.10.100 dev lo:0
- #设置ip地址为192.168.10.100的只添加到回环接口,作为lvs的vip,通过路由的模式转发到RS
- #能让vip识别到真实的服务器
调整真实服务器的内核响应
- [root@localhost network-scripts]# vim /etc/sysctl.conf
- -------------------------------------------------------
- net.ipv4.conf.lo.arp_ignore=1
- #设置回环接口忽略来自任何接口的ARP请求
- net.ipv4.conf.lo.arp_announce=2
- #设置回环地址仅仅公告本地的ip地址,但不响应ARP请求
- net.ipv4.conf.all.arp_ignore=1
- #设置所有接口忽略来自任何接口的ARP请求
- net.ipv4.conf.all.arp_announce=2
- #设置所有接口仅仅公告本地的ip地址,但是不响应ARP请求
- wq
访问nginx2
使用客户端test2-2 (192.168.10.30)访问192.168.10.100实现伦询
lvs的三种工作模式
NAT | DR | TUN | |
优点 | 地址转换,配置简单 | 性能最好 | AWN,可以实现较远距离的数据包传送 |
缺点 | 性能瓶颈 | 不支持跨网段 | 专用的通道,必须开通vpn(花钱) |
RS的要求 | 无限制 | 必须要禁止非物理接口的ARP响应 | 支持隧道模式 |
RS的数量 | 10-20台 | 100台 | 100台 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。