Hi!请登陆

centos-通过rsync实现文件同步

2020-10-27 58 10/27

一、服务器端配置:

yum -y install xinetd rsync
vi /etc/xinetd.d/rsync

将如下代码:

service rsync
{
    disable = yes
    socket_type = stream
    wait = no
    user = root
    server = /usr/bin/rsync
    server_args = –daemon
    log_on_failure += USERID
}

中的 disable = yes 改成 disable = no.
然后启动 xinetd:

/etc/init.d/xinetd start

注意:如果服务器上装有防火墙记得要打开端口,默认端口是873.

telnet 127.0.0.1 873
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused

设置防火墙规则:

iptables -A INPUT -s 192.168.0.0/255.255.255.0 -p tcp -m tcp --dport 873 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 873 -j DROP

编辑配置文件:

vi /etc/rsyncd.conf (这个文件如果不存在自己创建)
#Global Settings
uid = root
gid = root
use chroot = no
max connections = 20
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
comment = hello world
#motd file = /etc/rsyncd.motd
[backup]
path = /titan24/www/repos
auth users = rsync
secrets file = /etc/rsyncd.secrets
read only = no
hosts allow = 192.168.3.128
hosts deny = *
list = true
#ignore errors
#exclude = cache/111/ cache/222/

修改:

vi /etc/rsyncd.secrets
rsync:111111

给文件正确的权限

chown root:root /etc/rsyncd.secrets
chmod 600 /etc/rsyncd.secrets

二、client 端进行同步

客户端默认好像已经装了rsync,没有的话装下:

yum -y install rsync

执行异步同步操作:

/usr/bin/rsync -avz --progress [email protected]::backup /www
crontab -e #(可以定时每三分钟同步一次文件)
*/3 * * * * rsync -avz --progress [email protected]::backup /www

下面这个命令完整一点:

vi /etc/rsyncd.pas

加入密码:

rsyncofpass

注意,客户端的密码文件只需要密码,而不需要用户名!

更改文件权限:

chmod 0600 /etc/rsyncd.pas
rsync -vzrtopgu --progress --delete --password-file=/etc/rsyncd.pas [email protected]::rsync_module_name1 /www/

这个命令行中-vzrtopg里的v是verbose.

z是压缩传输,
r是recursive,
topg都是保持文件原有属性如属主、时间的参数.
u是只同步已经更新的文件,避免没有更新的文件被重复更新一次,不过要注意两者机器的时钟的同步.
–progress是指显示出详细的进度情况,
–delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致.

后面的[email protected]::rsync_module_name1中,之后的rsync_module_name1是模块名, 也就是在/etc/rsyncd.conf中自定义的名称,rsync_user是指定模块中指定的可以同步的用户名.
最后的/www是备份到本地的目录名.
在这里面,还可以用-e ssh的参数建立起加密的连接.
可以用–password-file=/password/path/file来指定密码文件,这样就可以在脚本中使用而无需交互式地输入验证密码了,这里需要注意的是这份密码文件权限属性要设得只有属主可读.

/usr/local/rsync/bin/rsync -vzrtopg –progress –delete [email protected]::rsync_module_name1 /tmp/

或者你也可以制定password文件.
由于需要系统crontab执行,所以这里采用读入密码文件的方式,这个时候就成功了.

Tag:

相关推荐