發起rsync遠程同步的叫做發起端 響應遠程同步的叫備份源
1.配置ssh備份源
新建操作用戶
root@rs-s ~]# useradd rget [root@rs-s ~]# passwd rget [root@rs-s ~]# useradd rput [root@rs-s ~]# passwd rput |
確認sshd服務正常運行,設置允許rget、rput訪問
[root@rs-s ~]# vim /etc/ssh/sshd_config ... ... UseDNS no //找到這個選項修改成“no” AllowUsers rget rput //添加這個選項 [root@rs-s ~]# service sshd restart |
2.設置備份源文件和目錄的ACL
要備份哪個文件夾就設置哪個
在linux中文件可有ACL 規則可以打開/etc/fstab 在default後面加上,ACL (服務支持訪問控制列表) 配置完後重啓 |
設置權限以及ACL
root@localhost ~]# chown -R rput:rput /var/www/html 讓rput有html目錄的屬主權限 [root@localhost ~]# setfacl -R -m user:nginx:rwx /var/www/html/upload 遞歸添加ACL條目 [root@localhost ~]# setfacl -m default:user:nginx:rwx /var/www/html/upload 設置默認ACL |
以下是清空ACL規則命令
[root@localhost ~]# setfacl -R -b /var/www/html/upload/ 這條命令可以清楚所有ACL 改用“-x user:...”可只刪除指定ACL條目 |
可以用這條命令查看新增的ACL
root@localhost ~]# getfacl /var/www/html/upload/ …… user::rwx user:nginx:rwx …… default:user::rwx default:user:nginx:rwx |
3.
應用示例
用戶backuper,允許下行同步
操作的目錄爲 /var/www/html/
首先新建配置文件
[root@localhost ~]# vi /etc/rsyncd_users.db backuper:pwd123 othername:123456 …… [root@localhost ~]# chmod 600 /etc/rsyncd_users.db |
root@localhost ~]# vi /etc/rsyncd.conf uid = nobody gid = nobody use chroot = yes address = 192.168.4.4 //自己的IP port 873 log file = /var/log/rsyncd.log pid file = /var/run/rsyncd.pid hosts allow = 192.168.4.0/24 //允許誰訪問 [wwwroot] path = /var/www/html comment = Document Root of www1.benet.com read only = yes dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z //不再壓縮這些格式 auth users = backuper //這行和下行都是用戶認證信息 secrets file = /etc/rsyncd_users.db |
4.
啓用rsync服務
通過--daemon獨自提供服務
[root@localhost ~]# rsync --daemon [root@localhost ~]# netstat -anpt | grep rsync tcp 0 0 192.168.4.200:873 0.0.0.0:* LISTEN 21182/rsync [root@localhost ~]# kill $(cat /var/run/rsyncd.pid |
5.rsync命令的用法
rsync命令的用法 §基本格式:rsync [選項] 原始位置 目標位置 §常用選項: -a:歸檔模式,遞歸併保留對象屬性,等同於 -rlptgoD -v:顯示同步過程的詳細(verbose)信息 -z:在傳輸文件時進行壓縮(compress) -H:保留硬連接文件 -A:保留ACL屬性信息 --delete:刪除目標位置有而原始位置沒有的文件 --checksum:根據對象的校驗和來決定是否跳過文件 |
-rlptgoD含義:
-r:遞歸模式,包含目錄及子目錄中所有文件 -l:對於符號鏈接文件仍然複製爲符號鏈接文件 -p:保留文件的權限標記 -t:保留文件的時間標記 -g:保留文件的屬組標記(僅超級用戶使用) -o:保留文件的屬主標記(僅超級用戶使用) -D:保留設備文件及其他特殊文件 |
備份操作類型
備份操作類型 §本地同步 rsync ... 本地目錄1 本地目錄2 §rsync+ssh同步 rsync ... SSH源 本地目錄 rsync ... 本地目錄 SSH源 §rsync+rsync同步 rsync ... rsync源 本地目錄 rsync ... 本地目錄 rsync源 |
6.rsync同步操作示例
下行SSH源:/var/www/html → /wwwroot
(就是本地複製本地用SSH rsync不安全)
ssh:
[root@localhost ~]# mkdir /wwwroot [root@localhost ~]# rsync -avzH --delete [email protected]:/var/www/html/ /wwwroot [email protected]'s password: receiving incremental file list created directory /wwwroot html/ html/index.html html/style/ …… |
以上操作就是把html目錄裏的東西同步到/wwwroot裏
rsync:
[root@localhost ~]# mkdir /myweb [root@localhost ~]# rsync -avzH --delete [email protected]::wwwroot /myweb Password: receiving incremental file list ./ index.html index.php …… |
以上操作時把剛剛新建的wwwroot被分到/myweb中
用戶backuper是在上面的配置文件中寫的
wwwroot 是在 /etc/rsyncd.conf 中加載的。
7. rsync源的免交互處理 (創建公鑰對)
在CentOS6.4中證書上傳很方便
然後根據不用的備份源 執行不同的方案
1)ssh備份源的無交互式登錄
ssh-keygen -t rsa //生成 ssh-copy-id [email protected] //上傳 ssh-copy-id [email protected] //最好把rput的也上傳了 |
2)rsync備份源
設置環境變量:RSYNC_PASSWORD
或者,使用 --password-file= 選項調用密碼文件
export RSYNC_PASSWORD=pwd123 (填寫你的密碼就好了 backuper的) |
然後執行腳本
腳本內容
[root@localhost ~]# vi /root/rsync_get_wwwroot.sh #!/bin/bash CMD="/usr/bin/rsync" RSYNC_USER="backuper" RSYNC_PASSWROD="pwd123" //用戶backuper的密碼 ARGS="-az --delete" SRC="192.168.4.4::wwwroot" DST="/wwwroot" mkdir -p $DST $CMD $ARGS $RSYNC_USER@$SRC $DST |
給這個腳本700權限
crontab -e 編寫任務計劃
開機自啓
service crond restart
chkconfig crond on
配置rsync+inotify實時同步
一、vLinux內核的inotify機制
§從版本2.6.13開始提供
§可以監控文件系統的變動情況,並作出通知響應
§輔助軟件:inotify-tools
1)調整inotify內核參數
max_queue_events:監控隊列大小
max_user_instances:最多監控實例數
max_user_watches:每個實例最多監控文件數
[root@localhost ~]# vi /etc/sysctl.conf …… fs.inotify.max_queued_events = 16384 fs.inotify.max_user_instances = 1024 fs.inotify.max_user_watches = 1048576 [root@localhost ~]# sysctl -p |
操作都是在備份源上做的
2)安裝inotify-tools輔助工具
inotifywait:用於持續監控,實時輸出結果
inotifywatch:用於短期監控,任務完成後再出結果
root@localhost ~]# inotifywait -mrq -e modify,create,move,delete /var/www/html Setting up watches. Beware: since -r was given, this may take a while! Watches established. /var/www/html/ CREATE index.php /var/www/html/ MODIFY index.php /var/www/html/ MOVED_FROM index.php /var/www/html/ MOVED_TO test.php -m,持續進行監控 -r,遞歸監控所有子對象 -q,簡化輸出信息 -e,指定要監控哪些事件類型 |
3)
通過inotifywait觸發rsync同步操作
使用while死循環來不斷獲取監控結果
一旦偵測到目標變化,inotifywait將終結運行,則運行rsync進行備份
[root@localhost ~]# vi /opt/inotify_rsync.sh #!/bin/bash INOTIFY_CMD="inotifywait -rq -e modify,create,attrib,move,delete /var/www/html/" RSYNC_CMD="rsync -azH --delete /var/www/html/ [email protected]:/var/www/html" while true do $INOTIFY_CMD &> /dev/null $RSYNC_CMD &> /dev/null done |
給權限
執行