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连接数量及速度,配置超时,调度算法,工作模式等等,在后期博文中再详细介绍。