rsync 簡介
rsync是linux系統下的數據鏡像備份工具。使用快速增量備份工具Remote Sync能夠遠程同步,支持本地複製,或者與其餘SSH、rsync主機同步。linux
rsync特性
它的特性以下:c++
能夠鏡像保存整個目錄樹和文件系統。vim
能夠很容易作到保持原來文件的權限、時間、軟硬連接等等。centos
無須特殊權限便可安裝。安全
快速:第一次同步時 rsync 會複製所有內容,但在下一次只傳輸修改過的文件。rsync 在傳輸數據的過程當中能夠實行壓縮及解壓縮操做,所以可使用更少的帶寬。bash
安全:可使用scp、ssh等方式來傳輸文件,固然也能夠經過直接的socket鏈接。服務器
支持匿名傳輸,以方便進行網站鏡象。ssh
rsync命令
//Rsync的命令格式經常使用的有如下三種socket
rsync [OPTION]... SRC DEST rsync [OPTION]... SRC [USER@]HOST:DEST rsync [OPTION]... [USER@]HOST:SRC DEST
//rsync經常使用選項ide
-a, --archive // 歸檔 -v, --verbose // 囉嗦模式 -q, --quiet // 靜默模式 -r, --recursive // 遞歸 -p, --perms // 保持原有權限的屬性 -z, --compress // 在傳輸時壓縮,節省帶寬,加快傳輸速度。 --delete // 在源服務器上作的刪除操做也會在目標服務器上同步
INotify的介紹
inotify 是一種文件系統的變化通知機制,如文件增長、刪除等事件能夠馬上讓用戶態得知。
1.Inotify 不須要對被監視的目標打開文件描述符,並且若是被監視目標在可移動介質上,那麼在 umount 該介質上的文件系統後,被監視目標對應的 watch 將被自動刪除,而且會產生一個 umount 事件。
2.Inotify 既能夠監視文件,也能夠監視目錄。
3.Inotify 使用系統調用而非 SIGIO 來通知文件系統事件。
4.Inotify 使用文件描述符做爲接口,於是可使用一般的文件 I/O 操做select 和 poll 來監視文件系統的變化。
環境說明
服務類型 | ip | 應用 | 操做系統 |
---|---|---|---|
源服務器 | 192.168.47.11 | rsync,inotify-tools 腳本 | centos7 /redhat7 |
目標服務器 | 192.168.7.12 | rsync | centos7 /redhat7 |
把源服務器上的/etc 目錄實時同步到目標服務器 /tmp 下
在目標服務器上作如下操做
//關閉防火牆與SELINUX [root@yanyinglai3 ~]# systemctl stop firewalld [root@yanyinglai3 ~]# systemctl disable firewalld [root@yanyinglai3 ~]# getenforce Enforcing [root@yanyinglai3 ~]# setenforce 0 [root@yanyinglai3 ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/sysconfig/selinux 安裝rsync服務端軟件 [root@yanyinglai3 ~]# yum -y install rsync //設置rsyncd.conf 配置文件 root@yanyinglai3 ~]# cat >> /etc/rsyncd.conf <<EOF > log file = /var/log/rsyncd.log //日誌文件位置,啓動rsync後自動產生這個文件無需提早建立 > pidfile = /var/run/rsyncd.pid // pid文件的存放位置 > lock file = /var/run/rsync.lock // 支持max connections參數的鎖文件 > secrets file = /etc/rsync.pass // 用戶認證配置文件,裏面保存用戶名稱和密碼,必須手動建立文件 > [etc_from_client] // 自定義同步名稱 > path = /tmp/ // rsync 服務端數據存放路徑,客戶端的數據將同步至此目錄 > comment = sync etc from client > uid = root // 設置rsync 運行權限爲root > gid = root // 設置rsync運行權限爲root > port = 873 // 默認端口 > ignore errors // 表示出現錯誤忽略錯誤 > use chroot = no // 默認爲true ,修改成no 增長對目錄文件軟鏈接的備份 > read only = no // 設置rsync 服務端爲讀寫權限 > list = no // 不顯示rsync 服務端資源列表 > max connections = 200 // 最大鏈接數 > timeout = 600 // 設置超時時間 > auth users = admin / / 執行數據同步的用戶名,能夠設置多個 > hosts allow = 192.168.47.11 // 容許進行數據同步的客戶端ip地址,能夠設置多個 > hosts deny = 192.168.1.1 // 禁止數據同步的客戶端ip地址,能夠設置多個 > EOF 建立用戶認證文件 [root@yanyinglai3 ~]# echo 'admin:123456' > /etc/rsync.pass [root@yanyinglai3 ~]# cat /etc/rsync.pass admin:123456 設置文件權限 [root@yanyinglai3 ~]# chmod 600 /etc/rsync* [root@yanyinglai3 ~]# ll /etc/rsync* -rw-------. 1 root root 842 8月 16 10:26 /etc/rsyncd.conf -rw-------. 1 root root 13 8月 16 10:52 /etc/rsync.pass 啓動rsync服務並設置開機自啓動 [root@yanyinglai3 ~]# systemctl start rsyncd [root@yanyinglai3 ~]# systemctl enable rsyncd Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service. [root@yanyinglai3 ~]# ss -antl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 5 *:873 *:* LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::* LISTEN 0 5 :::873 :::* 在源服務器上作如下操做 [root@yanyinglai ~]# systemctl stop firewalld [root@yanyinglai ~]# systemctl disable firewalld Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. [root@yanyinglai ~]# getenforce Enforcing [root@yanyinglai ~]# setenforce 0 [root@yanyinglai ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/sysconfig/selinux // 配置yum源 [root@yanyinglai ~]# cd /etc/yum.repos.d/ [root@yanyinglai yum.repos.d]# wget http://mirrors.163.com/.help/CentOS7-Base-163.repo [root@yanyinglai ~]# sed -i 's/\$releasever/7/g' /etc/yum.repos.d/CentOS7-Base-163.repo [root@yanyinglai ~]# sed -i 's/^enabled=.*/enabled=1/g' /etc/yum.repos.d/CentOS7-Base-163.repo [root@yanyinglai ~]# yum -y install epel-release [root@yanyinglai ~]# yum -y update --skip-broken 安裝rsync服務端軟件,只須要安裝,不要啓動,不須要配置 [root@yanyinglai ~]# yum -y install rsync // 建立認證密碼文件 [root@yanyinglai ~]# echo '123456' > /etc/rsync.pass [root@yanyinglai ~]# cat /etc/rsync.pass 123456 // 設置文件權限,只設置文件全部者具備讀取,寫入權限便可 [root@yanyinglai ~]# chmod 600 /etc/rsync.pass [root@yanyinglai ~]# ll /etc/rsync.pass -rw-------. 1 root root 7 8月 16 11:38 /etc/rsync.pass // 在源服務器上建立測試目錄,而後在源服務器運行一下命令 [root@yanyinglai ~]# ls anaconda-ks.cfg [root@yanyinglai ~]# mkdir -pv /root/etc/test mkdir: 已建立目錄 "/root/etc" mkdir: 已建立目錄 "/root/etc/test" [root@yanyinglai ~]# rsync -avH --port 873 --progress --delete /root/etc/ admin@192.168.47.12::etc_from_client --password-file=/etc/rsync.pass // 運行完成後,在目標服務器上查看,在/tmp目錄下有test目錄,說明數據同步成功 安裝inotify-tools [root@yanyinglai ~]# yum -y install make gcc gcc-c++ [root@yanyinglai ~]# yum -y install inotify-tools // 寫同步腳本 [root@yanyinglai ~]# mkdir /scripts [root@yanyinglai ~]# touch /scripts/inotify.sh [root@yanyinglai ~]# chmod 755 /scripts/inotify.sh [root@yanyinglai ~]# ll /scripts/inotify.sh -rwxr-xr-x. 1 root root 0 8月 16 14:06 /scripts/inotify.sh [root@yanyinglai ~]# vim /scripts/inotify.sh host=192.168.47.12 src=/etc des=etc_from_client password=/etc/rsync.pass user=admin inotifywait=/usr/bin/inotifywait $inotifywait -mrq --timefmt '%Y%m%d %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src \ | while read files ; do rsync -avzP --delete --timeout=100 --password-file=${password} $src $user@$host::$des echo "${files} was rsynced" >>/tmp/rsync.log 2>&1 done 啓動腳本 [root@yanyinglai ~]# nohup bash /scripts/inotify.sh & [1] 25034 [root@yanyinglai ~]# nohup: 忽略輸入並把輸出追加到"nohup.out" [root@yanyinglai ~]# ps -ef|grep inotify root 25034 9419 0 14:17 pts/1 00:00:00 bash /scripts/inotify.sh root 25035 25034 1 14:17 pts/1 00:00:01 /usr/bin/inotifywait -mrq --timefmt %Y%m%d %H:%M --format %T %w%f%e -e modify,delete,create,attrib /etc root 25036 25034 0 14:17 pts/1 00:00:00 bash /scripts/inotify.sh root 25038 9419 0 14:18 pts/1 00:00:00 grep --color=auto inotify 在源服務器上生成一個新文件 [root@yanyinglai ~]# mkdir /etc/httpd24/ [root@yanyinglai ~]# echo 'hello world' > /etc/httpd24/test 查看inotify生成的日誌 [root@yanyinglai ~]# tail /tmp/rsync.log 20180816 14:18 /etc/httpd24CREATE,ISDIR was rsynced 20180816 14:19 /etc/httpd24/testCREATE was rsynced 20180816 14:19 /etc/httpd24/testMODIFY was rsynced 設置腳本開機自動啓動 [root@yanyinglai ~]# chmod +x /etc/rc.d/rc.local [root@yanyinglai ~]# ll /etc/rc.d/rc.local -rwxr-xr-x. 1 root root 473 4月 11 15:36 /etc/rc.d/rc.local [root@yanyinglai ~]# echo 'nohup /bin/bash /scripts/inotify.sh' >> /etc/rc.d/rc.local [root@yanyinglai ~]# tail /etc/rc.d/rc.local # to run scripts during boot instead of using this file. # # In contrast to previous versions due to parallel execution during boot # this script will NOT be run after all other services. # # Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure # that this script will be executed during boot. touch /var/lock/subsys/local nohup /bin/bash /scripts/inotify.sh 到目標服務器上去查看是否把新生成的文件自動傳上去了 [root@yanyinglai3 ~]# cd /tmp [root@yanyinglai3 tmp]# pwd /tmp [root@yanyinglai3 tmp]# ls etc test