[TOC]
一.应用场景
简介:当程序应用通过FTP上传文件到文件服务器后,文件服务器会将新上传的文件同步分发到已配置好的服务器。
应用场景:
- 大流量视频网站中,为了保证视频能够流畅播放,需要做推流服务器的集群,这些集群需要保证视频文件的一致性,所以需要服务器之间的文件分发同步。
- 有文件同步需求的服务器集群应用。
结构流程图如下:
二.服务器配置
本教程使用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。
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 # 查看进程是否启动成功
六.使用示例
步骤:
- 应用程序或者工具,通过ftp上传文件到指定的文件夹。本示例的文件夹路径为:/var/www/vod
- lsyncd检测到/var/www/vod路径下有文件变动,开始执行文件同步。
- 根据配置,新增的文件,将会通过rsync同步到从服务器client的指定路径。本示例的路径为:/var/www/vod。
主服务器server端的配置文件
从服务器client端的配置文件
启动client的rsync服务:
启动server的lsyncd服务:
使用ftp上传文件
使用FileZilla Client工具
上传了两个文件file01.zip file02.zip
查看是否同步成功
client1同步成功