rsync作为linux镜像备份工具,十分方便快捷,不过稍微注意一点,它一般只能备份小文件,别用来备份数据库(容量比较大),具体认证协议什么的特性见百度google。
以下主要讲它的配置,以及搭配inotify的使用。
说明:inotify主要作为一种文件系统事件监控机制来帮助rsync备份,这是由rsync是通过crontab守护进程方式进行触发,从而实现文件的同步,这样会存在一个问题:不能够及时的同步源主机的数据(请百度google搜索crontab守护进程),所以引入了inotify。
这里需要用到两台服务器分别做源和目标
需求:部署rsync+inotify同步/etc目录至目标服务器的/NAME/下。这里的NAME,我取的名字叫chao
rsync命令
简单说一下,它可以直接当拷贝来用,相当于cp,但更多用于本地和远程之间的镜像备份。
rsync -avz nfs.sh root@172.16.12.129:/root/
#这是将本地的数据备份到远程服务器的某个目录下面
rsync -avz root@172.16.12.129:/etc/yum.repos.d /root/
#这个是将远程服务器的数据备份到本地上面
目标服务器
systemctl stop firewalld
systemctl disable firewalld
getenforce
setenforce 0
sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/sysconfig/selinux
#主要是关闭防火墙和SELINUX
安装
#安装rsync软件,src和dest服务器都要安装
yum -y install rsync
#等Comlete就行,不过有些linux系统自带(我自己的就是),所以问题不大
配置文件
vim /etc/rsyncd.conf
#设置配置文件
log file = /var/log/rsyncd.log
#日志文件位置,启动rsync后自动产生这个文件,无需提前创建
pidfile = /var/run/rsyncd.pid
#pid文件的存放位置
lock file = /var/run/rsync.lock
#支持max connections参数的锁文件
secrets file = /etc/rsync.pass
#用户认证配置文件,里面保存用户名称和密码,必须手动创建这个文件
[etc_from_client]
#自定义同步名称
path = /tmp/
#rsync服务端数据存放路径,客户端的数据将同步至此目录
comment = sync etc from client
uid = root
#设置rsync运行权限为root
gid = root
#设置rsync运行权限为root
port = 873
#默认端口
ignore errors
#表示出现错误忽略错误
use chroot = no
#默认为true,修改为no,增加对目录文件软连接的备份
read only = no
#设置rsync服务端为读写权限
list = no
#不显示rsync服务端资源列表
max connections = 200
#最大连接数
timeout = 600
#设置超时时间
auth users = admin
#执行数据同步的用户名,可以设置多个,用英文状态下逗号隔开
hosts allow = 172.16.12.128
#允许进行数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开
hosts deny = 192.168.1.1
#禁止数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开
创建用户
echo 'chao:123456' > /etc/rsync.pass
#创建用户认证文件
cat /etc/rsync.pass
#确认一下
chmod 600 /etc/rsync*
ll /etc/rsync*
#设置它的权限
开启自启动
systemctl start rsyncd
#启动
systemctl enable rsyncd
#开机自启
ss -antl
源服务器
systemctl stop firewalld
systemctl disable firewalld
getenforce
setenforce 0
sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/sysconfig/selinux
#主要是关闭防火墙和SELINUX
安装
一般都没问题,如果有问题,那就配置一下yum源
yum -y install epel-release
#安装rsync软件,src和dest服务器都要安装
yum -y install rsync
#等Comlete就行,不过有些linux系统自带(我自己的就是),所以问题不大
认证文件
echo '123456' > /etc/rsync.pass
cat /etc/rsync.pass
#和目标服务器一下 不过它只需要密码
chmod 600 /etc/rsync.pass
ll /etc/rsync.pass
#设置权限
测试
#先手动测试一下,看能否同步数据
mkdir -pv /root/etc/test
#创建文件
rsync -avH --port 873 --progress --delete /root/etc/ admin@172.16.12.129::etc_from_client --password-file=/etc/rsync.pass
#简称对暗号
#运行完成后,在目标服务器上查看,在/tmp目录下有chao目录,说明数据同步成功
安装inotify-tools工具
ll /proc/sys/fs/inotify/
#先看看服务器内核是否支持它,一般有3个max开头的文件就表示OK
yum -y install make gcc gcc-c++
yum -y install inotify-tools
写同步脚本
mkdir /scripts
touch /scripts/inotify.sh
chmod 755 /scripts/inotify.sh
#配置权限
ll /scripts/inotify.sh
vim /scripts/inotify.sh
host=172.16.12.129
#目标服务器的ip(备份服务器)
src=/etc
#在源服务器上所要监控的备份目录(此处可以自定义,但是要保证存在)
des=etc_from_client
#自定义的模块名,需要与目标服务器上定义的同步名称一致
password=/etc/rsync.pass
#执行数据同步的密码文件
user=admin
#执行数据同步的用户名
inotifywait=/usr/bin/inotifywait
$inotifywait -mrq --timefmt '%Y%m%d %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src \
| while read files ;do
rsync -avzP --delete --timeout=100 --password-file=${password} $src $user@$host::$des
echo "${files} was rsynced" >>/tmp/rsync.log 2>&1
done
启动脚本
nohup bash /scripts/inotify.sh &
nohup: ignoring input and appending output to ‘nohup.out’
ps -ef|grep inotify
#在源服务器上生成一个新文件
ls /etc/chao/
echo 'hello world' > /etc/chao/test
#查看日志
tail /tmp/rsync.log
设置脚本开机自启动
chmod +x /etc/rc.d/rc.local
ll /etc/rc.d/rc.local
echo 'nohup /bin/bash /scripts/inotify.sh' >> /etc/rc.d/rc.local
tail /etc/rc.d/rc.local