服務器數據同步:rsync遠程同步方式功能介紹+實時同步實驗

前言:

  • rsync(Remote Sync)遠程同步,是linux系統下的數據鏡像備份工具。使用快速增量備份工具Remote Sync可以遠程同步,支持本地複製,或者與其他SSH、rsync主機同步。

一、rsync 軟件介紹

1.1 rsync概述
  • Remote Sync :簡稱rsync,是一種遠程同步,高效的數據備份的工具。第一次備份完全備份,以後備份就是差異備份。
  • scp:secure copy 同樣是用來進行遠程複製的命令,但是每次備份數據都是完全備份
1.1.1 全量及增量傳輸
  • 全量:將全部數據,進行傳輸覆蓋
  • 增量:只傳輸差異部分的數據
1.2 rsync 功能及特點
  • rsync功能
    • 作爲命令:實現本地-遠程文件同步
    • 作爲服務:實現本地-遠程文件同步
  • rsync特點
    • 可以鏡像保存整個目錄樹和文件系統
    • 可以保留原有的權限(permission,mode),owner,group,時間(修改時間,modify time),軟硬鏈接,文件acl,文件屬性(attributes)信息等
    • 傳輸效率高,使用同步算法,只比較變化的
    • 支持匿名傳輸,方便網站鏡像;也可以做驗證,加強安全
1.3 rsync同類服務
  • sync 同步:刷新文件系統緩存,強制將修改過的數據塊寫入磁盤,並且更新超級塊。
  • async 異步:將數據先放到緩衝區,再週期性(一般是30s)的去同步到磁盤。
  • rsync 遠程同步:remote synchronous

二、rsync 實驗部分

2.1 rsync命令
  • ① rsync啓動命令:rsync --daemon

  • ② rsync關閉命令:kill $(cat /var/run/rsyncd.pid)

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

    例如:

#同步本機的fstab文件到/opt目錄
rsync /etc/fstab /opt
#同步本地的grub目錄到/opt目錄
rsync -rl /boot/grub /opt
#如果想要在/opt目錄下也創建一個/boot目錄,則命令爲:
rsync -R rl /boot/grub /opt
  • 下行同步的兩種方式(使用客戶端將rsync服務器下載的wwwroot共享模塊下的內容同步到本地的/opt目錄下(共享模塊下的真實共享路徑需要對other用戶具有讀取 +r 的權限

    ① 命令格式: 用戶名@主機地址::共享模塊名,例如:

    ② 命令格式:rync://用戶名@主機地址/共享模塊名,例如:

  • rsync通過ssh的方式同步

    • 命令與scp命令類似

    • 例如:將本地/opt/test.txt上傳到目標服務器/opt目錄:

      rsync -avz /opt/test.txt [email protected]:/opt

    • 例如:將目標服務器/opt/test2.txt文件下載到本地/opt目錄:

      rsync -avz [email protected]:/opt/test2.txt /opt

2.2 實驗環境
  • 準備兩個節點
  • master節點 IP地址:192.168.226.128
    • 安裝服務:rsync、httpd
  • slave節點 IP地址:192.168.226.132
    • 安裝服務:rsync、inotify-tools
2.2.1 實驗拓撲

在這裏插入圖片描述

2.3 實驗環境配置
  • 修改兩個節點的網卡信息
[root@master ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="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="aaedeee1-b47c-42b0-93be-b7dc40e486e3"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.226.128
NETMASK=255.255.255.0
GATEWAY=192.168.226.2
DNS1=8.8.8.8

#slave節點IP地址修改爲192.168.226.132
  • 關閉防火牆、增強性安全功能
[root@master ~]# systemctl stop firewalld
[root@master ~]# 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@master ~]# setenforce 0
[root@master ~]# sed -i  "7s/enforcing/disabled/" /etc/selinux/config
SELINUX=disabled
  • 配置本地yum源(所有服務器)
[root@master ~]# cd /etc/yum.repos.d
[root@master yum.repos.d]# mkdir backup
[root@master yum.repos.d]# mv * backup/
mv: cannot move ‘backup’ to a subdirectory of itself, ‘backup/backup’
[root@master yum.repos.d]# ls
backup
[root@master yum.repos.d]# vim local.repo
[mnt]
name=mnt
baseurl=file:///mnt
gpgcheck=0
enbaled=1
------》wq

[root@master yum.repos.d]# vi /etc/fstab
/dev/cdrom /mnt iso9660 defaults 0 0
[root@master yum.repos.d]# reboot
[root@master yum.repos.d]# yum clean all
[root@master yum.repos.d]# yum makecache
2.4 配置rsync源服務器(master節點)
  • 安裝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						#限制root用戶(禁錮在源目錄)
address = 192.168.226.128				#監聽地址
port 873								#端口號
log file = /var/log/rsyncd.log			#日誌文件位置
pid file = /var/run/rsyncd.pid			#pid(運行進程號)文件存放位置
hosts allow = 192.168.226.132			#允許訪問的客戶端地址(可設置爲網段:192.168.226.0/24)
[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 = slave						#授權賬戶
secrets file = /etc/rsyncd_users.db		#存放賬戶信息的數據文件
-----》wq
  • 創建用戶密碼文件
#創建存放賬戶信息的數據文件
[root@master etc]# vim /etc/rsyncd_users.db
#使用 “用戶:密碼”的記錄形式,每行一個用戶記錄獨立的賬戶數據,不依賴於系統賬號
slave:slave123


#給與權限(root用戶讀寫的權限)
[root@master etc]# chmod 600 /etc/rsyncd_users.db

#查看下源目錄的文件權限
[root@master etc]# ll -ld /var/www/html
drwxr-xr-x. 2 root root 6 Aug  4  2017 /var/www/html
  • 啓動rsync服務
[root@master etc]# rsync --daemon
[root@master etc]# netstat -natp | grep rsync
tcp        0      0 192.168.226.128:873     0.0.0.0:*               LISTEN      44119/rsync 
  • 在 /var/www/html目錄新建文件
[root@master etc]# cd /var/www/html
[root@master html]# touch aaa.html bbb.html
[root@master html]# ls
aaa.html  bbb.html
[root@master html]# echo "aaa.web" >> aaa.html 
[root@master html]# echo "bbb.web" >> bbb.html 
[root@master html]# cat aaa.html 
aaa.web
[root@master html]# cat bbb.html 
bbb.web
2.5 客戶端配置,本地同步與下行同步(slave節點)
  • 安裝rsync服務
[root@slave yum.repos.d]# yum -y install rsync
  • 在本地文件系統上實現同步
[root@slave yum.repos.d]# cd /opt
[root@slave opt]# ls
rh
#將本機的/etc/fstab文件同步到本機/opt下
[root@slave opt]# rsync /etc/fstab /opt
[root@slave opt]# ls
fstab  rh

#將本機的/boot/grub目錄同步到本機/opt下    
[root@slave opt]# rsync -rl /boot/grub /opt
[root@slave opt]# ls
fstab  grub  rh
  • 下行同步的兩種方式,密碼爲slave123
[root@slave opt]# mkdir myweb
#方式一:
[root@slave opt]# rsync -avzH --delete [email protected]::wwwroot /opt/myweb
Password: 
receiving incremental file list
./
aaa.html
bbb.html

sent 99 bytes  received 231 bytes  31.43 bytes/sec
total size is 16  speedup is 0.05
[root@slave opt]# ls /opt/myweb/
aaa.html  bbb.html
[root@slave opt]# cat /opt/myweb/aaa.html 
aaa.web

#方式二:
[root@slave opt]# rsync -avz rsync://[email protected]/wwwroot /root
Password: 
receiving incremental file list
./
aaa.html
bbb.html

sent 99 bytes  received 231 bytes  73.33 bytes/sec
total size is 16  speedup is 0.05
[root@slave opt]# ls /root
aaa.html         bbb.html              下載  圖片  桌面  視頻
anaconda-ks.cfg  initial-setup-ks.cfg  公共  文檔  模板  音樂

2.5.1 rsync源的免密交互處理
  • rsync源的免密交互處理
[root@slave opt]# vim /etc/server.pass
slave123

#密碼文件目錄指定我們剛剛創建的密碼文件,可以實現免密交互[root@slave opt]# rsync -az --delete --password-file=/etc/server.pass [email protected]::wwwroot /opt/myweb
[root@slave opt]# ls myweb/
aaa.html  bbb.html
2.5.2 rsync 實現同步
  • 源端配置
[root@master html]# vim /etc/rsyncd.conf
#關閉只讀
read only = no

#關閉rsync服務
[root@master html]# kill `cat /var/run/rsyncd.pid`
[root@master html]# netstat -natp | grep rsync
#開啓服務
[root@master html]# rsync --daemon
[root@master html]# netstat -natp | grep rsync
tcp        0      0 192.168.226.128:873     0.0.0.0:*               LISTEN      73382/rsync         
[root@master html]# chmod 777 /var/www/html

#客戶機同步的/opt/myweb也需要給與777權限
root@slave opt]# chmod 777 myweb
  • 客戶端配置
#查看監控隊列大小
[root@master html]# cat /proc/sys/fs/inotify/max_queued_events 
16384
#查看最多監控實例數
[root@master html]# cat /proc/sys/fs/inotify/max_user_instances 
128
#每個實例最多監控文件數
[root@master html]# cat /proc/sys/fs/inotify/max_user_watches 
8192

#調整inotify內核參數
[root@master html]# vim /etc/sysctl.conf 
[root@master html]# sysctl -p
fs.inotify.max_queued_events = 32768
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
  • 上傳inotify內核工具
[root@slave ~]# tar zxvf inotify-tools-3.14.tar.gz -C /opt
[root@slave ~]# cd /opt/inotify-tools-3.14/
[root@slave inotify-tools-3.14]# ls
aclocal.m4    config.h.in   COPYING     libinotifytools  man      src
AUTHORS       config.sub    depcomp     ltmain.sh        missing
ChangeLog     configure     INSTALL     Makefile.am      NEWS
config.guess  configure.ac  install-sh  Makefile.in      README
[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
  • 使用遠程連接工具新打開一個終端,作爲持續監控、實時輸出結果
#inotifywait 用於持續監控,實時輸出結果
#inotifywatch 用於短期監控,任務完成後再出結果
[root@slave ~]# inotifywait -mrq -e modify,create,move,delete  /opt/myweb

    
#我們可以在客戶機上/opt/myweb創建一個文件,然後查看監控信息
[root@slave ~]# vim ccc.html
ccc web
此時可以查看到監控信息中會生成創建ccc.html的操作
  • 源服務器新建持續監控的腳本
[root@slave inotify-tools-3.14]# vim /opt/inotify.sh
[root@slave inotify-tools-3.14]# cat /opt/inotify.sh 
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /opt/myweb/"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /opt/myweb/ [email protected]::wwwroot"
 
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
    if [ $(pgrep rsync | wc -l) -le 0 ] ; then
        $RSYNC_CMD
#       echo "${FILE} was rsynced" >>/opt/inotify_rsync.log

    fi
done
----->wq
[root@slave inotify-tools-3.14]# cd /opt/
[root@slave opt]# chmod +x inotify.sh 
#開啓腳本,持續監控
[root@slave opt]# ./inotify.sh 
  • 在客戶機上的/opt/myweb中創建一個新文件,查看源服務器數據有無上傳
#客戶機服務器
[root@slave myweb]# vim ddd.html
[root@slave myweb]# cat ddd.html 
ddd web

#源服務器
    
[root@localhost html]# ll
total 16
-rw-r--r--. 1 root   root   8 Mar 27 19:54 aaa.html
-rw-------. 1 nobody nobody 8 Mar 27 20:34 bbb.html
-rw-------. 1 nobody nobody 8 Mar 27 20:34 ccc.html
-rw-------. 1 nobody nobody 8 Mar 27 20:34 ddd.html
[root@localhost html]# cat ddd.html 
ddd web
    
#同步成功 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章