CentOS7 rsync+sersync实现文件实时同步

CentOS7 rsync+sersync实现文件实时同步

rsync基本命令和语法

一、概念

Rsync(remote sync)是UNIX 及类UNIX 平台下一款神奇的数据镜像备份软件,它不像FTP 或其他文件传输服务那样需要进行全备份,Rsync 可以根据数据的变化进行差异备份,从而减少数据流量,提高工作效率。你可以使用它进行本地数据或远程数据的复制,Rsync 可以使用SSH 安全隧道进行加密数据传输。Rsync 服务器端定义源数据,Rsync 客户端仅在源数据发生改变后才会从服务器上实际复制数据至本地,如果源数据在服务器端被删除,则客户端数据也会被删除,以确保主机之间的数据是同步的。Rsync 使用TCP 873端口。

  • rsync功能
    • 作为命令,实现本地-远程文件同步
    • 作为服务,实现本地-远程文件同步
  • rsync特点
    • 可以镜像保存整个目录树和文件系统
    • 可以保留原有的权限(permission,mode),owner,group,时间(修改时间,modify time),软硬链接,文件acl,文件属性(attributes)信息等
    • 传输效率高,使用同步算法,只比较变化的
    • 支持匿名传输,方便网站镜像;也可以做验证,加强安全

二 常用参数

-a 包含-rtplgoD
-r 同步目录时要加上,类似cp时的-r选项
-v 同步时显示一些信息,让我们知道同步的过程
-l 保留软连接
-L 加上该选项后,同步软链接时会把源文件给同步
-p 保持文件的权限属性
-o 保持文件的属主
-g 保持文件的属组
-D 保持设备文件信息
-t 保持文件的时间属性
--delete 删除DEST中SRC没有的文件
--exclude 过滤指定文件,如--exclude “logs”会把文件名包含logs的文件或者目录过滤掉,不同步
-P 显示同步过程,比如速率,比-v更加详细
-u 加上该选项后,如果DEST中的文件比SRC新,则不同步
-z 传输时压缩

三 示列
1.本地

[root@server /]# rsync /tmp/ /home/   #将/tmp下所有文件传输到/home下
[root@server /]# rsync /tmp /home/    #将/tmp下所有文件包含文件夹tmp传输到/home下
#使用rsync一定要注意的一点是,源路径如果是一个目录的话,带上尾随斜线和不带尾随斜线是不一样的,不带尾随斜线表示的是整个目录包括目录本身,带上尾随斜线表示的是目录中的文件,不包括目录本身。

2.从服务器到本地

[root@server /]# rsync -r 172.16.3.40:/tmp /tmp  #将远程服务器172.16.3.40上的/tmp目录传输到本地服务器/tmp路径下

3.从本地到远程服务器

[root@ansible-server /]# rsync -r /tmp 172.16.3.40:/tmp  # 将本地/tmp目录拷贝到远程主机172.16.3.40的/tmp下,以保证远程/tmp目录和本地/etc保持同步

rsync+sersync实现文件实时同步

1.关闭SELinux

vim /etc/sysconfig/selinux
SELINUX = permissive
shift+zz
getenforce
setenforce 0
getenforce

2.安装rsync(服务器都装)

yum install rsync -y

3.配置rsyncd.conf(服务器都配置)

vim /etc/rsyncd.conf
uid = www
gid = www
use chroot = yes
max connections = 0
log file = /tmp/rsyncd.log
motd file = /tmp/rsyncd.motd
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
secrets file = /etc/rsyncd.pswd

[dir1]
    path = /www/file1
    comment = xoyo video files
    exclude = app/runtime/ api/runtime  #不进行同步的目录
    ignore errors = yes
    read only = no
    hosts allow = 192.168.0.x 192.168.0.x
    hosts deny = *

[dir2]
    path = /www/file2
    comment = xoyo video files
    ignore errors = yes
    read only = no
    hosts allow = 192.168.0.x 192.168.0.x
    hosts deny = *

4.配置密码文件

vim /etc/rsyncd.pswd

root:root     #自己定义

chmod 600 /etc/rsyncd.pswd

vim /etc/sersyncd.pswd

**************

ESC
:wq

5.创建同步目录(服务器都创建)

useradd www
mkdir /www
mkdir /www/file1
mkdir /www/file2
chown -R www:www /www/file1
chown -R www:www /www/file2

6.启动rsync并查看端口(服务器都启动)

rsync --daemon
netstat –apn|grep rsync

7.防火墙开启端口

yum install firewalld -y
systemctl enable firewalld
systemctl start firewalld
firewall-cmd --zone=public --permanent --add-port=873/tcp
firewall-cmd --reload

8.安装sersync(服务器都装)

#网站
https://code.google.com/archive/p/sersync/
wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sertongbu2.5.4_64bit_binary_stable_final.tar.gz
tar -zxvf sertongbu2.5.4_64bit_binary_stable_final.tar.gz
mv GNU-Linux-x86/ /usr/local/sersync

9.配置sersync(服务器都执行)

cd /usr/local/sersync
cp /usr/local/sersync/confxml.xml /usr/local/sersync/dir1.xml
cp /usr/local/sersync/confxml.xml /usr/local/sersync/dir2.xml

vim /usr/local/sersync/dir1.xml

<sersync>
    <localpath watch="/www/file1">
        <!--这里注意,每一台服务器都只写其它服务器IP-->
        <remote ip="192.168.0.2" name="tongbu1"/>
        <remote ip="192.168.0.3" name="tongbu1"/>
        <remote ip="192.168.0.4" name="tongbu1"/>
    </localpath>
    <rsync>
        <commonParams params="-artuz"/>
        <!--如果设置了密码,则密码文件的路径、内容必须正确 start="true"-->
        <auth start="true" users="root" passwordfile="/etc/sersyncd.pswd"/>
        <userDefinedPort start="false" port="874"/>
        <timeout start="false" time="100"/>
        <ssh start="false"/>
    </rsync>
    <!--60分钟进行一次同步失败文件重新同步-->
    <failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/>
    <!--600分钟进行一次全目录同步-->
    <crontab start="true" schedule="600">
        <crontabfilter start="false">
            <exclude expression="*.php"></exclude>
            <exclude expression="info/*"></exclude>
        </crontabfilter>
    </crontab>
    <!--因为这里start="false" 所以下面plugin的配置无需关心-->
    <plugin start="false" name="command"/>
</sersync>

ESC
:wq

vim /usr/local/sersync/dir2.xml

<sersync>
    <localpath watch="/www/file2">
        <!--这里注意,每一台服务器都只写其它服务器IP-->
        <remote ip="192.168.0.2" name="tongbu2"/>
        <remote ip="192.168.0.3" name="tongbu2"/>
        <remote ip="192.168.0.4" name="tongbu2"/>
    </localpath>
    <rsync>
        <commonParams params="-artuz"/>
        <!--如果设置了密码,则密码文件的路径、内容必须正确 start="true"-->
        <auth start="true" users="root" passwordfile="/etc/sersyncd.pswd"/>
        <userDefinedPort start="false" port="874"/>
        <timeout start="false" time="100"/>
        <ssh start="false"/>
    </rsync>
    <!--60分钟进行一次同步失败文件重新同步-->
    <failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/>
    <!--600分钟进行一次全目录同步-->
    <crontab start="true" schedule="600">
        <crontabfilter start="false">
            <exclude expression="*.php"></exclude>
            <exclude expression="info/*"></exclude>
        </crontabfilter>
    </crontab>
    <!--因为这里start="false" 所以下面plugin的配置无需关心-->
    <plugin start="false" name="command"/>
</sersync>

ESC
:wq

10.启动sersync(服务器都执行)

/usr/local/sersync/sersync2 -d -r -o /usr/local/sersync/tongbu1.xml
/usr/local/sersync/sersync2 -d -r -o /usr/local/sersync/tongbu2.xml

11.配置开机启动rsync、sersync

systemctl enable rsyncd
systemctl start rsyncd

# 开机启动sersync
vim /etc/rc.local

/usr/local/sersync/sersync2 -d -r -o /usr/local/sersync/tongbu1.xml
/usr/local/sersync/sersync2 -d -r -o /usr/local/sersync/tongbu2.xml

ESC
:wq

chmod +x /etc/rc.d/rc.local

12.自己通过创建进行测试

你可能感兴趣的:(linux)