LVS DR NAT keepalived

LVS

LVS 架构

LVS是一个实现负载均衡集群的开源软件项目,LVS架构从逻辑上可分为调度层(Director)、server集群层(Real server)和共享存储层。

LVS-DR

DR(调度器将请求来的数据包的目标mac地址改为real server的mac地址,返回的时候也不经过调度器,直接返回给客户端),其实该过程就就是利用“以太网”通讯是通过mac地址的原理,从而让realserver将数据直接返回给目标地址,而不经过DR返回数据

案例lvs-dr

第一步:完成IP地址的配置以及网络配置

第二步:安装相应软件

在RS-1和RS-2上安装nginx,方便测试

yum -y install nginx

Director上安装ipvsadm

yum -yinstall ipvsadm

第三步:配置DR

vim /usr/local/sbin/lvs_dr.sh
#! /bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward             #启动路由转发功能
ipv=/sbin/ipvsadm
vip=172.16.1.100
rs1=172.16.1.2
rs2=172.16.1.3
ifconfig eth1:0 $vipbroadcast $vip netmask 255.255.255.255 up
route add -host $vip dev eth1:0
$ipv -C                                         #清除ipvsadm的规则
$ipv -A -t $vip:80 -s wrr                          #加权轮训算法

#-A 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器。

#-a

#-s 表示使用的调度算法,有这样几个选项rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默认的调度算法是: wlc

#调度算法

$ipv -a -t $vip:80 -r $rs1:80 -g -w 1
$ipv -a -t $vip:80 -r $rs2:80 -g -w 1

#-a 在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个虚拟服务器中增加一台新的真实服务器

#-t 说明虚拟服务器提供的是tcp的服务[vip:port] or[real-server-ip:port]

#-r 真实的服务器[Real-Server:port]

#-g 指定LVS 的工作模式为直接路由模式

#-w 真实服务器的权值,如上的配置,两天服务器的权重一样,如访问两次服务,那么一次在rs1上,一次在rs2上。

第四步:配置RS

两台rs上:vim /usr/local/sbin/lvs_dr_rs.sh
#! /bin/bash
vip=172.16.1.100
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up 
route add -host $vip lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore         #关闭ARP
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

第五步:启动脚本

然后director上执行: bash /usr/local/sbin/lvs_dr.sh
两台rs上执行: bash/usr/local/sbin/lvs_dr_rs.sh

第六步:在RS-1和RS-2上配置用于测定的web页面,web.html

RS-1上的配置: echo "rs1 web server" >/usr/share/nginx/html/web.html

RS-2上的配置: echo "rs2 web server" >/usr/share/nginx/html/web.html

注意:需启动nginx

第7步:通过curl 172.16.1.100/web.html,其执行结果如下

第8步:在DR上通过ipvsadm可以查看到如下的InActConn为7:7与其定义的 wrr调度方式一致。

其中在这三种IP负载均衡的技术中,DR和TUN模式都需要在真实服务器上对arp_ignore和arp_announce参数进行配置,主要是实现禁止响应对VIP的ARP请求。

在lvs环境中,需要设定以下的参数

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

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

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

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

arp_ignore:定义对目标地址为本地IP的ARP询问不同的应答模式0

0 - (默认值): 回应任何网络接口上对任何本地IP地址的arp查询请求

1 - 只回答目标IP地址是来访网络接口本地地址的ARP查询请求

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

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

4-7 - 保留未使用

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

arp_announce:对网络接口上,本地IP地址的发出的,ARP回应,作出相应级别的限制: 确定不同程度的限制,宣布对来自本地源IP地址发出Arp请求的接口

0 - (默认) 在任意网络接口(eth0,eth1,lo)上的任何本地地址

1 -尽量避免不在该网络接口子网段的本地地址做出arp回应. 当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用.此时会检查来访IP是否为所有接口上的子网段内ip之一.如果改来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理.

2 - 对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址.首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址. 如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送.

三、调度算法

LVS主要的调度算法
轮询调度-加权轮询调度-最小连接调度-加权最小连接调度-基于局部性的最少连接-
带复制的基于局部性的最少连接-目标地址散列调度-源地址散列调度

1:轮询算法(RR)就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是实现简单。轮询算法假设所有的服务器处理请求的能力都是一样的,调度器会将所有的请求平均分配给每个真实服务器
2:加权轮询算法(WRR)主要是对轮询算法的一种优化与补充,LVS会考虑每台服务器的性能,并给每台服务器添加一个权值,如果服务器A的权值为1,服务器B的权值为2,则调度到服务器B的请求会是服务器A的两倍。权值越高的服务器,处理的请求越多。
3:最小连接调度算法(LC)将把请求调度到连续数量最小的服务器上,
4:加权最小连接算法(WLC)则是给每台服务器一个权值,调度器会尽可能保持服务器连接数量与权值之间的平衡
5:基于局部性的最少连接调度算法(lblc)是请求数据包的目标IP地址的一种调度算法,该算法先根据请求的目标IP地址寻找最近的该目标IP地址所有使用的服务器,如果这台服务器依然可用,并且用能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其他可行的服务器。
6:带复杂的基于局部性最少的连接算法(lblcr)激励的不是一个目标IP与一台服务器之间的连接记录,他会维护一个目标IP到一组服务器之间的映射关系,防止单点服务器负责过高
7:目标地址散列调度算法(DH)也是根据目标IP地址通过散列函数将目标IP与服务器建立映射关系,出现服务器不可用或负载过高的情况下,发往该目标IP的请求会固定发给该服务器。
8:源地址散列调度算法(SH)与目标地址散列调度算法类似,但它是根据源地址散列算法进行静态分配固定的服务器资源

LVS+keeplived

ipvsadm的缺陷是不能判断realserver是否存活,从而导致数据还是会根据dr的调度,发送到存在问题的服务器上。而keepalived就存在检查机制,一单检测到realserver出现故障,就在ipvsadm的表中删除映射关系,从而保证数据的有效性。

keepalived会根据keepalived的配置,自动完成dr的配置,不用单独配置ipvsadm。

本实验主要针对master进行配置,用于测试是否可以完成负载

注意:前面虽然我们已经配置过一些操作,但是下面我们使用keepalived操作和之前的操作是有些冲突的,所以若是之前配置过DR,请首先做如下操作:dr上执行:

ipvsadm -C
ifconfig eth1:0  down

第一步:安装keepalived

yum install-y keepalived

第二步:安装好后,编辑配置文件  
vim /etc/keepalived/keepalived.conf  #建议备份keepalived.conf的原始配置

vrrp_instance VI_1 {
    state MASTER                  #备用服务器上为 BACKUP
    interface eth1
    virtual_router_id 51
    priority 100                    #备用服务器上为90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.0.200

}
}
virtual_server 192.168.0.200 80 {
    delay_loop 6                   #(每隔10秒查询realserver状态)
    lb_algo wlc                    #(lvs 算法)
    lb_kind DR                    #(Direct Route)
    persistence_timeout 60        #(同一IP的连接60秒内被分配到同一台realserver)
    protocol TCP                  #(用TCP协议检查realserver状态)

real_server 192.168.0.116 80 {
        weight 100                 #(权重)
        TCP_CHECK {
        connect_timeout 10       #(10秒无响应超时)
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }
  real_server 192.168.0.117 80 {
        weight 100
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
     }
}

第三步:DR和RS的其他配置

以上为主director的配置文件,从director的配置文件只需要修改
state MASTER  -> state BACKUP
priority 100 -> priority 90
配置完keepalived后,需要开启端口转发(主从都要做):
echo 1 > /proc/sys/net/ipv4/ip_forward

最后,两个director上启动keepalived服务(先主后从):
/etc/init.d/keepalived start
另外,需要注意的是,启动keepalived服务会自动生成vip和ipvsadm规则,不需要再去执行上面提到的/usr/local/sbin/lvs_dr.sh 脚本。

然后,两个rs上执行 /usr/local/sbin/lvs_dr_rs.sh脚本(如上所示的lvs DR配置的rs脚本)

第四步:关闭192.168.0.117的eth1网口,如下所示,表示keepalived的切换过程

三、LVS-NAT

如下图所示,当192.168.0.111访问realserver提供的服务时,会将请求发送给DR,DR根据其调度算法,确定是将该请求发送给realserver1还是realserver2,当realserver收到该请求后,会将回应信息发送给DR,再由DR回应给192.168.0.111。这就是LVS-NAT的一个工作原理。

案例:

需求:三台服务器一台作为director, 两台作为real server
       Director 有一个外网ip (192.168.0.115) 和一个内网ip(172.16.1.1), 两个real server上只有内网ip(172.16.1.2)和(172.16.1.3) 并且需要把两个real server的内网网关设置为director的内网ip(172.16.1.1)。

第一步:配置IP和网络信息

略……

第二步:DR上的配置如下脚本(命名为lvs_nat.sh)

#! /bin/bash

# director 服务器上开启路由转发功能:

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

# 关闭icmp的重定向

echo 0 >/proc/sys/net/ipv4/conf/all/send_redirects

echo 0 >/proc/sys/net/ipv4/conf/default/send_redirects

echo 0 > /proc/sys/net/ipv4/conf/eth1/send_redirects

echo 0 > /proc/sys/net/ipv4/conf/eth2/send_redirects

# director 设置nat防火墙

iptables -t nat -F

iptables -t nat -X

iptables -t nat -A POSTROUTING -s172.16.1.0/24  -j MASQUERADE

# director设置ipvsadm

IPVSADM=‘/sbin/ipvsadm‘

$IPVSADM -C

$IPVSADM -A -t 192.168.0.200:80 -s  wrr

$IPVSADM -a -t 192.168.0.200:80 -r172.16.1.2:80 -m -w 1

$IPVSADM -a -t 192.168.0.200:80 -r172.16.1.3:80 -m -w 1

第三步:运行lvs_nat.sh脚本

sh lvs_nat.sh

第四步:安装nginx,在目录的html目录下,配置如下内容(测试使用),并启动nginx

rs1上: echo "rs1 server" >/usr/share/nginx/html/index.html
rs2上: echo "rs2server" >/usr/share/nginx/html/index.html

第五步:测试结果

时间: 2024-10-25 22:29:20

LVS DR NAT keepalived的相关文章

LVS/DR结合keepalived

LVS/DR 配置 准备3台机器: dir(192.168.220.141)rs1(192.168. 220.143)rs2(192.168.220.144) vip(192.168.220.110) Director 上 vim /usr/local/sbin/lvs_dr.sh //增加#! /bin/bashecho 1 > /proc/sys/net/ipv4/ip_forwardipv=/sbin/ipvsadmvip=192.168.220.110rs1=192.168.220.14

LVS DR模式+keepalived

首先环境需要: LVS: 主 192.168.238.141 LVS: 备 192.168.238.142 VIP:  IP 192.168.238.181 web1 : 192.168.238.131 web2 :    192.168.238.132 在LVS服务上安装ipvsadm和keepalived yum -y install ipvsadm keepalived 在LVS主配置keepalived配置文件增加VIP地址和web服务器地址 vim /etc/keepalived/ke

lvs DR模式 +keepalived 实现directory 高可用、httpd服务负载均衡集群

功能: lvs+keepalived高可用负载均衡集群中: ·keepalived负责后端real server健康状态检查 如果一台real server服务出现故障,则会从集群服务中剔除,等恢复之后再自动加入到集群. ·keepalived负责负载均衡器(directory server)高可用 A和B两台虚拟机装lvs+keepalived(主)和lvs+keepalived(备),但是对外表现为一个虚拟IP,主服务器会发送消息给备服务器,当备服务器收不到消息的时候,认为主出现故障,然后接

LVS+DR+NAT

一.实验拓扑图 二.实验目标:实现NAT + LVS-DR负载均衡群集 三.实验要求:(群集IP地址为192.168.1.254,所有主机关闭防火墙和NetworkManager服务) 1.lvs的配置: (1)在ifcfg-eth0:0上配置群集IP地址192.168.1.254,子网掩码为255.255.255.0 (2)加载ip_vs模块,安装ipvsadm管理工具.创建虚拟服务器IP地址192.168.1.254,添加服务器节点:192.168.1.3和192.168.1.4    19

LVS负载均衡群集之DR模式+keepalived群集机构(理论+实践篇)

LVS-DR数据包流向分析 为方便进行原理分析,将Client与群集机器放在同一网络中,数据包流经的路线为1-2-3-4 Client向目标VIP发出请求, Director (负载均衡器)接收 Director根据负载均衡算法选择RealServer 1,不修改也不封装IP报文,而是将数据帧的MAC地址改为RealServer 1的MAC地址,然后在局域网上发送. RealServer_ _1收到这个帧,解封装后发现目标IP与本.机匹配(RealServer事先绑定 了VIP),于是处理这个报

RHEL 5.4下部署LVS(DR)+keepalived实现高性能高可用负载均衡

原文地址:http://www.cnblogs.com/mchina/archive/2012/05/23/2514728.html 一.简介 LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一. 目前有三种IP负载均衡技术(VS/NAT.VS/TUN和VS/DR):十种调度算法(rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq). K

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

一.系统环境 实验拓扑: 实验环境: Vmware 9.01 + Windows 8 x64 企业版+8G内存 虚拟机步骤: 1.安装一台CentOS 6.3 x64主机,内存为1GB,网络为NAT模式,注意检查Vmware中EDIT菜单下Virtual Network Editor中VMnet8 2. 加电,安装系统.基础知识了,不再多说,注意:选择英文而不要选择中文,选择是Basic Server模式,系统名称:LVS-MASTER 3.安装系统后,用root用户登录进去,执行 ifconf

LVS(DR)+keepalived+nfs+raid+LVM

LVS理论篇 1.Client 向目标VIP 发出请求,Director(负载均衡器)接收.此时IP 包头及数据帧信息为:       2.Director 根据负载均衡算法选择RealServer_1,不修改也不封装IP 报文,而是将数据帧的MAC 地址改为RealServer_1 的MAC 地址,然后在局域网上发送.IP 包头及数据帧头信息如下:   3.RealServer_1 收到这个帧,解封装后发现目标IP 与本机匹配(RealServer 事先绑定了VIP,必须的!)于是处理这个报文

LVS集群的基本原理、LVS/NAT模式的配置、LVS/DR模式的配置、编写自动脚本检查LVS上realserver健康性

Linux 虚拟服务器(LVS)由章文嵩在国防科技大学就读博士期间创建利用LVS可以实现高可用的.可伸缩的Web.Mail.Cache和Media等网络服务,已经被集成到linux内核里了. 1.什么是集群? 使用一组服务器提供相同的服务2.使用集群的目的? 增强可靠性   降低成本   提高可扩展性   提高性能3.集群分类? HPC 高性能计算集群    (气象   航天   航空)    LB    负载均衡集群 (平均地分摊处理)    * LVS    hproxy HA    高可用