Linux中詳細搭建rsync服務
阿新 • • 發佈:2018-08-17
one orm %d 搭建 配置 傳輸工具 火墻 gre while 1.rsync簡介
rsync是類unix系統下的數據鏡像備份工具,從軟件的命名上就可以看出來了——remote sync。rsync是Linux系統下的文件同步和數據傳輸工具,它采用“rsync”算法,可以將一個客戶機和遠程文件服務器之間的文件同步,也可以在本地系統中將數據從一個分區備份到另一個分區上。如果rsync在備份過程中出現了數據傳輸中斷,恢復後可以繼續傳輸不一致的部分。rsync可以執行完整備份或增量備份。它的主要特點有: 1.可以鏡像保存整個目錄樹和文件系統; 2.可以很容易做到保持原來文件的權限、時間、軟硬鏈接;無須特殊權限即可安裝; 3.可以增量同步數據,文件傳輸效率高,因而同步時間短; 4.可以使用rcp、ssh等方式來傳輸文件,當然也可以通過直接的socket連接; 5.支持匿名傳輸,以方便進行網站鏡象等; 6.加密傳輸數據,保證了數據的安全性;
2.rsync的優點與不足
與傳統的cp、tar備份方式對比,rsync具有安全性高、備份迅速、支持增量備份等優點,通過rsync可以解決對實時性要求不高的數據備份需求,例如,定期地備份文件服務器數據到遠端服務器,對本地磁盤定期進行數據鏡像等。 但是隨著系統規模的不斷擴大,rsync的缺點逐漸被暴露了出來。首先,rsync做數據同步時,需要掃描所有文件後進行對比,然後進行差量傳輸。如果文件很大,掃面文件是非常耗時的,而且發生變化的文件往往是很少一部分,因此rsync是非常低效的方式。其次,rsync不能實時監測、同步數據,雖然它可以通過Linux守護進程的方式觸發同步,但是兩次觸發動作一定會有時間差,可能導致服務器端和客戶端數據出現不一致
3.rsync的ssh認證協議
rsync命令來同步系統文件之前要先登入 remote主機認證,認證過程中用到的協議有2種: ssh協議 rsync協議 rsync server 端不用啟動rsync的daemon進程,只要獲取remote host 的用戶名和密碼就可以直接rsync同步文件 rsync server端因為不用啟動daemon進程,所以也不用配置文件 /etc/rsyncd.cof ssh認證協議跟scp的原理是一樣的,如果在同步過程中不想輸入密碼就用 ssh-keygen -t rsa 打通通道 //這種方式默認是省略了 -e ssh 的下面等價: rsync -avz /SRC -e ssh [email protected]:/DEST -a //文件宿主變化,時間戳不變 -z //壓縮數據傳輸 //當遇到要修改端口的時候,我們可以用: rsync -avz /SRC -e "ssh -p2222" [email protected]:/DEST //修改了ssh 協議的端口,默認是22
4.rsync命令常用選項:
-a, --archive //歸檔
-v, --verbose //啰嗦模式
-q, --quiet //靜默模式
-r, --recursive //遞歸
-p, --perms //保持原有的權限屬性
-z, --compress //在傳輸時壓縮,節省帶寬,加快傳輸速度
5.實例演示:
環境說明
服務器類型 | IP地址 |
---|---|
源服務器 | 192.168.209.12 |
目標服務器 | 192.168.209.13 |
*需求***
把原服務器上/etc 目錄實時同步到目標服務器的/tmp/下
在目標服務器上做以下操作:
*****************rsync+inotify****************
//目標服務器端操作如下
首先關閉防火墻
[root@kehuduan ~]# yum install -y rsync
[root@kehuduan ~]# cat >> /etc/rsyncd.conf << EOF
> log file = /var/log/rsync.log
> pidfile = /var/run/rsyncd.pid
> lock file = /var/run/rsync.lock
> secrets file = /etc/rsync.pass
>
> [etc_from_client]
> path = /tmp/
> comment = sync etc from client
> uid = root
> gid = root
> port = 873
> ignore errors
> use chroot = no
> read only = no
> list = no
> max connections = 200
> timeout = 600
> auth users = admin
>EOF
//創建用戶認證文件
[root@kehuduan ~]# echo ‘admin:123456‘ > /etc/rsync.pass
[root@kehuduan ~]# cat /etc/rsync.pass
admin:123456
//設置文件權限
[root@kehuduan ~]# chmod 600 /etc/rsync*
[root@kehuduan ~]# ll /etc/rsync*
-rw-------. 1 root root 787 8月 13 15:13 /etc/rsyncd.conf
-rw------- 1 root root 13 8月 13 15:14 /etc/rsync.pass
//啟動rsync服務並設置開機自啟動
[root@kehuduan ~]# systemctl start rsyncd
[root@kehuduan ~]# systemctl enable rsyncd
[root@kehuduan ~]# ss -antl
:::873端口
####源服務器端
首先關閉防火墻
//配置yum源
[root@lanzhiyong ~]# cd /etc/yum.repos.d/
[root@lanzhiyong yum.repos.d]# wget http://mirrors.163.com/.help/CentOS7-Base-163.repo [root@localhost ~]# sed -i ‘s/\$releasever/7/g‘ /etc/yum.repos.d/CentOS7-Ba se-163.repo
[root@localhost ~]# sed -i ‘s/^enabled=.*/enabled=1/g‘ /etc/yum.repos.d/Cen tOS7-Base-163.repo
[root@lanzhiyong ~]# yum install -y epel-release
[root@lanzhiyong ~]# yum install -y update --skip-broken
//安裝rsync服務端,中需要安裝,不要啟動,不需要配置
[root@lanzhiyong ~]# yum install -y rsync
//創建認證密碼文件
[root@lanzhiyong ~]# echo ‘123456‘ > /etc/rsync.pass
[root@lanzhiyong ~]# cat /etc/rsync.pass
123456
//設置文件權限,只設置文件所有者具有讀取,寫入權限即可
[root@lanzhiyong ~]# chmod 600 /etc/rsync.pass
[root@lanzhiyong ~]# ll /etc/rsync.pass
-rw-------. 1 root root 7 8月 13 16:05 /etc/rsync.pass
//在源服務器上創建測試目錄 ,然後在原服務器運行一下命令
[root@lanzhiyong ~]# mkdir -pv /root/etc/test
[root@lanzhiyong ~]# rsync -avH --port 873 --progress --delete /root/etc/ [email protected]::etc_from_client --password-file=/etc/rsync.pass
//這步後,在客戶端上/tmp目錄下有test目錄,說明數據同步成功
//查看服務器內核是否支持inotify
[root@lanzhiyong ~]# ll /proc/sys/fs/inotify/
//安裝inotify-tools
[root@lanzhiyong ~]# yum install -y make gcc gcc-c++
[root@lanzhiyong ~]# yum install -y inotify-tools
//寫同步腳本
[root@lanzhiyong ~]# mkdir /scripts
[root@lanzhiyong ~]# touch /scripts/inotify.sh
[root@lanzhiyong ~]# chmod 755 /scripts/inotify.sh
[root@lanzhiyong ~]# ll /scripts/inotify.sh
-rwxr-xr-x. 1 root root 0 8月 13 16:27 /scripts/inotify.sh
[root@lanzhiyong ~]# vim /scripts/inotify.sh
#!/bin/bash
host=192.168.209.13
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@lanzhiyong ~]# nohup bash /scripts/inotify.sh &
[2] 3351
[root@lanzhiyong ~]# nohup: 忽略輸入並把輸出追加到"nohup.ou
[root@lanzhiyong ~]# ps -ef|grep inotify
//在源服務器上生成一個新文件
[root@lanzhiyong ~]# mkdir /etc/lanzhiyong
[root@lanzhiyong ~]# echo ‘I Love china‘ > /etc/lanzhiyong/lan
//查看inotify生成的日誌
[root@lanzhiyong ~]# tail /tmp/rsync.log
//設置腳本開機自動啟動
[root@lanzhiyong ~]# chmod +x /etc/rc.d/rc.local
[root@lanzhiyong ~]# ll /etc/rc.d//rc.local
[root@lanzhiyong ~]# echo ‘nohup /bin/bash /scripts/inotify.sh‘ >> /etc/rc.d/rc.local
[root@lanzhiyong ~]# tail /etc/rc.d/rc.local
最後的 實例演示驗證:
在目標服務器上
[root@kehuduan ~]#cd /tmp
[root@kehuduan ~]#cd /etc
[root@kehuduan ~]#cd lanzhiyong
[root@kehuduan ~]#cat lan
I Love china
Linux中詳細搭建rsync服務