开发语言:

服务器端:在内核中实现,无守护程序

客户端:一般是cli界面下的ipvsadm命令

相关包:ipvsadm

在LVS框架中,提供了含有三种IP负载均衡技术的IP虚拟服务器软件IPVS、基于内容请求分发的内核Layer-7交换机KTCPVS和集群管理软件。可以利用LVS框架实现高可伸缩的、高可用的Web、Cache、Mail和Media等网络服务;在此基础上,可以开发支持庞大用户数的、高可伸缩的、高可用的电子商务应用。
VS/NAT技术(Virtual Server via Network Address Translation),大多数商品化的IP负载均衡调度器产品都是使用此方法,如Cisco的LocalDirector、F5的Big/IP和 Alteon的ACEDirector。在分析VS/NAT的缺点和网络服务的非对称性的基础上,我们提出通过IP隧道实现虚拟服务器的方法VS/TUN (Virtual Server via IP Tunneling),和通过直接路由实现虚拟服务器的方法VS/DR(Virtual Server via Direct Routing),它们可以极大地提高系统的伸缩性。所以,IPVS软件实现了这三种IP负载均衡技术,

检查内核是否支持lvs的ipvs模块
[root@com1 ~]# modprobe -l|grep ipvs
kernel/net/netfilter/ipvs/ip_vs.ko
kernel/net/netfilter/ipvs/ip_vs_rr.ko
kernel/net/netfilter/ipvs/ip_vs_wrr.ko
kernel/net/netfilter/ipvs/ip_vs_lc.ko
kernel/net/netfilter/ipvs/ip_vs_wlc.ko
kernel/net/netfilter/ipvs/ip_vs_lblc.ko
kernel/net/netfilter/ipvs/ip_vs_lblcr.ko
kernel/net/netfilter/ipvs/ip_vs_dh.ko
kernel/net/netfilter/ipvs/ip_vs_sh.ko
kernel/net/netfilter/ipvs/ip_vs_sed.ko
kernel/net/netfilter/ipvs/ip_vs_nq.ko
kernel/net/netfilter/ipvs/ip_vs_ftp.ko
可以看到内核默认支持ipvs模块,下来安装ipvs管理软件
[root@com1 ~]# yum install ipvsadm

1.NAT方式:
NAT配置方式最简单,只需要在LVS主机上配置就可以了,如下例子:
设置VIP主机:
ipvsadm -A -t 202.103.106.5:80 -s wlc
ipvsadm -A -t 202.103.106.5:21 -s wrr
ipvsadm -a -t 202.103.106.5:80 -r 172.16.0.2:80 -m
ipvsadm -a -t 202.103.106.5:80 -r 172.16.0.3:8000 -m -w 2
ipvsadm -a -t 202.103.106.5:21 -r 172.16.0.2:21 -m

2.TUN方式:
对LVS主机设置:
设置VIP主机:
ipvsadm -A -t 172.26.20.110:23 -s wlc
ipvsadm -a -t 172.26.20.110:23 -r 172.26.20.112 -i

对每台real主机的设置:
echo 1 > /proc/sys/net/ipv4/ip_forward
#加载ipip模块
modprobe ipip
ifconfig tunl0 0.0.0.0 up
echo 1 > /proc/sys/net/ipv4/conf/all/hidden
echo 1 > /proc/sys/net/ipv4/conf/tunl0/hidden
ifconfig tunl0 172.26.20.110 netmask 255.255.255.255 broadcast 172.26.20.110 up

ipvsadm配置
A 堡垒 eth0 192.168.3.187/24 外网IP
eth1 192.168.200.1/24 实验内网ip
B eth0 192.168.200.10/24
C eth0 192.168.200.20/24
下面是对堡垒机的配置
重定向几个文件
#echo "1" >/proc/sys/net/ipv4/ip_forward
#echo "0" >/proc/sys/net/ipv4/conf/all/send_redirects
#echo "0" >/proc/sys/net/ipv4/conf/default/send_redirects
#echo "0" >/proc/sys/net/ipv4/conf/eth0/send_redirects
#echo "0" >/proc/sys/net/ipv4/conf/eth1/send_redirects

ipvsadm -C
-C 清除表中所有的记录
ipvsadm -A -t 192.168.3.187:80 -s rr
-A --add-service在服务器列表中新添加一条新的虚拟服务器记录
-t 表示为tcp服务
-u 表示为udp服务
-s --scheduler 使用的调度算法, rr | wrr | lc | wlc | lblb | lblcr | dh | sh | sed | nq 默认调度算法是 wlc
ipvsadm -a -t 192.168.3.187:80 -r 192.168.200.10:80 -m -w 1
-a --add-server 在服务器表中添加一条新的真实主机记录
-t --tcp-service 说明虚拟服务器提供tcp服务
-u --udp-service 说明虚拟服务器提供udp服务
-r --real-server 真实服务器地址
-m --masquerading 指定LVS工作模式为NAT模式
-w --weight 真实服务器的权值
-g --gatewaying 指定LVS工作模式为直接路由器模式(也是LVS默认的模式)
-i --ipip 指定LVS的工作模式为隧道模式
-p 会话保持时间,定义流量呗转到同一个realserver的会话存留时间
调度算法
rr 轮询 round robin, wrr 加强轮询 weighted round robin,
新的请求被轮流分配到RealServer上,它假设服务器处理性能都相同,不管服务器当前的连接数和响应速度,不适合服务器性能不同的集群,这会导致服务器间的负载不平衡
dh 目的地址散列调度 destination hashing,针对IP地址的负载,

The command has two basic formats for execution:
ipvsadm command [protocol] service-address [scheduling-method] [persistence options]
ipvsadm command [protocol] service-address server-address [packet-forwarding-method] [weight options]

The  first  format  manipulates a virtual service and the algorithm for assigning service requests to real servers. Optionally, a persistent timeout and network mask for the granularity of a persistent service may be specified. The second format manipulates a real server that is associated with an exist-ing  virtual  service. When specifying a real server, the packet-forwarding method and the weight of the real server, relative to other real servers for the virtual service, may be specified, otherwise defaults will be used.

three packet-forwarding methods (NAT, tunneling, and direct routing), and eight load balancing algorithms (round robin, weighted round robin, least-connection, weighted least-connection, locality-based least-con-nection, locality-based least-connection with replication, destination-hashing, and source-hashing).
  --gatewaying       -g                     gatewaying (direct routing) (default)
  --ipip               -i                      ipip encapsulation (tunneling)
  --masquerading     -m                    masquerading (NAT)
  --scheduler          -s scheduler      one of rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,the default scheduler is wlc.
  --list                     -L|-l                  list the table
  --connection              -c                       output of current IPVS connections
  --numeric                -n                       numeric output of addresses and ports

-p --persistent [timeout] 持久稳固的服务。这个选项的意思是来自同一个客户的多次请求,将被同一台真实的服务器处理
-g --gatewaying 指定LVS 的工作模式为直接路由模式(也是LVS 默认的模式)

lvs无故障隔离以及失败切换框架,要实现这个功能,需要配合keepalived等工具实现。
DR方式适合所有的RealServer同一网段下,即接在同一个交换机上.
TUNL方式就对于RealServer的位置可以任意了,完全可以跨地域、空间,只要系统支持Tunnel就可以,方便以后扩充的话直接Tunl方式即可

1、InActConn并不代表错误连接,它是指不活跃连接(Inactive Connections),
我们将处于TCP ESTABLISH状态以外的连接都称为不活跃连接,例如处于SYN_RECV状态的连接,处于TIME_WAIT状态的连接等。

[root@210-lvs ~]# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.2.215:ndmp rr-> 192.168.2.109:ndmp           Route   1      447        2-> 192.168.2.221:ndmp           Route   1      512        7
[root@210-lvs ~]# ipvsadm -l -cn|grep -v "EST"
IPVS connection entries
pro expire state       source             virtual            destination
TCP 00:41  SYN_RECV    223.104.27.91:33407 192.168.2.215:10000 192.168.2.109:10000
TCP 01:16  FIN_WAIT    58.83.209.187:57555 192.168.2.215:10000 192.168.2.221:10000
TCP 00:41  SYN_RECV    117.136.25.196:19271 192.168.2.215:10000 192.168.2.221:10000
TCP 01:55  FIN_WAIT    58.83.209.186:36565 192.168.2.215:10000 192.168.2.221:10000
TCP 00:01  CLOSE       117.136.25.143:30661 192.168.2.215:10000 192.168.2.221:10000
TCP 00:03  CLOSE       117.136.25.139:45468 192.168.2.215:10000 192.168.2.221:10000
TCP 01:02  FIN_WAIT    58.83.209.185:28186 192.168.2.215:10000 192.168.2.221:10000
TCP 01:41  FIN_WAIT    58.83.209.188:11868 192.168.2.215:10000 192.168.2.109:10000
TCP 01:30  FIN_WAIT    58.83.209.180:12424 192.168.2.215:10000 192.168.2.221:10000

2、用四个参数来关闭arp查询响应请求:
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

在LVS方案中,虚拟ip地址与普通网络接口大大不同,这点需要特别注意。
虚拟ip地址的广播地址是它本身,子网掩码是255.255.255.255。 为什么要这样呢?因为有若干机器要使用同一个ip地址,
用本身做广播地址和把子网掩码设成4个255就不会造成ip地址冲突了,否则lvs将不能正常转发访问请求。

假如两台VS之间使用的互备关系,那么当一台VS接管LVS服务时,可能会网络不通,这时因为路由器的MAC缓存表里关于vip这个地址的MAC地 址还是被替换的VS的MAC,有两种解决方法,一种是修改新VS的MAC地址,另一种是使用send_arp 命令(piranha软件包里带的一个小工具) 格式如下:
send_arp:
send_arp [-i dev] src_ip_addr src_hw_addr targ_ip_addr tar_hw_addr
这个命令不一定非要在VS上执行,只+要在同一VLAN即可。
/sbin/arping -f -q -c 5 -w 5 -I eth0 -s $WEB_VIP -U $GW

[root@com1 ~]# ipvsadm -l        
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.2.215:ndmp rr
  -> com1:ndmp                    Local   1      1455       1         
  -> com2:ndmp                    Route   1      1605       0         
[root@com1 ~]# ipvsadm -l --rate
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port                 CPS    InPPS   OutPPS    InBPS   OutBPS
  -> RemoteAddress:Port
TCP  192.168.2.215:ndmp                  0      490        0    41618        0
  -> com1:ndmp                           0      245        0    20970        0
  -> com2:ndmp                           0      246        0    20648        0
[root@com1 ~]# ipvsadm -l --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  192.168.2.215:ndmp              28421  1971291        0  142348K        0
  -> com1:ndmp                       14210  1044997        0 77354965        0
  -> com2:ndmp                       14211   926294        0 64993846        0

[root@com1 ~]# ipvsadm -l --thresholds
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port            Uthreshold Lthreshold ActiveConn InActConn
  -> RemoteAddress:Port
TCP  192.168.2.215:ndmp rr
  -> com1:ndmp                    0          0          386        335       
  -> com2:ndmp                    0          0          551        313       
[root@com1 ~]# ipvsadm -l --persistent-conn
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port            Weight    PersistConn ActiveConn InActConn
  -> RemoteAddress:Port
TCP  192.168.2.215:ndmp rr
  -> com1:ndmp                    1         0           389        335       
  -> com2:ndmp                    1         0           553        313

[root@com1 ~]# ipvsadm -l -c -n
IPVS connection entries
pro expire state       source             virtual            destination
TCP 14:12  ESTABLISHED 117.35.159.6:13589 192.168.2.215:ndmp com2:ndmp
TCP 02:52  ESTABLISHED 117.35.159.6:9407  192.168.2.215:ndmp com1:ndmp
TCP 14:12  ESTABLISHED 117.35.159.6:13684 192.168.2.215:ndmp com1:ndmp
TCP 03:14  ESTABLISHED 117.35.159.6:7976  192.168.2.215:ndmp com1:ndmp
TCP 09:26  ESTABLISHED 117.35.159.6:23373 192.168.2.215:ndmp com2:ndmp

TCP 01:15  ESTABLISHED 117.35.159.6:7415  192.168.2.215:10000 192.168.2.101:10000
TCP 07:02  ESTABLISHED 117.35.159.6:23713 192.168.2.215:10000 192.168.2.100:10000
TCP 11:59  ESTABLISHED 117.35.159.6:16217 192.168.2.215:10000 192.168.2.101:10000
TCP 11:56  ESTABLISHED 117.35.159.6:16490 192.168.2.215:10000 192.168.2.100:10000
TCP 07:04  ESTABLISHED 117.35.159.6:2617  192.168.2.215:10000 192.168.2.100:10000
TCP 11:55  ESTABLISHED 117.35.159.6:14924 192.168.2.215:10000 192.168.2.100:10000
TCP 07:01  ESTABLISHED 117.35.159.6:25286 192.168.2.215:10000 192.168.2.101:10000

LVS大量快速并发连接后报Connection refused的问题

由 firestorm 在 周二, 2011-09-06 18:47 提交 LVS集群

大致环境:RedHat 4.4, 千兆网,两个结点作为LVS的master与slaver,使用IP tunnel模式,同时用又作real server,大概6,7个real server。
LVS服务器已经进行常规的高性能服务器优化,包括LVS APP的相关配置、tcp 的TIME_WAIT快速回收与重用等等。
使用2个客户端服务器连接LVS的虚拟IP,每个客户端启动8个线程连接LVS集群上特定应用的端口,连接并进行简单数据交互后close,发起和关闭连接比较频繁,每个线程大概都是几十次/秒。

情况如下:
1. 大概跑2,3个小时,客户端总连接次数大概数百万量级后,会发生服务连接虚拟IP 报Connection refused的情况,有时候是2个客户端节点同时拒绝连接,有时候一个被拒,一个可以,但是一段时间后也被拒绝。
2. 连接被拒后,大概等待10分钟左右又可以成功建立连接并继续操作;
3. 连接被拒绝后如果再用第三个客户端节点来连接虚拟IP,可以成功并并发执行;
4. 连接被拒节点如果直接连真实服务器的实际地址与对应端口,可以连接并操作;
5. 连接被拒绝后重启客户端节点的网络 service network restart 可以恢复对LVS的连接;
6. 重启LVS服务可以重新连接。
7. 由于客户端也做过TIME_WAIT的tcp_tw_reuse、tcp_tw_recycle的优化,所以用netstat和ss -s等命令看,服务器与客户端各项数值都不是很大;
8. /proc/sys/fs/file-max等数值在服务端客户端都设置的比较大,服务端设置的是100万,而且在出问题时看/proc/sys/fs/file-nr 时也就一千多。
9. 超时设置是:Timeout (tcp tcpfin udp): 36000 120 300
10. 使用ipvsadm命令看activeConn不是很大,大概每个real server也就3、4左右,inactive连接时高时低,大概3000-8000之间,平均5000吧。
11. lsof看服务端进程没有打开句柄超限的(考虑单进程ulimit -n 1024的限制)

权重问题:当lvs配置文件lvs-dr.sh改变权重以及keepalived配置文件keepalived.conf修改权重后,哪个文件重新启动,哪个文件的权重生效。同时权重在master和backup上面可以设置不同。
当 算法是rr的时候,权重没有作用,但是当算法是wlc和wrr的时候,必须设置权重,可以根据服务器的性能和配置,来确定权重的大小,当权重大的时 候,lvs调度的服务也就多,同时权重高的服务器先收到链接。当小的时候,lvs调度的比较少。当权重为0的时候,表示服务器不可用,

linux服务之lvs相关推荐

  1. linux服务器之LVS、Nginx和HAProxy负载均衡器的对比

    LVS特点: 1.抗负载能力强,使用IP负载均衡技术,只做分发,所以LVS本身并没有多少流量产生: 2.稳定性.可靠性好,自身有完美的热备方案:(如:LVS+Keepalived) 3.应用范围比较广 ...

  2. 在Linux下用LVS和Ipvsadm做Web负载均衡

    在Linux下用LVS和Ipvsadm做Web负载均衡,如果想对负载均衡有一个全面.宏观上的理解,可以看:服务器负载均衡技术的原理及应用. 一.简介及环境配置 在Linux下用 LVS和Ipvsadm ...

  3. Linux负载均衡Linux Virtual Server (lvs) 内核自带的负载均衡器

    目录 lvs 转发模式 调度算法 lvs配置示例 LVS缺点 Haproxy Nginx 自研负载均衡 Google Maglev UCloud Vortex 参考文档 lvs Linux Virtu ...

  4. Linux Virtual Server LVS Load Balancing

    简介: Linux虚拟服务器(Linux Virtual Server. LVS),是一个由章文松开发的自由软件.利用KVS可以实现高可用的.可伸缩缩的Web, Mail, Cache和Medial等 ...

  5. windows 下frp服务启动_内网穿透frp linux服务端搭建和windows客户端使用

    一.Linux 服务端搭建 1.下载安装 wget --no-check-certificate https://raw.githubusercontent.com/clangcn/onekey-in ...

  6. 使用putty远程linux服务

    由于之前已经安装了Centos系统,可以进行操作或配置服务器了,但是有时候由于服务器在机房或者其他地方,我们需要通过远程的方式连接过去操作,接下来我们用putty来连接linux服务,并做一些简单的设 ...

  7. Linux服务配置:Vsftp的基本配置[转]

    Linux服务配置:Vsftp的基本配置 2009-05-12 15:16:10 标签:服务 Vsftp Linux 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明 ...

  8. Linux服务笔记之二:SSH远程登录

    上次,写了用传统的telnet方法来远程管理服务器.今天,写下如何用SSH(Secure SHELL)协议来远程管理服务器.优点:因为SSH基于成熟的公钥加密体系,所以传输的数据会进行加密,保证数据在 ...

  9. linux服务之nagios

    linux服务之nagios 转载于:https://blog.51cto.com/nowsafe/1390814

最新文章

  1. 7.1.2 定义改进的Sales_date类
  2. linux基础学习(十)
  3. [XSY] 计数(DP,NTT,分治)
  4. [记录] --- safari浏览器对于yyyy-MM的坑
  5. 如何查看python的版本号
  6. PyTorch 模型训练实用教程(附代码)
  7. 各国“未雨绸缪”致网络安全陷入困境 安全防御诱发“防御性入侵”
  8. 计算机毕业设计安卓旅游APP源码
  9. 如何为您的客户创造价值?
  10. 详解交换机端口级联连接方式
  11. XyplayerX4.0 影视解析源码+解析接口+安装步骤
  12. 1、synchronized、Lock、volatile
  13. [高数][高昆轮][高等数学上][第一章-函数与极限]01.映射与极限
  14. 贸易大时代:代理IP助力企业出海
  15. 构建 Darknet 分类器 (Tiny Darknet) 训练数据集 (color recognition 颜色识别/color classification 颜色分类)
  16. 2021年安全员-C证-专职安全生产管理人员(广东省)考试APP及安全员-C证-专职安全生产管理人员(广东省)证考试
  17. 【matlab应用】:生成老电影海报
  18. 计算机30秒自动更换的桌面软件,电脑壁纸自动更换(SyncWall)
  19. 跨国药企在中国 | 赛诺菲来优时胰岛素生产基地落地北京;拜耳启动处方药北京工厂产能提升项目...
  20. office2019下载

热门文章

  1. Rigetti Computing完成SPAC交易,在纳斯达克上市
  2. 驱动ST7565显示汉字以及画点
  3. 开源的线上商城项目收集
  4. Container [pid=108284,containerID=container_e19_1533108188813_12125_01_000002] is running beyond vir
  5. 利用python播放本地视频文件
  6. 【难得偷闲动动笔】开发问题记录(二):Extraneous non-props attributes
  7. 三消游戏查找算法的原理和实现
  8. java识别验证码_Java使用test4j识别验证码
  9. Web 证书和IE浏览器的关系
  10. 【ROS笔记本】ROS使用节点句柄nh(“~“)和nh的区别:发布的话题不同