Linux---lvs (DR)

LVS模式

  • LVS:Linux Virtual Server,Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的*软件项目之一。
  • 工作在TCP/IP协议的四层,其转发是依赖于四层协议的特征进行转发,由于其转发要依赖于协议的特征进行转发,因此需要在内核的TCP/IP协议栈进行过滤筛选,这就需要在内核的模块来完成,而这样的过滤转发规则又是由管理员进行定义。
  • LVS是两段式的架构设计,在内核空间中工作的是”ipvs”,而在用户空间中工作的,用来定义集群服务规则的是”ipvsadm”。这就很容易想到iptables,而LVS正好工作在iptables的input链上。

LVS的组成

  • ipvsadm:用于管理集群服务的命令行工具,工作于Linux系统中的用户空间。
  • ipvs:IP虚拟服务器(IP Virtual Server),简写为IPVS,为lvs提供服务的内核模块,工作于内核空间 (相对于是框架,通过ipvsadm添加规则,来实现ipvs功能)。

LVS中每个主机IP地址的定义

  • VIP:Director用来向客户端提供服务的IP地址,也是DNS解析的IP
  • RIP:集群节点(后台真正提供服务的服务器)所使用的IP地址
  • DIP:Director用来和RIP进行交互的IP地址
  • CIP:公网IP,客户端使用的IP

LVS的四种转发模式

  • DR: 直接路由 (Direct routing)
  • TUN: IP隧道 (IP tunneling)
  • NAT: 网络地址转换 (Network address translation)
  • FullNAT: 网络地址转换

DR

  • client -> vs -> Rs ->client
  • 修改目标MAC
  • 请求由LVS接受,由真实提供服务的服务器(RealServer, RS)直接返回给用户,返回的时候不经过LVS。
  • 负载调度器中只负责调度请求,而服务器直接将响应返回给客户,可以极大地提高整个集群系统的吞吐量。
  • DR模式是性能最好的一种模式。
  • 调度器和服务器组都必须在物理上有一个网卡通过不分断的局域网相连。
  • LVS和RS必须在同一个VLAN下,否则LVS无法作为RS的网关。

DR模式

  • DR 利用大多数 Internet 服务的非对称特点,负载调度器中只负责调度请求,而服务器直接将响应返回给客户,可以极大地提高整个集群系统的吞吐量。
  • 调度器和服务器组都必须在物理上有一个网卡通过不分断的局域网相连,如通过交换机或者高速的HUB 相连。
  • VIP 地址为调度器和服务器组共享,调度器配置的 VIP 地址是对外可见的,用于接收虚拟服务的请求报文;
  • 所有的服务器把 VIP 地址配置在各自的 Non­ARP 网络设备上,它对外面是不可见的,只是用于处理目标地址为 VIP 的网络请求。
    Linux---lvs (DR)

LVS /DR+ipvsadm实现对后端服务器无健康监测的负载均衡

1   首先在关闭虚拟机server1上的varnish

编写yum源的配置文件如图,再进行yum install  ipvsadm -y  安装

Linux---lvs (DR)

调度算法 – rr轮询

编写策略并保存如图:

Linux---lvs (DR)

给三台机子给vip

Linux---lvs (DR)

Linux---lvs (DR)

Linux---lvs (DR)

Linux---lvs (DR)

测试:

两台测试机都好着

Linux---lvs (DR)

当某台测试机宕机(server2)  如图:(也就是停掉httpd后)

Linux---lvs (DR)

 

Linux---lvs (DR)

Linux---lvs (DR)

Linux---lvs (DR)

Linux---lvs (DR)

arp  -d   是删除之前的缓存。

Linux---lvs (DR)

 

LVS/DR+ldirectord实现对后端服务器有健康监测的负载均衡

1    server1 配置yum源如图:再安装    ldirectord-3.9.5-3.1.x86_64.rpm

  Linux---lvs (DR)

Linux---lvs (DR)

查看配置文件,并且复制到/etc/ha.d中

Linux---lvs (DR)

一                   编写配置文件如图:vim  ldirectord.cf

Linux---lvs (DR)

修改server1的httpd  文件中的端口为80(因为之前的实验改为了8080)

关掉配置的 ipvsadm服务,开启httpd服务

编写一个server1的index.html

Linux---lvs (DR)

Linux---lvs (DR)

Linux---lvs (DR)

二       编辑配置文件

Linux---lvs (DR)

开启服务:

Linux---lvs (DR)

查看策略是否成功如图:

Linux---lvs (DR)

测试:如图

Linux---lvs (DR)

当关闭server2  3  的httpd后  ,也就是两个都宕机后会出现server1中index.html的内容

三   Keepalived(高可用)

安装Keepalived

Linux---lvs (DR)

之后操作如下:

Linux---lvs (DR)

然后执行命令make  install

在虚拟机server1中安装mailx (yum  install  mailx)因为等会改配置文件中要用到此功能

Linux---lvs (DR)

Linux---lvs (DR)

Linux---lvs (DR)

Linux---lvs (DR)

Linux---lvs (DR)

Linux---lvs (DR)

server1上编写配置文件

Linux---lvs (DR)

Linux---lvs (DR)

Linux---lvs (DR)

Linux---lvs (DR)

查看策略:

Linux---lvs (DR)

再server4上修改如下:

Linux---lvs (DR)

当主机关闭keepalived时,server4开启时,server4上会自动加上ip/32

Linux---lvs (DR)

Linux---lvs (DR)

当主机开启keepalived时,server4开启时,server1上会自动加上ip/32   而server4上没有

Linux---lvs (DR)

Linux---lvs (DR)

 

Linux---lvs (DR)

由此可见,keepalived服务时  ,当主的停掉时,辅助的会自动补上,当主的开启时,辅助的则不影响。这样以来客户端的测试不会受到影响。lvs+keepalived达到了真正的负载均衡,高可用。

Linux---lvs (DR)

 

当server1上同时作两个服务的轮询时,配置文件如下:   首先给server2 和server3 安装vsftp服务开启它,并开启httpd

[[email protected] keepalived]# cat keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100
        172.25.254.200
    }
}

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

    real_server 172.25.254.2 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
    real_server 172.25.254.3 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}


virtual_server 172.25.254.200 21 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP

    real_server 172.25.254.2 21 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
    real_server 172.25.254.3 21 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
    }
    }
}

然后执行命令/etc/init.d/keepaliverd  restart

查看ip  addr

Linux---lvs (DR)

测试:结果如图:

Linux---lvs (DR)

 

 

实验两个虚拟机的之间两种服务的间高可用。

给server2 和server3 安装vsftp服务开启它,并开启httpd

再server1   上   编写  vim keepalived.conf:内容如下

然后重启服务      /etc/init.d/keepalived restart

 

! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

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

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

    real_server 172.25.254.2 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
    real_server 172.25.254.3 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}
vrrp_instance VI_2 {
    state BACKUP
    interface eth0
    virtual_router_id 52
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.200
    }
}

virtual_server 172.25.254.200 21 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP

    real_server 172.25.254.2 21 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
    real_server 172.25.254.3 21 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
    }
    }
}

 

再server4  上编写vim keepalived.conf:内容如下

然后重启服务      /etc/init.d/keepalived restart

! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100
    }
}


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

    real_server 172.25.254.2 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
    real_server 172.25.254.3 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}
vrrp_instance VI_2 {
    state MASTER
    interface eth0
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.200
    }
}

virtual_server 172.25.254.200 21 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP

    real_server 172.25.254.2 21 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
    real_server 172.25.254.3 21 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
    }
    }
}

之后查看ip addr             (100/32 的再server1上,200/32的再server4上)

Linux---lvs (DR)

 

Linux---lvs (DR)

测试:由于keepalived的开启,server1和sserver4互相形成主副的关系

Linux---lvs (DR)

当server2的vsftpd服务关闭时,会自动去找server3

Linux---lvs (DR)

当server3的vsftpd关闭,server2的开启会自动去找server2

Linux---lvs (DR)

当server1上的keepalived服务停止运行,server4就会自动补上去,不影响客户端的体验。

再server1上的keepalived重新开启后,server4则会自动退去,继续由server1来支持它的轮询。