一、nat模式配置

环境说明:

DS:nat网卡(自动获取也可以,充当vip):

192.168.254.13

255.255.255.0

vmnet3网卡(仅主机):

172.16.100.1

255.255.255.0

RS1:(仅主机vmnet3)

172.16.100.10

255.255.255.0

172.16.100.1

RS2:(仅主机vmnet3)

172.16.100.20

255.255.255.0

172.16.100.1

工作流程:

1、用户请求VIP(也可以说是CIP请求VIP)

2、Director Server 收到用户的请求后,发现源地址为CIP请求的目标地址为VIP,那么Director Server会认为用户请求的是一个集群服务,那么Director Server 会根据此前设定好的调度算法将用户请求负载给某台Real Server。

假如说此时Director Server 根据调度的结果会将请求分摊到RealServer1上去,那么Director Server 会将用户的请求报文中的目标地址,从原来的VIP改为RealServer1的IP,然后再转发给RealServer1

3、此时RealServer1收到一个源地址为CIP目标地址为自己的请求,那么RealServer1处理好请求后会将一个源地址为自己目标地址为CIP的数据包通过Director Server 发出去

4、当Driector Server收到一个源地址为RealServer1 的IP 目标地址为CIP的数据包,此时Driector Server 会将源地址修改为VIP,然后再将数据包发送给用户

安装lvs:

yum install ipvsadm

调度器上开启路由转发模式:

临时性:

echo 1 > /proc/sys/net/ipv4/ip_forward

永久性:

vim /etc/sysctl.conf

net.ipv4.ip_forward = 1

sysctl -p

ipvsadm配置:

ipvsadm -A -t 192.168.254.13:80 -s rr

ipvsadm -a -t 192.168.254.13:80 -r 172.16.105.10 -m

ipvsadm -a -t 192.168.254.13:80 -r 172.16.100.20 -m

ipvsadm命令:

查看lvs集群连接状态           ipvsadm -Ln --stats

查看lvs集群配置                   ipvsadm -Ln

保存ipvs配置                  ipvsadm-save

还原                                  ipvsadm-restore

ipvsadm -S > /etc/sysconfig/ipvsadm     #把配置文件保存在配置文件中

ipvsadm -R < /etc/sysconfig/ipvsadm     #从配置文件中恢复到当前配置

二、dr模式配置

虚拟机网卡模式:

DS:NAT(自动获取)

RS1:NAT(自动获取)

RS2:NAT(自动获取)

DR模式

direct_server:192.168.254.13

real_server:192.168.254.12

real_server:192.168.254.10

vip:192.168.254.250    #vip为虚拟服务ip

direct_server:yum install ipvsadm

工作方式:

上面说了NAT模型的实现方式,那么NAT模型有个缺陷,因为进出的每个数据包都要经过Director Server,当集群系统负载过大的时候Director Server将会成为整个集群系统的瓶颈,那么DR模型就避免了这样的情况发生,DR模型在只有请求的时候才会经过Director Server, 回应的数据包由Real Server 直接响应用户不需要经过Director Server,其实三种模型中最常用的也就是DR模型了。

工作流程:

1、首先用户用CIP请求VIP

2、不管是Director Server还是Real Server上都需要配置VIP,当用户请求到达我们的集群网络的前端路由器的时候,请求数据包的源地址为CIP目标地址为VIP,此时路由器会发广播问谁是VIP,那么我们集群中所有的节点都配置有VIP,此时谁先响应路由器那么路由器就会将用户请求发给谁,这样一来我们的集群系统是不是没有意义了,那我们可以在网关路由器上配置静态路由指定VIP就是Director Server,或者使用一种机制不让Real Server 接收来自网络中的ARP地址解析请求,这样一来用户的请求数据包都会经过Director Servrer

3、当Director Server收到用户的请求后根据此前设定好的调度算法结果来确定将请求负载到某台Real Server上去,假如说此时根据调度算法的结果,会将请求负载到RealServer 1上面去,此时Director Server 会将数据帧中的目标MAC地址修改为Real Server1的MAC地址,然后再将数据帧发送出去

4、当Real Server1 收到一个源地址为CIP目标地址为VIP的数据包时,Real Server1发现目标地址为VIP,而VIP是自己,于是接受数据包并给予处理,当Real Server1处理完请求后,会将一个源地址为VIP目标地址为CIP的数据包发出去,此时的响应请求就不会再经过Director Server了,而是直接响应给用户。

老板

direct_server:

ipvsadm -C    #清除配置信息

#添加对外提供的服务ip

ipvsadm -A -t 192.168.254.250:80 -s rr    #-A为ADD   -t为tcp   -s rr为设置算法为轮叫算法

#添加2台real_server主机

ipvsadm -a -t 192.168.254.250:80 -r 192.168.254.12:80 -g #-a为add   -t为tcp   -r为realserver   -g为DR路由模式

ipvsadm -a -t 192.168.254.250:80 -r 192.168.254.10:80 -g #-a为add   -t为tcp   -r为realserver   -g为DR路由模式

#配置网卡的子网口为vip,ip地址为192.168.254.250

ifconfig ens33:0 192.168.254.250 broadcast 192.168.254.250 netmask 255.255.255.255 up

#添加路由(访问192.168.254.250都走ens33:0这个网卡)

route add -host 192.168.254.250 dev ens33:0

员工1 | 员工2

real_server:

#在回环地址的子网口上配置服务ip(vip)

ifconfig lo:0 192.168.254.250 broadcast 192.168.254.250 netmask 255.255.255.255 up

#添加路由

route add -host 192.168.254.250 dev lo:0

#删除路由:route delete -host 192.168.254.250

        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

关闭:

echo "0">/proc/sys/net/ipv4/conf/lo/arp_ignore

echo "0">/proc/sys/net/ipv4/conf/lo/arp_announce

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

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

arp_ignore:定义接收到ARP请求时的响应级别

0:默认,只用本地配置的有响应地址都给予响应

1:仅仅在目标IP是本地地址,并且是配置在请求进来的接口上的时候才给予响应 (仅在请求的目标地址配置请求到达的接口上的时候,才给予响应)

           2:只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内

          3:不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应

           4-7:保留未使用

8:不回应所有(本地地址)的arp查询

arp_announce:定义将自己的地址向外通告时的级别

0:默认,表示使用配置在任何接口的任何地址向外通告

1:尽量仅向目标网络通告与其网络匹配的地址

2:仅向与本地接口上地址匹配的网络进行通告

1、RealServer为什么要在lo接口上配置VIP

既然要让RS能够处理目标地址为vip的IP包,首先必须要让RS能接收到这个包。在lo上配置vip能够完成接收包并将结果返回client。

2、在eth0网卡上配置VIP可以吗?

不可以,将VIP设置在eth0网卡上,会影响RS的arp请求,造成整体LVS集群arp缓存表紊乱,以至于整个负载均衡集群都不能正常工作。

3、为什么要抑制ARP响应?

① arp协议说明

ARP协议,全称"Address Resolution Protocol",中文名是地址解析协议,使用ARP协议可实现通过IP地址获得对应主机的物理地址(MAC地址)。

ARP协议要求通信的主机双方必须在同一个物理网段(即局域网环境)!

为了提高IP转换MAC的效率,系统会将解析结果保存下来,这个结果叫做ARP缓存。

Windows查看ARP缓存命令 arp -a

Linux查看ARP缓存命令 arp -n

Linux解析IP对应的MAC地址 arping -c 1 -I eth0 10.0.0.6

ARP缓存表是把双刃剑

a) 主机有了arp缓存表,可以加快ARP的解析速度,减少局域网内广播风暴。因为arp是发广播解析的,频繁的解析也是消耗带宽的,尤其是机器多的时候。

b) 正是有了arp缓存表,给恶意黑客带来了攻击服务器主机的风险,这个就是arp欺骗攻击。

c) 切换路由器,负载均衡器等设备时,可能会导致短时网络中断。因为所有的客户端ARP缓存表没有更新

②服务器切换ARP问题

当集群中一台提供服务的lb01机器宕机后,然后VIP会转移到备机lb02上,但是客户端的ARP缓存表的地址解析还是宕机的lb01的MAC地址。从而导致,即使在lb02上添加VIP,也会发生客户端无法访问的情况。

解决办法是:当lb01宕机,VIP地址迁移到lb02时,需要通过arping命令通知所有网络内机器更新本地的ARP缓存表,从而使得客户机访问时重新广播获取MAC地址。这个是自己开发服务器高可用脚本及所有高可用软件必须考虑到的问题。

ARP广播进行新的地址解析

arping -I eth0 -c 1 -U VIP

arping -I eth0 -c 1 -U 10.0.0.13

测试命令

ip addr del 10.0.0.13/24 dev eth0

ip addr add 10.0.0.13/24 dev eth0

ip addr show eth0

arping -I eth0 -c 1 -U 10.0.0.13

三、tun隧道模式

lvs-server

ifconfig tunl0 192.168.254.250 broadcast 192.168.254.250 netmask 255.255.255.0 up

route add -host 192.168.254.250 dev tunl0

ipvsadm -A -t 192.168.254.250:80 -s rr

ipvsadm -a -t 192.168.254.250:80 -r 192.168.254.18 -i

ipvsadm -a -t 192.168.254.250:80 -r 192.168.254.19 -i

real_server

ifconfig tunl0 192.168.254.250 netmask 255.255.255.255 broadcast 192.168.254.250 up

route add -host 192.168.254.250 dev tunl0

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

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

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

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

echo "0" >/proc/sys/net/ipv4/conf/tunl0/rp_filter

echo "0" > /proc/sys/net/ipv4/conf/all/rp_filter

0:不开启源地址校验。

1:开启严格的反向路径校验。对每个进来的数据包,校验其反向路径是否是最佳路径。

如果反向路径不是最佳路径,则直接丢弃该数据包。

2:开启松散的反向路径校验。对每个进来的数据包,校验其源地址是否可达,即反向路径是否能通(通过任意网口),

如果反向路径不同,则直接丢弃该数据包。

四、ipvsadm语法及选项

1、语法:

ipvsadm -A|E -t|u|f <集群服务地址> [-s <调度算法>] [-p <超时时间>] [-M <掩码>] [-b <标志>]

ipvsadm -D -t|u|f <集群服务地址>

ipvsadm -C

ipvsadm -R

ipvsadm -S [-n]

ipvsadm -a|e -t|u|f <集群服务地址> -r <真实服务器地址> [选项]

ipvsadm -d -t|u|f <集群服务地址> -r <真实服务器地址>

ipvsadm -L|l [options]

ipvsadm -Z [-t|u|f <集群服务地址>]

ipvsadm --set <超时时间>

ipvsadm --start-daemon <主或备> [--mcast-interface <组播接口>] [--syncid <SID>]

ipvsadm --stop-daemon <主或备>

ipvsadm -h

2、子命令:

--add-service     -A        添加一个集群服务,需要使用选项

--edit-service    -E        编辑一个集群服务,需要使用选项

--delete-service  -D        删除指定集群服务,需要使用选项

--clear           -C        删除所有集群服务,包括真实服务器转发策略规则

--restore         -R        从标准输入中恢复策略规则

--save            -S        保存策略规则到标准输出

--add-server      -a        添加一个真实服务器,需要使用选项

--edit-server     -e        编辑一个真实服务器,需要使用选项

--delete-server   -d        删除一个真实服务器,需要使用选项

--list            -L|-l     查看集群服务列表,包括真实服务器转发策略规则

--zero            -Z        计数器清零。清除连接数、包转发等数量统计信息

--set <超时时间>            设置TCP、TCPFIN(TCP关闭连接状态)、UDP连接超时时间,用于会话保持。一般情况下TCP和UDP超时时间保持默认就好,TCPFIN

可以根据情况设定,指定它则用户请求连接关闭,该连接则会变

为非活跃(InActive)空闲等待状态,在空闲等待时间内,如果

来自同一源IP的请求,则还会转发给后端的同一台真实服务器上

--start-daemon              开启连接同步守护进程。在选项后面指定自己是Master(主)还是backup(备),主负载调度器会同步所有策略及连接状态到备负载调度器,当主故障,备可以接替其工作

--stop-daemon               停止连接同步守护进程

--help            -h        显示帮助信息

3、集群服务相关

-A:添加一个集群服务

-t:tcp

-u:udp

-f:firewall-mark,通常用于将两个或以上的服务绑定为一个服务进行处理是使用,integer类型

service-address:

-t:ip:port

-u:ip:port

-f:firewall-mark

-s:调度算法,默认为wlc

-p:timout:persistent connection,持久连接

-E:修改定义过的集群服务

-D:-t|-u|-f service-address:删除指定得集群服务

4、RS(Real Server)相关

-a:向指定得CS(Cluster Service)中添加RS(Real Server)

-t|-u|-f service-address:指明将RS添加至哪个Cluster Service中

-r:指定RS(Real Server),可包含{IP[:port]},只有支持端口映射的LVS类型才允许此处使用跟集群服务中不同的端口

LVS类型:

-g:Gateway,DR(默认使用的类型)

-i:ipip,TUN

-m:masquerade(地址伪装),NAT

指定RS(Real Server)权重:

-w 取值范围0-65535

-e:修改指定的RS属性

-d:-t|-u|-f service-address -r server-address:从指定得集群服务中删除某RS

5、清空所有的集群服务:

-C

6、保存规则:(使用输出重定向)

ipvsadm-save

ipvsadm -S

7、载入指定的规则:(使用输入重定向)

ipvsadm-restore

ipvsadm -R

8、查看ipvsadm规则

ipvsadm -L [options]

-n:数字格式显示IP地址

-c:显示连接数相关信息

--stats:显示统计数据

--rate:速率

--exact:显示统计数据的精确值

9、计数器清零

-Z

linux中级之lvs配置(命令)的更多相关文章

  1. linux网络及防火墙配置命令

      /etc/sysconfig/network 包括主机基本网络信息,用于系统启动 /etc/sysconfig/network-script/ 此目录下是系统启动最初始化网络的信息 /etc/sy ...

  2. Linux中级之keepalived配置

    hacmp: ibm的高可用集群软件,并且是商业的(收费),一般用于非x86架构机器当中 AIX,Unix 去IOE:ibm,oracle,emckeepalived: 一款高可用集群软件,利用vrr ...

  3. Linux中级之lvs三个模式的图像补充(nat,dr,tun)

    负载均衡(Load Balance)集群提供了一种廉价.有效.透明的方法,来扩展网络设备和服务器的负载.带宽.增加吞吐量.加强网络数据处理能力.提高网络的灵活性和可用性. (1)单台计算机无法承受大规 ...

  4. linux中级之lvs概念

    一.lvs介绍 LVS的英文全称是Linux Virtual Server,即Linux虚拟服务器.它是我们国家的章文嵩博士的一个开源项目.在linux内存2.6中,它已经成为内核的一部分,在此之前的 ...

  5. 负载均衡集群之LVS配置命令

    ipvs/ipvsadm 添加集群服务--> ipvsadm -A|E -t|u|f VIP[:Port] -s scheduler [-p timeout] [-O] [-M netmask] ...

  6. linux中级之ansible配置(roles)

    一.roles介绍 什么情况下用到roles? 假如我们现在有3个被管理主机,第一个要配置成httpd,第二个要配置成php服务器,第三个要配置成MySQL服务器.我们如何来定义playbook? 第 ...

  7. Linux中级之ansible配置(playbook)

    一.playbooks 如果用模块形式一般有幂等性,如果用shell或者command没有幂等性 playbooks相当于是shell脚本,可以把要执行的任务写到文件当中,一次执行,方便调用 task ...

  8. 路由器的路由配置命令汇总(win和linux系统)

    路由器/Linux主机/win下主机的路由配置汇总 2009-07-16 17:43:15 分类: 系统运维 工作时总是要在这三个个体中配来配去,所以为了方便,汇总了.   win下:   使用 Ro ...

  9. linux lvs 配置

    redhatAS4.2 安装集群LVS 环境描述: 本文在配置LVS时使用三台linux,一台做Directorserver (192.168.0.25) ,两台做realserver(192.168 ...

随机推荐

  1. 如何讲一个网页转换为jpg?(图片!)

    不需要安装插件!!! 打开网页,打开开发者工具 快捷键: ctrl+shift+p输入>full即可自动下载!

  2. Spring Security OAuth 格式化 token 输出

    个性化token 背景 上一篇文章<Spring Security OAuth 个性化token(一)>有提到,oauth2.0 接口默认返回的报文格式如下: {     "ac ...

  3. 6. Mybatis Parameters

    这个元素说的直白点就是定义参数.注意一个语句中只能有一个参数. 所以参数类型在以后的使用中,可能需要复杂的类型,比如hashmap,一个复杂的对象等.例如: <?xml version=&quo ...

  4. C#通过rabbitmq实现定时任务(延时队列)

    本文主要讲解如何通过RabbitMQ实现定时任务(延时队列) 环境准备 需要在MQ中进行安装插件 地址链接 插件介绍地址:https://www.rabbitmq.com/blog/2015/04/1 ...

  5. 痞子衡嵌入式:实抓Flash信号波形来看i.MXRT的FlexSPI外设下AHB读访问情形(无缓存)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是实抓Flash信号波形来看i.MXRT的FlexSPI外设下AHB读访问情形. 上一篇文章 <i.MXRT中FlexSPI外设对A ...

  6. css选择器中:first-child 与 :first-of-type的区别

    ## css选择器中:first-child 与 :first-of-type的区别 ---- :first-child选择器是css2中定义的选择器,从字面意思上来看也很好理解,就是第一个子元素.比 ...

  7. PHP laravel系列之Blade模版

    一.什么是Blade模版? Blade 是 Laravel 提供的一个既简单又强大的模板引擎. 和其他流行的 PHP 模板引擎不一样,Blade 并不限制你在视图中使用原生 PHP 代码.所有 Bla ...

  8. 【参数校验】 自定义校验器 (实现ConstraintValidator)

    日常工作中写接口时,往往需要校验前端传来的枚举状态码,例如"1","2"等等, 这里使用java 303规范的参数校验框架封装一个自定义参数校验器: /** * ...

  9. POJ2570 二进制,位运算,Floyd

    题意:       给你一个有向图,两点之间有多种连接方式,然后每次询问都问你点A,B之间有哪些方式可以到达,每个小字母是一个方式. 思路:       很巧妙的位运算和Floyd应用,借助Floyd ...

  10. POJ1611基础带权并查集

    题意:       有一个人生病了,和他一个社团或者间接和他有联系的人都会生病,问一共有多少人生病了. 思路:       比较简单和基础的题,带权并查集中的一种,就是记录更新集合元素个数,这个题目我 ...