服務器數據同步:rsync遠程同步方式+實時同步!

前言

一:理論

1.1:什麼是rsync?有什麼作用

  • rsync,全稱爲:Remote Sync(遠程同步),是一款開源的快速增量備份工具,可以在不同主機之間鏡像同步整個目錄樹
  • 還支持本地複製,增量備份、保持連接和權限,或者與其他SSH,rsync主機同步
  • 採用優化的同步算法,傳輸前執行壓縮,因此非常適用於異地備份、鏡像服務器等應用
  • mark

1.2:rsync源服務器的關係

mark

二:實驗

2.1:rsync命令集錦

  • 1、啓動rsync服務:rsync --daemon

  • 2、關閉rsync服務:kill $(cat /var/run/rsyncd.pid)

  • 3、同步本地文件系統數據:rsync [選項] 原始位置 目標位置

    例如:
    rsync /etc/fstab /opt '//同步本機的fstab文件到opt目錄'
    rsync -rl /boot/grub /opt	'//同步本機的grub目錄到opt目錄'
    '//如果想要在/opt目錄下也創建一個boot目錄,那麼命令需要爲:rsync -R rl /boot/grub /opt '
    常用選項:
    -a:歸檔模式,遞歸併保留對象屬性,等同於 -rlptgoD
    -r 對子目錄以遞歸模式處理,主要是針對目錄來說的,如果單獨傳一個文件不需要加-r,但是傳輸的是目錄必須加-r選項
    -l 保留軟鏈接
    -p 保持文件權限
    -v:顯示同步過程的詳細(verbose)信息
    -z:在傳輸文件時進行壓縮(compress)
    -H:保留硬連接文件
    -A:保留ACL屬性信息
    --delete:刪除"目標""源"沒有的文件
    --checksum:根據對象的校驗和來決定是否跳過文件
    --progress 在同步的過程中可以看到同步的過程狀態,比如統計要同步的文件數量、同步的文件傳輸速度等等
    路徑的格式可以是本地路徑,也可以是使用user@host:path或user@host::path的遠程路徑,如果主機和path路徑之間使用單個冒號隔開,表示使用的是遠程shell通信方式,而使用雙冒號隔開的則表示的是連接rsync daemon
    
  • 4、下行同步的兩種方式(使用客戶端將rsync服務器下的wwwroot共享模塊下的內容同步到本地的/opt目錄下(共享模塊下的真實共享路徑需要對other用戶具有 ‘r’ 權限))

    • (1):命令格式用戶名@主機地址::共享模塊名

      例如:[root@rsyncClient ~]# rsync -avz [email protected]::wwwroot /opt

    • (2):命令格式:rsync://用戶名@主機地址/共享模塊名

      例如:[root@slave opt]# rsync -avz rsync://[email protected]/wwwroot /root

  • 5、rsync通過ssh的方式同步

    • 命令與平常的scp命令類似
    • 例如:將本地/opt/abc.txt上傳到目標服務器/opt目錄:rsync -avz /opt/abc.txt [email protected]:/opt
    • 例如:將目標服務器/opt/qwe.txt文件下載到本地/opt目錄下:rsync -avz [email protected]:/opt/qwe.txt /opt

2.2:實驗環境

  • VMware軟件

    • 主機名 IP地址 安裝服務 系統版本
      master 192.168.233.131 rsync,httpd centos7.4
      slave 192.168.233.133 rsync,inotify-tools centos7.4

2.3:實驗拓撲圖

  • mark

2.4:實驗過程

2.4.1:開局優化
  • 1、修改IP地址,操作相同,僅展示master的操作

    [root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33 
    TYPE=Ethernet
    PROXY_METHOD=none
    BROWSER_ONLY=no
    BOOTPROTO=static	'//改爲static'
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_FAILURE_FATAL=no
    IPV6_ADDR_GEN_MODE=stable-privacy
    NAME=ens33
    UUID=0f49a612-24ff-4410-8185-c13a60922cdc
    DEVICE=ens33
    ONBOOT=yes
    IPADDR=192.168.233.131	'//添加下面三個IP地址'
    NETMASK=255.255.255.0
    GATEWAY=192.168.233.2
    DNS1=8.8.8.8
    [root@localhost ~]# systemctl restart network
    '//另一臺IP地址修改爲192.168.233.133'
    
  • 2、關閉防火牆與核心防護功能,兩臺主機都要做

    [root@localhost ~]# systemctl stop firewalld	'//關閉防火牆'
    [root@localhost ~]# 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@localhost ~]# setenforce 0	'//關閉核心防護'
    [root@localhost ~]# vi /etc/sysconfig/selinux 	'//禁止核心防護開啓自啓'
    SELINUX=disabled
    
  • 3、修改主機名與主機映射文件,兩臺都做

    [root@localhost ~]# hostnamectl set-hostname slave
    [root@localhost ~]# su
    [root@slave ~]# vi /etc/hosts
    192.168.233.133 slave
    192.168.233.131 master
    
    [root@slave ~]# ping master
    '//master主機操作相同,不在贅述'
    
  • 配置本地yum源,兩臺都做

    [root@slave ~]# cd /etc/yum.repos.d/
    [root@slave yum.repos.d]# mkdir bak
    [root@slave yum.repos.d]# mv * bak	'//備份原有yum文件'
    mv: 無法將目錄"bak" 移動至自身的子目錄"bak/bak" 下
    [root@slave yum.repos.d]# vi local.repo	'//創建本地yum文件'
    [mnt]
    name=mnt
    baseurl=file:///mnt
    gpgcheck=0
    enbaled=1
    [root@slave yum.repos.d]# mount /dev/sr0 /mnt	'//手動掛載光盤'
    mount: /dev/sr0 寫保護,將以只讀方式掛載
    [root@slave yum.repos.d]# vi /etc/fstab	'//設置自動掛載'
    /dev/sr0 /mnt   iso9660 defaults        0 0
    [root@slave yum.repos.d]# yum clean all	'//清理緩存'
    [root@slave yum.repos.d]# yum makecache	'//創建緩存'
    
    
2.4.2:配置rsync源服務器
  • 安裝httpd與rsync服務

    [root@master yum.repos.d]# yum install httpd rsync -y
    
    
  • 修改rsync配置文件

    [root@master yum.repos.d]# vi /etc/rsyncd.conf 
     uid = nobody	
     gid = nobody	
     use chroot = yes                           '//禁錮在源目錄'
     address = 192.168.233.131                   '//監聽地址'
     port 873                                   '//監聽端口號'
     log file = /var/log/rsyncd.log            '//日誌文件位置'
     pid file = /var/run/rsyncd.pid           '//存放進程ID的文件位置'
     hosts allow = 192.168.233.133            '//允許訪問的客戶機地址'
    [wwwroot]                                       '//共享模塊名稱'
     path = /var/www/html                       '//源目錄的實際路徑'
     comment = Document Root of www.51xit.top
     read only =yes                                 '//是否只讀'
     dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z          '//同步時不在壓縮的文件類型'
     auth users = lisi                            '//授權賬戶'
     secrets file = /etc/rsyncd_users.db                '//存放賬戶信息的數據文件'
    
  • 創建於用戶密碼文件

    [root@master yum.repos.d]# vi /etc/rsyncd_users.db	'//創建存放賬戶信息的數據文件'
    lisi:lisi123	'//採用“用戶名:密碼”的記錄格式,每行一個用戶記錄獨立的賬號數據,不依賴於系統賬號'
    
    [root@master yum.repos.d]# chmod 600 /etc/rsyncd_users.db '//給數據文件設置權限'
    [root@master yum.repos.d]# ll -ld /var/www/html/	'//查看下源目錄的文件權限'
    drwxr-xr-x. 2 root root 6 8月   4 2017 /var/www/html/
    
    
  • 啓動rsync服務

    [root@master yum.repos.d]# rsync --daemon	'//啓動rsync服務,如果要停止這個服務請使用kill $(cat /var/run/rsyncd.pid)'
    [root@master yum.repos.d]# netstat -ntap |grep rsync
    tcp        0      0 192.168.233.131:873     0.0.0.0:*               LISTEN      4371/rsync    
    
  • 在 /var/www/html目錄中,新建文件

    [root@master yum.repos.d]# cd /var/www/html/
    [root@master html]# ls
    [root@master html]# touch 111.html
    [root@master html]# touch 222.html
    [root@master html]# ls
    111.html  222.html
        '//創建完成後,我們稍後到客戶機上操作,進行驗證'
    
2.2.3:客戶端配置,本地同步與下行同步
  • 安裝rsync服務

    [root@slave yum.repos.d]# yum install -y rsync
    
  • 本地文件系統上實現同步,

    命令格式:rsync [選項] 原始位置 目標位置
    [root@slave yum.repos.d]# cd /opt
    [root@slave opt]# ls
    rh
    [root@slave opt]# rsync /etc/fstab /opt	'//將本機的/etc/fstab文件同步到本機/opt下'
    [root@slave opt]# ls
    fstab  rh
    [root@slave opt]# rsync -rl /boot/grub /opt	'//將本機的/boot/grub目錄同步到本機/opt下'
    [root@slave opt]# ls
    fstab  grub  rh
    
    
  • 下行同步的兩種方式,密碼是lisi123

    [root@slave opt]# mkdir myweb
    '//方法一'
    [root@slave opt]# rsync -avzH --delete [email protected]::wwwroot /opt/myweb
    Password: 
    receiving incremental file list
    ./
    111.html
    222.html
    
    sent 98 bytes  received 207 bytes  87.14 bytes/sec
    total size is 0  speedup is 0.00
    [root@slave opt]# ls /opt/myweb/
    111.html  222.html
    
    '//方法二'
    [root@slave opt]# rsync -avz rsync://[email protected]/wwwroot /root
    Password: 
    receiving incremental file list
    ./
    111.html
    222.html
    
    sent 98 bytes  received 207 bytes  87.14 bytes/sec
    total size is 0  speedup is 0.00
    
    
2.2.4:rsync源的免密交互處理
  • rsync源的免密交互處理

    [root@slave opt]# vi /etc/server.pass	'//創建密碼文件'
    lisi123
    [root@slave opt]# chmod 600 /etc/server.pass	'//給密碼文件權限'
    [root@slave opt]# rm -rf myweb/*	'//先刪除/opt/myweb目錄下的內容用來測試
    [root@slave opt]# ls myweb/
    [root@slave opt]# rsync -az --delete --password-file=/etc/server.pass [email protected]::wwwroot /opt/myweb	'//指定剛剛創建的密碼文件,發現已經不需要輸入密碼了'
    [root@slave opt]# ls myweb/
    111.html  222.html
    
  • 可以創建週期性任務進行同步源服務器

    [root@slave opt]# crontab -e
    30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass [email protected]::wwwroot /opt/myweb/	'//每天晚上10點半對服務器網站目錄更新一次'
    [root@slave opt]# systemctl restart crond
    [root@slave opt]# systemctl enable crond
    
    
2.2.5:rsync實時同步
  • 源端配置

    [root@master html]# vi /etc/rsyncd.conf 
    read only = no '//改爲no'
    [root@master html]# kill `cat /var/run/rsyncd.pid`	'//關閉rsync服務'
    [root@master html]# netstat -ntap |grep rsync
    [root@master html]# rsync --daemon	'//開啓rsync服務'
    [root@master html]# netstat -ntap |grep rsync
    tcp        0      0 192.168.233.131:873     0.0.0.0:*               LISTEN      88302/rsync         
    [root@master html]# chmod 777 /var/www/html
    
    
  • 客戶端配置

    [root@slave opt]# cat /proc/sys/fs/inotify/max_queued_events 	'//監控隊列大小'
    16384	
    [root@slave opt]# cat /proc/sys/fs/inotify/max_user_instances	'//最多監控實例數'
    128	
    [root@slave opt]# cat /proc/sys/fs/inotify/max_user_watches 	'//每個實例最多監控文件數'
    8192
    [root@slave opt]# vi /etc/sysctl.conf
    [root@slave opt]# sysctl -p
    fs.inotify.max_queued_events = 32768
    fs.inotify.max_user_instances = 1024
    fs.inotify.max_user_watches = 1048576
    
    
  • 上傳

    mark

  • 客戶端安裝inotify-tools輔助工具

    [root@slave opt]# tar zxf inotify-tools-3.14.tar.gz 
    [root@slave opt]# cd inotify-tools-3.14/
    [root@slave inotify-tools-3.14]# yum install gcc gcc-c++ -y
    [root@slave inotify-tools-3.14]# ./configure 
    [root@slave inotify-tools-3.14]# make && make install
    
    
  • 重新打開一個終端

    [root@slave ~]# inotifywait -mrq -e modify,create,move,delete  /opt/myweb	'//運行持續監控監控'
    inotifywait:用於持續監控,實時輸出結果
    inotifywatch:用於短期監控,任務完成後再出結果
    
  • 源服務器編輯腳本並啓動

    [root@slave inotify-tools-3.14]# vim /opt/inotify.sh
    [root@slave inotify-tools-3.14]# chmod 777 /opt/myweb/
    [root@slave inotify-tools-3.14]# chmod +x /opt/inotify.sh 
    [root@slave inotify-tools-3.14]# cd ..
    [root@slave opt]# ./inotify.sh 	'//執行腳本進行監控'
    
    
  • 重新打開終端,測試rsync上傳同步

    [root@slave myweb]# touch 111.html	'//客戶機創建文件,刪除文件也可以同步成功'
    [root@master html]# ll	'//服務端查看'
    總用量 0
    -rw-r--r--. 1 root   root   0 3月  24 09:22 111.html	'//同步成功'
    
    '//查看剛剛運行的腳本監控'
    rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1052) [sender=3.0.9]
    	'//發現會有這個報錯,但是文件是正常傳過去的,這裏的這個報錯我沒有解決掉,如果有朋友解決了可以私信我或者評論告訴我,多謝!'
    
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章