91CIO资讯

主页
分享IT知识
91CIO资讯,IT资讯网,IT知识,IT新闻,IT动向

LVS+keepalive部署FTP高可用负载均衡

更新时间:2022-03-29 02:51点击:

LVS+keepalive部署FTP高可用负载均衡

STEP 1 准备机器和环境


准备4台机器,这里以152-155四台机器为例(CENTOS 7.8)
 

  1. 173.1.3.152 (keepalived负载均衡 主机 MASTER)  
  2. 173.1.3.153 (keepalived负载均衡 备机 BACKUP)  
  3. 173.1.3.154 (FTP服务器1)  
  4. 173.1.3.155 (FTP服务器2

STEP 2 负载均衡主机安装

1、环境准备和关闭selinux

1)执行如下命令

 

Ruby代码
  1. [root@CentOS-7 ~]# yum install -y wget make kernel-devel gcc gcc-c++ libnl* libpopt* popt-static  

2)永久关闭selinux

[root@Centos7 ~]# vim /etc/selinux/config    修改配置文件


# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted
 
[root@Centos7 ~]# reboot    重启生效

3)查看内核版本,创建LN软链接,具体过程执行以下命令


Ruby代码
  1. [root@CentOS-7 ~]# lsmod |grep ip_vs  
  2. [root@CentOS-7 ~]# uname -r  
  3. (系统显示)2.6.32-358.el6.x86_64  
  4. [root@CentOS-7 ~]# ln -s /usr/src/kernels/2.6.32-358.e16.x86_64/ /usr/src/linux

2、安装ipvsadm

Ruby代码
  1. [root@CentOS-7 ~]# yum  install ipvsadm -y

验证安装

 

Ruby代码
  1. [root@CentOS-7 ~]# ipvsadm  
  2. 显示如下:  
  3. ***********************************************************************************  
  4.         IP Virtual Server version 1.2.1 (size=4096)  
  5.         Prot LocalAddress:Port Scheduler Flags  
  6.           -> RemoteAddress:Port           Forward Weight ActiveConn InActConn  
  7. ***********************************************************************************  
  8. [root@CentOS-7 ~]# lsmod |grep ip_vs  
  9. 显示如下  
  10. ***********************************************************************************  
  11.         ip_vs_rr                1420  0   
  12.         ip_vs_wlc               1241  1   
  13.         ip_vs                 115643  5 ip_vs_rr,ip_vs_wlc  
  14.         libcrc32c               1246  1 ip_vs  
  15.         ipv6                  321422  20 ip_vs,ip6t_REJECT,nf_conntrack_ipv6,nf_defrag_ipv6  

3、安装keepalived

Ruby代码
  1. [root@CentOS-7 ~]# yum  install keepalived -y

4、配置keepalived.conf

1)将keepalived.conf通过SFTP上传至/etc/keepalived

 将check_ftpget.pl上传至/usr/local/bin
check_ftpget.pl文件内容如下:

[root@Centos7 ~]# cat /usr/local/bin/check_ftpget.pl

#!/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 [  ] ";
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()
{undefined
$problem = $_[0];
$status = 2;
if ( $problem eq 'connect' ) {undefined
$output = "can't connect";
} elsif ( $problem eq 'login' ) {undefined
$output = "can't log in";
} elsif ( $problem eq 'get' ) {undefined
$output = "cant get $file";
}
}
print "$output ";
exit $status;
 

2)变更check_ftpget.pl文件权限(凡是遇到文件权限访问等问题,都需要变更文件权限,如本文没有提到的文件有权限访问问题,请参考这里)

Ruby代码
  1. [root@CentOS-7 ~]# chmod 755 /usr/local/bin/check_ftpget.pl  

 

3)keepalived.conf文件在这个安装手册上已经配置好了,不需要变动,但实际生产环境中可能由于IP地址不一样,需要变更一些配置。

以下我就这些配置跟大家做个说明

Ruby代码
  1. ! Configuration File for keepalived   
  2. global_defs { #全局配置  
  3.     notification_email {  
  4.         xxxxxx@sina.com   #设置报警邮件地址,可以设置多个,每行一个。需要开启sendmail服务。  
  5.     }  
  6.     notification_email_from keepalived@localhost  #设置邮件的发送地址  
  7.     smtp_server 127.0.0.1                         #设置SMTP Server地址  
  8.     smtp_connect_timeout 30                       #设置SMTP Server的超时时间  
  9.     router_id LVS_DEVEL          #表示运行Keepalived服务器的一个标识。发邮件时显示大邮件主题中的信息  
  10. }    
  11.   
  12. vrrp_sync_group VGM { #VRRP同步组设置:设置同步组可支持MASTER和BACKUP机器分别存在于内外网  
  13.          group {  
  14.             VI_CACHE         #VRRP实例定义  
  15.         }   
  16. }    
  17. vrrp_instance VI_CACHE {    #VRRP实例配置  
  18.      state MASTER           #指定Keepalived的角色,MASTER表示些主机是主服务器。BACKUP表示此主机是备用服务器   
  19.      interface ens192         #指定HA监测网络的接口(查看网络接口用命令ip addr)  
  20.      virtual_router_id 51   #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识,即同一个vrrp_instance下MASTER与BACKUP必须是一致的  
  21.      priority 100           #定义优先级,数字越大,优先级越高,一般主机高于备机  
  22.      advert_int 1           #检查间隔,默认1秒  
  23.      authentication {       #设置认证  
  24.       auth_type PASS        #认证方式,支持PASS和AH  
  25.       auth_pass 1111        #认证的密码  
  26.      }   
  27.     virtual_ipaddress {     #设置漂移地址(虚拟IP地址),可以设置多个漂移地址,每行一个  
  28.          173.1.3.156      
  29.     }   
  30. }   
  31.    
  32. virtual_server 173.1.3.156 21 { #设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之间用空格隔开  
  33.      delay_loop 6               #设置运行情况检查时间,单位为秒  
  34.      lb_algo rr                #设置负载调度算法,这里设置rr,即轮询算法  
  35.      lb_kind DR                 #设置LVS实现负载均衡机制,有NAT、TUN、DR三个模式可选(简单说NAT支持任意OS但只支持20个负载,TUN只支持LINUX,DR支持LINUX/WINDOWS等,但只支持同一网段)  
  36.      persistence_timeout 50     #会话保持单位时间,单位是秒  
  37.      protocol TCP               #指定转发协议类型,有TCP和UDP两种   
  38.    
  39.         real_server 173.1.3.154 21 {#配置服务节点1,需要指定real server的真实IP地址和端口  
  40.             weight 1                #配置服务节点的权值,权值数字越大,权值越高  
  41.             MISC_CHECK {            #MISC健康检查方式,执行一个程序  
  42.                 misc_path "/usr/local/bin/check_ftpget.pl -H 173.1.3.154 -u admin -p 123457"    #待执行的脚本  
  43.                 misc_timeout 10     #脚本执行的超时时间  
  44.             }  
  45.         }   
  46.         real_server 173.1.3.155 21 {#配置服务节点2,说明参考1,略  
  47.             weight 1  
  48.             MISC_CHECK {   
  49.                     misc_path "/usr/local/bin/check_ftpget.pl -H 173.1.3.155 -u admin -p 123457"  
  50.                      misc_timeout 10  
  51.              }       
  52.         }   
  53. }  

5、启动keepalived

1)直接启动:

Ruby代码
  1. [root@CentOS-7 ~]# systemctl start keepalived  

  2)添加开机自动启动

 Ruby代码
  1. [root@CentOS-7 ~]# systemctl enable keepalived  

6、关闭防火墙
 Ruby代码
  1. [root@CentOS-7 ~]# systemctl stop firewalld

STEP 3 负载均衡备机安装

1、环境准备

参考STEP 2 主机配置

 

2、安装ipvsadm

参考STEP 2 主机配置

 

3、安装keepalived

参考STEP 2 主机配置

 

4、配置keepalived.conf

1)将keepalived_bak.conf通过SFTP上传至/etc/keepalived,并改名为keepalived.conf

 将check_ftpget.pl上传至/usr/local/bin

其他步骤参考主机,备机注意keepalived.conf配置有两个地方和主机不同

state BACKUP

priority 99

 

5、启动keepalived

参考STEP 2 主机配置

 

6、关闭防火墙

参考STEP 2 主机配置


STEP 4 FTP服务器配置

1、环境准备

假设你已经安装了VSFTPD,此文中VSFTPD不是重点,安装方法在此不再赘述
 

 2、FTP配置

1)将lvs_realserver.sh上传至FTP服务器/etc/rc.d/init.d
 

[root@nhmes-ftp1 ~]# cat /etc/rc.d/init.d/lvs_realserver.sh 
#!/bin/bash
#description:start realserver
VIP1=173.1.3.156
/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

 

2)变更权限

Ruby代码   
  1. [root@CentOS-7 ~]# chmod 755 /etc/rc.d/init.d/lvs_realserver.sh  

3)启动配置脚本

马上启动:

Ruby代码 
  1. [root@CentOS-7 ~]# /etc/rc.d/init.d/lvs_realserver.sh start  

  开机自启动(后台方式):

在/etc/rc.d/rc.local中添加一行,并且给rc.local文件执行权限

Ruby代码  
  1. /etc/rc.d/init.d/lvs_realserver.sh start&
  2. chmod  +x  /etc/rc.d/rc.local

3)变更functions文件权限

Ruby代码   
  1. [root@CentOS-7 ~]# chmod 755 /etc/rc.d/init.d/functions

STEP 5 测试

1、可以通过FTP客户端,直接连接173.1.3.156虚拟FTP服务

Ruby代码
  1. IP:173.1.3.156  
  2. PORT:21  
  3. USER:admin  
  4. PASS:123457  

 

2、查看虚拟IP服务状态

在活动负载均衡机器(默认主机)上执行如下命令:

Ruby代码
  1. [root@CentOS-7 ~]# ipvsadm  
  2.     IP Virtual Server version 1.2.1 (size=4096)  
  3.     Prot LocalAddress:Port Scheduler Flags  
  4.         -> RemoteAddress:Port           Forward Weight ActiveConn InActConn  
  5.     TCP  173.1.3.156:ftp wlc persistent 50  
  6.         -> 173.1.3.154:ftp              Route   1      1          0           
  7.         -> 173.1.3.155:ftp              Route   1      3          0     

 

3、停止负载均衡主机服务

Ruby代码
  1. [root@CentOS-7 ~]# systemctl stop keepalived       #停止  
  2. [root@CentOS-7 ~]# systemctl restart keepalived    #重启  
  3. [root@CentOS-7 ~]# systemctl start keepalived     #开启  
  4. [root@CentOS-7 ~]# systemctl status keepalived     #查看状态  

  停止负载均衡主机,系统会自动唤醒备机,无需手工切换,自动化无人植守配置。切换时间目前配置的是1秒,但切换可能需要1-20秒不等的时间

主机恢复后,备机将自动进入休眠状态,如此反复。

 

4、停止负载均衡备机服务

命令参考上一条,对备机作任何变更,在主机存活期间无任何影响,但如果主机服务宕机,则会有影响,将导致虚拟FTP不可用。

 

5、停止FTP真机服务

停止任意一台真机服务,不会影响虚拟FTP服务,虚拟FTP服务会自动连上可以提供服务的FTP服务器,如果所有的FTP真机服务都宕机了,则虚拟FTP也将无法访问。

当真机FTP服务恢复正常后,虚拟FTP将自动添加真机服务至虚拟队列中,无人值守。

 

6、清除和手工添加一些虚拟IP规则

Ruby代码 
  1. ipvsadm -C  #清除  
  2. ipvsadm -A -t 173.1.3.156:21 -s wlc #添加虚拟IP TCP协议   
  3. ipvsadm -a -t 173.1.3.156:21 -r 173.1.3.154 -g -w 1  #添加虚拟IP TCP协议真机   
  4. ipvsadm -a -t 173.1.3.156:21 -r 173.1.3.155 -g -w 1  #添加虚拟IP TCP协议真机  

  其他规则参考网络上ipvsadm命令用法





官方微信号