LVS 基础知识总结

基础概念

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

可伸缩性
可伸缩网络服务是指网络服务能随着用户数目的增长而扩展其性能,如在系统中增加服务器、内存或硬盘等;整个系统很容易被扩展,无需重新设置整个系统,无需中断服务。换句话说,系统管理员扩展系统的操作对最终用户是透明的,他们不会知道系统的改变。

网络服务的需求
* 可伸缩性(Scalability),当服务的负载增长时,系统能被扩展来满足需求,且不降低服务质量。
* 高可用性(Availability),尽管部分硬件和软件会发生故障,整个系统的服务必须是每天24小时每星期7天可用的。
* 可管理性(Manageability),整个系统可能在物理上很大,但应该容易管理。
* 价格有效性(Cost-effectiveness),整个系统实现是经济的、易支付的

单服务器显然不能处理不断增长的负载,服务器升级方法有下列不足:
一是升级过程繁琐,机器切换会使服务暂时中断,并造成原有计算资源的浪费;
二是越往高端的服务器,所花费的代价越大;
三是一旦该服务器或应用软件失效,会导致整个服务的中断。

针对上述需求,我们给出了基于IP层和基于内容请求分发的负载平衡调度解决方法,并在Linux内核中实现了这些方法,将一组服务器构成一个实现可伸缩的、高可用网络服务的服务器集群,我们称之为Linux虚拟服务器(Linux Virtual Server)

LVS结构
负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址上的。它可以是用IP负载均衡技术的负载调度器,也可以是基于内容请求分发的负载调度器,还可以是两者的结合。
服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。
后端存储(backend storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。

IP负载均衡技术中,需要服务器池拥有相同的内容提供相同的服务。当客户请求到达时,调度器只根据负载情况从服务器池中选出一个服务器,将该请求转发到 选出的服务器,并记录这个调度;当这个请求的其他报文到达,也会被转发到前面选出的服务器。在基于内容请求分发技术中,服务器可以提供不同的服务,当客户 请求到达时,调度器可根据请求的内容和服务器的情况选择服务器执行请求。因为所有的操作都是在操作系统核心空间中将完成的,它的调度开销很小,所以它具有 很高的吞吐率。

后端存储通常用容错的分布式文件系统,如AFS、GFS、Coda和Intermezzo等。分布式文件系统为各服务器提供共享的存储区,它们访问分布式 文件系统就像访问本地文件系统一样。同时,分布式文件系统提供良好的伸缩性和可用性。然而,当不同服务器上的应用程序同时访问分布式文件系统上同一资源 时,应用程序的访问冲突需要消解才能使得资源处于一致状态。这需要一个分布式锁管理器(Distributed Lock Manager),它可能是分布式文件系统内部提供的,也可能是外部的。开发者在写应用程序时,可以使用分布式锁管理器来保证应用程序在不同结点上并发访 问的一致性。

**双机集群(HA)**HA(High Available), 高可用性群集,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备用节点。通常把正在执行业务的称为活动节点,而作为活动 节点的一个备份的则称为备用节点。当活动节点出现问题,导致正在运行的业务(任务)不能正常运行时,备用节点此时就会侦测到,并立即接续活动节点来执行业 务。从而实现业务的不中断或短暂中断
Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web 服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人 工做的只是修复故障的web服务器。

LVS DR的基本原理

1.client向目标VIP(virtual IP)发送请求
IP包形式为

Src macDes macSrc IPDes IP
client macdr macclient IPVIP

2.director接收到包,通过算法策略选择一台Real Server
这里是通过映射表进行轮巡选择的,选好一台Real Server后,将包发过去,此时IP包为。

Src macDes macSrc IPDes IP
client macRs macclient IPVIP

需要注意的是,无论是DR模式还是NAT模式,都需要将director 的ip_forward置一,而对于real server则该选项需要置0。这个选项控制包转发功能。
3.当real server收到包后,会比对des mac 和des ip,其中,mac地址与物理网卡eth0相同,而IP与l0上绑定的虚拟IP相同,则符合,到内核进行处理,任务结束后将处理结果发给cilent

Src macDes macSrc IPDes IP
Rs macclient macVIPclient IP

http://os.51cto.com/art/201105/264303.htm
http://os.51cto.com/art/201105/262536.htm

软件安装

LVS在一般linux机器上都有配备,我们只需要安装实现需要的软件ipvsadm

sudo apt-get install ipvsadm

查看是否安装成功

dpkg -l |grep ipvsadm

查看内核模块是否运行

lsmod | grep ip_vs
#或者
modprobe -l|grep ipvs

这里就安装成功了
由于lvs涉及网络方面的操作,这里列举一些用到的命令

#查看hosts表
vim /etc/hosts
#查看路由
route
#创建虚拟IP
ifconfig eth0:0 192.168.1.200 netmask 255.255.255.255 broadcast 192.168.1.200 
#eth0:0在网卡eth0上的0位置创建一个虚拟IP;
#netmask 子网掩码 
#broadca 广播段,设置为IP相同确保精准广播
#虚拟IP添加到路由
route add -host 192.168.1.200 dev eth0:0
#从路由删除虚拟IP
route delete -host 192.168.1.200
#禁用该虚拟IP或网卡
ifconfig eth0:0 down
#启用网卡
ifconfig eth0 up

linux 执行shell脚本

方法一:切换到shell脚本所在的目录

cd /data/shell
./hello.sh

./的意思是说在当前的工作目录下执行hello.sh。如果不加上./,bash可能会响应找到不到hello.sh的错误信息。因为目前的工作目录(/data/shell)可能不在执行程序默认的搜索路径之列,也就是说,不在环境变量PASH的内容之中。查看PATH的内容可用 echo $PASH 命令。现在的/data/shell就不在环境变量PASH中的,所以必须加上./才可执行。

方法二:以绝对路径的方式去执行bash shell脚本:

/data/shell/hello.sh

方法三:直接使用bash 或sh 来执行bash shell脚本:

cd /data/shell
bash hello.sh

cd /data/shell
sh hello.sh

注意,若是以方法三的方式来执行,那么,可以不必事先设定shell的执行权限,甚至都不用写shell文件中的第一行(指定bash路径)。因为方法三是将hello.sh作为参数传给sh(bash)命令来执行的。这时不是hello.sh自己来执行,而是被人家调用执行,所以不要执行权限。那么不用指定bash路径自然也好理解了啊,呵呵……。

方法四:在当前的shell环境中执行bash shell脚本:

cd /data/shell
. hello.sh

cd /data/shell
source hello.sh

LVS配置

Director 配置
将VIP配到director的主网卡eth0上,这是为了client可以通过寻址VIP来寻址到director。
打开ip_forward
清除ipvsadm配置,ipvsadm -C
-A 时在内核的虚拟服务器表中添加一条新的虚拟服务器记录
-a 在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。
-D 删除内核虚拟服务器表中的一条虚拟服务器记录
-C 清除内核虚拟服务器表中的所有记录
-s rr 选择调度算法rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq
-t TCP
-u UDP
-r 真实的服务器
-g 直接路由模式(DR模式)
-p 这个选项的意思是来自同一个客户的多次请求,将被同一台真实的服务器处理。timeout的默认值为300秒。
http://blog.chinaunix.net/uid-24668835-id-2598605.html

    #!/bin/bash
  VIP=192.168.60.200
  RIP1=192.168.60.132
  RIP2=192.168.60.144
  GW=192.168.60.1
  # set the Virtual IP Address
  /sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
  /sbin/route add -host $VIP dev eth0:0
  echo "1" >/proc/sys/net/ipv4/ip_forward
  #Clear IPVS table
  /sbin/ipvsadm -C
  #set LVS
  /sbin/ipvsadm -A -t $VIP:80 -s rr -p 600
  /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
  /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
  #Run LVS
  /sbin/ipvsadm
  #end

Real Server 配置
将虚拟IP配置到l0上,如果配到出口网卡则会影响到Director的arp request。
对arp帧进行配置
arp_announce : INTEGER
默认为0
对网络接口上本地IP地址发出的ARP回应作出相应级别的限制:
确定不同程度的限制,宣布对来自本地源IP地址发出Arp请求的接口
0 - (默认) 在任意网络接口上的任何本地地址
1 -尽量避免不在该网络接口子网段的本地地址. 当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用.此时会检查来访IP是否为所有接口上的子网段内ip之一.如果改来访IP 不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理.
2 - 对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址.首要是选择所有的网络接口的子网中外出 访问子网中包含该目标IP地址的本地地址. 如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送
all/ 和{interface}/ 下两者同时比较,取较大一个值生效.
提高约束级别有益于从指定的目标接受应答,而降低级别可以给予更多的arp查询者以反馈信息(关于arp代理这一段我普遍翻译地不好,去啃一下tcp/ip bible的卷一,然后再翻译吧)
arp_ignore : INTEGER
默认为0
定义对目标地址为本地IP的ARP询问不同的应答模式
0 - (默认值): 回应任何网络接口上对任何本地IP地址的arp查询请求(比如eth0=192.168.0.1/24,eth1=10.1.1.1/24,那么即使 eth0收到来自10.1.1.2这样地址发起的对10.1.1.1 的arp查询也会回应–而原本这个请求该是出现在eth1上,也该有eth1回应的)
1 - 只回答目标IP地址是来访网络接口本地地址的ARP查询请求(比如eth0=192.168.0.1/24,eth1=10.1.1.1/24,那么即使 eth0收到来自10.1.1.2这样地址发起的对192.168.0.1的查询会回答,而对10.1.1.1 的arp查询不会回应)
2 -只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内(比如 eth0=192.168.0.1/24,eth1=10.1.1.1/24,eth1收到来自10.1.1.2这样地址发起的对192.168.0.1 的查询不会回答,而对192.168.0.2发起的对192.168.0.1的arp查询会回应)
3 - 不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应(do not reply for local addresses configured with scope host,only resolutions for global and link addresses are replied 翻译地似乎不好,这个我的去问问人)
4-7 - 保留未使用
8 -不回应所有(本地地址)的arp查询

#!/bin/bash
  VIP=192.168.60.200
  /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
  /sbin/route add -host $VIP dev lo:0
  echo1″ >/proc/sys/net/ipv4/conf/lo/arp_ignore
  echo2″ >/proc/sys/net/ipv4/conf/lo/arp_announce
  echo1″ >/proc/sys/net/ipv4/conf/all/arp_ignore
  echo2″ >/proc/sys/net/ipv4/conf/all/arp_announce
  sysctl -p
  #end

Keepalived

作为HA
Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web 服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人 工做的只是修复故障的web服务器。可以有多个backup,当master不工作时会根据priority 来对剩下的进行选举
注意,master 和 slave 只有
router_id、state和priority 不同
http://outofmemory.cn/wiki/keepalived-configuration
vi /etc/keepalived/keepalived.conf

global_defs {
   router_id LVS_dr_1 #运行keepalived机器的一个标识
}
vrrp_sync_group VGM {#监控多个网段的实例
        group {
                VI_dr #实例名
        }
}
vrrp_instance VI_dr {
        state MASTER #指定一个为master,另一个为backup
        interface eth0 #设置实例绑定的网卡
        virtual_router_id 51 #VPID标记
        priority 100  #优先级,高优先级竞选为master
        advert_int 1   #检查间隔,默认1秒
        authentication {#设置认证
                auth_type PASS #认证方式
                auth_pass 1111 #认证密码
        }
        virtual_ipaddress { #设置vip
                10.241.7.6
        }
}
virtual_server 10.241.7.6 443 {
        delay_loop 6 #健康检查时间间隔
        lb_algo rr   #lvs调度算法rr|wrr|lc|wlc|lblc|sh|dh
        lb_kind DR   #负载均衡转发规则NAT|DR|RUN
        persistence_timeout 50#会话保持时间
        protocol TCP #使用的协议

        #sorry_server 192.168.200.200 1358#备用机,所有realserver失效后启用

        real_server 10.241.0.8 443 {
                weight 100  #默认为1,0为失效 ???WHY 100
                TCP_CHECK {
                        connect_timeout 3 #连接超时时间
                        nb_get_retry 3 #重连次数
                        delay_before_retry 3 #重连间隔时间
                        connect_port 443 #健康检查的端口的端口
                }
        }
        real_server 10.241.0.9 443 {
                weight 100
                TCP_CHECK {
                        connect_timeout 3
                        nb_get_retry 3
                        delay_before_retry 3
                        connect_port 443
                }
        }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值