使用lsync+rsync实现linux服务器间的实时同步

使用lsyncd+rsync实现linux服务器间的实时同步

环境:
源服务器:192.168.241.11,centos7-1804
目标服务器:192.168.241.12,centos7-1611

一、安装rsync和lsyncd
本文使用yum安装,需要能连上互联网
1、安装epel

yum install epel

说明:因为默认的centos和redhat源中没有lsync的rpm资源,因此需要安装epel源,之后才能通过yum找到lsync的安装资源。

2、安装rsync和lsyncd

yum install lsyncd

说明:lsyncd依赖rsync,因此,使用yum安装lsyncd会自动安装rsync。具体的同步任务由rsync完成,lsyncd的任务只是定时触发rsync同步,所以,源服务器与目标服务器均需要安装rsync,但只有一台服务器需要安装lsyncd,根据同步方向决定。如果是从源服务器发送文件到目标服务器,则lsyncd需要安装在源服务器,目标服务器作为rsync服务端,需要配置rsync服务。反之,需要在目标服务器安装lsyncd,在源服务器配置rsync。本文将目标服务器作为rsync服务端。

二、配置rsync服务器(192.168.241.12)
1、编辑/etc/rsyncd.conf文件,内容如下:

use chroot = no

[test]
path = /tmp/tmp12
read only = false
uid = root
gid = root
auth users = rsyncuser
secrets file = /tmp/rsync.passwd

说明:“use chroot"为全局变量,如果为true,那么rsync在传输文件以前首先chroot到path参数所指定的目录下。这样做的原因是实现额外的安全防护,但是缺点是需要root权限,并且不能备份指向外部的符号连接所指向的目录文件。chroot默认值为true。“path”指定该模块的供备份的目录树路径,该参数是必须指定的。“uid”和“gid”指定当该模块传输文件时守护进程应该具有的用户和组,默认值是"nobody”。“read only”设定是否允许客户上传文件到rsync服务器,默认为true。“auth users”指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。这里的用户和系统用户没有任何关系。如果"auth users"被设置,那么客户端发出对该模块的连接请求以后会被rsync请求challenged进行验证身份,这里使用的challenge/response认证协议。用户的名和密码以明文方式存放在"secrets file"选项指定的文件中。默认情况下无需密码就可以连接模块(也就是匿名方式)。更详细的rsync配置说明,请自行百度。

2、创建并编辑上一步中“secrets file”选项指定的文件/tmp/rsync.passwd,文件内容如下:

rsyncuser:123456

说明:一个用户一行,冒号前面是用户名,冒号后面是密码。编辑完后,需要将此文件权限修改为“600”,否则会出错,权限修改命令如下:

chmod 600 /tmp/rsync.passwd

3、将rsync设置为开机启动,并启动rsync服务。
设置为开机启动:

systemctl enable rsyncd.service

启动rsync服务:

systemctl start rsyncd.service

启动后,查看rsync服务的启动状态,可使用如下命令:

systemctl status rsyncd.service

4、开放873端口。
rsync服务默认使用tcp 873端口。

firewall-cmd --zone=public --add-port=873/tcp --permanent
firewall-cmd --reload

三、配置lsyncd服务
1、编辑/etc/lsyncd.conf文件,内容如下:

sync {
  default.rsync,
  source = "/tmp",
  target = "[email protected]::test",
  rsync = {
    compress = false,
    archive = true,
    verbose = false,
    timeout = 3600,
    password_file = "/tmp/rsync.pass"
  }
}

说明:“default.rsync”是同步模式,有三种模式,本文使用rsync同步。“source”是同步的源目录,使用绝对路径。“target”是同步的目标路径,根据同步模式的不同,路径的格式也不同,本例中为rsync的路径,用户名为rsync服务器配置文件中配置的用户,不是操作系统用户,路径中的“test”为rsync服务器配置文件中配置的模块名。“rsync”模块为rsync的配置,其中“password_file”为rsync的密码文件。其他更详细配置说明,请自行百度。

2、创建并编辑rsync的密码文件/tmp/rsync.pass,内容如下:

123456

说明:这个文件里只有密码,创建完成后,需要将文件权限修改为“600”,否则会报错。修改权限命令如下:

chmod 600 /tmp/rsync.pass

3、将lsyncd设置为开机启动,并启动lsyncd服务。
设置为开机启动:

systemctl enable lsyncd.service

启动lsyncd服务:

systemctl start lsyncd.service

启动后,查看lsyncd服务的启动状态,可使用如下命令:

systemctl status lsyncd.service

四、SELINUX权限问题
按照上述步骤配置完成后,可能会发现lsyncd服务无法启动,使用“systemctl status lsyncd.service”命令发现报错如下:
使用lsync+rsync实现linux服务器间的实时同步_第1张图片
这有可能是因为rsync服务器的selinux权限导致的,此时如果使用rsync命令手动同步文件,会发现报错。lsyncd通过rsync同步文件,因为rsync命令都报错,所以lsyncd服务也无法使用。
如果确实是rsync服务器的selinux权限导致的问题,可以通过以下方法解决:
1、临时方法,重启rsync服务器后失效。在rsync服务器上执行:

setenforce 0

2、永久方法,修改selinux配置文件/etc/selinux/config,将其中的“SELINUX”的值设置为disabled,重启服务器。

你可能感兴趣的:(使用lsync+rsync实现linux服务器间的实时同步)