当证书服务器(Client)中的证书发生变化(新增、修改、删除),实时推送到应用服务器(Server)。
简介
rsync简介
rsync(remote synchronize
)是 Liunx/Unix 下的一个远程数据同步工具,它可通过 LAN/WAN
快速同步多台主机间的文件和目录。rsync 通过比较两边文件是否相同,不相同才进行更新。
但是rsync无法知道“什么时候同步”,因为rsync只有执行同步命令的时候,才会去扫描文件判断哪些文件被修改了,只能建立一个定时任务,每隔一定的时间(比如5分钟,10分钟等等)去执行一次同步,这样虽然能同步,但却“不实时“。
lsyncd简介
lsyncd实际上是lua语言封装了 inotify 和 rsync 工具,采用了 Linux 内核(2.6.13 及以后)里的 inotify 触发机制,然后通过rsync去差异同步,达到实时的效果。我认为它最令人称道的特性是,完美解决了 inotify + rsync 海量文件同步带来的文件频繁发送文件列表的问题(通过时间延迟或累计触发事件次数实现)。另外,它的配置方式很简单。
Server(应用)服务器安装部署rsync
安装rsync
yum install -y rsync
配置rsyncd.conf
vim /etc/rsyncd.conf
代码如下:
uid = nobody
gid = nobody
use chroot = yes
max connections = 20
strict mode=yes
pid file = /var/run/rsyncd.pid
lock file=/var/run/rsync.lock
log file=/var/log/rsyncd.log
[cert-sync] # 模块名称,有多个客户端时就复制整个模块
path=/data/cert/
comment=cert sync
ignore errrors
read only=no
write only=no
hosts allow=*
hosts deny=*
list=false
uid=root
gid=root
auth users=rsync_user # 同步用户名
secrets file=/etc/rsyncd.pwd
创建用户和组
groupadd rsync
useradd -s /sbin/nologin -M -g rsync rsync_user
创建密码文件并修改权限
rsync进行同步需要一个同步的虚拟用户,这个用户的用户名已经在配置文件里指定,下面创建这个用户名的用户密码文件。
必须要将其修改为600权限,不然后期会报错无法认证
# 格式:用户名:密码
echo "rsync_user:123456" > /etc/rsyncd.pwd
chmod 600 /etc/rsyncd.pwd
创建同步目录并授予权限
mkdir -p /data/cert/
chown -R rsync_user:rsync /data/cert/
开放873端口
firewall-cmd --add-port=873/tcp --permanent --zone=public
firewall-cmd --reload
启动rsync
systemctl start rsyncd
systemctl enable rsyncd
Client(证书)服务器安装部署rsync
安装rsync
yum install -y rsync
创建用户(组)
groupadd rsync
useradd -s /sbin/nologin -M -g rsync rsync_user
配置密码文件(密码注意和S端一致)
相应的密码认证文件用于用户自动认证,必须要将其修改为600权限
# 这里不指定用户名,指定密码就行,密码注意和S端的密码要一致
echo "123456" > /etc/rsyncd.pwd
chmod 600 /etc/rsyncd.pwd
创建要同步的目录
mkdir -p /data/cert/
手动同步测试:
# /data/cert/ Client端要同步的数据源路径 # rsync_user@10.16.8.62 认证用户名@服务器S端IP # 10.16.8.62::cert-sync,必须两个冒号,冒号后是服务端对应的模块名称 # --password-file=/etc/rsyncd.pwd 密码文件路径 rsync -avz /data/cert/ rsync_user@10.16.8.62::cert-sync --password-file=/etc/rsyncd.pwd
查看Server的/data/cert/目录,看下文件是否已经同步过来了;
成功日志打印如下:sending incremental file list ./ test.txt sent 111 bytes received 38 bytes 7.27 bytes/sec total size is 0 speedup is 0.00
Client(证书)服务器安装部署lsyncd
安装lsyncd
CentOS 7自带的yum无法安装lsyncd。可以通过安装EPEL存储库的方式再用yum安装lsyncd
yum install -y epel-release
yum -y install lsyncd
配置lsyncd.conf
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/cert/", --监控目录
target = "rsync_user@10.16.8.62::cert-sync", --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
systemctl start lsyncd
systemctl enable lsyncd
同步测试:
Client端新增文件、编辑文件、删除文件
# 查看日志 cat /var/log/lsyncd/lsyncd.log
如果打印出如下日志则同步成功
Sun Oct 1 10:27:58 2023 Normal: Calling rsync with filter-list of new/modified files/dirs /a.txt / Sun Oct 1 10:27:58 2023 Normal: Finished a list after exitcode: 0
评论区