如題實現無人值守定時同步,為員員們節省工作時間,提高工作效率,本文采用Centos系統,用到了rsync,crontab等技術。
rsync的一些特性
- 能更新整個目錄和樹和文件系統
- 有選擇性的保持符號鏈鏈、硬鏈接、文件屬于、權限、設備以及時間等
- 對于安裝來說,無任何特殊權限要求
- 對于多個文件來說,內部流水線減少文件等待的延時
- 安全,能用 rsh、ssh 或直接端口做為傳輸端口,或者socket連接
- 支持匿名 rsync 同步文件,是理想的鏡像工具
功能分析
- 配置此功能,首先明確的是,在角色上,需要服務端和客戶端 (1:N)
- 服務端,主要負責文件的首次上傳,更新操作等
- 客戶端,會隨著服務端的文件變化進行同步-(下載,更新,刪除等)
- 在操作上,最簡單的配置比例為【服務端:客戶端 = 1:1】,例如,本次的實際操作中,配置了一個服務端(IP:192.168.1.119),其中的一個客戶端(IP:192.168.1.121),后期添加了另一個客戶端(IP:192.168.1.126)
配置操作
(1). 服務端配置
①. 安裝rsync
CentOS默認安裝了此軟件,運行命令rsync可查看是否安裝:
rsync
如果沒有,使用如下命令安裝:
yum install rsync
②. 進行配置文件的修改
rsync的主要有以下三個配置文件:
rsyncd.conf (主配置文件)、rsyncd.passwd (密碼文件)
服務器配置文件( /etc/rsyncd.conf ),該文件默認不存在,需要創建它
touch /etc/rsyncd.passwd #創建用戶密碼文件 chmod 600 rsyncd.passwd #將rsyncd.passwd權限要設為600, 否則無法備份成功
修改rsyncd.conf
rsyncd.conf是rsync服務器主要配置文件。以下為的文件信息,可作參考或進行進一步的修改
#This is the rsync daemon configuration #global settings pid file = /var/run/rsyncd.pid #默認端口是873,可自定義 port = 873 #指定服務端IP地址 address = 192.168.1.119 lock file = /var/run/rsyncd.lock log file = /var/log/rsync.log gid = root uid = root #module settings [backup] path = /opt/lampp/htdocs/gt-store-live use chroot = no max connections = 15 read only = no write only = no list = no ignore errors = yes timeout = 120 auth users = root secrets file = /etc/rsyncd.passwd [dbbackup] path = /home/backup/database use chroot = no max connections = 15 read only = no write only = no list = no ignore errors = yes timeout = 120 auth users = root secrets file = /etc/rsyncd.passwd 設定rsyncd.passwd密碼文件 密碼文件格式很簡單,rsyncd.passwd 的內容格式為:user:password
vim /etc/rsyncd.passwd
添加信息:root:root123
修改rsyncd.passwd屬性和權限
chown root:root /etc/rsyncd.passwd chmod 600 /etc/rsyncd.passwd
(2). rsync服務器啟動
在此,只介紹讓rsync以服務器模式運行的daemon參數方式,此時為服務端操作(IP:192.168.1.119)如下依然為【root】 權限下操作
①. 以 root 身份啟動rsync
/usr/bin/rsync --daemon
②. 查看相應進程
lsof -i :873
【注:】修改rsync配置后服務器端需要重啟
killall rsync rsync --daemon lsof -i :873
③. rsync服務器和防火墻
Linux防火墻是用iptables,所以們至少在服務器端要讓你所定義的rsync服務器端口通過,客戶端上也應該讓通過。
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT service iptables restart
(3). 客戶端:
①. 安裝 rsync:
yum install rsync
②. 配置密碼文件rsyncd.passwd(服務器密碼,文件位置自定義)
echo root123>rsyncd.passwd chmod 600 rsyncd.passwd
③. 主要命令
1). 列出rsync 服務器上的所提供的同步內容
#此處需要手動輸入密碼 rsync --list-only 192.168.1.119::backup rsync --list-only 192.168.1.119::dbbackup
#此處不需要輸入密碼 rsync --list-only --password-file=/home/backup/cron/rsyncd.passwd root@192.168.1.119::backup rsync --list-only --password-file=/home/backup/cron/rsyncd.passwd root@192.168.1.119::dbbackup
2). 文件同步命令
#此處需要手動輸入密碼 rsync -avzP 192.168.1.119::backup /home/backup
#此處不需要輸入密碼 rsync -avzP --password-file=/home/backup/cron/rsyncd.passwd root@192.168.1.119::backup /home/backup
3). 客戶端上的數據要與服務器端完全一致
#此處需要手動輸入密碼 rsync -avzP --delete 192.168.1.119::backup /home/backup
#此處不需要輸入密碼 rsync -avzP --delete --password-file=/home/backup/cron/rsyncd.passwd root@192.168.1.119::backup /home/backup
④. 定時同步無人值守:
(1). 一種方法:直接在 /etc/crontab中添加命令
vi /etc/crontab
或者通過 crontab進行設定 ,執行命令:crontab -e
*/1 * * * * rsync -avzP --password-file=/home/backup/cron/rsyncd.passwd root@192.168.1.119::backup /home/backup
(2). 第二種方法:腳本實現
vim /etc/ftp-update-backup.sh #自定義即可
添加如下代碼:
#!/bin/bash rsync -avzP --password-file=/home/backup/cron/rsyncd.passwd root@192.168.1.119::backup /home/backup
通過crontab設定,讓這個腳本每10分鐘(測試)運行一次。執行命令:
*/10 * * * * /home/backup/cron/ftp-update-backup.sh
(3). 上述方法配置好后,要重啟crond服務器
killall crond #注:殺死crond服務器的進程; ps aux |grep crond # 注:查看一下是否被殺死; /usr/sbin/crond #注:啟動 crond 服務器;
2020年8月19日補充:
結束rsync進程
ps -ef|grep rsync|grep -v grep|awk ‘{print $2}’|xargs kill -9
或
cat /var/run/rsyncd.pid | xargs kill -9
啟動服務錯誤:
failed to create pid file /var/run/rsyncd.pid: File exists
解決方法:
rm -rf /var/run/rsyncd.pid
然后再啟動:
rsync –daemon
看看是否成功:
ps aux | grep rsync
或
lsof -i :873
網友應用經驗分享:
1、小心有坑
rsrync的配置有兩個坑:1)配置文件/etc/rsyncd.conf中,參數后面不要用#注釋;2)服務端和客戶端密碼文件的權限一定要是600,否則認證失敗。
2、客戶端權限問題
客戶端可以用任何用戶來執行,只要該用戶對本地目錄有足夠的權限就可以了。
3、日志文件的問題
小心服務端的日志文件(log file)越積越大。
4、效率問題
rsync同步文件采用的是增量同步的方法,本質上就是在傳輸文件之前,先判斷客戶端與服務器目錄的文件變量情況,如果待同步目錄下的文件太多,這個判斷很費時間。
5、rsync+sersync架構
上面提到的rsync存在效率問題,最終的解決方法是采用rsync+sersync架構。
1)sersync可以記錄被監聽目錄中發生變化的(增,刪,改)具體某個文件或目錄的名字;
2)rsync在同步時,只同步發生變化的文件或目錄(每次發生變化的數據相對整個同步目錄數據來說很小,rsync在遍歷查找對比文件時,速度很快),因此效率很高。
6、防火墻讓873端口通過
7、啟用rsyncd服務并開機自啟動
1)啟動rsyncd服務。
systemctl start rsyncd
2)把rsyncd服務設置為開機自啟動。
systemctl enable rsyncd
從主服務器上實時增量備份文件到另外一臺服務器上.
解決同步不需要輸入密碼的問題:
先在主服務器上創建無密碼的ssh證書.
cd /root/
ssh-keygen -t rsa
一直按回車就會得到兩個ssh證書文件, 一個id_rsa秘鑰, 一個id_rsa.pub公鑰.
查看公鑰證書
cat /root/.ssh/id_rsa.pub
然后去備份服務器上
cd /root/
mkdir /root/.ssh
vi id_rsa.pub
然后把之前在主服務器上創建的公鑰id_rsa.pub內容復制到這里
把公鑰增量添加到~/.ssh/authorized_keys里面
cat /root/id_rsa.pub >> /root/.ssh/authorized_keys
再更改公鑰文件權限
chmod 600 /root/.ssh/authorized_keys
更改sshd配置文件
vi /etc/ssh/sshd_config
把#AuthorizedKeysFile .ssh/authorized_keys前面的#去掉, 讓其保持為
AuthorizedKeysFile .ssh/authorized_keys
然后重啟備份服務器的ssh
service sshd restart
設置完成后再會主服務器
先測試一下是否可以免密碼登錄備份服務器
ssh root@備份服務器的ip
如果能正常登錄就可以.
然后在備份服務器上操作
vi /etc/rsyncd.conf
配置如下
[backup]
# destination directory for copy
path = /home/backup
# hosts you allow to access
hosts allow = 1.1.1.1
hosts deny = *
list = true
uid = root
gid = root
read only = false
相關文章:
Linux使用expect和rsync實現無人值守自動同步
CentOS下使用Rsync和Crontab實現無人值守定時同步
CentOS等Linux服務器配置使用Rsync同步及Crontab定時任務