[TOC]1.应用场景介绍:当应用程序通过FTP上传文件到文件服务器时,文件服务器会将新上传的文件同步分发到配置好的服务器。应用场景:在一个大流量的视频网站中,为了保证视频的流畅播放,需要有流媒体服务器集群。这些集群需要保证视频文件的一致性,因此需要服务器间的文件分发同步。有文件同步需求的服务器集群应用。结构流程图如下:2.服务器配置本教程使用Windows10+VMwareWorkstationPro,使用虚拟机进行演示。使用的Linux发行版是CentOS7。为简单起见,只配置一台文件分发主机和两台从机。跳过安装虚拟机。虚拟机均采用网桥方式,分配内网IP,通过xshell软件远程进行后续操作。主机Linux分配IP地址文件服务器ftp和lsyncd服务器CentOS710.10.67.139客户端1rsync客户端CentOS710.10.67.141客户端2rsync客户端CentOS710.10.67.1493.搭建ftp服务器安装前可以配置阿里云yum源,完善yum的下载速度。curl-o/etc/yum.repos.d/CentOS-Base.repohttp://mirrors.aliyun.com/repo/Centos-7.repocurl-o/etc/yum.repos.d/epel.repohttp://mirrors.aliyun.com/repo/epel-7.repoyummakecacheCentOS7搭建ftp服务器,简单总结如下步骤:首先,通过yum安装vsftpd;二、正确配置vsftpd;三、新增ftp用户并配置其访问路径;第四步,配置防火墙和SELinux;第五步,你可能会遇到的一些问题;1.安装vsftpdyuminstall-yvsftpd2。修改配置文件vsftpd的方式有很多种,本文采用比较简单通用的配置方式。vsftpd的各种配置方法可以参考:https://blog.51cto.com/meilin...打开配置文件(如果对linux系统不熟悉,建议编辑配置文件Windows用户使用VSCode等文本编辑工具)vi/etc/vsftpd/vsftpd.conf修改配置文件如下:1.不允许匿名访问anonymous_enable=NO2.允许本地账户用于FTP用户登录验证local_enable=YES3.chroot_list_enable=YES时使用户无法离开主目录,chroot_local_user=YES时,/etc/vsftpd.chroot_list文件中列出的用户可以切换到其他目录;文件中未列出的用户无法切换到其他目录。chroot_local_user=YESchroot_list_enable=YESchroot_list_file=/etc/vsftpd/chroot_list配置文件加在最后(不加会启动失败)500OOPS:vsftpd:refusingtorunwithwritablerootinsidechroot()如果/etc/vsftpd/chroot_list不存在,需要创建这个文件:vi/etc/vsftpd/chroot_list:wq保存并退出。(创建一个空文件即可)4、设置支持ASCII方式的上传下载功能。ascii_upload_enable=YESascii_download_enable=YES5.修改配置文件后,启动vsftpd服务systemctlstartvsftpd.service#启动命令systemctlstatus-lvsftpd.service#查看启动状态6.参考配置文件anonymous_enable=NOlocal_enable=YESwrite_enable=YESlocal_umask=022dirmessage_enable=YESxferlog_enable=YESconnect_from_port_20=YESxferlog_std_format=YESascii_upload_enable=YESascii_download_enable=YESchroot_local_user=YESchroot_list_enable=YESchroot_list_file=/etc/vsftpd/chroot_listlisten=NOlisten_ipv6=YESpam_service_name=vsftpduserlist_enable=YEStcp_wrappers=YESallow_writeable_chroot=YES备注:如果嫌配置麻烦,想直接替换配置文件的话,请注意第3点,记得创建/etc/vsftpd/chroot_list。3.创建ftp用户1.创建用户useradd-d/var/www/vod-gftp-s/sbin/nologinftpuser注意:/var/ftp/public_root是ftp的访问路径,ftpuser是ftp用户。大家可以根据自己的情况修改。2.修改FTP用户密码passwdftpuser3.确保用户创建成功cat/etc/passwd#检查ftpusr是否创建成功,路径是否正确4.使用FTP工具登录测试这里使用FileZillaClient登录到FTP。5、防火墙和SELinux配置继续上一步,通过工具连接FTP,会遇到一些问题。这些问题一般是由防火墙和SELinux配置引起的。详细说明和处理方法参考:https://blog.csdn.net/LeoFitz...关于防火墙,需要打开21和22端口。为了方便,直接关闭了防火墙。#执行关机命令:systemctlstopfirewalld.service#再次执行命令查看防火墙:systemctlstatusfirewalld.service#执行开机禁用防火墙自启动命令:systemctldisablefirewalld.serviceSELinux配置:setsebool-Ptftp_home_dir1setsebool-Pallow_ftpd_full_access14.在主服务器server端安装lsyncd并配置1.yuminstalllsyncd[root@user~]#yum-yinstalllsyncd#install[root@user~]#rpm-qalsyncd#检查是否安装成功lsyncd-2.2.2-1.el7.x86_64[root@user~]#rpm-qclsyncd#查看lsyncd的文件路径/etc/logrotate.d/lsyncd/etc/lsyncd.conf#==》lsyncd主配置文件/etc/sysconfig/lsyncd2.配置lsyncd安装lsyncd后,找到它的配置文件:/etc/lsyncd.conf。在lsyncd中,远程服务器文件同步有两种实现方式:1.rsync2.ssh使用rsync,需要在客户端配置。要使用ssh,服务端需要能够通过ssh免密码登录客户端。推荐使用rsync方式,速度快,更可靠。lsyncd的配置文件分为两部分:1.设置部分是关于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="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{}配置对应给一位客户。其中,最核心的是:target="rsyncuser@10.10.67.149::backup",rsyncuser和::后面的模块名需要在客户端配置rsync,中间的IP地址大家应该都懂。source="/var/www/vod",主服务器分发文件的根路径。第二点,因为客户端的rsync需要配置用户名和密码,用户名上面已经说了,密码需要另外创建一个密码文件。配置是这样写的:password_file="/etc/images.pas"所以要在这个路径下新建一个密码文件,服务端需要配置一个客户端对应的密码文件。vim/etc/images.pas#创建密码文件中的内容,填入你想要的密码即可。这里我用的是123456,所以这个文件的内容就是123456,其他的内容不要写,前面不要有空格。注意:rsync还需要一个密码文件,只是格式不同,后面会提到。3.启动服务配置文件写入后,启动服务#启动服务:sudosystemctlstartlsyncd#查看启动日志:sudosystemctlstatus-llsyncd注意:如果客户端没有配置rsync,直接启动lsyncd将失败。但是,如果在配置文件中的setting中配置了insist=true,则会直接启动lsyncd,并且会一直检查客户端的连接状态。如果连接成功,文件将被同步。五。从服务器客户端安装rsync并配置1.安装并编辑配置文件yum-yinstallrsync#安装vim/etc/rsyncd.conf#配置2.配置文件内容uid=rootgid=rootusechroot=yesmaxconnections=0logfile=/var/log/rsyncd/rsyncd.logpidfile=/var/run/rsyncd.pidlockfile=/var/run/rsyncd.lock[backup]path=/var/www/vodreadonly=nolist=yesauthusers=rsyncusersecrets文件=/etc/images.pas说明:1.[backup]为模块名,对应上面lsyncd中配置的“target="rsyncuser@10.10.67.149::backup""2.authusers=rsyncuser,同上3.path表示你希望文件同步到哪个路径3.上面说的密码文件对应这个配置secretsfile=/etc/images.pas在客户端创建一个密码文件(注意内容的格式!这个密码文件的格式For:username:password:vim/etc/images.pas#创建一个密码文件#文件内容(对应配置文件中的auth用户):#rsyncuser:123456chmod600/etc/images.pas#修改密码文件权限3.启动rsync/usr/bin/rsync--port=873--daemon#启动ps-ef|greprsync#查看进程是否启动成功6.使用示例步骤:应用程序或工具,上传通过ftp将文件复制到指定文件夹。本例文件夹路径为:/var/www/vodlsyncd检测到/var/www/vod路径下有文件变化,开始执行文件同步。根据配置,新添加的文件会通过rsync同步到从服务器客户端的指定路径。此示例的路径是:/var/www/vod。主服务器服务器端的配置文件从服务器客户端的配置文件启动客户端的rsync服务:启动服务器的lsyncd服务:使用ftp上传文件使用FileZillaClient工具上传两个文件file01.zipfile02.zip检查是否同步成功client1同步成功client2同步成功
