一、rsync 数据同步
同步与复制的差异:
复制:完全拷贝源文件到目标文件(cp scp(远程复制))
同步:增量拷贝,只传输变化过的数据
rsync的命令用法:
rsync [选项] 源目录 目标目录
rsync常用的操作选项:
-n:测试同步过程,不做实际修改
--delete: 删除目标文件内多余的文件
-a: 归档模式,表示以递归方式传输文件,并保持所有文件属性,相当于-rlptgoD
-v: 显示详细的操作信息
-z: 传输过程中启用压缩/解压
本地同步实例
# 在 / 下创建两个目录
[root@web1 ~]# mkdir /socdir /destdir
# 在socdir目录中存放两个文件
[root@web1 ~]# cp /etc/passwd /socdir/
[root@web1 ~]# touch /socdir/1.txt
[root@web1 ~]# ls /socdir/ # 查看 socdir 目录中有两个文件
1.txt passwd
# 同步目录到目标文件夹中 注意: /socdir 写法 和 /socdir/ 写法
[root@web1 ~]# rsync -av /socdir /destdir/ # 将整个源目录socdir都同步到目标目录destdir中
[root@web1 ~]# rsync -av /socdir/ /destdir/ # 将源目录中的文件同步到目标目录中
# --delete 参数,删除目标文件中多余的参数
[root@web1 ~]# touch /destdir/2.txt
[root@web1 ~]# touch /socdir/3.txt
[root@web1 ~]# rsync -av --delete /socdir/ /destdir/
3.远程同步实例
与远程的ssh目录保持同步
上行: rsync [.. ] 本地目录 user@host:远程目录
下行: rsync [....] user@host:远程目录 本地目录
# 虚拟机A中/socdir目录内容与虚拟机B中/test进行同步
# 虚拟机A中执行:
[root@web1 ~]# rsync -av --delete /socdir/ [email protected]:/test
[email protected]'s password:
# 虚拟机B中查看
[root@web2 ~]# ls /test
二、实时数据同步
rsync 和 inotify工具共同使用,当监控到源目录中的数据有变化时,立刻将其同步到目标目录中
环境:虚拟机A中/socdir目录内容与虚拟机B中/test进行同步
1.实现ssh无密码验证(公钥与私钥)
# 虚拟机A,生成公钥与私钥
[root@web1 ~]# ssh-keygen #一路回车
[root@web1 ~]# ls /root/.ssh/
id_rsa(私钥) id_rsa.pub(公钥) known_hosts(记录曾经远程管理过的机器)
2.虚拟机A上操作,将公钥传递给虚拟机B
web1]# ssh-copy-id [email protected]
web1]# rsync -av --delete /socdir/ [email protected]:/test
2.源码编译安装inotify
下载后安装源码包:解压缩
./configure配置
make编译
make install 安装
# 源码编译安装步骤
# 步骤一:安装开发工具
]# yum -y install make
]# yum -y install gcc
# 步骤二:进行tar解包
]# tar -xf /root/tools.tar.gz -C /usr/local/
]# ls /usr/local/
]# ls /usr/local/tools/
]# tar -xf /usr/local/tools/inotify-tools-3.13.tar.gz -C /usr/local/
]# ls /usr/local/
# 步骤三:运行configure脚本进行配置
# 作用1:检测系统是否安装gcc
# 作用2:可以指定安装位置及功能
]# cd /usr/local/inotify-tools-3.13/ # 要cd到源码所在目录
]# ./configure --prefix=/opt/myrpm #指定安装位置
# 步骤四:make进行编译,产生可以执行的程序
]# cd /usr/local/inotify-tools-3.13/
]# make
# 步骤五:make install进行安装
]# cd /usr/local/inotify-tools-3.13/
]# make install
]# ls /opt/myrpm/
]# ls /opt/myrpm/bin/ # 查看编译后的程序文件
基本用法
inotifywait [选项] 目标文件夹
常用命令:
-m: 持续监控,捕获一个事件后不退出
-r: 递归监控,包括子目录及文件
-q: 减少屏幕输出信息
-e: 指定监控的modify, move, create, delete,attrib等事件类别
4.书写一个shell脚本,监控一个目录的变化,有内容变化时,即进行同步数据
[root@svr7 /]# vim /etc/rsync.sh # 监控变化时同步
while /opt/myrpm/bin/inotifywait -rqe /mydir/
do
rsync -a --delete /mydir/ [email protected]:/opt
done
[root@svr7 /]# chmod +x /etc/rsync.sh #赋予执行权限
[root@svr7 /]# /etc/rsync.sh & #运行脚本程序
[root@svr7 /]# jobs -l
[1]+ 17707 运行中 /etc/rsync.sh &
[root@svr7 /]# kill 17707 #停止脚本
rsync 服务的配置文件解析
配置环境
主机 |
操作系统 |
IP地址 |
主要软件 |
master |
CentOS7 |
192.168.154.19 |
rsync |
slave |
CentOS7 |
192.168.154.20 |
rsync / inotify-tools-3.14.tar.gz |
将Master服务器的数据备份到slave端
Master(192.168.154.19):
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
#关闭防火墙及安装机制
yum install -y httpd rsync
#rsync系统一般已默认安装,安装httpd是为了生成/var/www/html目录(后续会用到作为共享目录)
vim /etc/rsyncd.conf
#编辑rsync配置文件
uid = root
gid = root
use chroot = yes
address = 192.168.154.19
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 192.168.154.0/24
[wwwroot]
path = /var/www/html
comment = Document Root of www.fbc.com
read only = yes
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z
auth users = backuper
secrets file = /etc/rsyncd_users.db
----详解----
uid = root #用户id,表示共享权限能执行的身份
gid = root #组id
use chroot = yes #开启,禁锢在源目录,表示允许在访问我备份的目录或文件的时候,使用的角色是root,同时你访问本地目录时拥有的也是root权限
address = 192.168.154.19 #监听地址
port 873 #默认端口号为873
log file = /var/log/rsyncd.log #日志文件存放位置
pid file = /var/run/rsyncd.pid #存放进程id的文件位置
hosts allow = 192.168.154.0/24 #允许访问的主机网段,有点类似于黑白名单
[wwwroot] #共享模块的名称,rsync默认调用该模块,默认我调用的路径是该模块指定的路径
path = /var/www/html #源目录路径
comment = Document Root of www.fbc.com #
read only = yes #是否为只读
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z #同步时不再压缩的文件类型,因为同步时,-avz已经进行压缩
auth users = backuper #授权用户,使用wwwroot模块的用户是哪个用户,多个账户以空格隔开
secrets file = /etc/rsyncd_users.db #存放账号信息的数据文件,一行一个
----
vim /etc/rsyncd_users.db
backuper:123456
#编辑用户账号文件,固定格式为[名称:密码],一行一个
chmod 600 /etc/rsyncd_users.db
#官方要求,最好只是赋权600!
rsync --daemon
#开启服务
netstat -natp | grep rsync
#检测端口号,确认服务是否成功开启
cd /var/www/html
#切换至共享目录下
touch 1.html 2.html
ls
(1)关闭防火墙及安装机制
(2)rsync系统一般已默认安装,安装httpd是为了生成/var/www/html目录(后续会用到作为共享目录)
(3)编辑rsync配置文件
(4)编辑用户账号文件,固定格式为[名称:密码],一行一组
(5)密码文件赋权,一般设置600
(6)启动rsyncd服务并查看服务开启状态
(7)切换到要共享的目录下,创建文件
3、配置salve端
(192.168.154.20)
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
#关闭防火墙及安装机制
yum install -y rsync
#安装rsync
mkdir /fbc
cd /fbc/
#创建一个目录/fbc,用来同步
rsync -avz [email protected]::wwwroot /abc
#使用rsync同步备份源的同步文件
ls
#查看同步是否成功
vim /etc/server.pass
123456
#编辑免交互密钥文件,第一行为密码
chmod 600 /etc/server.pass
#给密钥文件赋权600
rsync -az --delete --password-file=/etc/server.pass [email protected]::wwwroot /abc
#rsync,使用密钥文件/etc/server/pass对应backuper用户,IP地址为192.168.59.111的共享模块文件进行压缩,并归档同步至当前服务器的/abc目录下,同时删除差异内容,如果原目标有的,会增加,原目标没有的,会删除。保持一致性。
ls /fbc
#查看下行同步是否成功
(1)关闭防火墙及安装机制
(2)安装rsync
(3)创建一个目录/fbc,用来做同步 目录
(4)使用rsync同步备份源的同步文件,并查看是否完成
(5)编辑免交互密钥文件,第一行为密码
(6)密钥文件赋权600
(7)验证结果
rsync -az --delete --password-file=/etc/server.pass [email protected]::wwwroot /fbc
#rsync,
使用密钥文件/etc/server/pass对应backuper用户,IP地址为192.168.154.19的共享模块文件进行压缩,并归档同步至当前服务器的/fbc目录下,同时删除差异内容,如果原目标有的,会增加,原目标没有的,会删除。保持一致性。
四、inotify简介
可以监控文件系统的变动情况,并做出通知响应
#调整inotify内核参数(优化)
letc/ sysctl.conf(内核参数配置文件)
inotifywait: #用于持续监控,实时输出结果
inotifywatch: #用于短期监控,任务完成后再输出结果
max_queue_events #监控事件队列大小
max_user instances #最多监控实例数,可以看成最多可以监控多少个实例
max_user_watches #每个实例最多监控文件数
五、配置Rsync+Inotify 实时同步
使用inotify通知接口,可以用来监控文件系统的各种变化情况,如文件存取、删除、移动、修改等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。
将inotify机制与rsync工具相结合,可以实现触发式备份(实时同步),即只要原始位置的文档发生变化,则立即启动增量备份操作;否则处于静默等待状态。
因为 inotify 通知机制由 Linux 内核提供,因此主要做本机监控,在触发式备份中应用时更适合上行同步
1、host1关闭只读模式并为共享目录赋权
vim /etc/rsyncd.conf
read only = no
#关闭只读模式,否则将不可写入
kill `cat /var/run/rsyncd.pid`
#修改完配置文件需要重启服务,这里采用直接杀掉进程号的方式
netstat -natp | grep rsync
#检查一下服务是否已被终止
rsync --daemon
netstat -natp | grep rsync
#再次开启服务并检查端口号确认
(1)关闭只读模式否则将不可写入
(2)修改完配置文件需要重启服务,这里采用直接啥进程号的方式 。杀完检测服务是否已被终止
(3)开启服务,并查看服务状态
2、优化 host2 内核参数
host2(192.168.154.20)
cat /proc/sys/fs/inotify/max_queued_events #监控事件队列
cat /proc/sys/fs/inotify/max_user_instances #最多监控实例数
cat /proc/sys/fs/inotify/max_user_watches #每个实例最多监控文件数
vim /etc/sysctl.conf #加大每个参数
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
#当要监控的目录、文件数据量较多或者变化频繁时,建议加大参数值
sysctl -p
#刷新
(1)查看参数
(2)加大参数
刷新
3、host2
(192.168.154.20):编译安装 inotify-tools
yum install -y gcc gcc-c++ make
#安装gcc gcc-c++ make
cd /opt
#切换至/opt上传inotify-tools安装包
tar zxf inotify-tools-3.14.tar.gz
#解压
cd /opt/inotify-tools-3.14/
./configure
make -j 4 && make install
#编译安装
(1)安装gcc gcc-c++ make
(2)切换到/opt上传inotify-tools安装包
(3)解压 inotify-tools包
cd 进入inotify-tools-3.14.tar.gz
ls查看文件使用tar命令解压
(4)编译安装
4、客户端启动监听
#持续监听对/abc的modify,create,move,delete操作
inotifywait -mrq -e modify,create,delete /fbc
5、编写触发同步脚本
vim /opt/inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /opt/fbc/"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /opt/fbc/ [email protected]::wwwroot"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -le 0 ] ; then
$RSYNC_CMD
fi
done
----详解----
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /opt/fbc/"
#INOTIFY_CMD变量:持续监控 /opt/abc目录中的创建,删除,移动,修改,改变时间的操作
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /opt/fbc/ [email protected]::wwwroot"
#RSYNC_CMD变量:使 xixi 用户,/etc/server.pass 密钥文件,将 /opt/xcf1 目录下的文件进行压缩,归档,保留硬链接文件同步至 192.168.154.19 的共享模块定义的目录 /var/www/html 下,并删除差异性内容,保持一致性
$INOTIFY_CMD | while read DIRECTORY EVENT FILE #持续监控...
do
if [ $(pgrep rsync | wc -l) -le 0 ] ; then #如果服务并未启动,则执行同步
$RSYNC_CMD
fi
done
----
cd /opt/
chmod +x inotify.sh
#给脚本赋权
chmod +x /etc/rc.d/rc.local
echo "/opt/inotify.sh" >> /etc/rc.d/rc.local
#设置开机自启动
sh -x inotify.sh
#执行脚本
cd /opt/abc
touch jingjing.html
rm -rf jiang.html
#创建一个新的html文件并删除之前的qwe
ls
#再次确认一下
(1)编写脚本
(2)给脚本赋权
(3)设置开机自启动
(4)执行脚本
6、测试
(1)运行脚本
(2)在host2下的/fbc目录下创建文件88888.txt和文件 4.txt
(3)在host1下面/var/www/html/目录下查看文件是否被复制了
六、总结
1、增量同步
2、备份/迁移:可以作为辅助工具(mysql 主从复制 rsync +inotify ——》趋于一致 双向同步——MM,但是只能在并发量不大的时候可以用)
3、假设mysql 从主机A迁移到主机B(一主两从模式)
一主两从模式迁移方案
①确定迁移的时间、业务线停止的时间、要写文档描述具体操作,要发邮件审批
②确认迁移后的节点的环境问题(资源环境 + 系统依赖环境 + mysql内部的格式环境 ------1)例如自增长,自增长可能会导致主从复制不一致的情况 2)版本迁移问题,比如说低版本向高版本迁移。两个版本中的差异比较大,数据迁移比较重要,需要和研发沟通,让研发开发一个工具,让低版本可以转成高版本工具格式,使用工具迁移)
③ 如果数据库是相同版本,可以用rsync + inotify持续同步
④ 测试、之前还要编写回滚方案
————————————————
版权声明:本文为CSDN博主「上单carrry」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_67510296/article/details/125707402