怎麼把Linux 的文件快速傳給10臺服務器?文件分發軟件的安裝配置


背景說明

我們每天都在使用觀看視頻、瀏覽新聞、網絡購物、網絡聊天等等服務,給我們提供這些服務的後端服務器是怎麼運作的?一臺服務器能承載我們所有人的訪問嗎?多臺服務器之間的文件怎麼做到同步的?

帶著這些問題,開始我們今天的講述。

怎麼把Linux 的文件快速傳給10臺服務器?文件分發軟件的安裝配置

Linux服務器下快速將文件傳遞給其他10臺(或許是100臺)服務器的方法有好多種,人工用U盤拷貝、利用共享文件Samba系統複製等等。今天我們要使用的是另外一種方法,Rsync文件同步分發軟件

怎麼把Linux 的文件快速傳給10臺服務器?文件分發軟件的安裝配置

Rsync是什麼?

Rsync是Linux系統下的數據鏡像備份工具。Rsync的客戶端會將服務器端的指定的文件完整的同步到本地服務器上。Rsync支持無限多級的文件分發同步,可以鏡像保存整個目錄樹和文件系統,可以做到保持原來文件的權限、時間、軟硬鏈接等等。Rsync在傳輸的過程中支持壓縮和解壓縮,可以大幅度節約帶寬。可以使用scp、ssh方式來傳輸文件以保證數據安全,當然也可以使用直接socket連接的方式。

工作過程是:第一次同步會將所有文件複製到本地服務器,下一次同步的時候,只同步新增或修改的文件。

做個不恰當的比喻,Rsync的文件同步特別像主服務器在臺上演講,Rsync子服務器在下面一邊聽一邊記錄,以便傳達下去。

怎麼把Linux 的文件快速傳給10臺服務器?文件分發軟件的安裝配置

安裝規劃

我們以1主3子共4臺服務器的網絡環境作為舉例,來看看Rsync是如何安裝、設置和運作的。

怎麼把Linux 的文件快速傳給10臺服務器?文件分發軟件的安裝配置

以前比較喜歡源碼編譯的方式來安裝各種的軟件,碰到一個文件就下載源碼包,然後"./configure"、"make",再然後"make install"。後來發現,有些軟件的源碼自己根本就沒看過,也不準備去更改一下它的代碼和配置,所以還不如直接就用YUM安裝的方式。這樣做最大的好處是不耽誤時間。

另外,我沒有更改CentOS Linux 8的默認包管理軟件(默認是:DNF),以下所有的DNF操作,都是用YUM來完成的,畢竟CentOS Linux 8裡面加上了YUM對DNF的軟鏈接。

怎麼把Linux 的文件快速傳給10臺服務器?文件分發軟件的安裝配置

防火牆設置

Rsync服務會開啟一個873/tcp的端口(port),要在服務器端的防火牆上開啟這個端口。關於防火牆的安裝與管理,請參考我發的相關文章。

針對內網IP開啟873/tcp端口(port)的命令如下:

firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.1/24" port protocal="tcp" port="873" accept'

以上指令比較好理解,你可以對照修改

怎麼把Linux 的文件快速傳給10臺服務器?文件分發軟件的安裝配置

本次為了測試方便,以免出現權限問題,我們一併吧selinux和防火牆全部關閉掉,然後重啟服務器,生產環境中不要這麼操作。具體操作如下:

運行以下命令,關閉防火牆

systemctl stop firewalld #臨時關閉防火牆

systemctl disable firewalld #禁止開機啟動防火牆

systemctl status firewalld #查看防火牆狀態。

怎麼把Linux 的文件快速傳給10臺服務器?文件分發軟件的安裝配置

關閉SELINUX

運行以下命令:

vi /etc/selinux/config #SELINUX配置文件

相關參數修改如下:

#SELINUX=enforcing

SELINUX=disabled

怎麼把Linux 的文件快速傳給10臺服務器?文件分發軟件的安裝配置

重啟服務器,然後查看SELINUX狀態:

reboot #重啟

getenforce #查詢SELinux的運行模式,permissive(寬容模式);enforcing(強制模式);

/usr/sbin/sestatus -v #查看SELINUX的狀態

顯示如下內容,則說明SELINUX已經關閉了

怎麼把Linux 的文件快速傳給10臺服務器?文件分發軟件的安裝配置

關閉防火牆和SELinux成功。

安裝並配置Rsync

為了以後靈活方便,一下操作我們在4臺服務器上均進行操作,這樣即使主服務器192.168.1.222損壞無法使用,另外一臺服務器也可以即使頂替上去。

運行以下指令安裝:

dnf -y install rsync rsync-daemon

怎麼把Linux 的文件快速傳給10臺服務器?文件分發軟件的安裝配置

創建運行中需要用到的目錄

mkdir -p /log/rsync/

mkdir -p /data/rsync/conf/

mkdir -p /data/rsync/run/

怎麼把Linux 的文件快速傳給10臺服務器?文件分發軟件的安裝配置

修改主配置文件rsyncd.conf,執行命令:

vi /etc/rsyncd.conf

錄入下列文件內容:


uid = root

gid = root

port = 873

#use chroot = no #是否可以改變同步的根目錄

#read only = yes #只讀或者可以上傳文件

#hosts allow=192.168.1.223

#hosts deny=*

# transfer logging = yes

#motd file = /data/rsync/conf/motd

# log format = %t %a %m %f %b

# syslog facility = local3

# timeout = 300

max connections = 200

pid file = /data/rsync/run/rsyncd.pid

lock file = /data/rsync/run/rsync.lock

log file = /log/rsync/rsyncd.log


[wwwroot] //客戶端使用rsync來同步的路徑,只是模塊名稱,無需跟目錄名字相同

path = /wwwroot

comment = lg69_rsync

read only = yes

auth users = pusher

secrets file = /data/rsync/conf/server.pass

hosts allow = 192.168.1.0/24,2.2.2.0/24,3.3.3.0/24,4.4.4.0/24,5.5.5.0/24

# list=yes

# ignore errors

# exclude = test/ test.php

怎麼把Linux 的文件快速傳給10臺服務器?文件分發軟件的安裝配置

編輯生成服務端密碼文件,此文件為服務器端使用;列出可以登錄的用戶名和密碼

vi /data/rsync/conf/server.pass

內容如下:

pusher:7d5df8ed3057bc3e09d52c718e724a75


編輯客戶端密碼文件,此文件為客戶端使用;登錄的密碼,與server.pass內容對應

vi /data/rsync/conf/client.pass

內容如下:

7d5df8ed3057bc3e09d52c718e724a75


配置不可被同步的文件內容列表

vi /data/rsync/conf/site.exclude.list

內容就像下面的這樣就可以

test/user

login.php

login

修改各文件的權限

chmod 600 /data/rsync/conf/server.pass

chmod 600 /data/rsync/conf/client.pass

chmod 600 /data/rsync/conf/site.exclude.list

怎麼把Linux 的文件快速傳給10臺服務器?文件分發軟件的安裝配置

上述內容最好臺服務器都配置上,這樣一但主服務器出問題,任何一臺服務器都可以作為主服務器來使用。


啟動Rsync服務

主服務器服務端操作,只在192.168.1.222上配置

啟動Rsync服務,等同於systemctl start rsyncd

service rsyncd start

設置開機啟動Rsync服務

systemctl enable rsyncd

ps -aux | grep rsync #如果看到rsync的進程在,就說明啟動成功了

能看到類似如下內容,就說明啟動成功了

怎麼把Linux 的文件快速傳給10臺服務器?文件分發軟件的安裝配置

到這裡務器端啟動就完成了

service rsyncd start #等同於systemctl start rsyncd 啟動Rsync服務

service rsyncd stop #等同於systemctl stop rsyncd 關閉Rsync服務

service rsyncd status #等同於systemctl status rsyncd 查看Rsync服務狀態

systemctl enable rsyncd #設置開機啟動Rsync服務

systemctl disable rsyncd #設置開機不啟動Rsync服務


客戶端操作並測試使用

設置客戶端的可執行文件(拉取服務端文件的shell),在223、224和225上操作

vi /root/get.sh

內容如下(大意是獲取服務端/wwwroot/下所有的文件):

#!/bin/bash

/usr/bin/rsync -vrtopg --password-file=/data/rsync/conf/client.pass --exclude-from=/data/rsync/conf/site.exclude.list --progress [email protected]::wwwroot /wwwroot/

給這個文件可執行的權限

chmod +x /root/get.sh #client.pass和site.exclude.list上面已經介紹了這裡直接使用

測試同步文件

獲取一下文件試試

./get.sh #同步一下試試 注:客戶端的rsync配置最好和服務端一模一樣

怎麼把Linux 的文件快速傳給10臺服務器?文件分發軟件的安裝配置

已經將服務器端(222)上的hello.php文件同步到本地服務器(228)上了。

配置服務器自動同步文件

執行命令:

crontab -e

crontab默認使用vi編輯,填入一下內容:

*/10 8-23 * * * /root/get.sh

0 0-7 * * * /root/get.sh

說明:8-23點每10分鐘執行一次,0-7每一小時執行一次

怎麼把Linux 的文件快速傳給10臺服務器?文件分發軟件的安裝配置


至此我們已經將所有的安裝配置操作完畢,222服務器上/wwwroot/目錄下新增或修改的任何文件,223-225都會同步獲取到。這裡舉的是4臺服務器的例子,如果你的服務器能承受得了壓力,可以擴展到任意臺服務器上去。

在實際的使用過程中,如果/wwwroot/目錄中的文件過多,可以會出現性能極具下降的情況,極端的情況是同步文件失敗。當發生這種情況的時候,我們可以設置每一次同步只同步/wwwroot/下面的一個子目錄,但是我們多設置多個同步腳本,也就是將/wwwroot/下的子目錄每個設置一個同步腳本,這樣就能解決這個問題。


分享到:


相關文章: