FPT+lsyncd实现多服务器文件分发(文件同步)

[TOC]

一.应用场景

简介:当程序应用通过FTP上传文件到文件服务器后,文件服务器会将新上传的文件同步分发到已配置好的服务器。

应用场景:

  1. 大流量视频网站中,为了保证视频能够流畅播放,需要做推流服务器的集群,这些集群需要保证视频文件的一致性,所以需要服务器之间的文件分发同步。
  2. 有文件同步需求的服务器集群应用。

结构流程图如下:

FPT+lsyncd实现多服务器文件分发(文件同步)_第1张图片

二.服务器配置

本教程使用Windows10+VMware Workstation Pro,用虚拟机来做演示。用到的Linux发行版,均为CentOS7。

简单起见,只配置了一台文件分发主机,两台从机。安装虚拟机略过。

虚拟机均采用网络桥接的方式,分配了内网的IP,后面操作均通过xshell软件,远程操作。

主机 Linux发行版 IP地址
文件服务器 ftp和lsyncd的server CentOS7 10.10.67.139
客户机1 rsync client CentOS7 10.10.67.141
客户机2 rsync client CentOS7 10.10.67.149

三.搭建ftp服务器

安装前,可以一下配置阿里云yum源,提高yum下载速度。

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum makecache

CentOS7搭建ftp服务器,简单总结有如下几个步骤:

  • 第一步,通过yum安装vsftpd;
  • 第二步,正确配置vsftpd;
  • 第三步,新增ftp用户,并配置其访问路径;
  • 第四步,防火墙和SELinux的配置;
  • 第五步,可能会遇到的一些问题;

1.安装vsftpd

yum install -y vsftpd

2.修改配置文件

vsftpd有多种配置方式,本文使用一种比较简单通用的配置。

关于vsftpd的各种配置方式,请参考:https://blog.51cto.com/meilin...


打开配置文件(如果不熟悉Linux系统,建议将配置文件弄到Windows用户VSCode等文本编辑工具编辑)

vi /etc/vsftpd/vsftpd.conf

修改配置文件如下:

1.不允许匿名访问

anonymous_enable=NO

2.允许使用本地帐户进行FTP用户登录验证

local_enable=YES

3.使用户不能离开主目录

当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd.chroot_list文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录。

chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

配置文件最后添加(不添加会启动失败)

500 OOPS: vsftpd: refusing to run with writable root inside chroot()

如果/etc/vsftpd/chroot_list不存在,则需要创建该文件:

vi /etc/vsftpd/chroot_list

:wq直接保存并退出就行。(创建一个空文件即可)

4.设定支持ASCII模式的上传和下载功能。

ascii_upload_enable=YES
ascii_download_enable=YES 

5.修改完配置文件后,启动vsftpd服务

systemctl start vsftpd.service # 启动命令
systemctl status -l vsftpd.service # 查看启动状态

6.配置文件参考

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
ascii_upload_enable=YES
ascii_download_enable=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=NO
listen_ipv6=YES

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
allow_writeable_chroot=YES

备注:如果嫌配置麻烦,想直接替换配置文件的话,请留意第3点,记得要创建/etc/vsftpd/chroot_list。

3.创建ftp用户

1.创建用户

useradd -d /var/www/vod -g ftp -s /sbin/nologin ftpuser

注意:/var/ftp/public_root是ftp的访问路径,ftpuser是ftp用户。可以根据自己的情况修改。

2.修改该FTP用户密码

passwd ftpuser  

3.确保该用户创建成功

cat /etc/passwd #查看ftpusr是否新建成功,以及路径是否正确

4.使用FTP工具登录测试

这里使用FileZilla Client登录FTP。

FPT+lsyncd实现多服务器文件分发(文件同步)_第2张图片

5.防火墙和SELinux的配置

到上一步,通过工具连接FTP,会遇到一些问题,这些问题一般是由于防火墙和SELinux的配置导致的。

详细的说明和处理方法,参考:https://blog.csdn.net/LeoFitz...

关于防火墙,需要开放21和22端口,这里为了方便起见,直接关掉防火墙。

#执行关闭命令: 
systemctl stop firewalld.service
#再次执行查看防火墙命令:
systemctl status firewalld.service
#执行开机禁用防火墙自启命令  :
systemctl disable firewalld.service

SELinux的配置:

setsebool -P tftp_home_dir 1
setsebool -P allow_ftpd_full_access 1

四.主服务器server端安装lsyncd并配置

1.yum 安装 lsyncd

[root@user ~]# yum -y install lsyncd #安装
[root@user ~]# rpm -qa lsyncd #查看安装是否成功
lsyncd-2.2.2-1.el7.x86_64
[root@user ~]# rpm -qc lsyncd  #查看lsyncd的文件路径
/etc/logrotate.d/lsyncd
/etc/lsyncd.conf   #==》Lsyncd主配置文件
/etc/sysconfig/lsyncd

2.配置lsyncd

安装好 lsyncd 后,找到其配置文件:/etc/lsyncd.conf。

lsyncd 中,远程服务器的文件同步有两种实现:1.rsync 2.ssh

使用 rsync,需要在 client 端配置 rsync。使用 ssh,需要 service 端可以通过 ssh 免密登录 client 端。

推荐使用rsync方式,速度快,更可靠

lsyncd的配置文件分为两部分:

1、settings 部分 关于lsyncd工具自身的一些选项设置

2、sync 部分 主要用来定义同步时的一些设置,可以同时同步多个目录,只需要在该代码块中事先定义好多个sync即可

具体的配置和其他使用方法,可以参考:


这里给出本示例的配置文件:

settings {
    logfile      = "/var/log/lsyncd/lsyncd.log",
    statusFile   = "/var/log/lsyncd/lsyncd.status",
    inotifyMode  = "CloseWrite",
    insist       = true
}

sync {
    default.rsync,
    source    = "/var/www/vod",  
    target    = "[email protected]::backup",
    delay     = 0,
    rsync     = {
        binary    = "/usr/bin/rsync",
        password_file = "/etc/images.pas",
        archive   = true,
        compress = false,
        verbose   = true
        }
}

sync {
    default.rsync,
    source    = "/var/www/vod",  
    target    = "[email protected]::backup",
    delay     = 0,
    rsync     = {
        binary    = "/usr/bin/rsync",
        password_file = "/etc/images.pas",
        archive   = true,
        compress = false,
        verbose   = true
        }
}

说明:

一个sync{ }配置就对应一个client端。

其中,核心就是 :

target = "[email protected]::backup" ,rsyncuser和::后面的模块名称,需要在client端配置rsync,中间的IP地址大家都应该懂。

source = "/var/www/vod",主服务器分发文件的根路径。

第二点,因为client端的rsync是需要配置用户名和密码的,用户名在上面已经提到了,密码需要另外创建一个密码文件。

配置里面是这样写的: password_file = "/etc/images.pas"

所以要在这个路径下新建这个密码文件,server端需要配置一个密码文件,与client端对应。

vim /etc/images.pas # 创建密码文件

里面的内容,直接填写你想要密码就可以了。这里我使用 123456

所以这个文件的内容就是123456 , 不要写其他任何内容,前面也不要有空格。

注意: rsync也需要一个密码文件,但是格式不同,后面会提到。


3.启动服务

配置文件写好之后,启动服务

#启动服务:
sudo systemctl start lsyncd
#查看启动日志:
sudo systemctl status -l lsyncd

注意:如果client端没有配置好rsync,直接启动lsyncd会失败。但是,如果在配置文件中的setting中配置了 insist=true,则会直接启动lsyncd,一直检测client的连接情况,可以连接成功的,就同步文件

五.从服务器client端安装rsync并配置

1.安装并编辑配置文件

yum -y install rsync # 安装
vim /etc/rsyncd.conf # 配置

2.配置文件内容

uid = root
gid = root
use chroot = yes
max connections=0
log file=/var/log/rsyncd/rsyncd.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock

[backup]
path = /var/www/vod
read only = no
list = yes
auth users = rsyncuser
secrets file = /etc/images.pas

说明:

1.[backup] 为模块名称,与上文中在lsyncd中配置的“target = "[email protected]::backup"”对应

2.auth users = rsyncuser,同上

3.path表示,希望将文件同步到哪个路径

3.上文提到的密码文件,与这个配置对应 secrets file = /etc/images.pas

创建client端的密码文件(注意内容的格式!这个密码文件格式为: 用户名:密码):

vim /etc/images.pas # 创建密码文件
# 文件内容(与配置文件中auth users对应):
# rsyncuser:123456
chmod 600 /etc/images.pas # 修改密码文件权限

3.启动rsync

/usr/bin/rsync --port=873 --daemon # 启动
ps -ef|grep rsync # 查看进程是否启动成功

六.使用示例

步骤:

  1. 应用程序或者工具,通过ftp上传文件到指定的文件夹。本示例的文件夹路径为:/var/www/vod
  2. lsyncd检测到/var/www/vod路径下有文件变动,开始执行文件同步。
  3. 根据配置,新增的文件,将会通过rsync同步到从服务器client的指定路径。本示例的路径为:/var/www/vod。

主服务器server端的配置文件

FPT+lsyncd实现多服务器文件分发(文件同步)_第3张图片

从服务器client端的配置文件

FPT+lsyncd实现多服务器文件分发(文件同步)_第4张图片

启动client的rsync服务:

image-20200317154751196.png

启动server的lsyncd服务:

FPT+lsyncd实现多服务器文件分发(文件同步)_第5张图片

使用ftp上传文件

使用FileZilla Client工具

FPT+lsyncd实现多服务器文件分发(文件同步)_第6张图片

上传了两个文件file01.zip file02.zip

查看是否同步成功

client1同步成功

FPT+lsyncd实现多服务器文件分发(文件同步)_第7张图片

client2同步成功
FPT+lsyncd实现多服务器文件分发(文件同步)_第8张图片

你可能感兴趣的:(vsftpd,rsync,集群,linux,centos)