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

相关推荐

  • 第三章 Linux文件系统初步

    用户界面:      可分为两种GUI和CLI         GUI(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。 GNOME(英语发音:/ɡˈnoʊm/或英语发音:/…

    Linux干货 2016-06-03
  • 马哥教育网络班19期+第七周课程练习

    1、创建一个10G分区,并格式为ext4文件系统;   (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;         mke2fs -b 2048 -m 2 -L 'MYDATA' -o defau…

    Linux干货 2016-06-21
  • 高级变量-有类型变量

    一.高级变量用法– 有类型变量   Shell 变量一般是无类型的,但是bash Shell 提供了declare和 typeset 两个命令用于指定变量的类型,两个命令是等价的 declare [ 选项]  变量名 -r  将变量设置为只读属性 -i  将变量定义为整型数 -a  将变量定义为数…

    Linux干货 2016-11-24
  • 计算机组成及功能简介

    计算机(computer)       当今它已经走进千家万户,应用在各个领域,没有用过计算机的朋友应该很少了吧?但是,你真正了解计算机是什么吗?(我也是刚刚了解的,(*^__^*)嘻嘻……)那么,接下来,让我们一起探究一下它的具体构造吧!       所谓的计算机就是…

    Linux干货 2016-10-25
  • 第一周学习内容

    1、LINUX的三大主流版本:debian slackware redhat 2、一个完整的操作系统是由内核+运行在内核之上的应用程序组成。      LINUX操作系统是由linux内核+GNU开源组织编写的应用程序组成(GNU/Linux) 3、CPU架构:X86(X64)、摩托罗拉的m68k、arm、IBM的POWER(性…

    Linux干货 2016-12-03
  • keepalived+haproxy实现wordpress的动静分离及负载均衡、高可用

    实验目的:使用keepalived+haproxy实现wordpress的动静分离及负载均衡、高可用 实验要求:客户端请求的动态资源代理至动态资源web组,请求的静态代理至静态资源web组,启用统计面信息并只对特定启用统计面管理功能,启用https安全连接 系统环境:CentOS 7.3、关闭selinux和清除iptables规则,A和B主机各需要两块网卡…

    2017-05-18

评论列表(1条)

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

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