rsync

itk發表於2024-07-29

rsync服務

簡介

服務端:192.168.1.10

客戶端:192.168.1.20

任務: 將192.168.1.20的/mnt/rhd/bak/目錄複製到192.168.1.10的 /mnt/rhd1/目錄下

服務端安裝

yum -y install rsync
配置
cat /etc/rsyncd.conf  | egrep -v "^#|^$"
uid = root
gid = root
use chroot = no
max connections = 10
strict modes = yes
port = 873
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
[backup]
path = /mnt/rhd1/  # 複製路徑
comment  = self define file
read only = no
list = no
auth users = dbbak                 # 複製時使用者
secrets file = /etc/rsyncd.secrets # 複製密碼
hosts allow = 192.168.1.20         # 設定訪問客戶端的白名單
hosts deny = *                     # 設定客戶端訪問的黑名單


#  設定驗證密碼
cat /etc/rsyncd.secrets
dbbak:y123456
啟動rsync
systemctl enable rsyncd.service --now
客戶端配置
#  新增到定時任務
crontab -l
0 10,15,20 * * * sh /usr/local/sbin/svnbackup.sh

# 配置複製密碼,這裡只寫密碼就可以
cat /etc/rsync_client.pass 
y123456

# 複製指令碼
cat /usr/local/sbin/svnbackup.sh
#/bin/bash
#
BACKUP_DIR=/mnt/rhd/bak/
BACKUPHOST=192.168.1.20
RSYNC_USER='dbbak'
RSYNC_IP='192.168.1.10'
RSYNC_PATH='backup'
DATE=`date +%Y_%m-%d_%H`
echo $DATE
cp -r /mnt/rhd/* /mnt/rhd/bak/
tar -czf /mnt/rhd/bak/$DATE.tar.gz /mnt/rhd/bak/* --remove-files
/usr/bin/rsync -vzrtopg --progress --password-file=/etc/rsync_client.pass ${BACKUP_DIR}/ ${RSYNC_USER}@${RSYNC_IP}::${RSYNC_PATH}/${BACKUPHOST}/ || echo "error" >> /usr/local/etc/zabbix/script/nis_copy_status.txt
/usr/bin/find /mnt/rhd/svnbak/ -mtime +30 -exec rm -rf {} \;
其他

也可以結合lrsyncd進行檔案目錄自動複製,lsyncd監視本地目錄樹事件監視器介面(inotify或fsevents)

例:
客戶端配置(192.168.1.20)

# 安裝擴充套件源
yum -y install epel-release
# 安裝lsyncd
yum install -y lsyncd

# 配置檔案
cat /etc/lsyncd.conf
### 全域性配置
settings {
logfile = “/tmp/lsyncd.log”,
statusFile = “/tmp/lsyncd.status”,
insist = true,
statusInterval = 10
}
### 定義同步引數
sync {
default.rsync,
source = “/mnt/rhd/bak/”,
target = “root@192.168.1.10::backup”,
delete = true,
delay = 1,
maxDelays = 1,
–init = true,
#### 定義同步檔案引數
rsync = {
binary = “/usr/bin/rsync”,
archive = true,
compress = true,
verbose = false,
password_file = “/etc/rsync_client.pass”,
_extra = {"–bwlimit=2000"}
}
}

# 啟動服務

systemctl enable lsyncd --now
#  引數詳解
##### settings配置
logfile = FILENAME         # 定義日誌檔案
pidfile = FILENAME         # PID檔案
nodaemon = BOOL            # 表示不啟用守護模式,預設
statusFile = FILENAME      # 定義狀態檔案
statusInterval = NUMBER    # 將lsyncd的狀態寫入上面的statusFile的間隔,預設10秒
logfacility = STRING syslog facility, default “user”
logident = STRING syslog identification (tag), default “lsyncd”
insist = BOOL keep running at startup although one or more - targets failed due to not being reachable.
inotifyMode = STRING        # 指定inotify監控的事件,預設是- CloseWrite,還可以是Modify或CloseWrite or Modify
maxProcesses = NUMBER       # 同步程序的最大個數。假如同時有20個檔案需要同步,而maxProcesses = 8,則最大能看到有8個rysnc程序


##### sync的三種模式
default.rsync               #  本地目錄間同步,使用rsync,也可以達到使用ssh形式的遠端rsync效果,或daemon方式連線遠端rsyncd程序;
default.direct              #  本地目錄間同步,使用cp、rm等命令完成差異檔案備份;
default.rsyncssh            #  同步到遠端主機目錄,rsync的ssh模式,需要使用key來認證


##### rsync引數
init           # 這是一個最佳化選項,當init = false,只同步程序啟動以後發生改動事件的檔案,原有的目錄即使有差異也不會同步。預設是true
delay          # 累計事件,等待rsync同步延時時間,預設15秒(最大累計到1000個不可合併的事件)。也就是15s內監控目錄下發生的改動,會累積到一次rsync同步,避免過於頻繁的同步。(可合併的意思是,15s內兩次修改了同一檔案,最後只同步最新的檔案)
excludeFrom    # 排除選項,後面指定排除的列表檔案,如excludeFrom = “/etc/lsyncd.exclude”,如果是簡單的排除,可以使用exclude = LIST。
# 這裡的排除規則寫法與原生rsync有點不同,更為簡單:
     監控路徑裡的任何部分匹配到一個文字,都會被排除,例如/bin/foo/bar可以匹配規則foo
     如果規則以斜線/開頭,則從頭開始要匹配全部
     如果規則以/結尾,則要匹配監控路徑的末尾
     ?匹配任何字元,但不包括/
     *匹配0或多個字元,但不包括/
     **匹配0或多個字元,可以是/
delete      # 為了保持target與souce完全同步,Lsyncd預設會delete = true來允許同步刪除。它除了false,還有startup、running值,請參考 Lsyncd 2.1.x ‖ Layer 4 Config ‖ Default Behavior。
bwlimit     # 限速,單位kb/s,與rsync相同(這麼重要的選項在文件裡竟然沒有標出)
compress    # 壓縮傳輸預設為true。在頻寬與cpu負載之間權衡,本地目錄同步可以考慮把它設為false
perms       # 預設保留檔案許可權。


##### 其它rsync的選項
其它還有rsyncssh模式獨有的配置項,如host、targetdir、rsync_path、password_file,

相關文章