使用lvs的NAT模式,布署LVS+VSFTPD实现FTP的负载均衡,要求主动模式和被动模式均可正常访问.







ftp被动模式配置:


DS配置 


echo 1 > /proc/sys/net/ipv4/ip_forward  #开启路由转发


[root@d-79 ~]# iptables -t mangle -A PREROUTING  -p tcp --dport 20:21 -j MARK --set-mark 99

[root@d-79 ~]# iptables -t mangle -A PREROUTING  -p tcp --dport 50000:50010 -j MARK --set-mark 99          #防火墙magle表打标记



[root@d-79 ~]# ipvsadm -A -f 99 -s rr -p 400

[root@d-79 ~]# ipvsadm -a -f 99 -r 192.168.2.49 -m -w

[root@d-79 ~]# ipvsadm -a -f 99 -r 192.168.2.59 -m -w 2  

[root@d-79 ~]# ipvsadm -ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

FWM  99 rr persistent 400

  -> 192.168.2.49:0               Masq   2      0          0         

  -> 192.168.2.59:0               Masq   2      0          0    


masq 说明是采用lvs的nat模式

-m --masquerading 指定LVS 的工作模式为NAT 模式
#-w指定指定权重,wrr算法下有效



RS配置:

route add default gw 192.168.2.79 dev ens33

每个调度器都要作为RS的网关


DS配置

[root@r ~]# tail -3 /etc/vsftpd/vsftpd.conf 

pasv_min_port=50000   #指定ftp传输时候的端口范围

pasv_max_port=50010

pasv_address=192.168.1.79     #指定vip




ftp主动模式配置



DS配置

iptables -t nat -A POSTROUTING -s 192.168.1.79 -j SNAT --to 192.168.1.100

主动模式下,为了确保数据包可以从rs返回客户端需要做snat



实验结果

[root@guest-100 ~]# lftp 192.168.2.59:

lftp 192.168.2.59:~> ls

drwxr-xrwx    7 0        0              55 Sep 29 03:06 pub

lftp 192.168.2.59:/> 



[root@guest-100 ~]# lftp 192.168.2.59

lftp 192.168.2.59:~> set ftp:passive-mode off

lftp 192.168.2.59:~> ls

drwxr-xrwx    7 0        0              55 Sep 29 03:06 pub

lftp 192.168.2.59:/> 



调试:

  1. 修改vip的掩码

[root@d-79 ~]# ifconfig ens33:0 192.168.1.79/25 之后可以正常访问

[root@d-79 ~]# ifconfig ens33:0 192.168.1.79/26可以正常访问

[root@d-79 ~]# ifconfig ens33:0 192.168.1.79/28 连接中断

[root@d-79 ~]# ifconfig ens33:0 192.168.1.79/27 连接中断

[root@d-79 ~]# ifconfig ens33:0 192.168.1.79/29连接中断

小结:vip的掩码设置,掩码会影响网络位,当不在同一网段的时候就会连接不到。



 2.  删除snat 之后主动模式出错了

[root@d-79 ~]# iptables -t nat -D POSTROUTING  1

小结:主动模式连接ftp下,检查pub下面的内容会发现连接不到了。







keepalived


keepalived主要有三个模块,分别是corecheckvrrpcore模块为 keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解 析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP 协议的。 

rs上面需要添加每个调度器的ip作为网关

rs配置

route add default gw 192.168.2.89 dev ens33



lvs采用nat模式 ,本实验keepalived的配置文件

[root@d-89 ~]# vim /etc/keepalived/keepalived.conf


   smtp_server 192.168.200.1

   smtp_connect_timeout 30

   router_id 1

}


vrrp_instance VI_1 {

    state MASTER

    interface ens33       #vip dip所在的接口

    virtual_router_id 51

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.1.79/24   #vip,最好带上掩码

    }

}

# vip,客户端访问的是vip

virtual_server 192.168.1.79 80 {

    delay_loop 6

    lb_algo rr

    lb_kind NAT 

    nat_mask 255.255.255.0

    #persistence_timeout 50   #这里注释不起作用,访问时候依然会持久连接

    protocol TCP


    real_server 192.168.2.49 80 {   #ip后面接空格,避免语法检测错误

        weight 1

        TCP_CHECK {

        connect_timeout 3

        }

    }

    real_server 192.168.2.59 80 {

        weight 1

        TCP_CHECK {

        connect_timeout 3

        }

    }

}

 

调试

[root@d-89 ~]# systemctl stop keepalived

客户端依然可以访问到;


小结:

  • [root@d-89 ~]# curl 192.168.2.59

curl: (7) Failed connect to 192.168.2.59:80; 拒绝连接

出现这个错误 可能原因:

  1. 是服务坏掉了

  2. 端口不对

  3. 防火墙等


  • 客户端多次总是请求同一个web服务的原因有:

  1. 持久连接

  2. 其他的服务坏掉