1.常用同步方法
SCP、 NFS、 SFTP、 http、 samba、 rsync、 drbd(基於文件系統同步,效率高)
2.rsync 介紹
rsync,英文全稱是 remote synchronize, 是一款實現遠程同步功能的免費軟件,它在同步文件的同時,可以
保持原來文件的權限、時間、軟硬鏈接等附加信息。 rsync 是用 “rsync 算法”提供了一個客戶機和遠程文件服務器
的文件同步的快速方法,而且可以通過 ssh 方式來傳輸文件。 甚至還可以實現只同步一個文件里有變化的內容部分,
所以可以實現快速的同步備份數據。
同時, rsync 還可以實現同步本地數據、刪除文件和目錄的功能。一個 rsync 相當於 scp、 cp、 rm,並且還在性
能上優於它們每一個命令。
3.rsync 特性
能更新整個目錄和樹和文件系統;
有選擇性的保持符號鏈鏈、硬鏈接、文件屬於、權限、設備以及時間等;
對於安裝來說,無任何特殊權限要求;
對於多個文件來說,內部流水線減少文件等待的延時;
能用 rsh、 ssh 或直接端口做為傳輸入端口(rsync 本身不對數據加密);
支持匿名 rsync 同步文件,是理想的鏡像工具;
4.rsync 在企業的工作場景
(1)服務器之間的數據同步(cron+rsync)
(2)把所有客戶服務器數據同步到備份服務器(cron+rsync)
(3)與 inotify 或 sersync 配合,做實時的數據同步(rsync+inotify/sersync)
5.rsync命令行常用參數
(1)參數說明 -v:--verbose 詳細模式輸出 -z:--compress 對備份的文件在傳輸的過程中進行壓縮處理 -a:--archive 歸檔模式,表示以遞歸方式傳輸文件,並保持所有文件屬性,等於參數:-vrztopg -r:--recursive 對子目錄以遞歸模式處理。 -t:--times 保持文件時間信息 -o:--owner 保持文件屬主信息。 -p:--perms 保持文件權限。 -g:--group 保持文件屬組信息 -D:--devices 保持設備文件信息 -l: --links 保留軟鏈結。 -e:--rsh=command 指定使用 rsh、 ssh 方式進行數據同步 --exclude=PATTERN 指定排除不需要傳輸的文件模式。 --exclude-from=FILE 排除 FILE 中指定模式的文件。 --bwlimit=KBPS 限制 I/O 帶寬, KBytes per second。 (2)工作中常用參數組合:-avz (3)參數使用演示 a.使用--bwlimit參數限制傳輸帶寬 rsync -avz --bwlimit=100 -e 'ssh' /etc/hosts root@192.168.0.100:/tmp/
6.rsync的三種工作模式講解及用法
SYNOPSIS Local: rsync [OPTION...] SRC... [DEST] ##本地備份 示例: [root@localhost ~]# rsync -avz /etc/hosts /tmp/ sending incremental file list hosts sent 152 bytes received 31 bytes 366.00 bytes/sec total size is 188 speedup is 1.03 [root@localhost ~]# ll /tmp/hosts -rw-r--r-- 1 root root 188 Sep 21 05:44 /tmp/hosts [root@localhost ~]# ll /etc/hosts -rw-r--r-- 1 root root 188 Sep 21 05:44 /etc/hosts Access via remote shell: ##ssh協議遠程備份 Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST] Push: rsync [OPTION...] SRC... [USER@]HOST:DEST 示例: [root@localhost ~]# rsync -avz -e 'ssh -p 22' /etc/hosts root@192.168.0.175:/tmp/ The authenticity of host '192.168.0.175 (192.168.0.175)' can't be established. ECDSA key fingerprint is SHA256:46QEG3vm+DkznMyVjIiHxE9xGGRFtlocipE8eKGqzp0. ECDSA key fingerprint is MD5:72:9e:44:4d:87:96:be:58:de:00:f9:77:8a:33:9f:43. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.0.175' (ECDSA) to the list of known hosts. root@192.168.0.175's password: sending incremental file list hosts sent 152 bytes received 31 bytes 19.26 bytes/sec total size is 188 speedup is 1.03 Access via rsync daemon: ##以守護進程的方式進行備份 Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST] rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST] Push: rsync [OPTION...] SRC... [USER@]HOST::DEST rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST rsync daemon模式的配置過程 **=====Rsync服務端: (1).查看rsync安裝包 # rpm -qa rsync (2).添加rsync服務的用戶,管理本地目錄的 # useradd -s /sbin/nologin -M rsync # id rsync (3).生成rsync.conf配置文件 # vim /etc/rsyncd.conf 配置文件 uid = rsync ##用戶,遠端命令使用rsync訪問共享目錄 gid = rsync ##用戶組 use chroot = yes ##安全 max connections = 200 ##最大連接數 pid file = /var/run/rsyncd.pid ##pid文件路徑 log file = /var/log/rsyncd.log ##日志文件路徑 timeout = 300 ##超時時間 [long] ##模塊名稱 path=/backup ##服務器提供訪問的目錄 ignore errors ##忽略錯誤 read only = false ##可寫 list = false ##禁止列表 hosts allow = 192.168.0.0/24 ##允許網段 hosts deny = 0.0.0.0/32 ##禁止網段 auth users = rsync_backup ##虛擬用戶 secrets file = /etc/rsync.password ##密碼文件 (4).根據rsyncd.conf的auth users配置賬戶,遠程連接使用,並根據secrets file參數生成密碼文件 echo "rsync_backup:123456" > /etc/rsync.password cat /etc/rsync.password (5).為密碼文件設置權限 chmod 600 /etc/rsync.password ls -l /etc/rsync.password (6).創建共享的目錄並授權rsync服務管理 mkdir /backup chown -R rsync.rsync /backup (7).啟動rsync服務並檢查 rsync --daemon ps -ef |grep rsync|grep -v grep lsof -i :873 (8).加入開機啟動 echo "/usr/bin/rsync --daemon" >> /etc/rc.local tail -1 /etc/rc.local **======rsync客戶端 (1).生成連接服務器需要的密碼文件 echo "123456" > /etc/rsync.password cat /etc/rsync.password (2).為密碼文件設置權限 chmod 600 /etc/rsync.password ls -l /etc/rsync.password (3).同步文件 推送: rsync -avz /tmp/ rsync_backup@192.168.0.175::long --password-file=/etc/rsync.password rsync -avz /tmp/ rsync://rsync_backup@192.168.0.175/long --password-file=/etc/rsync.password 拉取: rsync -avz rsync_backup@192.168.0.175::long /tmp/ --password-file=/etc/rsync.password rsync -avz rsync://rsync_backup@192.168.0.175/long /tmp/ --password-file=/etc/rsync.password
7.服務故障模擬
(1)服務器備份目錄不存在
(2)服務器備份目錄權限不足
(3)服務器rsync服務用戶被刪除
(4)鑒權模塊失敗--查看日志(密碼文件路徑錯誤,密碼錯誤等等)
(5)啟動rsync服務問題(配置文件路徑或文件名不正確,rsync配置文件的正確名稱及路徑為:/etc/rsyncd.conf)
(6)rsync服務ip段的控制問題(拒絕和允許二選一)
8.rsync優缺點
優點:
(1)增量備份,支持socket(daemon),集中備份(支持推拉,都是以客戶端為參照物)
(2)遠程shell通道模式還可以加密(ssh)傳輸,socket(daemon)需要加密傳輸,可以利用vpn服務或ipsec服務
缺點:
(1)大量小文件同步的時候,比對時間較長,有的時候,rsync進程可能會停止
(2)同步大文件,10G這樣的大文件有時也會出現問題:中斷。未完整同步前,是隱藏文件,可以通過續傳等參數實現傳輸。一次性遠程拷貝可以用scp
9.rsync守護進程服務傳輸數據排錯思路
(1)查看rsync服務配置文件路徑是否正確,正確的默認路徑為:/etc/rsyncd.conf;
(2)查看配置文件host allow,host deny,允許的ip網段是否為允許客戶端訪問的ip網段;
(3)查看配置文件中path參數里的路徑是否存在,權限是否正確(正常應為配置文件中的UID參數對應的屬主和組);
(4)查看rsync服務是否啟動。查看命令為:ps -ef |grep rsync。端口是否存在:netstat -lnp |grep 873;
(5)查看iptables防火牆和selinux是否開啟允許rsync服務通過,也可以考慮關閉iptables和selinux;
(6)查看服務端rsync設置的密碼未見是否為600權限,密碼文件格式是否正確,正確格式為 用戶名:密碼,文件路徑和配置文件里的secrect files 參數對應;
(7)如果是推送數據,要查看下,配置rsyncd.conf文件中用戶是否對模塊下目錄有可讀可寫的權限。
10.rsync多模塊使用
vim /etc/rsyncd.conf配置文件 ##設置全局參數共用,獨立的模塊只需要配置備份路徑即可 uid = rsync gid = rsync use chroot = yes max connections = 200 pid file = /var/run/rsyncd.pid log file = /var/log/rsyncd.log timeout = 300 ignore errors read only = false list = false hosts allow = 192.168.0.0/24 auth users = rsync_backup secrets file = /etc/rsync.password [long] path=/root/rsync [ying] path=/root/ying
11.rsync daemon服務模式排除及無差異同步
rsync排除的相關參數: --exclude=PATTERN (排除較少文件時使用) --exclude=FILE (排除較多文件時使用,可以將文件名寫入一個文件中,再指定排除) 客戶端: 排除單個文件 rsync -avz --exclude=a.txt /backup/ rsync_backup@192.168.0.175::backup/ --password-file=/etc/rsync.password 排除多個目錄文件 (1)排除多個不連續的文件 rsync -avz --exclude={a.txt,b.txt,c.txt} /backup/ rsync_backup@192.168.0.175::backup/ --password-file=/etc/rsync.password rsync -avz --exclude={a,b} /backup/ rsync_backup@192.168.0.175::backup/ --password-file=/etc/rsync.password (2)排除多個連續的文件 rsync -avz --exclude={a..g} /backup/ rsync_backup@192.168.0.175::backup/ --password-file=/etc/rsync.password (3)通過指定文件來排除多個連續的文件 rsync -avz --exclude-from=/tmp/rsynctest/1.log /backup/ rsync_backup@192.168.0.175::backup/ --password-file=/etc/rsync.password ##1.log中需要寫入排除的文件名,並且最好指定1.log的全路徑是什么 (4)完全同步:無差異同步(客戶端有,服務端就有;客戶端沒有,服務端就沒有)---謹慎使用 rsync -avz --delete /backup/ rsync_backup@192.168.0.175::backup/ --password-file=/etc/rsync.password 服務端: 在服務端排除文件--通過修改配置文件rsyncd.conf;增加:exclude=a.txt b.txt
12.案例
(1)某DBA做數據同步,帶寬占滿,導致用戶無法訪問網站 rsync scp ftp 都具備限速功能 # dd if=/dev/zero of=test1 bs=1M count=128 # rsync -avz --bwlimit=100 /backup/ rsync_backup@192.168.0.175::backup/ --password-file=/etc/rsync.password 默認單位為kbyte 還有斷點續傳的功能 (2)某視頻網站,視頻推到服務器上線發布,本地/backup只有當天發布的內容,服務器上卻又以前的所有文件,執行命令 rsync -avz --delete /backup/ rsync_backup@192.168.0.175::backup/ --password-file=/etc/rsync.password 慘案:服務器端刪除以前的所有,只有當天的數據文件
13.總結
rsync有三種工作模式 (1)local:rsync (2)通道模式:rsync -avzP -e 'ssh -p 22' /etc/hosts root@192.168.0.175:/tmp 一般配合ssh key免秘鑰傳輸,結合定時任務 (3)daemon模式 內網不需要,加密性能會有損失 外網同步建議加密使用rsync+vpn(pptp,openvpn,ipsec)
14.備份全網服務器數據生產架構方案案例
某公司里有一台web服務器,里面的數據很重要,但是如果硬盤壞了,數據就會丟失,現在領導要求你把數據在其他機器上做一個周期性的定時備份。要求如下: 1)web服務器A和備份服務器B的備份目錄必須為/backup 2)要本分的系統配置文件包括但不限於: a.定時任務服務的配置文件(/var/spool/cron/root) b.開啟自動的配置文件(/etc/rc.local) c.日常腳本的目錄(server/scripts) d.防火牆iptables的配置文件(/ets/sysconfig/iptables) e.自我思考還需要備份哪些配置? 3)web服務器站點目錄假定為(var/html/www) 4)web服務器A的訪問日志路徑假定為(/app/logs) 6)備份服務器上,保留最近7天的備份數據,同時保留6個月內每周一的所有數據副本 7)備份服務器上要按照備份數據服務器的內網ip為目錄保存備份,備份的文件按照時間名字保存。 8)需要確保備份的數據盡量完整正確,在備份服務器上對備份服務器的數據進行檢查,把備份的成功及失敗結果信息發給系統管理員郵箱中 1.環境需求配置 web服務器 192.168.0.165 主機名稱:web01 rsync備份服務器 192.168.0.165 主機名稱:backup 2.備份方案思路 ①搭建backup服務器 a.rsync服務 ②搭建web01服務器 a.驗證rsync服務器是否能推送成功 b.開發腳本實現打包、備份、推送、校驗、刪除 c.配置定時任務每天00點定時推送 ③backup服務器 a.開發腳本實現數據校驗、刪除、報警 b.配置定時任務每天6點定時執行 ④同理搭建存儲服務器nfs01
backup服務器設置: [root@backup ]# useradd rsync -s /sbin/nologin -M [root@backup ]# mkdir /backup [root@backup ]# chown -R rsync.rsync /backup [root@backup ]# vim /etc/rsyncd.conf uid = rsync gid = rsync use chroot = no max connections = 200 pid file = /var/run/rsyncd.pid log file = /var/log/rsyncd.log timeout = 300 ignore errors read only = false list = false hosts allow = 192.168.0.0/24 auth users = rsync_backup secrets file = /etc/rsync.password [backup] path=/backup [root@backup ]# echo "rsync_backup:123456" > /etc/rsync.password [root@backup ]# systemctl start rsyncd [root@backup ]# systemctl enable rsyncd [root@backup ]# ps -ef |grep rsync [root@web01 ]# echo "123456" >/etc/rsync.password [root@web01 ]# rsync -avz rsync_backup@192.168.0.175::backup/ --password-file=/etc/rsync.password sending incremental file list hosts sent 148 bytes received 27 bytes 350.00 bytes/sec total size is 188 speedup is 1.07 [root@web01 ]# mkdir /var/html/www -p [root@web01 ]# mkdir /app/logs -p [root@web01 ]# mkdir /server/scripts -p [root@web01 ]# mkdir /backup [root@web01 ]# touch /var/html/www/{1..10}.html [root@web01 ]# touch /app/logs/{1..10}.log [root@web01 ]# vim /server/scripts/bak.sh #/bin/bash cd / &&\ IP=`ifconfig enp0s3 |awk -F "[ :]+" 'NR==2{print $3}'` BakPath=/backup mkdir $BakPath/$IP -p ######判斷是否屬於星期二,並對星期一的數據增加標記打包 if [ $(date +%w) -eq 2 ];then date="$(date +%F -d "-1day")_week1" else date="$(date +%F -d "-1day")" fi cd / &&\ tar zcfh $BakPath/$IP/sys_config_${date}.tar.gz /var/spool/crond/ /etc/rc.local /server/scripts /etc/sysconfig/iptables && \ tar zcf $BakPath/$IP/web_data_${date}.tar.gz /var/html/www && \ tar zcf $BakPath/$IP/access_log_${date}.tar.gz /app/logs && \ find $BakPath -type f -name "*.tar.gz" |xargs md5sum > $BakPath/$IP/flag_${date} ########bak data to backupserver by long at 20171013 rsync -az $BakPath/ rsync_backup@192.168.0.175::backup/ --password-file=/etc/rsync.password #######delete data 7 days ago. find $BakPath -type -f -mtime +7 |xargs rm -rf [root@web01 ]# crontab -e 00 * * * * /bin/bash /server/scripts/bak.sh [root@backup ]# yum install -y mailx [root@backup ]# vim /etc/mailrc set from=wangjinlong@163.com smtp=smtp.163.com smtp-auth-user=wangjinlong smtp-auth-password=123456 smtp-auth=login ###from:發送的郵件地址 ###smtp:發生的外部smtp服務器地址 ###smtp-auth-user是外部smtp服務器認證的用戶名 ###smtp-auth-password:外部smtp服務器認證的用戶密碼(授權碼) ###smtp-auth:郵件認證方式 [root@backup ]# mail -s "testing" 18824948172@139.com < /etc/hosts [root@backup ]# mkdir -p /server/scripts [root@backup ]# vim /server/scripts/check.sh #!/bin/bash #######對數據進行校驗 find /backup/ -name "flag_$(date +%F)"|xargs md5sum -c > /tmp/mail_$(date +%F).log if [ $(date +%w) -eq 2 ];then date="$(date +%F -d "-1day")_week1" else date="$(date +%F -d "-1day")" fi ####對180天前的數據進行刪除,並留下6個月內每星期一的數據 find /backup -type -f -name "*.tar.gz" -a ! -name "*week1*" -mtime -7 |xargs rm -rf mail -s "backup `date`" 18824948172@139.com < /tmp/mail_$(date +%F).log [root@backup ]# crontab -e 00 06 * * * /bin/bash /server/scripts/check.sh