环境
centos 7.6
server备份服务端机器node1 IP:10.10.86.107
client源服务端机器node2 IP:10.10.35.245
关闭selinux
临时关闭
[root@10-10-86-107 ~]# setenforce 0
永久关闭
vim /etc/selinux/config
SELINUX=enforcing改为 SELINUX=disabled
关闭firewalld
systemctl stop firewalld
rsync是实现本地主机和远程主机上的文件同步功能,可以实现增量同步,用于备份数据使用
安装rsync
机器node1和node2都需要安装rsync
yum -y install rsync
把passwd文件拷贝到/tmp/下改名1.txt
本地环境拷贝数据,类似于CP命令
rsync -av /etc/passwd /tmp/1.txt
把node1机器passwd文件,拷贝到node2机器上面的/tmp/目录下改名为1.txt
rsync -av /etc/passwd root@/10.10.35.245:/tmp/1.txt
rsync常用选项
-a 包含-rtplgoD
-r 同步目录时要加上,类似cp时的-r选项
-v 同步是显示一些信息,让我们知道同步的过程
-l 保留软连接
-L 加上该选项后,同步软链接时会把源文件给同步
-p 保持文件的权限属性
-o 保持文件的属主
-g 保持文件的属组
-D 保持设备文件信息
-t 保持文件的时间属性
--delete 删除DEST中SRC没有的文件
--exclude 过滤指定文件,如--exclude “logs”会把文件名包含logs的文件或者目录过滤掉,不同步
-P 显示同步过程,比如速率,比-v更加详细
-u 加上该选项后,如果DEST中的文件比SRC新,则不同步
-z 传输时压缩
以下操作都是在node2机器上实现推送,拉去node1机器文件
推送同步文件
rsync -avL /etc/passwd root@10.10.86.107:/tmp/1.txt
推送同步目录,把对面目录下面多余的文件删掉
rsync -avL --delete /root/web/ root@10.10.86.107:/tmp/backup/
推送同步目录,把.txt结尾的文件过滤掉,有多个需要加多个--exclude参数
rsync -avL --exclude ".txt" /root/web/ root@10.10.86.107:/tmp/backup/
推送同步目录,-u选项,如果目标服务器下面有文件更新,则源文件不同步
rsync -avLPu /root/web/ root@10.10.86.107:/tmp/backup/
rsync通过ssh方式同步
拉取目标的文件
rsync -avP root@10.10.86.107:/tmp/backup/1.txt /tmp/123.txt
推送同步文件,定义ssh端口22
rsync -avP -e "ssh -p 22" /etc/passwd root@10.10.86.107:/tmp/1.txt
rsync 通过服务的方式同步
node1机器上操作
要编辑配置文件 /etc/rsyncd.conf
vim /etc/rsyncd.conf
port=873
log file=/var/log/rsync.log
pid file=/var/run/rsyncd.pid
address =10.10.86.107 #填写node1机器IP
[test]
path=/tmp/backup
use chroot=true
max connections=4
read only=no
list=true
uid=root
gid=root
auth users=test
secrets file=/etc/rsyncd.passwd #详细看下面参数详解
hosts allow=10.10.35.245 #填写node2机器IP
启动服务
rsync --daemon
rsyncd.conf配置文件详解
port: 指定哪个端口启动rsync服务,默认是873端口
log file:指定日志文件
pid file:指定pid文件,这个文件的作用涉及服务的启动,停止等进程管理操作
address:指定启动rsyncd服务的IP。假如你的机器有多个IP,就可以指定由其中一个启动rsyncd服务,如果不知道该参数,默认是在全部IP上启动
[test]:指定模块名,里面内容自定义即可
path:指定数据存放的路径
use chroot true|false:表示在传输文件前受限chroot到path参数所指定的目录下。这样做的原因是实现额外的安全防护,但缺点是需要以root权限,并且不能备份指向外部的符号连接所指向的目录文件。默认情况下chroot值为true,如果你的数据当中有软连接文件,建议设置成false。
max connections:指定最大的连接数,允许多个台机器同时连接,默认是0,既没有限制
read only ture|false:如果为true,则不能上传到该模块指定的路径下。
list:表示当用户查询该服务器上的可用模块时,该模块是否被列出,设定为true则列出,false则隐藏。
uid/gid:指定传输文件时以那个用户/组的身份传输。
auth users:指定传输时要使用的用户名。
secrets file:指定密码文件,该参数连同上面的参数如果不指定,则不使用密码验证。
node1上server端执行
echo "test:123456" >/etc/rsyncd.passwd
chmod 600 /etc/rsyncd.passwd
注意该密码文件的权限一定要是600,格式:用户名:密码
hosts allow:表示被允许连接该模块的主机,可以是IP或者网段,如果是多个,中间用空格隔开。
当设置了auth users和secrets file后,客户端连服务器也需要用用户名密码,若想在命令行中带上密码,可以设定一个密码文件
node2上client端执行
echo "123456"> /etc/rsyncd.passwd
chmod 600 /etc/rsyncd.passwd
node2上执行,把/tmp/目录备份到node1上面去
rsync -avzLP /tmp/ test@10.10.86.107::test --password-file=/etc/rsyncd.passwd
使用inodify实时触发rsync进行同步
以下操作是在node2上进行操作实现文件实时备份到node1上面
查看服务器内核是否支持inodify,如果有这个三个max开头的文件则表示服务器内核支持inotify
[root@10-10-35-245 tmp]# ll /proc/sys/fs/inotify/
total 0
-rw-r--r-- 1 root root 0 Oct 24 10:12 max_queued_events
-rw-r--r-- 1 root root 0 Oct 24 12:58 max_user_instances
-rw-r--r-- 1 root root 0 Oct 24 10:12 max_user_watches
安装inodify
yum -y install inotify-tools
编写inodify实时同步脚本
注意:下面rsync加了--delete参数,实时同步过程中如果有删除操作,也会一并删除,根据自己业务需求进行调整,防止误删除造成不可估量的后果。
src定义的是我们要实时同步node2机器上哪个目录,上面我们已经定义了node1服务端用于存放备份文件的目录在path=/tmp/backup 下面
[root@10-10-35-245 ~]# vim /usr/local/src/inotify.sh
#/bin/bash
src=/back/
/usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e moved_to,close_write,delete,create,attrib $src | while read file
do
/usr/bin/rsync -avzLP --delete $src test@10.10.86.107::test/ --password-file=/etc/rsyncd.passwd
echo " ${file} was rsynced" >>/var/log/rsync/rsync.log 2>&1
done
设置inodify.sh脚本权限
chmod 755 /usr/local/src/inotify.sh
启动脚本,后台运行,关掉终端程序也不会停止,继续运行
nohup bash /usr/local/src/inotify.sh &
查看后台运行程序
[root@10-10-35-245 ~]# ps -ef |grep inotify
在node2上面执行创建文件目录,会自动同步到node1机器上面,这里可以自己试验一下
设置脚本文件 inodify.sh 开机自启动
vim /etc/rc.d/rc.local
nohup /bin/bash /usr/local/src/inotify.sh