RSYNC

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
相關文章
相關標籤/搜索