lvs

1、什么是LVS

LVS是Linux Virtual Server的简写,以为Linux虚拟服务器,是一个虚拟服务器集群,其具有很好的可伸缩性、可靠性、可管理性。LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。下图是一个简单的LVS拓扑

lvs

2、LVS集群的术语

VS:Virtual Server
RS:Real Server
CIP:Client IP
VIP:Virtual Server IP
RIP:Real Server IP
DIP:Director IP

3、LVS集群的类型

lvs-nat:修改请求报文的目标IP

通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。

也就是多目标ip的DNAT机制,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发;lvs-nat有以下特性:
(1)RIP和DIP必须在同一个IP网络,且应该使用私网地址;RS的网关要指向DIP;
(2)请求报文和响应报文都必须应有Director转发;Director易于成为系统瓶颈;
(3)支持端口映射,可修改请求报文的目标PORT;
(4)VS必须是Linux系统,RS可以是任意系统;

lvs-dr:操作封装新的mac地址(直接路由)

VS/DR通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同VS/TUN技术一样,VS/DR技术可极大地 提高集群系统的伸缩性。这种方法没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连 在同一物理网段上。

Director和各RS都得配置使用VIP;
(1)确保前段路由器将目标IP为VIP 的请求报文发往Director;
    (a)在前段网关做静态绑定;
    (b)在RS上使用arptables;
    (c)在RS上修改内核参数以限制ARP通告及应答级别;
        arp_announce
        arp_ignore
(2)RS的DIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一个IP网络,RIP的网关不能指向DIP,以确保响应报文不会经由Director
(3)RS跟Director要在同一个物理网络
(4)请求报文要经由Director,但响应不能经由Director,而是由RS直接发往Client
(5)不支持端口映射

lvs-tun:在原请求ip报文之外新加一个ip首部(IP隧道)

采用NAT技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。为了解决这个问题,调度器把请求报 文通过IP隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务应答比请求报文大许多,采用 VS/TUN技术后,集群系统的最大吞吐量可以提高10倍。

(1)DIP , VIP , RIP都应该是公网ip
(2)RS的网关不能,也不可能指向DIP;
(3)请求报文要经由Director,但响应不能经由Director;
(4)不支持端口映射;
(5)RS的OS得支持隧道功能;

lvs-fullnat:修改请求报文的源IP和目标IP

通过同时修改请求报文的源ip地址和目标IP地址进行转发;

(1)VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不指向DIP;
(2)RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往client;
(3)请求和响应报文都经由Director;
(4)支持端口映射;

4、ipvs调度方法

针对不同的网络服务需求和服务器配置,调度器可以分为静态调度和动态调度

(1)静态调度:根据调度算法本身进行调度
    RR:roundrobin,轮询:调度器通过"轮询"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。

    WRR:weighted RR,加权轮询:调度器通过"加权轮询"调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

    SH:source hashing,源地址哈希:将来自与同一个ip地址的请求始终发往第一次挑中的RS,从实现会话绑定;保持会话

    DH:destination hashing,目标地址哈希:将发往同一个目标地址 的请求始始终转发至第一次挑中的RS;

(2)动态调度:根据每台RS当前的负载状态及调度算法进行调度
    LC : least connections 最小连接:调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载。

    WLC : weighted LC 加权最小连接 (默认的,值越大权重越大):在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。   
    SED:shortest expection delay 最短期望延迟
    NQ : Never Queue
    LBLC : Locality-Based LC,动态的DH算法:"基于局部性的最少链接" 调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器 是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务 器,将请求发送到该服务器。

    LBLCR:LBLC with  Replication,带复制功能的LBLC:"带复制的基于局部性最少链接"调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个 目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务 器组,按"最小连接"原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按"最小连接"原则从这个集群中选出一 台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的 程度。

5、ipvsadm命令使用

ipvsadm是Linux虚拟服务器的管理工具,系统默认没有安装,需要执行yum install ipvsadm命令进行安装

(1)管理集群服务

增加:ipvsadm -A -t|u|f service-address [-s scheduler] -p [timeout]
    [root@localhost ~]# ipvsadm -A -t 10.1.0.5 -s rr
修改:ipvsadm -E -t|u|f service-address [-s scheduler] -p [timeout]
删除: ipvsadm -d -t|u|f service-address 
    -t:tcp协议端口,表示VIP是tcp端口
    -u:udp协议端口,表示VIP是udp端口
    -f:firewall mark,是一个数字

(2)管理集群上的RS

增加:ipvsadm -a -t|u|f service-address -r server-address  [-g|i|m] [-w weight]
修改:ipvsadm e -t|u|f service-address -r server-address  [-g|i|m] [-w weight]
删除:ipvsadm -d -t|u|f service-address -r server-address
    -g:gateway,lvs-dr类型
    -i:ipip,lvs-tun类型
    -m:masquerade,lvs-nat类型

(3)清空定义的所有内容

ipvsadm -C

(4)查看定义的集群

ipvsadm -L | l [options]
    --numeric  -n  numeric output of addresses and ports
    --exact  expand numbers (display exact values)
    --connection   -c  output of current IPVS connections
    --stats  output of statistics information 统计数据
    --rate  output of rate information 速率

lvs

(5)保存和重载定义的集群

ipvsadm -S = ipvsadm-save
ipvsadm -R = ipvsadm-restore

6、lvs-nat的拓扑及实现配置

lvs

(1)客户端的配置

1)配置网卡

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno33554984

BOOTPROTO=none
NAME=eno33554984
DEVICE=eno33554984
ONBOOT=yes
IPADDR=10.1.249.114
NETMASK=255.255.0.0

2)测试

lvs

(2)director的配置(注意防火墙和selinux的影响)

1)配置网卡

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736

BOOTPROTO=none
NAME=eno33554984
DEVICE=eno33554984
ONBOOT=yes
IPADDR=10.1.252.55
NETMASK=255.255.0.0
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno33554984 

DEVICE=eno33554984
HWADDR=00:0c:29:0e:27:d7
IPADDR=192.168.116.254
NETMASK=255.255.255.0
BOOTPROTO=none
ONBOOT=yes

2)ipvs的配置

[root@localhost ~]# yum -y install ipvsadm
[root@localhost ~]# ipvsadm -A -t 10.1.252.55:80 -s rr
[root@localhost ~]# ipvsadm -a -t 10.1.252.55:80 -r 192.168.116.6 -m 
[root@localhost ~]# ipvsadm -a -t 10.1.252.55:80 -r 192.168.116.7 -m 
[root@localhost ~]# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.1.252.55:http rr
  -> 192.168.116.6:http           Masq    1      0          0         
  -> 192.168.116.7:http           Masq    1      0          0

3)开启转发功能

[root@localhost ~]# echo  1 > /proc/sys/net/ipv4/ip_forward

(3)web server1的配置(centos 6)

[root@localhost ~]# date  两台服务器的时间需要同步
Sat Oct 29 10:08:36 CST 2016

1)配置网卡

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1 
网卡名和MAC地址每台虚拟机都不同的,可使用 ip a 命令查看再设置
DEVICE=eth1
HWADDR=00:0c:29:9f:12:63 
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.116.6
NETMASK=255.255.255.0
GATEWAY=192.168.116.254

2)安装httpd

[root@localhost ~]# yum -y install httpd
[root@localhost ~]# vim /var/www/html/index.html
    <h1>real server c6</h1> 真实生产中通过同步机制使得两台服务器的内容一样,此实验故意以不同页面区分
[root@localhost ~]# service httpd start
[root@localhost ~]# curl 192.168.116.6
    <h1>real server c6</h1>

(4)web server2的配置 (centos 7)

[root@localhost ~]# date
Sat Oct 29 10:08:36 CST 2016

1)配置网卡

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno33554984 

DEVICE=eno33554984
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.116.7
NETMASK=255.255.255.0
GATEWAY=192.168.116.254
HWADDR=00:0c:29:e8:7c:c6

2)安装httpd

[root@localhost ~]# yum -y install httpd
[root@localhost ~]# vim /var/www/html/index.html
    <h1>real server c7</h1>
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# curl 192.168.116.7
    <h1>real server c7</h1>

7、lvs-dr的拓扑及实现配置

dr拓扑.png

(1)客户端配置

1)网卡配置

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno33554984

BOOTPROTO=none
NAME=eno33554984
DEVICE=eno33554984
ONBOOT=yes
IPADDR=192.168.116.114
NETMASK=255.255.255.0

2)测试

dr.jpg

(2)director 的配置

1)网卡配置

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736 
DEVICE=eno16777736
HWADDR= 00:0c:29:0e:27:cd
IPADDR=192.168.116.1
NETMASK=255.255.255.0
BOOTPROTO=none
ONBOOT=yes

先重启网络服务再配置下面lo0网络
[root@localhost ~]# ifconfig eno16777736:0 192.168.116.254 netmask 255.255.255.255 broadcast 192.168.116.254 up

2)ipvs的配置

[root@localhost ~]# yum -y install ipvsadm
[root@localhost ~]# ipvsadm -A -t 192.168.116.254:80 -s wrr
[root@localhost ~]# ipvsadm -a -t 192.168.116.254:80 -r 192.168.116.6 -g -w 1
[root@localhost ~]# ipvsadm -a -t 192.168.116.254:80 -r 192.168.116.7 -g -w 2

(3)web server1的配置

1)修改内核参数来限制arp响应和通告

先限制通告再设置ip
[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

2)网卡配置

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1 
网卡名和MAC地址每台虚拟机都不同的,可使用 ip a 命令查看再设置
DEVICE=eth1
HWADDR=00:0c:29:9f:12:63 
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.116.6
NETMASK=255.255.255.0

先重启网络服务再配置下面lo0网络
[root@localhost ~]# ifconfig lo:0 192.168.116.254 netmask 255.255.255.255 broadcast 192.168.116.254 up
[root@localhost ~]# route add -host 192.168.116.254 dev lo:0

3)安装httpd

[root@localhost ~]# yum -y install httpd
[root@localhost ~]# vim /var/www/html/index.html
    <h1>real server c6</h1> 真实生产中通过同步机制使得两台服务器的内容一样,此实验故意以不同页面区分
[root@localhost ~]# service httpd start
[root@localhost ~]# curl 192.168.116.6
    <h1>real server c6</h1>

(4)web server2的配置

1)修改内核参数来限制arp响应和通告

先限制通告再设置ip
[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

2)网卡配置

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno33554984 

DEVICE=eno33554984
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.116.7
NETMASK=255.255.255.0
HWADDR=00:0c:29:e8:7c:c6

先重启网络服务再配置下面lo0网络
[root@localhost ~]# ifconfig lo:0 192.168.116.254 netmask 255.255.255.255 broadcast 192.168.116.254 up  (临时设置网卡,重启网络服务时效)
[root@localhost ~]# route add -host 192.168.116.254 dev lo:0

3)安装httpd

[root@localhost ~]# yum -y install httpd
[root@localhost ~]# vim /var/www/html/index.html
    <h1>real server c7</h1>
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# curl 192.168.116.7
    <h1>real server c7</h1>

原创文章,作者:pao,如若转载,请注明出处:http://www.178linux.com/55493

(0)
paopao
上一篇 2016-10-29
下一篇 2016-10-29

相关推荐

  • ansible

    运维工具介绍 Ansible Ansible优点:  Agentless       (去中心化)  Stupied Simple (上手简单,学习曲线平滑)  SSH by default (安全,无需安装客户端)  YAML no code,定制剧本 (语法简单,维护方便) 自动工具衍…

    Linux干货 2017-05-23
  • 运维练习题

     1、简述TCP三次握手四次挥手过程及各过程中客户端和服务器端的状态。TCP三次握手:客户端向服务器发送SYN包,客户端进入syn_SEND状态服务端收到客户端的发送的包返回ACK+SYN包,服务器端进入SYN_RECV状态客户端收到服务器端返回的包再发ACK包,客户端进入ESTABLISHED状态,服务器收到包也进入ESTABLISHED状态客户…

    Linux干货 2016-06-12
  • Linux 文 本 处 理 工 具

    Linux 文 本 处 理 工 具 一.学习大纲: ◎各种文本工具来查看、分析、统计文本文件 文件内容查看工具:cat, tac,rev,more,less 文件截取:head和tail 按列抽取:cut,paste 分析文本的工具:wc , sort , uniq,diff和patch 命令使用练习题 ◎文本过滤与处理工具: grep与正则表达式…

    Linux干货 2016-08-05
  • iptables的使用

    iptables         firewall:隔离工具;Packets Filter Firewall;工作于主机或网络的边缘,对经由的报文根据预先定义的规则(匹配条件)进行检测,对于能够被规则匹配到的报文实行某预定义的处理机制的一条组件; 硬件防火墙:在硬件级别实现部分顾虑功能;另…

    Linux干货 2016-10-29
  • 马哥教育网络班21期-第七周课程练习

    第七周作业 1、创建一个10G分区,并格式为ext4文件系统; [root@qq ~]# fdisk /dev/sdb         #使用fdisk命令进行分区; Device contains neither&nb…

    Linux干货 2016-08-08
  • 系统之锹sysdig:Linux服务器监控和排障利器

    当你需要追踪某个进程产生和接收的系统调用时,首先浮现在你脑海中的是什么?你可能会想到strace,那么你是对的。你会使用什么样的命令行工具来监控原始网络通信呢?如果你想到了tcpdump,你又作出了一个极佳的选择。而如果你碰到必须追踪打开的文件(在Unix意义上:一切皆文件)的需求,可能你会使用lsof。 strace、tcpdump以及lsof,确实是些伟…

    Linux干货 2015-02-09

评论列表(1条)

  • 马哥教育
    马哥教育 2016-10-30 20:45

    总结的很完整,图文并茂,继续加油