lvs+keepalived+vsftp實現主備負載均衡ftp集羣
2010-3-17
目錄
lvs+keepalived+vsftp實現主備負載均衡ftp集羣
一、拓撲描述
負載均衡主服務器(master)10.99.0.245VIP:10.99.0.145
負載均衡備份服務器(backup)10.99.0.226VIP:10.99.0.145
真實ftp服務器110.99.0.246
真實ftp服務器210.99.0.247
二、環境說明
本案例涉及到4臺服務器,操作系統均爲turbolinux11 64位操作系統,內核版本爲2.6.18-53。ftp軟件爲vsftp。
三、Lvs+keepalived安裝配置
3.1負載均衡主服務器配置
3.1.1下載軟件
需要安裝ipvsadm-1.24.tar.gz和keepalived-1.1.19.tar.gz兩個軟件,下載地址如下:
http://www.linuxvirtualserver.org/software/ipvs.html
http://www.keepalived.org/software/keepalived-1.1.19.tar.gz
3.1.2軟件安裝
ipvsadm-1.24.tar.gz安裝
將ipvsadm-1.24.tar.gz複製到/usr/src/目錄下
對內核源碼做個軟連接,否則會報錯,注意keepalived安裝的時候,也是需要這個軟連接的。
#ln –s /usr/src/kernels/2.6.18-53-x86_64 /usr/src/linux
解壓程序包
# tar –zxvf ipvsadm-1.24.tar.gz
編譯安裝
# cd ipvsadm-1.24
# make
# make install
驗證安裝
# ipvsadm
顯示如下:
**************************************************************
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:PortForward Weight ActiveConn InActConn
**************************************************************
# lsmod |grep ip_vs
顯示如下
**************************************************************
ip_vs_*******1
ip_vs****** 3ip_vs_**
**************************************************************
keepalived-1.1.19.tar.gz安裝
同樣,將keepalived-1.1.19.tar.gz複製到/usr/src/目錄下
解壓、編譯
# tar –zxvf keepalived-1.1.19.tar.gz
# cd keepalived-1.1.19
# ./configure --prefix=/usr/local/keepalived
注意,出現如下顯示,則表示配置成功,紅色的三行必須爲YES
**************************************************************
Keepalived configuration
-----------------------------------------------
Keepalived version : 1.1.19
Compiler : gcc
Compiler flags : -g -O2
Extra Lib : -lpopt -lssl -lcrypto
Use IPVS Framework : Yes
IPVS sync daemon support : Yes
Use VRRP Framework : Yes
Use LinkWatch : No
Use Debug flags : No
-------------------------------------------------
**************************************************************
# make
# make install
配置啓動
#cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
#cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
#mkdir /etc/keepalived
#cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
#cp /usr/local/keepalived/sbin/keepalived /usr/sbin
#service keepalived start|stop(先不要啓動)
3.1.3 keepalived配置
Keepalived只有一個配置文件,及/etc/keepalived/keepalived.conf,文件內容如下:
************************************************************************
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_sync_group VGM {
group {
VI_CACHE
}
}
vrrp_instance VI_CACHE {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_typePASS
auth_pass 1111
}
virtual_ipaddress {
10.99.0.145
}
}
virtual_server 10.99.0.145 21 {
delay_loop 6
lb_algo wlc
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 10.99.0.246 21 {
weight 1
MISC_CHECK {
misc_path "/usr/local/bin/check_ftpget.pl -H 10.99.0.246 -u dx1 -p 111111"
misc_timeout 10
}
}
real_server 10.99.0.247 21 {
weight 1
MISC_CHECK {
misc_path "/usr/local/bin/check_ftpget.pl -H 10.99.0.247 -u dx1 -p 111111"
misc_timeout 10
}
}
}
************************************************************************
配置文件中的紅色部分,涉及到一個腳本,該腳本作用爲檢測ftp服務是否正常,文件內容如下:
************************************************************************
#!/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;
************************************************************************
設置成自啓動:vi /etc/rc.local //裏面添加。
注意:此時負載均衡主服務器已配置完畢,ipvsadm是不用做任何配置的,只需要配置keepalived即可。Keepalived運行在ipvsadm之上,負責將配置加載到ipvsadm。
3.2負載均衡備份服務器配置
3.2.1軟件下載
同上
3.2.2軟件安裝
同上
3.2.3 keepalived配置
Keepalived配置文件,與主服務器略有不同,紅色部分標識(兩處),內容如下:
************************************************************************
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_sync_group VGM {
group {
VI_CACHE
}
}
vrrp_instance VI_CACHE {
state BACKUP
interface eth0
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_typePASS
auth_pass 1111
}
virtual_ipaddress {
10.99.0.145
}
}
virtual_server 10.99.0.145 21 {
delay_loop 6
lb_algo wlc
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 10.99.0.246 21 {
weight 1
MISC_CHECK {
misc_path "/usr/local/bin/check_ftpget.pl -H 10.99.0.246 -u dx1 -p 111111"
misc_timeout 10
}
}
real_server 10.99.0.247 21 {
weight 1
MISC_CHECK {
misc_path "/usr/local/bin/check_ftpget.pl -H 10.99.0.247 -u dx1 -p 111111"
misc_timeout 10
}
}
}
************************************************************************
同時需要check_ftpget.pl這個文件,內容與主服務器相同。
設置成自啓動:vi /etc/rc.local //裏面添加。
3.3真實ftp服務器配置
真實ftp服務器不用安裝任何軟件,有ftp服務即可,只需做如下操作。
編寫腳本/etc/rc.d/init.d/lvs_realserver.sh,內容如下:
************************************************************************
#!/bin/bash
#description:start realserver
VIP1=10.99.0.145
/etc/rc.d/init.d/functions
case "$1" in
start)
echo " start LVS of RealServer"
/sbin/ifconfig lo:0 $VIP1 broadcast $VIP1 netmask 255.255.255.255 up
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
;;
stop)
/sbin/ifconfig lo:0 down
echo "close LVS Directorserver"
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 "Usage: $0 {start|stop}"
exit 1
esac
# shell end
************************************************************************‘
將該腳本添加到/etc/rc.d/rc.local以開機自啓動
/etc/rc.d/init.d/lvs_realserver.sh start&
四、服務啓動
負載均衡主服務器、負載均衡備份服務器,在/etc/rc.d/rc.local添加一行,內容爲“service keepalived start”。真實ftp服務器,在/etc/rc.d/rc.local添加一行,內容爲“/etc/rc.d/init.d/lvs_realserver.sh start&”。當然真實服務器ftp服務必須能自啓動,可以在setup中配置。
負載均衡主服務器驗證
# ipvsadm顯示如下:
# ip addr顯示如下
負載均衡備份服務器驗證
# ipvsadm顯示如下:
# ip addr顯示如下
附錄:vsftp配置
*****************************************************************************
設置說明:只允許本地用戶(dx1、lt1、yd1)登錄,權限:只能上傳、不能下載、不能刪除
*****************************************************************************
具體配置如下,包含vsftpd.conf、chroot_list、user_list、ftpusers四個配置文件
*******************************************************************************
####################################
###vsftpd.conf###
####################################
#/etc/vsftpd/vsftpd.conf
#host
#是否使用服務器本地時間,YES爲是
use_localtime=YES
#用戶是否有寫權限
write_enable=YES
#用戶是否可以下載,設置爲NO,即限制用戶下載
download_enable=NO
dirmessage_enable=YES
#用戶可以使用的ftp命令,此處沒有DELE,即限制用戶刪除
cmds_allowed=ABOR,CWD,LIST,MDTM,MKD,NLST,PASS,PASV,PORT,PWD,QUIT,RETR,RMD,RNFR,RNTO,SIZE,STOR,TYPE,USER,ACCT,APPE,CDUP,HELP,MODE,NOOP,REIN,STAT,STOU,STRU,SYST
#是否開啓上傳下載日誌
xferlog_enable=YES
#日誌文件
xferlog_file=/var/log/vsftpd.log
#data_connection_timeout=60
#idle_session_timeout=600
#服務器最大用戶連接數
max_clients=50
#每個ip最大連接數
max_per_ip=5
ascii_upload_enable=NO
ascii_download_enable=NO
connect_from_port_20=YES
pasv_enable=YES
pasv_min_port=65400
pasv_max_port=65420
pam_service_name=vsftpd
tcp_wrappers=YES
listen_port=21
listen=YES
#anonymous
#是否開啓匿名用戶
anonymous_enable=NO
#real user
#是否開啓本地用戶
local_enable=YES
#文件上傳後的權限 022相當於 -rw-r--r--
local_umask=022
#是否將用戶鎖定在用戶家目錄下
chroot_list_enable=YES
#需要鎖定家目錄的用戶列表文件
chroot_list_file=/etc/vsftpd/chroot_list
#是否使用用戶限制列表
userlist_deny=YES
#用戶限制列表文件
userlist_file=/etc/vsftpd/user_list
#文件傳輸最大速度
local_max_rate=900000
*******************************************************************************
####################################
###chroot_list###
####################################
#/etc/vsftpd/chroot_list注:需要事先建好以下三個系統用戶、並設置好密碼(#adduser dx1)
dx1
lt1
yd1
*******************************************************************************
####################################
###user_list###
####################################
#/etc/vsftpd/user_list
#視本地用戶目錄而定
root
rpc
rpcuser
rpm
sabayon
shutdown
smmsp
squid
sshd
sync
tomcat
uucp
vcsa
webalizer
xfs
yhx
*******************************************************************************
####################################
###ftpusers###
####################################
#/etc/vsftpd/ftpusers
#視本地用戶目錄而定
root
rpc
rpcuser
rpm
sabayon
shutdown
smmsp
squid
sshd
sync
tomcat
uucp
vcsa
webalizer
xfs
yhx
*******************************************************************************