一、LVS的组成

LVS 由2部分程序组成,包括 ipvs 和 ipvsadm。

1. ipvs(ip virtual server):一段代码工作在内核空间,叫ipvs,是真正生效实现调度的代码。
2. ipvsadm:另外一段是工作在用户空间,叫ipvsadm,负责为ipvs内核框架编写规则,
    定义谁是集群服务,而谁是后端真实的服务器(Real Server)

其实LVS的本身跟iptables很相似,而且连命令的使用格式都很相似,
其实LVS是根据iptables的框架开发的,那么LVS的本身分成了两个部分:
第一部分:是工作在内核空间的一个IPVS的模块,其实LVS的功能都是IPVS模块实现的,
第二部分:是工作在用户空间的一个用来定义集群服务的一个工具ipvsadm,
                    这个工具的主要作用是将管理员定义的集群服务列表传送给工作在内核空间中的IPVS模块

二、ipvsadm命令主要格式:

设置虚拟地址并指定调度算法
ipvsadm -A -t 10.0.0.1:80 -s rr

添加真实服务器,指定工作传输模式为NAT 和各个权重

ipvsadm -a -t 10.0.0.1:80 -r 10.0.0.21:80 -m -w
ipvsadm -a -t 10.0.0.1:80 -r 10.0.0.22:80 -m -w
三种工作模式、十种调度算法

--scheduler -s scheduler one of rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,
                  the default scheduler is wlc.
--persistent -p [timeout] persistent service
--netmask -M netmask persistent granularity mask
--real-server -r server-address server-address is host (and port)
--gatewaying -g gatewaying (direct routing) (default)
--ipip -i ipip encapsulation (tunneling)
--masquerading -m masquerading (NAT)
--weight -w weight capacity of real server
--u-threshold -x uthreshold upper threshold of connections

三、LVS相关术语

1. DS:Director Server。指的是前端负载均衡器节点。
2. RS:Real Server。后端真实的工作服务器。
3. VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。
4. DIP:Director Server IP,主要用于和内部主机通讯的IP地址。
5. RIP:Real Server IP,后端服务器的IP地址。
6. CIP:Client IP,访问客户端的IP地址。

各角色服务器ip如下
虚拟ip地址   10.0.0.1
DS  Director Server调度服务器地址  10.0.0.11   10.0.0.12
RS  Real Server 真实服务器地址      10.0.0.21   10.0.0.22

四、LVS/NAT 部署配置原理

 重点理解NAT方式的实现原理和数据包的改变。

1.在DR服务器上进行如下配置:
启动Linux的路由转发功能,在NAT模式下此操作是必须的

# cat /proc/sys/net/ipv4/ip_forward       #查看Linux是否开启路由转发功能
0
# echo 1 > /proc/sys/net/ipv4/ip_forward #启动Linux的路由转发功能
# cat /proc/sys/net/ipv4/ip_forward
1
添加地址为10.0.0.1:80的虚拟服务,指定调度算法为轮转。
ipvsadm -A -t 10.0.0.1:80 -s rr
添加真实服务器,指定传输模式为NAT
ipvsadm -a -t 10.0.0.1:80 -r 10.0.0.21:80 -m
ipvsadm -a -t 10.0.0.1:80 -r 10.0.0.21:80 -m
2.在 real server 上配置
设置RS的网关为 DSIP地址

 
 

五、LVS/DR 部署配置原理

 重将请求报文的目标MAC地址设定为挑选出的RS的MAC地址

关键点

          1:Director 上需要配置 VIP 、ipvsadm

          2:Real Server 需要关闭ARP协议 同时 要配置VIP 

 
1、设置Real Server真实服务器的接口对ARP的应答
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore                
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore          这条是可以不用的,因为arp对逻辑接口没有意义,但大多数教程都加上了
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce   这条是可以不用的,因为arp对逻辑接口没有意义,但大多数教程都加上了
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore

echo "2">/proc/sys/net/ipv4/conf/all/arp_announce

如果你的RS的外部网络接口是eth0,其实真正要执行的是:

echo "1">/proc/sys/net/ipv4/conf/eth0/arp_ignore

echo "2">/proc/sys/net/ipv4/conf/eth0/arp_announce

所以我个人建议把上面两条all的也加到你的脚本里去,因为万一系统里上面两条默认的值不是0,那有可能是会出问题滴。


设置这个选项可以使得各个接口只对本接口上的地址进行响应

arp_ignore参数的作用是控制系统在收到外部的arp请求时,是否要返回arp响应。
sysctl.conf中包含all和eth/lo(具体网卡)的arp_ignore参数,取其中较大的值生效。
     1 只响应目的IP地址为接收网卡上的本地地址的arp请求。

arp_announce的作用是控制系统在对外发送arp请求时,如何选择arp请求数据包的源IP地址。
sysctl.conf中包含all和eth/lo(具体网卡)的arp_ignore参数,取其中较大的值生效。

     2  忽略IP数据包的源IP地址,选择该发送网卡上最合适的本地地址作为arp请求的源IP地址。
 
 2、在RS真实服务器上添加虚拟IP

在lvs的DR和TUn模式下,用户的访问请求到达真实服务器后,是直接返回给用户的,而不再经过前端的Director Server,
因此,就需要在每个Real server节点上增加虚拟的VIP地址,这样数据才能直接返回给用户
real server 的物理网卡收到数据帧之后:拆开看到目的地址是VIP
查找路由表,自己的lo上绑着VIP,说明这个包是自己需要处理的,就把这个活接了。
产生响应报文
real server返回给客户端的数据帧,源mac是real server物理网卡的mac,里面的源IP地址是VIP
客户端收到数据帧之后,看到目的mac和目的IP都是自己,就会接收。并不会去检查源mac
vip一定要绑定在lo网卡上,子网掩码 一定要是 四个255

ifconfig lo:0 10.0.0.1 boradcast 10.0.0.1 netmask 255.255.255.255 up
route add -host 10.0.0.1 dev lo:0
或者
ip addr add 10.0.0.1/ dev lo

3.在DS上设置

打开ip转发功能,增加一个虚拟网卡(ip地址为vip),增加一条路由信息
echo 1 > /proc/sys/net/ipv4/ip_forward       这条不需要,因为director跟realserver是同一个网段,无需开启转发,多数教程这样写
ifconfig eth0:0 down
ifconfig eth0:0 10.0.0.1 broadcast 10.0.0.1 netmask 255.255.255.255 up
或者使用这个命令
 ip addr add 10.0.0.1/24 dev eth0
route add -host 10.0.0.1 dev eth0:0          lvs/dr里,director的vip的netmask 没必要设置为255.255.255.255,也不需要再去     route add -host $VIP dev eth0:0

接着添加ipvs规则:
添加地址为10.0.0.1:80的虚拟服务,指定调度算法为轮转。
ipvsadm -A -t 10.0.0.1:80 -s rr
添加真实服务器,指定传输模式为DR
ipvsadm -a -t 10.0.0.11:80 -r 10.0.0.21:80 -g
ipvsadm -a -t 10.0.0.11:80 -r 10.0.0.22:80 -g
注意:此处的例子中客户、调度服务器、真实服务器都是位于同一网段的

查看记录和规则:

# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.0.0.1:http rr
-> 10.0.0.21:http Route 1 0 0
-> 10.0.0.22:http Route 1 0 0

六、LVS/Tun 部署配置原理

在原有的IP报文外再次封装多一层IP首部,内部IP首部(源地址为CIP,目标IIP为VIP),外层IP首部(源地址为DIP,目标IP为RIP)

配置LVS服务器

##TUM模式必须添加VIP。
##给LVS服务器添加VIP
ifconfig eth0:0 10.0.0.1 netmask 255.255.255.255 broadcast 10.0.0.1 up

##添加转发规则

ipvsadm -A -t 10.0.0.1::80 -s rr
ipvsadm -a -t 10.0.0.1::80 -r 10.0.0.21 -i
ipvsadm -a -t 10.0.0.1::80 -r 10.0.0.22 -i

@配置真实服务器

建立一个脚本lvs_tun_real.sh

./lvs_tun_real.sh start   运行脚本

./lvs_tun_real.sh stop  停止脚本

#!/bin/bash
#description : start realserver
VIP=10.0.0.1
/etc/rc.d/init.d/functions
case "$1" in
start)
echo " start LVS of REALServer"
modprobe ipip
/sbin/ifconfig tunl0 $VIP netmask 255.255.255.255 broadcast $VIP
echo "" > /proc/sys/net/ipv4/conf/tunl0/arp_ignore
echo "" > /proc/sys/net/ipv4/conf/tunl0/arp_announce
echo "" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "" > /proc/sys/net/ipv4/conf/all/arp_announce
echo "" > /proc/sys/net/ipv4/conf/tunl0/rp_filter
echo "" > /proc/sys/net/ipv4/conf/all/rp_filter
;;
stop)
/sbin/ifconfig tunl0 down
echo "close LVS Directorserver"
echo "" > /proc/sys/net/ipv4/conf/tunl0/arp_ignore
echo "" > /proc/sys/net/ipv4/conf/tunl0/arp_announce
echo "" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "" > /proc/sys/net/ipv4/conf/all/arp_announce
echo "" > /proc/sys/net/ipv4/conf/tunl0/rp_filter
echo "" > /proc/sys/net/ipv4/conf/all/rp_filter
;;
*)
echo "Usage: $0 {start|stop}"
exit
esac

七、真实环境配置脚本

vip 10.0.0.90
Director server ip 10.0.0.54
Real server 10.0.0.56 10.0.0.57

1.DR模式

D_server 上配置

# ip addr add 10.0.0.90/24 dev ens32
# ipvsadm -A -t 10.0.0.90:80 -s rr
# ipvsadm -a -t 10.0.0.90:80 -r 10.0.0.56 -g
# ipvsadm -a -t 10.0.0.90:80 -r 10.0.0.57 -g
# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.0.0.90:http rr
-> 10.0.0.56:http Route 1 0 0
-> 10.0.0.57:http Route 1 0 0

Real server 10.0.0.56上配置

# ip addr add 10.0.0.90/32 dev lo
# echo 1 > /proc/sys/net/ipv4/conf/ens32/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/ens32/arp_announce

Real server 10.0.0.57上配置

# ip addr add 10.0.0.90/32 dev lo
# echo 1 > /proc/sys/net/ipv4/conf/ens32/arp_ignore 
# echo 2 > /proc/sys/net/ipv4/conf/ens32/arp_announce

												

LVS 部署的更多相关文章

  1. Tomcat+Nginx+Lvs部署方案与性能调优

    立项要求:用户登录并发数达到1000vuser.原项目设计没有Nginx和LVS,经过性能测试并发数最高到400,就报响应超时,且系统资源消耗严重.经过和架构师商议决定先加入Nginx解决负载均衡处理 ...

  2. lvs部署-DR模式

    DR模式 角色 IP地址 备注 LVS负载均衡器 192.168.119.132 VIP:192.168.119.150    ipvsadm http_Real server 192.168.119 ...

  3. lvs基础及部署

    LVS简介   LVS--Linux Vritual Server 即linux虚拟服务器,1998年5月由章文嵩博士开发并开源,目前全球多个国家的企业单位都在使用LVS构建集群服务.   LVS可实 ...

  4. LVS原理详解以及部署

    linux virtual server简称LVS,Internet的快速增长使多媒体网络服务器面对的访问数量快速增加,服务器需要具备提供大量并发访问服务的能力,因此对于大负载的服务器来讲, CPU. ...

  5. LVS-DR之VIP、DIP跨网段实例

    在日常应用环境中,我们会遇到这样一种lvs部署环境,所有的dr以及的rs server都在一个局域网环境中,但只有一个公网ip,而又需要将应用发布到internet上,都知道lvs的最好的模式就是所有 ...

  6. LVS+MYCAT读写分离+MYSQL同步部署手册(第三版)

    1      配置MYSQL主备同步 1.1    测试环境 mysql版本:5.6.24: 操作系统内核版本:Linux-3.13-0-32 主数据库IP:192.168.10.3: 主数据库名:d ...

  7. LVS+MYCAT+读写分离+MYSQL主备同步部署手册

    LVS+MYCAT+读写分离+MYSQL主备同步部署手册 1          配置MYSQL主备同步…. 2 1.1       测试环境… 2 1.2       配置主数据库… 2 1.2.1  ...

  8. CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡

    一.简介 VS/NAT原理图: 二.系统环境 实验拓扑: 系统平台:CentOS 6.3 Kernel:2.6.32-279.el6.i686 LVS版本:ipvsadm-1.26 keepalive ...

  9. 部署keepalive+lvs

    部署keepalive+lvs 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.       欢迎降入:高级运维工程师之路 598432640     安装LVS的步骤我已经在另外的一 ...

随机推荐

  1. JVM系列七(JIT 即时编译器).

    一.概述 即时编译器(Just In Time Compiler),也称为 JIT 编译器,它的主要工作是把热点代码编译成与本地平台相关的机器码,并进行各种层次的优化,从而提高代码执行的效率. 那么什 ...

  2. 从Main读取appsetting

    using System; using System.Configuration; using Newtonsoft.Json.Linq; using System.Net.Http; using S ...

  3. python 继承机制(子类化内置类型)

    1. 如果想实现与某个内置类型具有类似行为的类时,最好的方法就是将这个内置类型子类化. 2. 内置类型子类化,其实就是自定义一个新类,使其继承有类似行为的内置类,通过重定义这个新类实现指定的功能. c ...

  4. 【Java并发基础】使用“等待—通知”机制优化死锁中占用且等待解决方案

    前言 在前篇介绍死锁的文章中,我们破坏等待占用且等待条件时,用了一个死循环来获取两个账本对象. // 一次性申请转出账户和转入账户,直到成功 while(!actr.apply(this, targe ...

  5. python实现数据结构-栈

    注:本文档主要是学习<Python核心编程(第二版)>时的练习题. 栈是一种"后进先出"的数据结构(LIFO),是一种操作受限的线性结构,数据只能从栈顶进入和栈顶出去. ...

  6. RChain的一键形式化验证:关于RCast 33 – LADL话题的讨论摘要

    作者/Atticbee 在这一集,Greg和RChain的研究人员Isaac,Christian讨论了TLA(Temporal Logic of Actions)和RChain的LADL(Logic ...

  7. 19_07_07校内训练[xor]

    题意 长度为n的数组,上面有k个位置是1,现在有l种长度的连续全1串,要求用最少的次数将这个数组异或成全0的数组.n<=1E5,k<=10,l<=100. 思考 先将数组进行异或的差 ...

  8. Java之函数式接口@FunctionalInterface详解(附源码)

    Java之函数式接口@FunctionalInterface详解 函数式接口的定义 在java8中,满足下面任意一个条件的接口都是函数式接口: 1.被@FunctionalInterface注释的接口 ...

  9. c/python 的区别

    c             python                                                                                ...

  10. linux--->lnmp环境调试环境配置

    lnmp环境调试环境配置 nginx是一个web服务器,因此nginx的access日志只有对访问页面的记录,不会有php 的 error log信息. nginx把对php的请求发给php-fpm ...