查看原文
其他

rsync+inotify 数据实时同步介绍与 K8s 实战应用

大数据老司机 云原生实验室 2022-11-27


本文转自大数据老司机的博客,原文:https://www.cnblogs.com/liugp/p/16618055.html,版权归原作者所有。欢迎投稿,投稿请添加微信好友:cloud-native-yang

rsync 概述

rsync(remote sync) 远程同步rsync 是 linux 系统下的数据镜像备份工具。使用快速增量备份工具 Remote Sync 可以远程同步,支持本地复制,或者与其他 SSH、rsync 主机同步。已支持跨平台,可以在 Windows 与 Linux 间进行数据同步。rsync 监听端口:873,rsync 运行模式:C/S

  • 官网:https://rsync.samba.org/
  • 官方文档:https://www.samba.org/ftp/rsync/rsync.html
  • GitHub 地址:https://github.com/WayneD/rsync

rsync 优缺点

1)优点

  • 可以镜像保存整个目录树和文件系统;
  • 可以做到保持原来文件的权限、时间、软硬链接等等;
  • 无须特殊权限即可安装;
  • 可以有排除指定文件或目录同步的功能,相当于打包命令 tar 的排除功能;
  • 可以使用 rcp、ssh 等方式来传输文件,rsync 本身不对数据加密;
  • 支持匿名传输,可以实现方便安全的进行数据备份和镜像;
  • 可以实现增量同步,既只同步发生变化的数据,因此数据传输效率很高;
  • 可以通过 socket(进程方式)传输文件和数据。

2)缺点

  • 同步数据,需要扫描所有文件进行对比,才进行差量传输。如果文件数量达到百万甚至千万级,扫描文件对比文件将非常耗时,降低了 rsync 效率;
  • rsync 不能实时地区监测、同步数据。虽然可以通过守护进程方式触发同步,但两次动作间有时间差,导致数据不一致,无法应对出现故障时完全恢复数据。

解决方法:rsync+inotify

rsync+inotify 配置与安装

IP主机名角色
192.168.0.113k8s-master-168-0-113rsync、 inotify-tools【数据源】
192.168.0.116k8s-master2-168-0-116rsync【备份节点】

1)rsync 安装

yum -y install rsync

2)rsync 配置

cat >/etc/rsyncd.conf<<EOF
uid = root
gid = root
#禁锢在源目录
use chroot = yes
#监听地址,在另外的机器上,记得修改   
address = 192.168.0.113
#监听地址tcp/udp 873,可通过cat /etc/services | grep rsync查看     
port 873
#日志文件位置
log file = /var/log/rsyncd.log
#存放进程 ID 的文件位置
pid file = /var/run/rsyncd.pid
#允许访问的客户机地址
hosts allow = 192.168.0.0/16
#共享模块名称
[nfsdata]
#源目录的实际路径           
path = /opt/nfsdata
comment = Document Root of www.kgc.com
#指定客户端是否可以上传文件,默认对所有模块为 true
read only = false
#同步时不再压缩的文件类型
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z
#授权账户,多个账号以空格分隔,不加则为匿名,不依赖系统账号
auth users = backuper
#存放账户信息的数据文件
secrets file = /etc/rsyncd_users.db
EOF

rsyncd.conf 常用参数详解

rsyncd.conf 参数参数说明
uid=rootrsync 使用的用户。
gid=rootrsync 使用的用户组(用户所在的组)
use chroot=no如果为 true,daemon 会在客户端传输文件前“chroot to the path”。这是一种安全配置,因为我们大多数都在内网,所以不配也没关系
max connections=200设置最大连接数,默认 0,意思无限制,负值为关闭这个模块
timeout=400默认为 0,表示 no timeout,建议 300-600(5-10 分钟)
pid filersync daemon 启动后将其进程 pid 写入此文件。如果这个文件存在,rsync 不会覆盖该文件,而是会终止
lock file指定 lock 文件用来支持“max connections”参数,使得总连接数不会超过限制
log file不设或者设置错误,rsync 会使用 rsyslog 输出相关日志信息
ignore errors忽略 I/O 错误
read only=false指定客户端是否可以上传文件,默认对所有模块为 true
list=false是否允许客户端可以查看可用模块列表,默认为可以
hosts allow指定可以联系的客户端主机名或和 ip 地址或地址段,默认情况没有此参数,即都可以连接
hosts deny指定不可以联系的客户端主机名或 ip 地址或地址段,默认情况没有此参数,即都可以连接
auth users指定以空格或逗号分隔的用户可以使用哪些模块,用户不需要在本地系统中存在。默认为所有用户无密码访问
secrets file指定用户名和密码存放的文件,格式;用户名;密码,密码不超过 8 位
[backup]这里就是模块名称,需用中括号扩起来,起名称没有特殊要求,但最好是有意义的名称,便于以后维护
path这个模块中,daemon 使用的文件系统或目录,目录的权限要注意和配置文件中的权限一致,否则会遇到读写的问题
配置 /etc/rsyncd_users.db,跟 auth users 对应
cat >/etc/rsyncd_users.db<<EOF
backuper:123456
EOF
#官方要求,必须赋权600,要不然会有问题
chmod 600 /etc/rsyncd_users.db

rsync 常用命令参数详解

rsync --help

rsync [选项]  原始位置   目标位置

常用选项    说明
-r    递归模式,包含目录及子目录中的所有文件
-l    对于符号链接文件仍然复制为符号链接文件
-v    显示同步过程的详细信息
-z    在传输文件时进行压缩goD
-p    保留文件的权限标记
-a    归档模式,递归并保留对象属性,等同于-rlpt
-t    保留文件的时间标记
-g    保留文件的属组标记(仅超级用户使用)
-o    保留文件的属主标记(仅超级用户使用)
-H    保留硬链接文件
-A    保留ACL属性信息
-D    保留设备文件及其他特殊文件
--delete  删除目标位置有而原始位置没有的文件
--checksum  根据对象的校验和来决定是否跳过文件

3)启动 rsync 服务

rsync --daemon --config=/etc/rsyncd.conf
netstat -tnlp|grep :873

4)测试验证

# 在192.168.0.116节点上测试手动同步
# 从远端【拉取】数据
rsync -avz root@192.168.0.113:/opt/nfsdata/* /opt/nfsdata/

# 在192.168.0.113节点上测试手动同步
# 从【推送】数据
rsync -avz /opt/nfsdata/* root@192.168.0.116:/opt/nfsdata/

### 在192.168.0.116节点上测试手动同步,通过【拉取】数据,配置文件配置的模块,这里走的是rsync协议,上面走的是ssh协议,只要做了免密就直接推送或拉取数据了。这里就会用到配置文件里配置的users用户了,也是secrets file文件里配置的其中一个用户。
#【方式一】
rsync -avz backuper@192.168.0.113::nfsdata /opt/nfsdata/
# 【方式二】
rsync -avz rsync://backuper@192.168.0.113/nfsdata /opt/nfsdata/

# 在192.168.0.113节点上执行
###【推送】
#【方式一】非交互式,/opt/backuper.pass文件是backuper用户的密码,且文件权限600
rsync -avz --password-file=/opt/backuper.pass /opt/nfsdata/* backuper@192.168.0.113::nfsdata
# 【方式二】
rsync -avz /opt/nfsdata/* rsync://backuper@192.168.0.113/nfsdata 

5)编译安装 inotify-tools

1、inotify-tools 概述

  • inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。
  • linux 内核从 2.6.13  起,加入了 inotify 支持,通过 inotify 可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而 inotify-tools 就是这样的一个第三方软件。
  • inotify 可用于检测单个文件,也可以检测整个目录。当检测的对象是一个目录的时候,目录本身和目录里的内容都会成为检测的对象。

在 192.168.0.113 机器上安装

2、优化 inotify 内核参数

/proc/sys/fs/inotify 目录下有 max_queued_events、max_user_instances、max_user_watches 这三个文件

  • max_queued_events:表示调用 inotify_init 时分配给 inotify instance 中可排队的 event 的数目的最大值,超出这个值的事件被丢弃,但会触发 IN_Q_OVERFLOW 事件;
  • max_user_instances:表示每一个用户可创建的 inotify instatnces 的数量上限,默认 128
  • max_user_watches:表示同一用户同时可以添加的 watch 数量。
echo 65535 > /proc/sys/fs/inotify/max_user_instances
echo 99999999 > /proc/sys/fs/inotify/max_queued_events
echo 99999999 > /proc/sys/fs/inotify/max_user_watches

3、inotify-tools 下载

# 安装inotify-tools之前,先安装一下automake和libtool这两个依赖,不然编译安装inotify-tools的时候会报错。
yum install automake libtool -y

# 当然也得安全编译工具
yum -y install gcc gcc-c++ make wget

mkdir  /opt/software ; cd /opt/software
wget --no-check-certificate https://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

# 解压
tar -zxvf inotify-tools-3.14.tar.gz

4、inotify-tools 编译安装

cd /opt/software/inotify-tools-3.14
# 编译安装
./configure && make && make install

5、编写触发式同步脚本

vi /opt/software/inotify-tools-3.14/inotify_rsync.sh

#!/bin/bash
#监听/opt/nfsdata/ 目录:
#INOTIFY_CMD变量:持续监控 /opt/nfsdata/ 目录中的创建,删除,移动,修改,改变时间的操作
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /opt/nfsdata"
# 注意/tmp/user.pass文件里只有backuper对应的密码,而且文件权限只能是600
RSYNC_CMD="rsync -avzH --delete --password-file=/opt/backuper.pass /opt/nfsdata/* backuper@192.168.0.116::nfsdata"

$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
     $RSYNC_CMD
done

inotifywait 命令常用参数:

执行:

cd /opt/software/inotify-tools-3.14/
chmod +x inotify_rsync.sh
# 启动脚本
nohup ./inotify_rsync.sh &

rsync+inotify 数据实时同步介绍与实战就到这里了,有疑问的小伙伴欢迎给我留言哦~




你可能还喜欢

点击下方图片即可阅读

Kubernetes 网络排错骨灰级指南!

2022-08-25

基于 kube-prometheus 的大数据平台监控系统设计

2022-08-23

记一次 Service Endpoints 与容器网络的碰撞

2022-08-19

K8s 网络插件 terway 切换故障解决

2022-08-18


云原生是一种信仰 🤘

关注公众号

后台回复◉k8s◉获取史上最方便快捷的 Kubernetes 高可用部署工具,只需一条命令,连 ssh 都不需要!



点击 "阅读原文" 获取更好的阅读体验!


发现朋友圈变“安静”了吗?

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存