Centos7.x部署lsyncd和rsync实现文件的实时同步

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

  • rsync无法知道“什么时候同步”,因为rsync只有执行同步命令的时候,才会去扫描文件判断哪些文件被修改了,只能建立一个定时任务,每隔一定的时间(比如5分钟,10分钟等等)去执行一次同步,这样虽然能同步,但却“不实时”。
  • lsyncd就可以监听文件的修改,换句话说,某个文件修改了,lsyncd会得到通知(原理是使用linux系统的inotify/fsevents功能),得到通知之后,再去调用rsync把修改的文件进行同步(即组装一句rsync同步语句并执行),达到“实时同步”的效果。

实验环境:

CentOS 7.6 最小化安装

需求及网络拓扑图如下

A(192.168.123.100):Rsync客户端+lsyncd

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

需求:

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

实现思路:

A中部署Rsync客户端+lsyncd,lsyncd通过内核的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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


linux下开机自启: 在/etc/init.d目录下新建文件elasticsearch 并敲入shell脚本: 注意, 前两行必须填写,且要注释掉。 第一行为shell前行代码,目的告诉系统使用shell。 第二行分别代表运行级别、启动优先权、关闭优先权,且后面添加开机服务会用到。 shell脚本
1、因为在centos7中/etc/rc.d/rc.local的权限被降低了,所以需要赋予其可执行权 chmod +x /etc/rc.d/rc.local 2、赋予脚本可执行权限假设/usr/local/script/autostart.sh是你的脚本路径,给予执行权限 chmod +x /usr
最简单的查看方法可以使用ls -ll、ls-lh命令进行查看,当使用ls -ll,会显示成字节大小,而ls- lh会以KB、MB等为单位进行显示,这样比较直观一些。 通过命令du -h –max-depth=1 *,可以查看当前目录下各文件、文件夹的大小,这个比较实用。 查询当前目录总大小可以使用d
ASP.NET Core应用程序发布linux在shell中运行是正常的。可一但shell关闭网站也就关闭了,所以要配置守护进程, 用的是Supervisor,本文主要记录配置的过程和过程遇到的问题 安装Supervisor 1 yum install python-setuptools
设置时区(CentOS 7) 先执行命令timedatectl status|grep 'Time zone'查看当前时区,如果不是时区(Asia/Shanghai),则需要先设置为中国时区,否则时区不同会存在时差。 #已经是Asia/Shanghai,则无需设置 [root@xia
vim /etc/sysconfig/network-scripts/ifcfg-eth0 BOOTPROTO="static" ONBOOT=yes IPADDR=192.168.8.106 NETMASK=255.255.252.0 GATEWAY=192.168.
一、安装gcc依赖 由于 redis 是用 C 语言开发,安装之前必先确认是否安装 gcc 环境(gcc -v),如果没有安装,执行以下命令进行安装 [root@localhost local]# yum install -y gcc 二、下载并解压安装包 [root@localhost local
第一步 On CentOS/RHEL 6.*: $ sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el6/x86_64/nux-dextop-release-0-2.el6.nux.noarch.rpm On CentOS/RHEL 7: $
/// <summary> /// 取小写文件名后缀 /// </summary> /// <param name="name">文件名</param> /// <returns>返回小写后缀,不带“.”</ret
which nohup .bash_profile中并source加载 如果没有就安装吧 yum provides */nohup nohup npm run start & nohup ./kibana &
1.1 MySQL安装 1.1.1 下载wget命令 yum -y install wget 1.1.2 在线下载mysql安装包 wget https://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm 1.1.3 安装My
重启 reboot shutdown -r now init 6 关闭 init 0 shutdown -h now shutdown -h 20:25 #8点25关机查看内存 free CPU利用率 top 日期 date 设置时间 date 033017002015 #月日时间年 日历 cal
1、firewalld的基本使用 启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态: systemctl status firewalld 开机禁用 : systemctl disable firewalld 开机启用 :
1 下载并安装MySQL官方的 Yum Repository wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm 使用上面的命令就直接下载了安装用的Yum Repository,大概
CentOS6.x CentOS6中转用Upstrat代替以前的init.d/rcX.d的线性启动方式。 一、相关命令 通过initctl help可以查看相关命令 [root@localhost ~]# initctl help Job commands: start Start job. sto
1、使用命令:df -lk 找到已满磁盘 2、使用命令:du --max-depth=1 -h 查找大文件,删除
ifconfig:查看网卡信息 网卡配置文件位置: /etc/sysconfig/network-scripts/文件夹 nmtui:配置网卡 netstat -tlunp:查看端口信息 端口信息存储位置: /etc/services文件 route:查看路由信息 wget:下载网路文件,例如 wg
ps -ef:查看所有进程, ps -ef |grap firewalld 查看与firewalld相关的进程 which :查看进程:which firewalld kill 进程id:杀掉进程 kill 640,强制杀:kill -9 640 man:查看帮助,例如 man ps 查看
useradd:添加用户 useradd abc,默认添加一个abc组 vipw:查看系统中用户 groupadd:添加组groupadd ccna vigr:查看系统中的组 gpasswd:将用户abc添加到ccna组 gpasswd -a abc ccna groups abc:查看用户abc属