rsync可以是一个网络服务(port socket)

rsync命令是客户端命令:

第一种工作模式:local
rsync -avz /etc/hosts /tmp/ ==== cp
rsync -avz –delete /null/ /tmp/ ==== rm

第二种工作模式:remote shell
push:
rsync -avzP -e ‘ssh -p 22’ /tmp/ root@192.168.2.113:/tmp/
pull:
rsync -avzP -e ‘ssh -p 22’ root@192.168.2.113:/tmp/ /tmp/

关键语法说明:
1. -avz相当于-vzrtopgDl, 标识同步文件时文件和目录属性不变。
2. -P显示同步的过程,可以用–progress替换
3. -e ‘ssh -p 22’,标识通过ssh的通道传输数据,-p 22可省略
4. root@192.168.2.113:/tmp/ 远程的主机系统用户, 地址, 路径。
5. /tmp本地的路径

==============服务器端配置===============

一、vi /etc/syncd.conf (这是服务器端配置文件,默认不存在的,所以我们自己创建),并粘贴如下内容:

#Rsync server
#created by konohanaruto
##rsyncd.conf start##

# 客户端连接进来,等同于以下的用户和组的访问权限
uid = rsync
gid = rsync
use chroot = no
max connections = 2000
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false

# 主机的IP段,我家里的路由都是192.168.2打头,所以我就可以填192.168.2.0
hosts allow = 192.168.2.0/24
hosts deny = 0.0.0.0/32

# 用于认证的虚拟用户,就是一个字符串而已,可以随意定义
auth users = rsync_backup

# 虚拟用户的密码文件存放地址,格式usename:password
secrets file = /etc/rsync.password
##################用户操作的模块部分#####################
[backup]

# 注释信息
comment = backup-server by konohanaruto 2017-03-01 21:39:28

# 操作的目录
path = /backup

二、创建rsync用户,创建/backup目录

useradd rsync -s /sbin/nologin -M

检查:

id rsync

mkdir /backup

chown -R rsync /backup

三、创建密码文件

echo “rsync_backup:123456” > /etc/rsync.password

#此项必须为600

chmod 600 /etc/rsync.password

四、启动并检查服务

rsync –daemon

netstat -tnlp | grep rsync

五、加入开机启动并检查

echo “rsync –daemon” >> /etc/rc.local

cat /etc/rc.local

 

=========rsync客户端============

一、创建密码文件,注意,只需要密码即可

echo “123456” >> /etc/rsync.password

chmod 600 /etc/rsync.password

二、推数据

格式,man一下daemon模式

Access via rsync daemon:
Pull: rsync [OPTION…] [USER@]HOST::SRC… [DEST]
rsync [OPTION…] rsync://[USER@]HOST[:PORT]/SRC… [DEST]
Push: rsync [OPTION…] SRC… [USER@]HOST::DEST
rsync [OPTION…] SRC… rsync://[USER@]HOST[:PORT]/DEST

 

实践:

rsync -avz  /src rsync_backup@192.168.2.127::backup –password-file=/etc/rsync.password

三、拉数据

rsync -avz rsync_backup@192.168.2.127::backup /src –password-file=/etc/rsync.password

可能报错误如下:

1.

rsync: failed to connect to 192.168.2.127: No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]

这个是由于防火墙的原因,解决如下:

/etc/init.d/iptables stop   [立刻关闭,重启后失效]

chkconfig iptables off   [重启后生效]

额外补充下防火墙的基本使用:

重启后生效
开启: chkconfig iptables on
关闭: chkconfig iptables off 或者 /sbin/chkconfig –level 2345 iptables off
即时生效,重启后失效
service 方式
开启: service iptables start
关闭: service iptables stop
iptables方式
查看防火墙状态:
/etc/init.d/iptables status
暂时关闭防火墙:
/etc/init.d/iptables stop
重启iptables:
/etc/init.d/iptables restart

OK,再次推数据,一切正常。如果还失败,请保证你的selinux配置正确关闭。

查看SELinux状态:

1、/usr/sbin/sestatus -v      ##如果SELinux status参数为enabled即为开启状态

SELinux status:                 enabled

2、getenforce                 ##也可以用这个命令检查

关闭SELinux:

1、临时关闭(不用重启机器):

setenforce 0                  ##设置SELinux 成为permissive模式

setenforce 1                  ##setenforce 1 设置SELinux 成为enforcing模式

2、修改配置文件需要重启机器:

修改/etc/selinux/config 文件

将SELINUX=enforcing改为SELINUX=disabled

重启机器即可

2.

failed to create pid file……

原因:未正常停止服务,解决方案,rm -rf [pid文件],然后重新再启动。

总结:

一、注意目录的斜线问题

客户端如果目录后方带有斜线,则推送的将是目录的所有内容,而不包括这个目录本身,也就是说只是目录里面的内容被推送了,建议是都加斜线!

二、安全性

一般我们在生产环境建议加上–address=ADDRESS绑定一个内网IP,拒绝外网连接。

好,我们先杀掉之前的rsync进程:

pkill rsync

检查:

netstat -tnlp | grep rsync

接着我们绑定一个内网ip地址:

rsync –daemon –address=192.168.2.127

生产环境中,我们可能要跨机房做实时同步,而且要保证安全,这样解决方式有两种:① 拉专线,做局域网 ② 用VPN搭建局域网环境,实现数据实时同步。