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,