如何实现主从存储目录镜像?

Bash

1 理论部分

1.1 工具的介绍

Inotify一种强大的、细粒度的、异步文件系统监控机制,它满足各种各样的文件监控需要,可以监控文件系统的访问属性、读写属性、权限属性、删除创建、移动等操作,也就是可以监控文件发生的一切变化。
inotify-tools
是一个C库和一组命令行的工作提供Linux下inotify的简单接口。inotify-tools安装后会得到inotifywait和inotifywatch这两条命令:
— inotifywait
命令可以用来收集有关文件访问信息,Linux发行版一般没有包括这个命令,需要安装inotify-tools,这个命令还需要将inotify支持编译入Linux内核,好在大多数Linux发行版都在内核中启用了inotify。
— inotifywatch
命令用于收集关于被监视的文件系统的统计数据,包括每个 inotify 事件发生多少次。

1.2 帮助信息

1.2.1 查看参数

inotifywait -h

1.2.1 部分参数翻译

inotifywait命令参数
-m 是要持续监视变化。
-r 使用递归形式监视目录。
-q 减少冗余信息,只打印出需要的信息。
-e 指定要监视的事件列表。
–timefmt 是指定时间的输出格式。
–format 指定文件变化的详细信息。
可监听的事件:
— access访问,读取文件。
— modify修改,文件内容被修改。
— attrib属性,文件元数据被修改。
— move移动,对文件进行移动操作。
— create创建,生成新文件
— open打开,对文件进行打开操作。
— close关闭,对文件进行关闭操作。
— delete删除,文件被删除

3 最佳实践

3.1 系统的准备

3.1.1 系统基本信息

hostname=node0[1-3].cmdschool.org
ipaddress=10.168.0.16[1-3] OS = RHEL 8.5 x86_64

3.1.2 配置时区

timedatectl set-timezone Asia/Shanghai

3.2 安装前准备

3.2.1 配置名称解析

echo '10.168.0.161 node01 node01.cmdschool.org' >> /etc/hosts
echo '10.168.0.162 node2 node02.cmdschool.org' >> /etc/hosts
echo '10.168.0.163 node3 node03.cmdschool.org' >> /etc/hosts

注:以上仅用于临时测试,生产环境请使用DNS代替

3.2.2 配置公钥认证

需要配置“node01”到其他节点的公钥认证,使node1节点访问其他节点无需密码即可链接,详细请参阅以下章节,

如何部署公钥认证?


简单地,你可以执行以下命令实现,
In node01,

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub node02
ssh-copy-id -i ~/.ssh/id_rsa.pub node03

配置完成后,你可以使用如下命令测试,如果无需密码登录即成功,

ssh node01

3.2.3 配置安装源

dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

3.2.4 安装软件包

dnf install -y rsync inotify-tools

3.3 配置文件同步服务

3.3.1 下载同步脚本

In node01,

mkdir ~/scripts
wget https://github.com/tanzhenchao/isync/blob/56fe736364463f2797669031737e14a559819425/isync -O ~/scripts/isync.sh

脚本参数变量参数解析如下(请根据实际情况修改),
– 参数“serverList”定义从服务器的主机名称(多个主机使用“;”分隔)
– 参数“sourceDir”定义主服务器的源目录
– 参数“targetDir”定义从服务器的目标目录
– 参数“threadNo”定义启动rsync同步进程的数量(建议1,多个反而会降低数据同步效率)
– 参数“isyncLog”定义同步脚本日志输出的路径
– 参数“inotifywaitPipo”定义“inotifywait”的命名管道路径
– 参数“isyncPipo”定义“isync”的命名管道路径
– 参数“isyncPid”定义“isync”的PID文件路径

3.3.2 部署同步脚本

cp ~/scripts/isync.sh /usr/bin/isync
chmod +x /usr/bin/isync

3.3.3 创建Inotifywait同步服务

vim /usr/lib/systemd/system/inotifywait.service

加入如下配置,

[Unit]
Description=Inotifywait Service
StartLimitIntervalSec=0

[Service]
Type=forking
KillMode=process
ExecStart=/usr/bin/isync start inotifywait
ExecStop=/usr/bin/isync stop inotifywait

[Install]
WantedBy=multi-user.target

配置创建后,你需要使用如下命令重载使服务生效,

systemctl daemon-reload

然后,使用如下命令控制服务,

systemctl start inotifywait.service
systemctl stop inotifywait.service
systemctl restart inotifywait.service
systemctl status inotifywait.service
systemctl enable inotifywait.service

3.3.3 创建Isync同步服务

vim /usr/lib/systemd/system/isync.service

加入如下配置,

[Unit]
Description=Isync Service
After=syslog.target network-online.target inotifywait.service
StartLimitIntervalSec=0

[Service]
Type=exec
KillMode=process
KillSignal=SIGQUIT
TimeoutStopSec=5
PIDFile=/var/run/isync/isync.pid
ExecStart=/usr/bin/isync start isync

[Install]
WantedBy=multi-user.target

配置创建后,你需要使用如下命令重载使服务生效,

systemctl daemon-reload

然后,使用如下命令控制服务,

systemctl start isync.service
systemctl stop isync.service
systemctl restart isync.service
systemctl status isync.service
systemctl enable isync.service

参阅文档:
=======================================
read命令的使用
—————-
http://www.linuxidc.com/Linux/2013-01/77875.htm

官方wike
—————-
https://github.com/rvoicilas/inotify-tools/wiki#getting

关于rsyun的进程锁
———————-
http://pakey.net/blog/rsync-lock.html

没有评论

发表评论

Bash
如何清理NextCloud过期账号?

1 前言 一个问题,一篇文章,一出故事。 笔者生产环境的NextCloud有用户离职后重新入职后发现 …

Bash
如何命令查找docker集群实例关键字?

1 前言 一个问题,一篇文章,一出故事。 笔者定位某个IP地址在集群中的位置,于是笔者想到使用循环去 …

Bash
如何使用计划任务操作容器?

1 前言 一个问题,一篇文章,一出故事。 笔者今天需要根据一定的条件删除容器里面的过期文件,但由于容 …