标签:LVS
LVS负载均衡集群提供了一种廉价,有效,透明的方法,来扩展网络设备和带宽,增加吞吐量,加强网络数据处理能力,提高网络的灵活性和可用性
1. 单台计算机无法承受大规模的并发访问或数据流量了,此时就需要搭建负载均衡集群把流量分摊到多台节点设备上,即减少了等待响应时间又提升了用户的体验
2. 7*24小时的服务保证,任意或多个有限后端节点设备宕机,不会影响整体业务的运行
简单一句话,当并发访问太多,nginx无法承受时,就要用到LVS
当日pv1000-2000w或者并发请求一万以下时,都可以使用nginx
LVS即linux虚拟服务器,是一个虚拟的服务器集群系统,可以在UNIX/linux平台下是实现负载均衡集群功能,该项目在1998年5月由章文嵩博士组织成立,是中国国内最早出现的自由软件项目之一
yum -y install ipvsadm
[root@lb01 ~]# lsmod|grep ip_vs
[root@lb01 ~]# ipvsadm 激活ip_vs模块
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@lb01 ~]# lsmod|grep ip_vs 再次查看,就有结果显示了
ip_vs 140944 0
nf_conntrack 105745 1 ip_vs
libcrc32c 12644 2 xfs,ip_vs
1. 在eth0网卡绑定vip地址
2. 清除当前所有LVS规则
3. 设置tcp/tcpfin/udp连接超时时间
4. 添虚拟服务(-A),和调度算法指定(-s)
5. 将虚拟服务关联到真实服务
6. 查看配置结果
-A 添加虚拟服务
-s 指定调度算法
-g 指定工作模式为DR模式
-w 指定权重
-a 增加真实服务器
-m 指定工作模式为nat模式
-t 表示为tcp服务
-r 真实服务器的地址
ip addr add 10.0.0.13/24 dev eth0
ip address show eth0
ipvsadm -C
ipvsadm --set 30 5 60
ipvsadm -A -t 10.0.0.13:80 -s wrr -p 20
ipvsadm -a -t 10.0.0.13:80 -r 10.0.0.17:80 -g -w 1
ipvsadm -a -t 10.0.0.13:80 -r 10.0.0.18:80 -g -w 1
ipvsadm –ln
[root@web04 conf]# ip addr add 10.0.0.13/32 dev lo
[root@web04 conf]# cat >>/etc/sysctl.conf<<EOF
> net.ipv4.conf.all.arp_ignore = 1
> net.ipv4.conf.all.arp_announce = 2
> net.ipv4.conf.lo.arp_ignore = 1
> net.ipv4.conf.lo.arp_announce = 2
> EOF
[root@web04 conf]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
浏览器上进行测试:输入虚ip地址
浏览器访问没有发现轮询效果
答:
LVS的轮询不想nginx明显,LVS是宏观上的,大并发的情况下进行轮询,如果每一次都进行轮询,实际上也会消耗一定的资源,因此可以使用多个客户端进行访问
使用抓包工具,发现进行通信的是windows的ip和lb01的80端口,但是lb01上本没有80端口
答:
用抓包工具查看,可以发现数据包的源mac地址是web01和web02
客户端的操作有什么含义?
既然要让RS能够处理目标地址为vip的ip包,首先必须要让RS能接受到这个包,在lo上配置vip能够完成接受包并将结果返回客户端
不可以!将vip配置在eth0上,会影响RS的arp请求,造成整体LVS集群arp缓存表紊乱,以至于整个负载均衡集群都不能正常工作
因为当客户端发送请求报文时需要进行广播,询问谁有vip,如果web节点抢先进行响应的话,会导致请求地址发给了web节点,就不会到达负载均衡上,也就失去了负载均衡的功能
arp_announce---对网络接口上,本地ip地址发出的,arp回应,作出相应级别的限制
arp_ignore---对目标地址为本地ip的arp询问不同的应答模式
CIP---客户端主机ip地址
VIP---虚拟ip地址
DIP---负载均衡服务器ip地址
RIP---web服务器真实ip地址
DR直接路由模式:是通过改写请求报文的目标mac地址,将请求发给真实服务器的,而真实服务器响应之后的处理结果直接返回给客户端
DR技术可以极大的提高集群系统的伸缩性,但要求调度器LB与真实服务器RS都有一块物理网卡连在同一物理网段上,即必须在同一局域网中
通过网络地址转换,负载均衡重写请求报文的标ip地址,根据响应算法,将请求分配给后端的真实服务器,真实服务器处理后,将响应结果返回给负载均衡,有负载均衡服务器重写源ip地址,再返回给客户端,这个过程就相当于收费站
[root@lb01 ~]# arping -c 1 -I eth0 10.0.0.17
ARPING 10.0.0.17 from 10.0.0.5 eth0
Unicast reply from 10.0.0.17 [00:0C:29:4D:90:0D] 3.682ms
Sent 1 probes (1 broadcast(s))
Received 1 response(s)
现在vip在lb01服务器上,如果lb01宕机后,vip会随之飘移,关闭lb01上所有网卡
[root@lb01 ~]# ip a
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:14:39:b8 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.13/24 scope global secondary eth0
[root@lb02 ~]# ip a
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:1b:84:3c brd ff:ff:ff:ff:ff:ff
inet 10.0.0.13/24 scope global secondary eth0
vip漂移后mac地址发生改变,此时要进行arp广播,通知其他主机,vip的mac地址已经改变
[root@lb02 ~]# arping -I eth0 -c 1 -U 10.0.0.13
ARPING 10.0.0.13 from 10.0.0.13 eth0
Sent 1 probes (1 broadcast(s))
Received 0 response(s)
yum -y install keepalived
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf
global_defs {
router_id LVS_03
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.13/24
}
}
virtual_server 10.0.0.13 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
real_server 10.0.0.17 80 {
weight 1
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 10.0.0.18 80 {
weight 1
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
[root@lb02 ~]# cat /etc/keepalived/keepalived.conf
global_defs {
router_id LVS_04
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.13/24
}
}
virtual_server 10.0.0.13 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
real_server 10.0.0.17 80 {
weight 1
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 10.0.0.18 80 {
weight 1
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
systemctl start keepalived.service
标签:LVS
原文地址:http://blog.51cto.com/13520772/2089026