0%

CentOS 7 配置rsync+lsyncd实现海量文件实时同步

rsync是一个非常好用的文件同步工具, 但是无法进行实时同步, 但通过lsyncd+rsync可以完美的解决海量文件实时备份, lsyncd其实可以理解为inotify + rsync的重新打包整合, 现在参考部分教程简单记录一下.

i44lHs.md.png

主要目的 从主服务器上实时增量备份文件到另外一台服务器上.

先在主服务器上创建无密码的ssh证书.

1
2
cd /root/
ssh-keygen -t rsa

一直按回车就会得到两个ssh证书文件, 一个id_rsa秘钥, 一个id_rsa.pub公钥.

查看公钥证书

1
2
cat /root/.ssh/id_rsa.pub

然后去备份服务器上

1
2
3
cd /root/
mkdir /root/.ssh
vi id_rsa.pub

然后把之前在主服务器上创建的公钥id_rsa.pub内容复制到这里

把公钥增量添加到~/.ssh/authorized_keys里面

1
cat /root/id_rsa.pub >> /root/.ssh/authorized_keys

再更改公钥文件权限

1
chmod 600 /root/.ssh/authorized_keys

更改sshd配置文件

1
vi /etc/ssh/sshd_config

把#AuthorizedKeysFile .ssh/authorized_keys前面的#去掉, 让其保持为

1
AuthorizedKeysFile .ssh/authorized_keys

然后重启备份服务器的ssh

1
2
service sshd restart

设置完成后再会主服务器 先测试一下是否可以免密码登录备份服务器

1
ssh root@备份服务器的ip

如果能正常登录就可以.

然后在备份服务器上操作

1
vi /etc/rsyncd.conf

配置如下

1
2
3
4
5
6
7
8
9
10
[backup]
# destination directory for copy
path = /home/backup
# hosts you allow to access
hosts allow = 1.1.1.1
hosts deny = *
list = true
uid = root
gid = root
read only = false

再设置rsync自动启动

1
2
3
systemctl enable rsyncd.service
systemctl start rsyncd.service

从再退出, 返回主服务器.

1
2
exit

返回主服务器后 安装lua lua-devel

1
2
yum install lua lua-devel -y
yum install lsyncd -y

编辑配置lsyncd的配置文件

1
2
vi /etc/lsyncd.conf

参考配置文件如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
settings {
logfile = "/var/log/lsyncd.log", --日志路径
statusFile = "/var/log/lsyncd.status", --状态文件
pidfile = "/var/run/lsyncd.pid", --pid文件路径
statusInterval = 1, --状态文件写入最短时间
nodaemon = false, --daemon运行
maxProcesses = 1, --最大进程
maxDelays = 1, --最大延迟
}
sync {
default.rsyncssh, --默认rsync+ssh,rsync版本需要升级3以上版本
source = "/home/backup/", --源目录
delete = true, --保持完全同步
host = "root@11.22.33.44",
targetdir = "/home/backup/", --目标目录
exclude={
".txt" --需排除的文件
},
rsync = {
binary = "/usr/bin/rsync", --需先安装好rsync
archive = true, --归档
compress = false, --压缩
owner = true, --属主
perms = true, --权限
whole_file = false
},
ssh = {
port = 22
}
}

设置开机启动并运行

1
2
3
systemctl enable lsyncd.service
systemctl start lsyncd.service

然后去原服务器的/home/backup目录下创建一个文件看看会不会自动同步到备份服务器的/home/backup目录下

i44FHA.md.png

如果无法运行, 查看状态:

1
systemctl status lsyncd.service

提示

Error: Terminating since out of inotify watches Consider increasing /proc/sys/fs/inotify/max_user_watches

i5iYPx.md.jpg

这个是超过实例可监听的最大上限, 编辑sysctl.conf文件

1
vi /etc/sysctl.conf 

把监听值改大一点, 在下面添加

1
fs.inotify.max_user_watches = 999999999

再重启lsyncd服务

1
2
sysctl -p
systemctl restart lsyncd.service

本教程参考以下链接 https://www.jianshu.com/p/0ecac4f6baf2 https://renwole.com/archives/1001 https://linux.cn/article-5849-1.html https://github.com/axkibe/lsyncd https://axkibe.github.io/lsyncd/ http://seanlook.com/2015/05/06/lsyncd-synchronize-realtime/