FPT+lsyncd實現多服務器文件分發(文件同步)

[TOC]shell

一.應用場景

簡介:當程序應用經過FTP上傳文件到文件服務器後,文件服務器會將新上傳的文件同步分發到已配置好的服務器。vim

應用場景:bash

  1. 大流量視頻網站中,爲了保證視頻可以流暢播放,須要作推流服務器的集羣,這些集羣須要保證視頻文件的一致性,因此須要服務器之間的文件分發同步。
  2. 有文件同步需求的服務器集羣應用。

結構流程圖以下:服務器

文件同步-1584412940700.jpg

二.服務器配置

本教程使用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

三.搭建ftp服務器

安裝前,能夠一下配置阿里雲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安裝vsftpd;
  • 第二步,正確配置vsftpd;
  • 第三步,新增ftp用戶,並配置其訪問路徑;
  • 第四步,防火牆和SELinux的配置;
  • 第五步,可能會遇到的一些問題;

1.安裝vsftpd

yum install -y vsftpd

2.修改配置文件

vsftpd有多種配置方式,本文使用一種比較簡單通用的配置。ide

關於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

<u>備註:若是嫌配置麻煩,想直接替換配置文件的話,請留意第3點,記得要建立/etc/vsftpd/chroot_list。</u>

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。

image-20200317142707237.png

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的配置文件分爲兩部分:

一、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也須要一個密碼文件,可是格式不一樣,後面會提到。


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 = "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 # 修改密碼文件權限

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端的配置文件

image-20200317152812948.png

從服務器client端的配置文件

image-20200317155631371.png

啓動client的rsync服務:

image-20200317154751196.png

啓動server的lsyncd服務:

image-20200317154834883.png

使用ftp上傳文件

使用FileZilla Client工具

image-20200317155952281.png

上傳了兩個文件file01.zip file02.zip

查看是否同步成功

client1同步成功

image-20200317160041561.png

client2同步成功
image-20200317160101705.png

相關文章
相關標籤/搜索