参考:
https://www.cnblogs.com/subsir/articles/2565373.html # Rsync命令参数详解
https://blog.csdn.net/tmchongye/article/details/68956808 # Rsync+Sersync实时同步
https://blog.csdn.net/z13615480737/article/details/80985157 # linux centos7 rsync+sersync实现数据实时同步
关于rsync
rsync用于同步文件
关于sersync
- sersync是基于inotify开发的,类似于Inotify-tools的工具
- sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或某一个目录的名字,然后使用rsync同步的时候,只同步发生变化的这个文件或者这个目录。
总结:当数据量很大(几百G甚至1T以上)、文件很多时,建议使用rsync+sersync。
实战布署
环境:centos7.6
主服务器定义:文件变动在这个服务器上发生
从服务器定义:从主服务器上同步文件,或接收主服务器推送来的文件
架构:
主服务器安装sersync用来监听目录变化,触发推送
主服务器安装rsync用来向从服务器推送文件
从服务器安装rsync并启动rsync服务用来接收主服务器推送来的文件
step1:在主服务器和从服务器上分别安装rsync服务
安装
yum install rsync
创建配置文件rsyncd.conf
vim /etc/rsyncd.conf
写入以下内容:
log file = /var/log/rsyncd.log #日志文件位置,启动rsync后自动产生这个文件,无需提前创建
pidfile = /var/run/rsyncd.pid #pid文件的存放位置
lock file = /var/run/rsync.lock #支持max connections参数的锁文件
motd file = /etc/rsyncd.Motd #rsync启动时欢迎信息页面文件位置(文件内容自定义)
secrets file = /etc/rsync.pass #用户认证配置文件,里面保存用户名称和密码,后面会创建这个文件
[rsync_test] #建立一个备份名,备份服务器通过该名称指定具体的备份位置,可自定义
path = /data/rsync_test/ #rsync服务端数据目录路径
comment = rsync_test #模块名称通常与与[rsync_test]名称相同
uid = root #设置rsync运行权限为root,注意,如果不为root的话会有写权限的问题:rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1650) [generator=3.1.2]
gid = root #设置rsync运行权限为root
port=873 #默认端口
read only = no #设置rsync服务端文件为读写权限
list = no #不显示rsync服务端资源列表
max connections = 200 #最大连接数
timeout = 600 #设置超时时间
auth users = user_name #执行数据同步的用户名,可以设置多个,用英文状态下逗号隔开
hosts allow = 192.168.21.129 #允许进行数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开
hosts deny = 192.168.21.254 #禁止数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开
注:配置文件中,中文注释不能要,不然出出现-failed to create pid file /var/run/rsyncd.pid
log file = /var/log/rsyncd.log pidfile = /var/run/rsyncd.pid lock file = /var/run/rsync.lock motd file = /etc/rsyncd.Motd secrets file = /etc/rsync.pass [onion_spider] path = /data/www/spider uid = root gid = root port = 873 read only = no max connections = 100 timeout = 900 auth users = tmp_01 hosts allow = 0.0.0.0 hosts deny = 192.168.0.1
创建被连接时认证密码文件
vim /etc/rsync.pass
然后写入:
用户名:密码 #格式:帐号:密码 (每行一组,帐号和密码用:号分开)
chmod 600 /etc/rsyncd.conf #设置文件所有者读取、写入权限
chmod 600 /etc/rsync.pass #设置文件所有者读取、写入权限
创建主动连接认证密码文件
vim /etc/rsync.password #编辑文件,添加密码
chmod 600 /etc/rsync.password #设置文件权限,只设置文件所有者具有读取、写入权限即可
step2:了解rsync的使用
启动rsync
开启tcp 873端口(rsync默认端口)
/usr/bin/rsync --daemon --config=/etc/rsyncd.conf # 启动
killall rsync # 停止
echo '/usr/bin/rsync --daemon --config=/etc/rsyncd.conf' >> /etc/rc.local # 添加rsyncd开机自启动
rsync命令格式
1、将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号”:”分隔符时启动该模式。
rsync [OPTION]... SRC [USER@]HOST:DEST
如:rsync ~/1.txt root@172.16.195.33:~/
2、将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号”:”分隔符时启动该模式。
rsync [OPTION]... [USER@]HOST:SRC DEST
如:rsync root@172.16.195.33:~/1.txt ~/
3、从远程rsync服务器中同步文件到本地机。当SRC路径信息包含”::”分隔符时启动该模式。
rsync [OPTION]... [USER@]HOST::SRC DEST
如:rsync -avzP --progress --delete --password-file=/etc/rsync.password tmp_01@192.168.0.101::rsync_test /data/rsync_test
4、从本地机器推送文件到远程rsync服务器。当DEST路径信息包含”::”分隔符时启动该模式。如:rsync -av /databack root@172.16.78.192::www
rsync [OPTION]... SRC [USER@]HOST::DEST
如:rsync -avzP --progress --delete --password-file=/etc/rsync.password /data/rsync_test/aa/a.txt tmp_01@192.168.0.101::rsync_test/aa/
rsync参数说明
-a 使用archive模式,等于-rlptgoD,即保持原有的文件权限
-r 是递归
-l 是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限;-t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件;
-z 传输时压缩;
-P 传输进度;
-v 传输时的进度等信息,和-P有点关系,自己试试。可以看文档;
-e 建立起加密的连接。
-u 只进行更新,防止本地新文件被重写,注意两者机器的时钟的同时
--progress 是指显示出详细的进度情况
--delete 是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致
--password-file=/password/path/file 指定密码文件,这样就可以在脚本中使用而无需交互式地输入验证密码了,这里需要注意的是这份密码文件权限属性要设得只有属主可读。
step3:在主服务器上安装sersync工具,实时触发rsync推送
下载并安装
tar zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz
mkdir /usr/local/sersync
cp GNU-Linux-x86/* /usr/local/sersync/
配置sersync,重点改红色部份
vim /usr/local/sersync/confxml.xml
<localpath watch="/data/rsync_test">
<remote ip="192.168.0.101" name="rsync_test"/>
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
<commonParams params="-artuz"/>
<auth start="true" users="tmp_01" passwordfile="/etc/rsync.password"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
启动
/usr/local/sersync/sersync2 -d -r -o /usr/local/sersync/confxml.xml
设置sersync开机自动启动
/etc/rc.d/rc.local # 在最后添加一行执行命令
echo '/usr/local/sersync/sersync2 -d -r -o /usr/local/sersync/confxml.xml' >> /etc/rc.local
补充: 多实例情况
1、配置多个confxml.xml文件(比如:www、bbs、blog....等等)
2、根据不同的需求同步对应的实例文件
/usr/local/sersync/sersync2 -d -o /usr/local/sersync/www_confxml.xml
/usr/local/sersync/sersync2 -d -o /usr/local/sersync/bbs_confxml.xml
常见问题
问题1
rsync: failed to connect to 192.168.0.98 (192.168.0.98): Connection timed out (110)
rsync error: error in socket IO (code 10) at clientserver.c(125) [Receiver=3.1.2]
解决方法
防火墙问题,关闭防火墙或允许rsync端口,阿里云服务器注意看下安全组
注:重要别忘记看日志
发表评论