文章目錄
前言:
- 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 的權限
① 命令格式: 用戶名@主機地址::共享模塊名,例如:
- rsync -avz [email protected]::wwwroot /opt
② 命令格式:rync://用戶名@主機地址/共享模塊名,例如:
- rsync -avz rsync://[email protected]/wwwroot/root
-
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
#同步成功