运维实战 负载均衡LVS(DR模式)

前期概述

LVS

LVS,全称Linux Virtual Server,翻译为Linux虚拟服务器,即一个虚拟的服务器集群系统.

简单来说,LVS是一个基于四层且具有强大性能的反向代理服务器.

LVS通过工作于内核的ipvs模块来实现功能,主要工作于netfilter 的INPUT链.
而用户需要对ipvs进行操作配置则需要使用ipvsadm这个工具.
ipvsadm主要用于设置lvs模型/调度方式以及指定后端主机.

简单来说,分为两个部分

  • ipvs (真正生效实现调度的代码所在的位置)
  • ipvsadm (编写规则事先定义的位置)

LVS中的角色

LVS的模型中有两个角色:
调度器: Director,又称为Dispatcher,Balancer.
调度器主要用于接受用户请求.
真实主机: Real Server,简称为RS.
用于真正处理用户的请求.

为了更好地理解,可以将所在角色的IP地址分为以下三种:

Director Virtual IP: 调度器用于与客户端通信的IP地址,简称为VIP
Director IP: 调度器用于与RealServer通信的IP地址,简称为DIP
Real Server : 后端主机的用于与调度器通信的IP地址,简称为RIP

三种调度模式

NAT模式: 基于ip伪装MASQUERADES,原理是多目标DNAT;所有请求和响应都经由Director调度器.

TUN模式: 基于隧道封装技术。在IP报文的外面再包一层IP报文,调度器和RS不需要在同一网段,RS直接对客户端响应.

DR模式: 所有RS都需要有VIP,将目标地址的MAC地址改为RealServer的MAC地址RS直接对客户端响应;但调度器和RS需要在同一网段.

NAT模式
TUN模式
DR模式

本次项目使用DR模式进行试验.

项目内容

前期准备

  • 四台虚拟机(Server1-4),其中14为调度机,23为RealServer.
  • 调度端安装ipvsadm,RS安装测试所需的httpd和处理arp协议所需的防火墙arptables_jf
  • 所有虚拟机设置VIP为172.25.5.100/32
  • 宿主机充当测试用客户端

可能遇到的问题

  • 所有虚拟机都添加了同一个VIP,也就是说客户端获取到的VIP可能对应任意一台服务器,当对应的是RS而不是调度机时,即使所有设置都正确也无法进行论调(毕竟根本没有经过调度端),为避免这种情况,需要对RS进行arp防火墙设置.
  • LVS本身并不具有健康检查功能,也就是说如果23上的httpd出现问题无法正常工作时,他也会一如既往的调度到出现问题的RS,出现报错.keepalived可以解决这个问题.
  • 如果只有一台调度机而调度机损坏,则无论RS是否完好整个系统都会崩溃.当需要多台调度机做高可用时也可以使用keepalived来进行设置.

具体操作

设置VIP

##四台服务器都需要设置
ip addr add 172.25.5.100/32 dev eth0

在调度机上安装ipvsadm

##安装
yum install -y ipvsadm

##查看策略,此时为空
ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
  
##当没有安装keepalived时,手动增加哦调度策略
##表示添加调度策略,对所有请求VIP的请求使用轮询策略调度RS
ipvsadm -A -t 172.25.5.100:80 -s rr
##添加RS,-g表示直连模式 即DR模式
ipvsadm -a -t 172.25.5.100:80 -r 172.25.5.2:80 -g
ipvsadm -a -t 172.25.5.100:80 -r 172.25.5.3:80 -g

##策略默认保存在/etc/sysconfig/ipvsadm中

配置后端服务器

##安装Apache服务器
yum install -y httpd

##安装arptables
yum install -y arptables_jf

##设置arptables策略,举例设置原因参考arp协议的原理
##当有数据流访问RS的VIP时,直接拒绝,DROP表示丢弃.
arptables -A IN -d 172.25.5.100 -j DROP
##当本机的数据流出去时,将VIP改为真实IP.
arptables -A OUT -s 172.25.5.100 -j mangle --mangle-ip-s 172.25.5.2

#查看策略
arptables -L

#清空内存中的策略
arptables -F

这样就实现了RS对arp广播查询不响应了,对系统外的访问而言这台机子的VIP等同于不存在.

实现健康管理和高可用

因为都使用keepalived来实现,将配置放在一起进行说明.

  • 在软件源中增加高可用仓库.
[HighAvailability]
name=HighAvailability
baseurl=http://172.25.66.254/rhel6.5/addons/HighAvailability
gpgcheck=0
enabled=1
  • 安装keepalived
yum install -y keepalived
  • 修改配置文件(此处为实现了健康管理和高可用之后的配置文件)
##Server1,作为主调度机
vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {
	root@localhost
   }
   notification_email_from keepalived@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_LVS {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.5.100
    }
}

virtual_server 192.168.5.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
 #   persistence_timeout 50
    protocol TCP

    real_server 192.168.5.2 80 {
        weight 1
        TCP_CHECK{
            connect_port 80     #检查的端口
            connect_timeout 3   #检查的超时时间
            nb_get_retry 3      #重试的次数
            delay_before_retry 3
        }
     }

    real_server 192.168.5.3 80 {
        weight 1
        TCP_CHECK{
            connect_port 80     #检查的端口
            connect_timeout 3   #检查的超时时间
            nb_get_retry 3      #重试的次数
            delay_before_retry 3
        }
     }
}

##Server2,作为热备机
! Configuration File for keepalived

global_defs {
   notification_email {
	root@localhost
   }
   notification_email_from keepalived@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_LVS {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.5.100
    }
}

virtual_server 192.168.5.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
 #   persistence_timeout 50
    protocol TCP

    real_server 192.168.5.2 80 {
        weight 1
        TCP_CHECK{
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
     }

    real_server 192.168.5.3 80 {
        weight 1
        TCP_CHECK{
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
     }
}

配置文件讲解

keepalived的配置文件整体可以分为global_defs vrrp_instance VI_LVS virtual_server三部分,也就是全局设置/vrrp路由协议设置/虚拟服务(也就是调度服务)设置部分.

##参数解释
notification_email		通知邮箱
notification_email_from	设置邮件发送者
smtp_server				smtp邮箱服务地址
smtp_connect_timeout	smtp邮箱服务超时时间


# vrrp_instance VI_LVS部分
state MASTER/BACKUP		状态:主调度机/热备机
interface eth0			指定网卡设备
virtual_router_id		虚拟服务的组ID,注意不同服务的ID不能相同,同网段中出现内容不同的同ID服务日志中会出现错误
priority				权重,用于判断主机和备用机,备用机的权重需要低于主机
virtual_ipaddress		需要包含VIP

# virtual_server部分
delay_loop				心跳间隔
lb_algo rr				采用rr算法
lb_kind DR				采用DR模式
persistence_timeout 50	持久连接时长为50s
protocol				采用TCP协议
real_server				开始定义RS部分
weight 1				设置这台RS的权重为1
TCP_CHECK				健康检测方式为TCP连接检测
connect_port 80			检测端口80
connect_timeout 3		连接等待时长3s
nb_get_retry 3			尝试次数3次
delay_before_retry 3	重连间隔时间3s

正确的实验结果

##当使用curl连接VIP时,正确实现轮转
##即使RS中的某台出现问题/调度器中出现问题也不会影响业务访问
[root@foundation5 ~]# curl 172.25.5.100
Server2
[root@foundation5 ~]# curl 172.25.5.100
Server3
[root@foundation5 ~]# curl 172.25.5.100
Server2
[root@foundation5 ~]# curl 172.25.5.100
Server3
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值