如题实现无人值守定时同步,为员员们节省工作时间,提高工作效率,本文采用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定时任务