[TOC]shell
简介:当程序应用经过FTP上传文件到文件服务器后,文件服务器会将新上传的文件同步分发到已配置好的服务器。vim
应用场景:bash
结构流程图以下:服务器
本教程使用Windows10+VMware Workstation Pro,用虚拟机来作演示。用到的Linux发行版,均为CentOS7。网络
简单起见,只配置了一台文件分发主机,两台从机。安装虚拟机略过。app
虚拟机均采用网络桥接的方式,分配了内网的IP,后面操做均经过xshell软件,远程操做。ssh
主机 | 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 |
安装前,能够一下配置阿里云yum源,提升yum下载速度。curl
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服务器,简单总结有以下几个步骤:tcp
yum install -y vsftpd
vsftpd有多种配置方式,本文使用一种比较简单通用的配置。ide
关于vsftpd的各类配置方式,请参考:https://blog.51cto.com/meilin...
打开配置文件(若是不熟悉Linux系统,建议将配置文件弄到Windows用户VSCode等文本编辑工具编辑)
vi /etc/vsftpd/vsftpd.conf
修改配置文件以下:
anonymous_enable=NO
local_enable=YES
当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
直接保存并退出就行。(建立一个空文件便可)
ascii_upload_enable=YES ascii_download_enable=YES
systemctl start vsftpd.service # 启动命令 systemctl status -l vsftpd.service # 查看启动状态
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
<u>备注:若是嫌配置麻烦,想直接替换配置文件的话,请留意第3点,记得要建立/etc/vsftpd/chroot_list。</u>
useradd -d /var/www/vod -g ftp -s /sbin/nologin ftpuser
注意:/var/ftp/public_root是ftp的访问路径,ftpuser是ftp用户。能够根据本身的状况修改。
passwd ftpuser
cat /etc/passwd #查看ftpusr是否新建成功,以及路径是否正确
这里使用FileZilla Client登陆FTP。
到上一步,经过工具链接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
[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
安装好 lsyncd 后,找到其配置文件:/etc/lsyncd.conf。
lsyncd 中,远程服务器的文件同步有两种实现:1.rsync 2.ssh
使用 rsync,须要在 client 端配置 rsync。使用 ssh,须要 service 端能够经过 ssh 免密登陆 client 端。
推荐使用rsync方式,速度快,更可靠
lsyncd的配置文件分为两部分:
一、settings 部分 关于lsyncd工具自身的一些选项设置
二、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 = "rsyncuser@10.10.67.141::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 = "rsyncuser@10.10.67.149::backup", delay = 0, rsync = { binary = "/usr/bin/rsync", password_file = "/etc/images.pas", archive = true, compress = false, verbose = true } }
说明:
一个sync{ }配置就对应一个client端。
其中,核心就是 :
target = "rsyncuser@10.10.67.149::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也须要一个密码文件,可是格式不一样,后面会提到。
配置文件写好以后,启动服务
#启动服务: sudo systemctl start lsyncd #查看启动日志: sudo systemctl status -l lsyncd
注意:若是client端没有配置好rsync,直接启动lsyncd会失败。可是,若是在配置文件中的setting中配置了 insist=true,则会直接启动lsyncd,一直检测client的链接状况,能够链接成功的,就同步文件。
yum -y install rsync # 安装 vim /etc/rsyncd.conf # 配置
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 = "rsyncuser@10.10.67.149::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 # 修改密码文件权限
/usr/bin/rsync --port=873 --daemon # 启动 ps -ef|grep rsync # 查看进程是否启动成功
使用FileZilla Client工具
上传了两个文件file01.zip file02.zip
client1同步成功
client2同步成功