1.概述
rsync(Remote Sync) 是一個Unix/linux系統下的文件同步和傳輸工具
2.端口和運行模式
tcp/873
采用C/S模式(客戶端/服務器模式)
3.特點
- 可以鏡像保存整個目錄和文件
- 第一次全量備份(備份全部的文件),之后是增量備份(只備份變化的文件)
4. 數據同步方式
- 推(push)
本地將數據發送到遠程服務器
- 拉(pull)
遠程服務器獲取數據到本地
5.rsync命令
-
基本用法
rsync 選項 源文件位置 目標文件位置
-
選項
-a,--archive 歸檔模式,表示以遞歸的方式傳輸文件,并且保持文件屬性,等同于-rlptgoD -r,–recursive 對子目錄以遞歸模式處理,即同步所有下面的數據 -l,--links 表示拷貝鏈接文件 -p , --perms 表示保持文件原有權限 -t , --times 表示保持文件原有時間 -g , --group 表示保持文件原有屬用戶組 -o , --owner 表示保持文件原有屬主 -D , --devices 表示塊設備文件信息 -z , --compress 表示壓縮傳輸 -H 表示硬連接文件 -A 保留ACL屬性信息(需配合-p選項) -P 顯示傳輸進度 -u, --update 僅僅進行更新,也就是跳過所有已經存在于目標位置,并且文件時間晚于要備份的文件。(不覆蓋更新的文件) --port=PORT 定義rsyncd(daemon)要運行的Port(預設為tpc 873) --delete 刪除那些目標位置有而原始位置沒有的文件 --password-file=FILE 從FILE中得到密碼 --bwlimit=KBPS 限制I/O帶寬,KBytes /second --filter “-filename” 需要過濾的文件 --exclude=filename :需要過濾的文件 -v 顯示同步過程的詳細信息 #常用的-avz #補充:如果傳輸的特別大的文件,就不要用z 參數,因為壓縮和解壓比較耗時
-
示例
#格式1 rsync 選項 rsync://用戶名@同步源服務器IP:/共享模塊名 目標目錄 rsync -avz --delete rsync://backuper@192.168.98.143:/test /test #--delete 是刪除服務端(下面實驗的主機A)沒有的文件 #格式2 rsync 選項 用戶名@同步源服務器IP::共享模塊名 目標目錄 rsync -avz --delete backuper@192.168.98.143::test /test
6.實驗
主機 | ip 地址 |
---|---|
A | 192.168.98.143 |
B | 192.168.98.140 |
(1).數據同步
-
在主機A上編寫rcync的配置文件
vim /etc/rsyncd.confuid = rootgid = rootaddress = 192.168.98.143 #寫的是本機的ip地址否則服務無法啟動use chroot = yesport = 873 #定義端口hosts allow = 192.168.98.0/24 #定義允許訪問的地址max connections = 4pid file = /var/run/rsyncd.pid #進程id文件lock file = /var/run/rsyncd.lock #日志文件log file = /var/log/rsyncd.log #鎖文件motd file = /etc/rsyncd.motd #消息文件[backup] #模塊名path = /test #備份路徑comment = backup area #描述read only = yes #是否只讀list = yes #是否隱藏模塊列表auth users = b1 #備份所使用的用戶secrets file = /etc/rsync.passwd #校驗文件,包含用戶名和密碼的文件,用戶名是 auth users的值
-
創建描述文件和校驗文件
echo "I am backup server" > /etc/rsyncd.motd #創建描述文件 echo "b1:123456" >> /etc/rsync.passwd #創建用戶名和密碼文件 chmod 600 /etc/rsyncd.passwd #設置校驗文件的權限,不設置會報錯
-
開啟服務
rsync --daemon --config=/etc/rsyncd.conf #指定配置文件并啟動服務 ss -anputl | grep 873 #查看服務是否啟動 systemctl stop firewalld setforce 0 iptables -F #關閉防火墻
-
主機B測試
sync -avz --delete b1@192.168.98.143::backup /test #輸入/etc/rsync.passwd中定義的密碼 #免密備份 vim /etc/rsync.passwd #在主機B上創建文件123456 #只寫密碼不寫用戶名,輸入/etc/rsync.passwd中定義的密碼 chmod 600 /etc/rsync.passwd #修改文件權限否則會報錯 sync -avz --delete b1@192.168.98.143::backup /test --password-file=/etc/rsync.passwd #指定密碼文件
(2).實時數據同步(rsync+sersync)
? 目的:將主機B的數據實時同步到主機A上
-
修改主機A的rsync的配置文件
uid = root gid = root address = 192.168.98.143 use chroot = yes port = 873 hosts allow = 192.168.98.0/24 max connections = 4 pid file = /var/run/rsyncd.pid lock file = /var/run/rsyncd.lock log file = /var/log/rsyncd.log motd file = /etc/rsyncd.motd[backup]path = /testcomment = backup area read only = false #在上述實驗的基礎上只修改這里list = yesauth users = b1secrets file = /etc/rsync.passwd
-
主機B安裝sersync
#使用tar包解壓后直接使用 tar -xf sersync2.5.4_64bit_binary_stable_final.tar.gz -C /opt/mv /opt/GNU-Linux-x86 /opt/sersync #修改文件名cp /opt/sersync/confxml.xml{,.bak} #備份配置文件 #修改配置文件vim /opt/sersync/confxml.xml#修改第24-28行<localpath watch="/monitored"> #本地監控目錄<remote ip="192.168.98.143" name="backup"/> #主機A(rsync主機的ip),模塊名<!--<remote ip="192.168.8.39" name="tongbu"/>--><!--<remote ip="192.168.8.40" name="tongbu"/>--></localpath>#修改第31-34行<commonParams params="-artuz"/><auth start="true" users="b1" passwordfile="/etc/rsync.passwd"/> #users是備份使用的用戶,rsync配置文件中定義的用戶, passwordfile就是rsync的校驗文件,包含用戶名和密碼<userDefinedPort start="false" port="874"/><!-- port=874 --><timeout start="false" time="100"/><!-- timeout=100 --><ssh start="false"/>
-
主機B開啟守護進程同步數據
#創建校驗文件,修改權限 echo "123456" > /etc/rsync.passwd && chmod 600 /etc/rsync.passwd /opt/sersync/sersync2 -d -r -o /opt/sersync/confxml.xml #開啟服務,停止服務使用kill命令 mkdir /monitored && echo "hello linux !!!" >> /monitored/1.txt #更改監聽的目錄查看是否會同步到主機A