基於CentOS7.5的 Rsync 服務詳解

第1章 Rsync概述

1.1 Rsync基本概述

rsync是一款開源的備份工具,能夠在不一樣服務器(主機)之間進行同步備份,mysql

可實現徹底備份與增量備份,所以很是適合用於架構集中式備份或異地備份等應用。nginx

rsync官方地址:http://rsync.samba.org/redis

rsync端口:873sql

rsync運行模式:C/S  shell

拓展:

C/S   客戶端/服務端

B/S   瀏覽器/服務端

1.2 Rsync常見的兩種備份方式

徹底備份
增量備份瀏覽器

假設客戶端的上有file1 file2 file3文件安全

服務端上有file1文件,現要將客戶端上的數據備份至服務端bash

 

徹底備份,將客戶端全部的數據內容file1 file2 file3所有備份至服務端(效率低下,佔用空間)

增量備份,將客戶端的file2 file3增量備份至服務端(提升備份效率,節省空間,適合異地備份)

1.3 Rsync應用場景

1.3.1 數據同步的推和拉

數據同步的兩種方式服務器

推:全部主機推送本地數據至Rsync備份服務器,會致使數據同步緩慢(適合少許數據備份) 架構

拉:rsync備份服務端拉取全部主機上的數據,會致使備份服務器開銷大

1.3.2 大量服務器備份場景

若是服務器多的話  全部服務器都用一臺服務器備份 會致使同步的時候 備份服務器使用過多 因此使用多臺備份服務器

 

1.3.3 異地備份實現思路

 

1.4 Rsync命令對應選項

-a           #歸檔模式傳輸, 等於-tropgDl

-v           #詳細模式輸出, 打印速率, 文件數量等

-z           #傳輸時進行壓縮以提升效率

-r           #遞歸傳輸目錄及子目錄,即目錄下得全部目錄都一樣傳輸。

-t           #保持文件時間信息

-o           #保持文件屬主信息

-p           #保持文件權限

-g           #保持文件屬組信息

-l           #保留軟鏈接

-P           #顯示同步的過程及傳輸時的進度等信息

-D           #保持設備文件信息

-L           #保留軟鏈接指向的目標文件

-e           #使用的信道協議,指定替代rsh的shell程序

--exclude=PATTERN   #指定排除不須要傳輸的文件模式

--exclude-from=file #文件名所在的目錄文件

--bwlimit=100       #限速傳輸

--partial           #斷點續傳

--delete            #讓目標目錄和源目錄數據保持一致

1.5 Rsync傳輸模式

Rsync大體使用三種主要的數據傳輸方式

本地方式
遠程方式
守護進程

1.5.1 本地方式

本地方式至關於cp(複製) 本地略有些雞肋  功能和cp是同樣的

單個主機本地之間的數據傳輸(此時相似於cp命令)

[root@backup ~]# rsync /etc/passwd /tmp/

[root@backup ~]# ls /tmp/passwd

/tmp/passwd

1.5.2 遠程方式

經過ssh通道傳輸數據,相似scp命令

Access via remote shell: 遠程傳輸

遠程方式存在的缺陷:

1.須要使用系統用戶(不安全)

2.使用普通用戶(權限存在問題)

3.須要走ssh協議

Pull: rsync  [OPTION...]  [USER@]HOST:SRC... [DEST]  下載(拉)

下載pull

[root@nfs ~]# pwd   查看當前路徑    在nfs服務器下

/root

[root@nfs ~]# echo "This Nfs" > file

[root@backup ~]# rsync -avz root@172.16.1.31:/root/file /opt/ 

在backup服務器下 以root用戶身份將172.16.1.31 root目錄下file文件 傳輸到opt目錄下

[root@backup ~]# cat /opt/file   查看內容

This Nfs

Push: rsync  [OPTION...]  SRC... [USER@]HOST:DEST    上傳(推)

上傳push(將backup的file2文件上傳至NFS服務器的/mnt目錄)

[root@backup ~]# pwd  查看當前路徑    在backup服務器下

/root

[root@backup ~]# echo "This Rsync" > file2

[root@backup ~]# rsync -avz /root/file2 root@172.16.1.31:/mnt

將backup服務器裏的root目錄下的file2文件 發送到172.16.1.31服務器的mnt目錄下

[root@nfs ~]# cat /mnt/file2

This Rsync

推送目錄(推送/root/目錄下面的全部文件和目錄,不會推送/root/目錄自己)

[root@backup ~]# rsync -avz /root/ root@172.16.1.31:/tmp

推送目錄,推送目錄自己以及目錄下面的全部文件

[root@backup ~]# rsync -avz /root root@172.16.1.31:/tmp

1.5.3 守護進程

守護進程傳輸方式:rsync自身很是重要的功能(不使用系統用戶,更加安全)

第2章 Rsync服務配置

角色

外網IP(NAT)

內網IP(LAN)

主機名

Rsync的服務端

eth0:10.0.0.41

eth1:172.16.1.41

backup

rsync的客戶端

eth0:10.0.0.31

eth1:172.16.1.31

nfs

2.1 安裝Rsync

[root@backup ~]# yum -y install rsync

2.2 配置rsync

查詢配置文件存放的路徑

[root@backup ~]# rpm -qc rsync

/etc/rsyncd.conf

配置/etc/rsyncd.conf   (直接複製下面內容,將原有內容清空)

[root@backup ~]# cat /etc/rsyncd.conf

uid = rsync

gid = rsync

port = 873

fake super = yes

use chroot = no

max connections = 200

timeout = 600

ignore errors

read only = false

list = false

auth users = rsync_backup

secrets file = /etc/rsync.password

log file = /var/log/rsyncd.log

#####################################

[backup]

comment = welcome to oldboyedu backup!

path = /backup
 

2.3 建立用戶

2.3.1 運行rsync服務的用戶

建立rsync帳戶,不容許登陸不建立家目錄

[root@backup ~]# useradd -M -s /sbin/nologin rsync

建立備份目錄(儘量磁盤空間足夠大),受權rsync用戶爲屬主

[root@backup ~]# mkdir /backup

[root@backup ~]# chown -R rsync.rsync /backup/

2.3.2 建立虛擬用戶

建立虛擬用戶密碼文件(用於客戶端鏈接時使用的用戶)

建立虛擬用戶和密碼,並賦予600權限

[root@backup ~]# echo "rsync_backup:1" >/etc/rsync.password

[root@backup ~]# chmod 600 /etc/rsync.password

2.4 啓動rsync服務

啓動rsync服務,並加入開機自啓

[root@backup ~]# systemctl start rsyncd

[root@backup ~]# systemctl enable rsyncd

啓動後檢查

[root@bogon ~]# netstat -lntp|grep rsync
 

2.5 Rsync服務測試

客戶端:

Access via rsync daemon:    守護進程方式傳輸

Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST] 下載

Push: rsync [OPTION...] SRC... [USER@]HOST::DEST

1.將客戶端的/etc/passwd 推送至 rsync服務端[backup]

rsync [OPTION...] SRC... [USER@]HOST::DEST

[root@nfs ~]# rsync -avz /etc/passwd rsync_backup@172.16.1.41::backup

2.將rsync服務端模塊[/backup]下載至本地

Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]

[root@nfs ~]# rsync -avz rsync_backup@172.16.1.41::backup /opt
 

2.6 同步時不輸入密碼

2.6.1 第一種方式sersync

適合終端執行指定用戶密碼文件

[root@nfs ~]# echo "1" >/etc/rsync.password  密碼爲1  將密碼寫入rsync.password文件

[root@nfs ~]# chmod 600 /etc/rsync.password

rsync -avz rsync_backup@172.16.1.41::backup /opt --password-file=/etc/rsync.password

2.6.2  第二種方式寫;腳本時使用

export RSYNC_PASSWORD=1 定義變量

[root@nfs ~]# export RSYNC_PASSWORD=1

[root@nfs ~]# rsync -avz rsync_backup@172.16.1.41::backup /opt 

2.7 強制一致性 (慎用!)

客戶端與服務端保持一致(--delete)

--delete強制一致

[root@nfs ~]# rsync -avz /root rsync_backup@172.16.1.41::backup --delete

2.8 限速

--bwlimit=1  限速爲1M   工做中經常使用  不用限速 分分鐘帶寬佔滿

rsync -avzP --bwlimit=1 /opt/test.dosk  rsync_backup@172.16.1.41::backup

第3章 Rsync備份案例

統一全部的目錄站點是/backup

3.1 備份什麼內容

系統重要的配置文件

建議備份的數據內容以下

1.配置文件

開機自啓動配置文件  設備掛載配置文件  本地內網配置文件

如/etc/rc.local       /etc/fstab      /etc/hosts             

2.重要目錄

cron定時任務       firewalld防火牆       腳本目錄

如/var/spool/cron/    /etc/firewalld     /server/scripts

3.系統日誌文件

如/var/log/   //系統安全日誌、sudo日誌、內核日誌、rsyslog日誌

4.應用程序日誌 nginx、PHP、mysql、redis.....

工做中根據實際狀況再想下還有什麼須要備份的

3.2 怎麼備份(格式)

備份在/backup目錄下  /backup/日期爲名的目錄/

例如:

/backup/nfs_172.16.1.31_2018_09_05

/backup/nfs_172.16.1.31_2018_09_06

/backup/nfs_172.16.1.31_2018_09_07

編寫腳本 寫入定時任務

[root@nfs ~]# echo $(hostname)_$(ifconfig eth1|awk 'NR==2{print $2}')_$(date +%F)

nfs_172.16.1.31_2018-09-05

[root@nfs ~]# mkdir /server/scripts -p
 

3.3 客戶端備份思路

[root@nfs01 backup]# cat /server/scripts/backup_rsync.sh

#!/usr/bin/bash

#1.定義變量

Path=/backup

Host=$(hostname)

Addr=$(ifconfig eth1|awk 'NR==2{print $2}')

Date=$(date +%F)

Dest=${Path}/${Host}_${Addr}_${Date}

#2.檢查目錄是否存在

[ -d $Dest ] || mkdir -p $Dest

#3.拷貝須要備份的文件至$Dest

   # system backup

cp -rp /etc/passwd /etc/fstab /etc/rc.d/rc.local /var/spool/cron $Dest/

   # user backup

cp -rp /server/ $Dest/

   # config backup

cp -rp /etc/rsyncd.conf $Dest/

#4.推送至備份服務端

Rsync_User=rsync_backup

Rsync_Addr=172.16.1.41

Rsync_Module=backup

export RSYNC_PASSWORD=123456

rsync -avz $Path/ ${Rsync_User}@${Rsync_Addr}::${Rsync_Module}

#5.保留本地最近7天的文件

find $Path/ -type d -mtime +7 -exec rm -rf {} \;

第4章 Rsync常見問題

問題不限於CentOS 7

CentOS 7 以上    防火牆爲 firewalld

CentOS 6 及如下 防火牆爲 iptables

4.1 rsync服務端開啓的iptables防火牆

4.1.1 客戶端的錯誤現象

 No route to host

4.1.2 錯誤演示過程

[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup

rsync: failed to connect to 172.16.1.41: No route to host (113)

rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]

4.1.3 異常問題解決

關閉rsync服務端的防火牆服務(iptables)

[root@backup mnt]# /etc/init.d/iptables stop

iptables: Setting chains to policy ACCEPT: filter          [  OK  ]

iptables: Flushing firewall rules:                          [  OK  ]

iptables: Unloading modules:                                 [  OK  ]

[root@backup mnt]# /etc/init.d/iptables status

iptables: Firewall is not running.

4.2 rsync客戶端執行rsync命令錯誤

4.2.1 客戶端的錯誤現象

[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::/backup

ERROR: The remote path must start with a module name not a /

rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]

1.2.2 異常問題解決

 rsync命令語法理解錯誤,::/backup是錯誤的語法,應該爲::backup(rsync模塊)

4.3 @ERROR: auth failed on module oldboy

4.3.1 客戶端的錯誤現象

[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup

Password:

@ERROR: auth failed on module backup

rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]

4.3.2 異常問題解決

1. 密碼真的輸入錯誤,用戶名真的錯誤

2. secrets file = /etc/rsync.password指定的密碼文件和實際密碼文件名稱不一致

3. /etc/rsync.password文件權限不是600

4. rsync_backup:oldboy123密碼配置文件後面注意不要有空格

   echo "rsync_backup:oldboy123" >>/etc/rsync.password

5. rsync客戶端密碼文件中只輸入密碼信息便可,不要輸入虛擬認證用戶名稱

4.4 Unknown module 'backup'

1.4.1 客戶端的錯誤現象

[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup

@ERROR: Unknown module 'backup'

rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]

4.4.2 異常問題解決

/etc/rsyncd.conf配置文件模塊名稱書寫錯誤

4.5 Permission denied

4.5.1 客戶端的錯誤現象

[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup

Password:

sending incremental file list

hosts

rsync: mkstemp ".hosts.5z3AOA" (in backup) failed: Permission denied (13)

sent 196 bytes  received 27 bytes  63.71 bytes/sec

total size is 349  speedup is 1.57

rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]

4.5.2 異常問題解決

1. 共享目錄的屬主和屬組不正確,不是rsync

2. 共享目錄的權限不正確,不是755

4.6 chdir failed

4.6.1 客戶端的錯誤現象

[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup

Password:

@ERROR: chdir failed

rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]

4.6.2 異常問題解決

1. 備份存儲目錄沒有創建

2. 創建的備份存儲目錄和配置文件定義不一致

4.7 invalid uid rsync

4.7.1 客戶端的錯誤現象

[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup

Password:

@ERROR: invalid uid rsync

rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]

4.7.2 異常問題解決

rsync服務對應rsync虛擬用戶不存在了,從新建立便可。

4.8 客戶端已經配置了密碼文件,但免祕鑰登陸方式,依舊須要輸入密碼

4.8.1 客戶端的錯誤現象

password file must not be other-accessible

[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

password file must not be other-accessible

continuing without password file

Password:

sending incremental file list

sent 26 bytes  received 8 bytes  5.23 bytes/sec

total size is 349  speedup is 10.26

4.8.2 異常問題解決

rsync客戶端的祕鑰文件也必須是600權限

4.9 rsync客戶端鏈接慢問題

4.9.1 客戶端的錯誤日誌

2017/03/08 20:14:43 [3422] params.c:Parameter() - Ignoring badly formed line in configuration file: ignore errors

2017/03/08 20:14:43 [3422] name lookup failed for 172.16.1.31: Name or service not known

2017/03/08 20:14:43 [3422] connect from UNKNOWN (172.16.1.31)

2017/03/08 20:14:43 [3422] rsync to backup/ from rsync_backup@unknown (172.16.1.31)

2017/03/08 20:14:43 [3422] receiving file list

2017/03/08 20:14:43 [3422] sent 76 bytes  received 83 bytes  total size 349

4.9.2 客戶端的正確日誌

2017/03/08 20:16:45 [3443] params.c:Parameter() - Ignoring badly formed line in configuration file: ignore errors

2017/03/08 20:16:45 [3443] connect from nfs01 (172.16.1.31)

2017/03/08 20:16:45 [3443] rsync to backup/ from rsync_backup@nfs02 (172.16.1.31)

2017/03/08 20:16:45 [3443] receiving file list

2017/03/08 20:16:45 [3443] sent 76 bytes  received 83 bytes  total size 349

異常問題解決

查看日誌進行分析

4.10 rsync服務沒有正確啓動

4.10.1 客戶端的錯誤現象

Connection refused (111)

[root@CentOS ~]#  rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup

rsync: failed to connect to 172.16.1.41: Connection refused (111)

rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]

4.10.2 異常問題解決

[root@CentOS ~]# rsync --daemon

[root@CentOS ~]# ss -lntup |grep rsync

tcp    LISTEN     0      5          :::873            :::*      users:(("rsync",1434,5))

tcp    LISTEN     0      5          *:873              *:*      users:(("rsync",1434,4))

[root@CentOS ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup

Password:

sending incremental file list

hosts

sent 196 bytes  received 27 bytes  49.56 bytes/sec

total size is 349  speedup is 1.57
相關文章
相關標籤/搜索