[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同步成功