侧边栏壁纸
  • 累计撰写 73 篇文章
  • 累计创建 30 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Centos7使用rsync和lsyncd实现服务器间证书的实时同步

欧泡果奶
2023-10-01 / 0 评论 / 0 点赞 / 83 阅读 / 0 字

当证书服务器(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
0

评论区