本文介绍: 既然rsync可以实现服务器间的文件同步,为何还需要lsyncd?CentOS 7.6 最小安装A(192.168.123.100):Rsync客户端+lsyncdB(192.168.123.200):Rsync服务端(daemon模式)当A服务器中的文件发生变化(新增修改删除),实时推动到B服务器

既然rsync可以实现服务器间的文件同步,为何还需要lsyncd

实验环境

CentOS 7.6 最小安装

需求网络拓扑图如下

A(192.168.123.100):Rsync客户端+lsyncd

B(192.168.123.200):Rsync服务端(daemon模式

需求

当A服务器中的文件发生变化(新增、修改、删除),实时推动到B服务器

实现思路:

A中部署Rsync客户端+lsyncdlsyncd通过内核inotify触发机制监控文件的动向,并将改动发送给Rsync,由Rsync同步到服务器B;服务器B以守护进程方式部署Rsync服务端,接收A发来的文件同步请求,并将文件同步!

一、安装Rsync

在A服务和B服务器执行以下命令安装Rsync

yum install -y rsync

二、安装lsyncd

CentOS 7自带yum无法安装lsyncd。可以通过安装EPEL存储库的方式再用yum安装lsyncd,命令如下

yum install -y epel-release

yum -y install lsyncd

lsyncd 只需要在A服务器上安装,B服务器无需安装

三、配置Rsync(B端)

A服务器为Rsync客户端,安装完成即可,B服务器以daemon方式运行,所以只需要对B服务器的Rsync进行配置

1、修改配置文件

vim /etc/rsyncd.conf

配置文件修改如下

uid = rsync
gid = rsync
use chroot = no
max connections = 200
pid file = /var/run/rsyncd.pid
# exclude = lost+found/
# transfer logging = yes
log file = /var/log/rsyncd.log
timeout = 900
ignore nonreadable = yes
# dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
# 无需rsync以root身份运行,允许接受数据
fake super = yes

[project]
path = /data/project/project_file
comment = 项目文件
ignore errors
read only = false
list = false
auth users = rsync
secrets file = /etc/rsyncd.pwd

2、创建用户组和用户

groupadd rsync

useradd -s /sbin/nologin -M -g rsync rsync

3、创建同步目录并授予权限

mkdir /data/project_file

chown -R rsync:rsync /data/project_file

4、创建认证用户密码文件并修改权限

Rsync进行同步需要一个同步的虚拟用户,这个用户的用户名已经在配置文件指定,下面创建这个用户名的用户密码文件

由于是用户名和密码文件所以必须要将其修改为600权限,不然后期会报错无法认证

echo "rsync:rsync" >/etc/rsyncd.pwd

chmod 600 /etc/rsyncd.pwd

5、启动Rsync

systemctl start rsyncd

6、验证Rsync是否启动

我们可以通过查看Rsync监听端口(Rsync默认监听873端口),或者查看日志文件以确定Rsync是否以daemon模式成功启动

netstat -anlpt | grep rsync

或者

cat /var/log/rsyncd.log

至此,服务器B端的操作,已经结束

7、测试Rsync

服务器A需要创建相应的密码认证文件用于用户自动认证

由于也是密码文件,所以也需要将文件权限修改为600

echo "rsync" > /etc/rsyncd.pwd #由于我们要在同步命令里指定用户名,所以这里就不再指定用户名

chmod 600 /etc/rsyncd.pwd

由于服务端路径存在权限问题,所以同步源(Rsync客户端)也需要进行相同权限设置

下面进行创建用户(组)、目录、创建测试文件并赋予其权限

groupadd rsync

useradd -s /sbin/nologin -M -g rsync rsync

# 创建需要同步的目录
mkdir /data

关闭两台服务器的防火墙

systemctl stop firewalld

关闭两台服务器的selinux

# vi /etc/selinux/config

#SELINUX=enforcing #注释掉
#SELINUXTYPE=targeted #注释掉
SELINUX=disabled #增加

# setenforce 0  #立即生效

下面进行测试

将A服务器/data/ 目录下的文件同步到B服务器

rsync -avz /data/ rsync@192.168.123.200::project --password-file=/etc/rsyncd.pwd

注:

  1. 两个冒号
  2. /data   服务器A的数据源路径
  3. project模块名称配置文件里已写明
  4. rsync@192.168.123.200 认证用户名@被同步的服务器IP,这里是B服务器的IP

8、检测传输

查看B服务器的/data/project_file目录,看下文件是否已经同步过来了

四、配置lsyncd

1、修改配置文件

vim /etc/lsyncd.conf

删除原有内容键入以下内容

settings {
    logfile = "/var/log/lsyncd/lsyncd.log",
    statusFile = "/var/log/lsyncd/lsyncd.status",
    inotifyMode = "CloseWrite",
    maxProcesses = 8,
    maxDelays = 1,
    nodaemon = false,
}
sync {
    default.rsync,
    source = "/data/",                         --监控目录
    target = "rsync@192.168.123.200::project",    --rsync的认证用户名、IP、模块
    delete = true,
    delay = 15,
    init = false,
    rsync = {
        binary = "/usr/bin/rsync",               --rsync可执行文件路径,必须为绝对路径
        password_file = "/etc/rsyncd.pwd",       --密码认证文件
        archive = true,
        compress = false,
        verbose = false,
        _extra = {"--bwlimit=200", "--omit-link-times"}
    }
}
--如果有多台服务器需要同步,依次往下配置多个sync即可

注:lsyncd的配置文件lua语法注释方式为:“–”

2、启动lsyncd

systemctl start lsyncd

3、测试

修改/data 目录下的任意文件,保存查看B服务器是否同步

五、常见问题

1. 启动lsyncd报错

Error: in Lua: /builddir/build/BUILD/lsyncd-release-2.2.2/lsyncd.lua:2659: attempt to call field 'init' (a boolean value)
Error: Backtrace 1 :/builddir/build/BUILD/lsyncd-release-2.2.2/lsyncd.lua:2659
Error: Backtrace 2 :/builddir/build/BUILD/lsyncd-release-2.2.2/lsyncd.lua:4374

主要是因为lsyncd2.2版本bug引起,如需使用init=true功能,配置文件中请不要直接写init=true来开启功能,如需init=true请将init=true注释删除(因为默认init=true)来解决报错。

原文地址:https://blog.csdn.net/u013147325/article/details/130331238

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_18743.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注