超详细教程lvs+keepalived+vsftp搭建高可用ftp环境

1.环境准备

Operating System

RHEL 7.8

RHEL 7.8

RHEL 7.8

RHEL 7.8

Host Name

LVS01

LVS02

ftp01

ftp02

IP Address

10.57.20.237

10.57.20.238

10.57.20.230

10.57.20.231

VIP

                   10.57.20.210

2.lvs主机配置

2.1 lvs+keepalived安装并设置开机启动

两台主机同样操作。

yum install ipvsadm keepalived -y

systemctl start ipvsadm&systemctl enable ipvsadm

systemctl start keepalived&systemctl enable keepalived

2.2 配置keepalive.conf

Note:其中check_ftpget.pl后面跟的为ftp的账号密码,要提前在ftp01和ftp02主机上创建。

2.2.1 lvs01

! Configuration File for keepalived
global_defs { #全局配置
        notification_email {
                xxxxxx@sina.com   #设置报警邮件地址,可以设置多个,每行一个。需要开启sendmail服务。
        }
        notification_email_from keepalived@localhost  #设置邮件的发送地址
        smtp_server 127.0.0.1                         #设置SMTP Server地址
        smtp_connect_timeout 30                       #设置SMTP Server的超时时间
        router_id LVS_DEVEL          #表示运行Keepalived服务器的一个标识。发邮件时显示大邮件主题中的信息
}

vrrp_sync_group VGM { #VRRP同步组设置:设置同步组可支持MASTER和BACKUP机器分别存在于内外网
                 group {
                        VI_CACHE         #VRRP实例定义
                }
}
vrrp_instance VI_CACHE {        #VRRP实例配置
         state MASTER                   #指定Keepalived的角色,MASTER表示些主机是主服务器。BACKUP表示此主机是备用服务器
         interface ens192               #指定HA监测网络的接口(查看网络接口用命令ip addr)
         virtual_router_id 230   #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识,即同一个vrrp_instance下MASTER与BACKUP必须是一致的
         priority 100                    #定义优先级,数字越大,优先级越高,一般主机高于备机
         advert_int 1                   #检查间隔,默认1秒
         authentication {               #设置认证
          auth_type PASS                #认证方式,支持PASS和AH
          auth_pass 2222                #认证的密码
         }
        virtual_ipaddress {             #设置漂移地址(虚拟IP地址),可以设置多个漂移地址,每行一个
                 10.57.20.210
        }
}

virtual_server 10.57.20.210 21 { #设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之间用空格隔开
         delay_loop 6                           #设置运行情况检查时间,单位为秒
         lb_algo wlc                            #设置负载调度算法,这里设置rr,即轮询算法
         lb_kind DR                                     #设置LVS实现负载均衡机制,有NAT、TUN、DR三个模式可选(简单说NAT支持任意OS但只支持20个负载,TUN只支持LINUX,DR支持LINUX/WINDOWS等,但只支持同一网段)
         persistence_timeout 40         #会话保持单位时间,单位是秒
         protocol TCP                           #指定转发协议类型,有TCP和UDP两种

                real_server 10.57.20.230 21 {#配置服务节点1,需要指定real server的真实IP地址和端口
                        notify_down /etc/init.d/down_mail.sh
                        notify_up   /etc/init.d/up_mail.sh
                        weight 1                                #配置服务节点的权值,权值数字越大,权值越高
                        MISC_CHECK {                    #MISC健康检查方式,执行一个程序
                                misc_path "/usr/local/bin/check_ftpget.pl -H 10.57.20.230 -u admin -p admin"     #待执行的脚本
                                misc_timeout 10         #脚本执行的超时时间
                        }
                }
                real_server 10.57.20.231 21 {#配置服务节点2,说明参考1,略
                        notify_down /etc/init.d/down_mail.sh
                        notify_up   /etc/init.d/up_mail.sh
                        weight 1
                        MISC_CHECK {
                                 misc_path "/usr/local/bin/check_ftpget.pl -H 10.57.20.231 -u admin -p admin"
                                 misc_timeout 10
                         }
                }
}

2.2.2 lvs02

! Configuration File for keepalived
global_defs { #全局配置
        notification_email {
                xxxxxx@sina.com   #设置报警邮件地址,可以设置多个,每行一个。需要开启sendmail服务。
        }
        notification_email_from keepalived@localhost  #设置邮件的发送地址
        smtp_server 127.0.0.1                         #设置SMTP Server地址
        smtp_connect_timeout 30                       #设置SMTP Server的超时时间
        router_id LVS_DEVEL          #表示运行Keepalived服务器的一个标识。发邮件时显示大邮件主题中的信息
}

vrrp_sync_group VGM { #VRRP同步组设置:设置同步组可支持MASTER和BACKUP机器分别存在于内外网
                 group {
                        VI_CACHE         #VRRP实例定义
                }
}
vrrp_instance VI_CACHE {        #VRRP实例配置
         state BACKUP                   #指定Keepalived的角色,MASTER表示些主机是主服务器。BACKUP表示此主机是备用服务器
         interface ens192               #指定HA监测网络的接口(查看网络接口用命令ip addr)
         virtual_router_id 230   #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识,即同一个vrrp_instance下MASTER与BACKUP必须是一致的
         priority 99                    #定义优先级,数字越大,优先级越高,一般主机高于备机
         advert_int 1                   #检查间隔,默认1秒
         authentication {               #设置认证
          auth_type PASS                #认证方式,支持PASS和AH
          auth_pass 2222                #认证的密码
         }
        virtual_ipaddress {             #设置漂移地址(虚拟IP地址),可以设置多个漂移地址,每行一个
                 10.57.20.210
        }
}

virtual_server 10.57.20.210 21 { #设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之间用空格隔开
         delay_loop 6                           #设置运行情况检查时间,单位为秒
         lb_algo wlc                            #设置负载调度算法,这里设置rr,即轮询算法
         lb_kind DR                                     #设置LVS实现负载均衡机制,有NAT、TUN、DR三个模式可选(简单说NAT支持任意OS但只支持20个负载,TUN只支持LINUX,DR支持LINUX/WINDOWS等,但只支持同一网段)
         persistence_timeout 40         #会话保持单位时间,单位是秒
         protocol TCP                           #指定转发协议类型,有TCP和UDP两种

                real_server 10.57.20.230 21 {#配置服务节点1,需要指定real server的真实IP地址和端口
                        notify_down /etc/init.d/down_mail.sh
                        notify_up   /etc/init.d/up_mail.sh
                        weight 1                                #配置服务节点的权值,权值数字越大,权值越高
                        MISC_CHECK {                    #MISC健康检查方式,执行一个程序
                                misc_path "/usr/local/bin/check_ftpget.pl -H 10.57.20.230 -u admin -p admin"     #待执行的脚本
                                misc_timeout 10         #脚本执行的超时时间
                        }
                }
                real_server 10.57.20.231 21 {#配置服务节点2,说明参考1,略
                        notify_down /etc/init.d/down_mail.sh
                        notify_up   /etc/init.d/up_mail.sh
                        weight 1
                        MISC_CHECK {
                                        misc_path "/usr/local/bin/check_ftpget.pl -H 10.57.20.231 -u admin -p admin"
                                         misc_timeout 10
                         }
                }
}

2.3 配置down_mail.sh

2.3.1 lvs01

#!/bin/sh
echo "230_vsftpdown" | /usr/bin/mail -s "230_vsftpdown" abc@mail.com

2.3.2 lvs02

同lvs01

2.4 配置up_mail.sh

2.4.1 lvs01

#!/bin/sh
echo "230_vsftpup" | /usr/bin/mail -s "230_vsftpup" abc@mail.com

2.4.2 lvs02

同lvs01

2.5 配置check_ftpget.pl

该脚本为检查ftp服务是否启动

2.5.1 lvs01

#!/usr/bin/perl -w
## Written 12/5/00 Jeremy Hanmer
# $Id: check_ftpget.pl,v 1.1 2000/12/07 14:40:44 karldebisschop Exp $
use strict;
use Net::FTP;
use Getopt::Std;
use vars qw($opt_H $opt_u $opt_p $opt_f);
getopts("H:u:p:f:");
my $host = $opt_H ||
die "usage: check_ftp.pl -h host [<-u user> <-p pass> <-f file>]\n";
my $username = $opt_u || 'anonymous';
my $pass = $opt_p || "$ENV{'LOGNAME'}\@$ENV{'HOSTNAME'}" ;
my $file = $opt_f;
my $status = 0;
my $problem;
my $output = "ftp ok";
my $ftp = Net::FTP->new("$host") ||
&crit("connect");
$ftp->login("$username", "$pass") ||
&crit("login");
$ftp->get($file) ||
&crit("get") if $file;
sub crit()
{
$problem = $_[0];
$status = 2;
if ( $problem eq 'connect' ) {
$output = "can't connect";
} elsif ( $problem eq 'login' ) {
$output = "can't log in";
} elsif ( $problem eq 'get' ) {
$output = "cant get $file";
}
}
print "$output\n";
exit $status;

2.5.2 lvs02

同lvs01

3.ftp主机配置

3.1 vsftpd安装并设置开机启动,配置虚拟用户

yum install vsftpd

systemctl enable vsftpd

vi /etc/vsftpd/vsftpd.conf

vi /etc/pam.d/vsftpd.vu

db_load -T -t hash -f ftpvuser ftpvuser.db

groupadd -g 8000 ftpgrp

useradd -g ftpgrp -s /sbin/nologin -u 8000 ftpvuser

相关脚本:

3.2 配置vsftpd.conf

3.2.1 ftp01

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=0
file_open_mode=0777
anon_umask=000
dirmessage_enable=YES
connect_from_port_20=YES
#
xferlog_enable=YES
xferlog_std_format=no
log_ftp_protocol=yes
reverse_lookup_enable=NO
dual_log_enable=YES
xferlog_file=/var/log/xferlog
vsftpd_log_file=/var/log/vsftpd.log
#
listen=NO
listen_ipv6=YES
#
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES
guest_username=ftpvuser
pam_service_name=vsftpd.vu
user_config_dir=/etc/vsftpd/vuser_dir
allow_writeable_chroot=YES
one_process_model=NO
#
#ftpd_banner=Welcome to DFS service.
#
#banned_email_file=/etc/vsftpd/banned_emails
max_clients=1500
anon_max_rate=15728640
local_max_rate=15728640
max_per_ip=4000
idle_session_timeout=30

3.2.2 ftp02

同ftp01

3.3 配置/etc/pam.d/vsftpd.vu

3.3.1 ftp01

auth       required     pam_userdb.so db=/etc/vsftpd/ftpvuser
account    required     pam_userdb.so db=/etc/vsftpd/ftpvuser

3.3.2 ftp02

同ftp01

3.4 配置ftpvuser

路径/etc/vsftpd/ftpvuser,其他需要的用户自定义添加,配置完产生hash类型.db文件。

3.4.1 ftp01

admin
admin

3.4.2 ftp02

同ftp01

3.5 配置lvs客户端

 LVS-DR模式中,后端真实服务器(RealServer)无需安装相关软件,只需要对VIP进行绑定和路由设置等一系列操作,这里整理为一个脚本:lvs_realserver.sh,路径为/etc/init.d/lvs_realserver.sh

3.5.1 ftp01

#!/bin/bash
# description: Config realserver
LVS_VIP=10.57.20.210
. /etc/rc.d/init.d/functions
case "$1" in
start)
       /sbin/ifconfig lo:0 $LVS_VIP netmask 255.255.255.255 broadcast $LVS_VIP
       /sbin/route add -host $LVS_VIP dev lo:0
       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
       sysctl -p >/dev/null 2>&1
       echo "RealServer Start OK"
       ;;
stop)
       /sbin/ifconfig lo:0 down
       /sbin/route del $LVS_VIP >/dev/null 2>&1
       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
       echo "RealServer Stoped"
       ;;
status)
       # Status of LVS-DR real server.
       islothere=`/sbin/ifconfig lo:0 | grep $LVS_VIP`
       isrothere=`netstat -nr | grep "lo:0" | grep $LVS_VIP`
       if [ ! "$islothere" -o ! "isrothere" ];then
       # Either the route or the lo:0 device
       # not found.
       echo "LVS-DR real server Stoped."
       else
       echo "LVS-DR real server Running."
       fi
       ;;

*)
       echo "Usage: $0 {start|stop|status}"
       exit 1
esac
exit 0

3.5.2 ftp02

同ftp01.

3.6 配置客户端启动脚本

启动客户端的lvs_realserver.sh脚本startlvs.sh,路径为/etc/init.d/startlvs.sh

3.6.1 ftp01

#!/bin/bash
cd /etc/rc.d/init.d/
./lvs_realserver.sh start

3.6.2 ftp02

同ftp01。

3.7 设置开机启动

3.7.1 ftp01

echo "/etc/init.d/startlvs.sh" >> /etc/rc.local

3.7.2 ftp02

同ftp01。

总结

至此,搭建完成,循环测试均通过,两层冗余环境下,实现ftp环境高可用高安全负载均衡目标。

另lvs查看ftp连接数量及速度,配置超时,调度算法,工作模式等等,在后期博文中再详细介绍。

  • 30
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半岛铁盒BKB

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值