日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux服务器和客户端之间的数据同步(备份)

發布時間:2025/3/15 linux 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux服务器和客户端之间的数据同步(备份) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近實驗室總是停電,電腦今天系統出現了點問題,所以需要對數據進行備份,以防硬盤發生突然損壞。目前用到的方法是通過rysnc和inotify協同數據同步,數據可以實時更新。另外,對于經常改變且比較大的數據,實時更新不是那么可能,所以可以通過Linux操作系統自帶的crond服務,定時讓系統自動更新數據。通過這兩種方法可以達到同步數據的目的。下面詳細介紹具體操作。

具體的結構如下圖,我們就是想將存儲服務器的文件推送到rsync服務器上:

?

系統環境說明主機IP操作系統SmabaBackup
10.1.2.102Centos 7.1
10.1.2.104Centos 7.1

其中?Smaba?服務器為共享文件服務器,其中?Backup?為備份服務器。本次目地:監控?Smaba?服務器下的?/data?目錄下文件的實時變化,并實時備份至?Backup?服務器的?/data/SambaBackup?目錄。

1、使用?inotifywait?工具監控文件變化情況,使用?rsync?工具做同步

介紹

Rsync(remote?synchronize)是一個遠程文件同步工具;Rsync使用“Rsync算法”來同步文件,該算法只傳送兩個文件的不同部分,因此速度相當快;Rsync是替代rcp的一個工具,目前由rsync.samba.org維護,因而rsync.conf文件的格式類似于samba的主配置文件;Rsync可通過rsh或ssh使用,也能以daemon模式運行,以daemon方式運行時,Rsync?Server會打開一個873端口等待客戶端連接.連接時,Rsync?Server會檢查口令是否相符,若口令相符,則進行文件傳輸.第一次會把整份文件傳輸一次,以后則為增量傳輸。

?Inotify 是一個 Linux特性,它監控文件系統操作,比如讀取、寫入和創建。Inotify 反應靈敏,用法非常簡單,并且比 cron 任務的繁忙輪詢高效得多。學習如何將 inotify 集成到您的應用程序中,并發現一組可用來進一步自動化系統治理的命令行工具。是一個非常好的輔助性工具軟件,后期本博客還會有更加多與inotify嵌合的功能發布!

安裝

以下在?Backup?機器上操作安裝配置。這里我先配置備份服務器,方便后續說明。

分別在服務器端Backup安裝rsync,在客戶端Smaba安裝rsync、inotify-tools,如下所示:

[root@Backup ~]# yum install -y rsync [root@Samba~]#yum install inotify-tools

配置

1、在服務器端配置?rsync --daemon?模式運行,默認使用?/etc/rsyncd.conf?主配置文件:

[root@Backup ~]# cat /etc/rsyncd.conf port = 873 uid = root gid = root use chroot = no max connections = 2 pid file = /var/run/rsyncd.pid log file = /var/log/rsyncd.log lock file = /var/run/rsyncd.lock [SambaBackup] ##模塊名 path = /data/SambaBackup ##文件復制的路徑 read only = no auth users = rsync #這個名字不一定是用戶名 # 虛擬賬號配置文件,格式:username:password secrets file = /etc/rsyncd.secrets #密碼文件

上述密碼文件配置

# 設置虛擬賬密信息 [root@Backup ~]# echo "rsync:123456" > /etc/rsyncd.secrets # 權限務必設為 600 權限 [root@Backup ~]# chmod -R 600 /etc/rsyncd.secrets # 創建模塊目錄 [root@Backup ~]# mkdir -p /data/SambaBackup # 啟動 [root@Backup ~]# rsync --daemon

詳細安裝參見:https://www.jianshu.com/p/0df0633613d8

2、客戶端配置

客戶端的配置文件只需做簡單的修改,設置log file和pid file路徑即可,然后啟動rsync即可。

[root@Samba ~]# cat /etc/rsyncd.conf pid file = /var/run/rsyncd.pid log file = /var/log/rsyncd.log # 配置密碼文件及密碼 [root@Samba ~]# echo '123456' > /etc/rsyncd.secrets [root@Samba ~]# chmod -R 600 /etc/rsyncd.secrets ##這里的密碼是上面服務器中創建的密碼文件中的密碼 # 啟動 [root@Samba ~]# rsync --daemon

3、創建監控腳本--inotifywait.sh

#!/bin/bash # 配置監控目錄 path='/data/' /usr/bin/inotifywait --exclude '\.(part|swp|swx)' -mrq --format '%T %e : %w%f' --timefmt '%Y-%m-%d %H:%M:%S' -e create,delete,move,close_write ${path} | while read file; do# 執行同步# /usr/bin/rsync -auvrtzopgP --delete ${path} root@10.1.2.104:/data/SamabaBackup/# 使用 rsync 的守護模式同步/usr/bin/rsync -vazu --delete --password-file=/etc/rsyncd.secrets /data rsync@10.1.2.104::SambaBackup##這里的密碼文件直接寫入上述服務器端配置的密碼文件的密碼即可 done做以下說明: #同步文件夾到遠程 $?rsync?-avI?dir_name?remote_ip:dir_name #同步文件夾到遠程,傳輸時進行壓縮 $?rsync?-avzI?dir_name?remote_ip:dir_name #同步文件夾到遠程(保持嚴格同步,即本地刪除,遠程也同步刪除) $?rsync?-avzI?–-delete?dir_name?remote_ip:dir_name #排除指定的文件或目錄,可多次使用,支持通配符(比如.svn、.git等目錄) $?rsync?-avzI?--exclude=/a/b/*.svn?--exclude=/a/b/*.git?dir_name?remote_ip:dir_name #當排除的文件較多時,可將文件寫到某文件中,同時使用?--exclude-from?指定該文件即可。 $?rsync?-avzI?--exclude-from=/a/exclude_file_list.txt?dir_name?remote_ip:dir_name 以上使用的選項說明如下: -a,?--archive?歸檔模式,等于-rlptgoD; -r,?--recursive?遞歸模式; -l?保持符號連接; -p?保持文件原有權限; -t?保持文件原有修改時間; -g?保持文件原有用戶組; -o?保持文件原有屬主; -D?-devices?-specials,保持塊設備文件和特殊文件; -I?強制掃描,放棄“quick?check”策略(quick?check策略,通過查看文件的時間戳和文件大小,先排除一批認為相同的文件[rsync不會對文件夾本身做“quick?check”]); -z,?--compress?壓縮,默認的壓縮算法和gzip一樣; -v,?--verbose?顯示進度詳細信息; -q,?--quiet?精簡輸出模式; -R,?--relative?保持全路徑; --progress??顯示傳輸進度(百分百); --delete?本地刪除某一文件,遠程也同步的刪除該文件,保持嚴格的一致(不加該參數,則表示只增不減); --exclude="*.tmp"?排除某些文件; --exclude-from=FILE?排除FILE中指定模式的文件; --port=PORT?指定其他的rsync服務端口;注意:就路徑格式而言,如果源路徑末尾使用/,則rsync會將源路徑尾端目錄中的所有內容復制到目的端;如果沒有使用/,rsync會將源路徑尾端目錄本身復制到目的端。 $?rsync?-av?/home/test/?/home/backup;?#將test目錄中的內容備份; $?rsync?-av?/home/test?/home/backup;?#將test目錄本身備份; 如果目的路徑末尾使用/,則rsync會將來自源端的內容復制到目的端的目錄中;如果沒有使用/,則rsync會在目的端路徑尾部創建一個和目的端尾部目錄同名的目錄,并將源端內容復制到該目錄中。 $?rsync?-av?/home/test?/home/backup/;?#將源端內容復制到backup目錄中; $?rsync?-av?/home/test?/home/backup;?#在/home/backup創建下級目錄backup,并將源端內容復制到/home/backup/backup目錄中;

上述操作完成后就可以實時同步了。

最后運行以下命令

# 不掛斷的放后臺運行 nohup sh /root/inotifywait.sh > /dev/null 2>&1 &

2、使用?crontab?配合rsync定時同步

介紹

cron是一個linux下的定時執行工具,可以在無需人工干預的情況下運行作業。cron?是Linux的內置服務,但它不自動起來,可以用以下的方法啟動、關閉這個服務:

/sbin/service?crond?status?//查看服務當前狀態
/sbin/service?crond?start?//啟動服務
/sbin/service?crond?stop?//關閉服務
/sbin/service?crond?restart?//重啟服務
/sbin/service?crond?reload?//重新載入配置

你也可以將這個服務在系統啟動的時候自動啟動:

在/etc/rc.d/rc.local這個腳本的末尾加上:/sbin/service?crond?start

現在cron這個服務已經在進程里面了,我們就可以用這個服務了.

同時cron服務提供以下幾種接口供大家使用:

1.直接用crontab命令編輯

cron服務提供crontab命令來設定cron服務,以下是這個命令的一些參數與說明:

$>?crontab?-u?zhangsan?-l

$>?crontab?-u?zhangsan?-e

$>?crontab?-u?zhangsan?-r

-u?//指定用戶,一般root用戶在執行這個命令的時候需要此參數(如省略,則默認為當前登錄用戶)

-l?//列出cron服務

-r?//刪除cron服務

-e?//編輯cron服務

每次編輯完某個用戶的cron設置后,cron自動在/var/spool/cron下生成一個與此用戶同名的文件,此用戶的cron信息都記錄在這個文件中,這個文件不可以直接編輯,只可用crontab?-e?來編輯。cron啟動后每過一份鐘讀一次這個文件,檢查是否要執行里面的命令。因此此文件修改后不需要重新啟動cron服務。

2.編輯/etc/crontab?文件配置cron

cron服務每分鐘不僅要讀一次/var/spool/cron內的所有文件,還需要讀一次/etc/crontab,因此我們配置這個文件也能運用cron服務做一些事情。用crontab配置是針對某個用戶的,而編輯/etc/crontab是針對系統的任務。此文件的文件格式是:

SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root //如果出現錯誤,或者有數據輸出,數據作為郵件發給這個帳號 HOME=/ //使用者運行的路徑,這里是根目錄 # run-parts 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly

以上cron命令格式為:*?*?*?*?*?[root?run-parts]?command

前面五個*號代表時間,用數字,數字的取值范圍和含義如下:

第一個*:分鐘?(0-59)[整數]

第二個*:小時(0-23)[整數]

第三個*:日期(1-31)[整數(必須是指定月份的有效日期)]

第四個*:月份(1-12)[整數(或如Jan或Feb簡寫的月份)]

第五個*:星期(0-7)[0或7用來描述周日(或用Sun或Mon簡寫來表示)]

command:需要執行的命令(可用as?ls?/proc?>>?/tmp/proc或?執行自定義腳本的命令)

root:以root用戶身份來執行

run-parts:表示后面跟著的是一個文件夾,要執行的是該文件夾下的所有腳本

注意"run-parts"這個參數,如果去掉這個參數,后面就可以寫要運行的某個腳本名,而不是文件夾名。

以下舉幾個例子說明問題:

0 6 * * * echo "Good morning." >> /tmp/test.txt #每天早上6點 0 */2 * * * echo "Have a break now." >> /tmp/test.txt #每兩個小時 0 11 4 * 1-3 command line #每個月的4號和每個禮拜的禮拜一到禮拜三的早上11點 0 4 1 1 * command line #1月1日早上4點

如果一個cron任務需要定期而不是按小時,天,周,月來執行,則需要添加/etc/cron.d目錄。這個目錄下的所有文件和文件/etc/crontab語法相同。cron服務會每分鐘檢查一次/etc/crontab、/etc/cron.d/、/var/spool/cron/下的變更。如果發現變化,就會下載到存儲器中。因此,即使?crontab文件改變了,程序也不需要重新啟動。推薦自定義的任務使用crontab?-e命令添加,退出后用/etc/init.d/crond?restart命令重啟crond進程,官方文件說不用重啟進程,但我遇到不重啟無法運行任務的情況。

3、具體使用

1、添加定時任務

$>?crontab?-e

*/10?*?*?*?*?sh?/opt/app/tomcat/test/monitorbamboo.sh

2、重啟?crond?服務

$>?service?crond?restart

如此,ok?了。

對于rsync的配置都是服務器和客戶端的模式,與第一種方法的配置是完全相同的,只是在上述第一步中將rsync的同步命令加入到定時任務表中即可,這樣就可以讓系統自動定時備份了。

常見問題可參見:

https://blog.csdn.net/l821133235/article/details/79568167

https://www.cnblogs.com/fawaikuangtu123/p/8185312.html

https://www.cnblogs.com/wang-xd/p/6551402.html

http://blog.sina.com.cn/s/blog_4ac726fe0102xy47.html

參考文獻

https://www.linuxidc.com/Linux/2017-12/149355.htm

https://linux.cn/article-6032-1.html

https://www.chenghuajie.cn/1302.html?(強烈推薦)

https://www.cnblogs.com/hackerer/p/5243639.html

https://www.jianshu.com/p/f387b45f0f1d

https://blog.csdn.net/wangjunjun2008/article/details/38755959

https://blog.csdn.net/wangjunjun2008/article/details/38658539

https://blog.csdn.net/wangjunjun2008/article/details/19497803

http://ju.outofmemory.cn/entry/327439

https://yq.aliyun.com/articles/372019

http://blog.chinaunix.net/uid-29099879-id-5818553.html

總結

以上是生活随笔為你收集整理的Linux服务器和客户端之间的数据同步(备份)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。