Rsync是一种可以将本地或者远程的数据以全量或增量的方式进行同步与备份的方式, 它可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接。
优点:rsync具有安全性高、备份迅速、支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如使用定时任务定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等。
缺点:1、每次同步时都需要扫描全部数据进行比对,然后对增量数据进行同步或备份,比较耗时
2、rsync不能实时的去监测、同步数据,这样服务端与客户端之间必然存在数据差异,无法在应用故障时及时
的恢复数据。
一、检查有无安装rsync服务
[root@echarge2 soft]# rpm -qa|grep rsync
rsync-2.6.8-3.1
二、将阿里云做客户端做a,50服务器做服务端b,即实现a数据实时同步到b服务器
1、首先配置服务端配置文件
vim /etc/rsyncd.conf
uid = rsync
gid = rsync
use chroot = no
max connections = 5
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[fang]
path=/fang/
ignore errors
read only = no
list = no
hosts allow = 112.124.7.132/255.255.255.0
auth users = rsync_backup
secrets file = /etc/rsyncd.password
2、其次配置密码文件
echo “rsync_backup:fang” /etc/rsyncd.password
chmod 600 /etc/rsyncd.password
[root@echarge2 ~]# ll /etc/rsyncd.password
-rw------- 1 root root 20 11-22 09:41 /etc/rsyncd.password
3、为项目包路径赋权
Chown -R rsync.rsync /fang
[root@echarge2 ~]# rsync --daemon
三、启动服务端rsync服务,并检查启动是否正常,默认端口873
[root@echarge2 ~]# rsync --daemon
[root@echarge2 ~]# lsof -i:873
command pid user fd type device size node name
rsync 21103 root 4u ipv6 33342657 tcp *:rsync (listen)
rsync 21103 root 5u ipv4 33342658 tcp *:rsync (listen)
四、配置客户端。主要是密码文件与赋权
Touch /etc/rsyncd.conf
echo “oldboy” >/etc/rsyncd.password
chmod 600 /etc/rsyncd.password
[root@echarge2 ~]# ll /etc/rsyncd.password
-rw------- 1 root root 20 11-22 09:41 /etc/rsyncd.password
[root@echarge2 ~]# rsync --daemon
五、常用两种方式
1、rsync [OPTION]... [USER@]HOST::SRC DEST
从远程rsync服务器中拷贝文件到本地机,即拉取服务端数据
如:rsync -avzP [email protected]::fang/
2、rsync [OPTION]... SRC [USER@]HOST::DEST
从本地机器拷贝文件到远程rsync服务器中。即推送客户端数据到服务端
如:rsync -avzP /oldboy rsync_backup@172.16.78.192::fang
六、进行数据推送与备份
Rsync -avzP . [email protected]::fang --password-file=/etc/rsyncd.password
(表示将本地目录下的数据全部推送到192.168.1.44模块下)
rsync -avzP rsync_backup@192.168.1.44::oldboy /oldboy/ --password-file=/etc/rsyncd.password
(表示将远程服务器模块下的数据下拉取到本地/oldboy目录下
七、常见报错
1、 rsync: mkstemp "/.hanshu.sql.mSHqf6" (in fang) failed: Permission denied (13)
sent 446 bytes received 38 bytes 322.67 bytes/sectotal size is 1226 speedup is 2.53
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]
原因:配置了rsync服务的守护用户,但项目地址fang路径没有赋予用户权限,只需要操作
Chown -R rsync.rsync /fang
2、@ERROR: auth failed on module fang,rsync error: error starting client-server protocol (code 5) at main.c(1530) [sender=3.0.6]
原因:验证项目时失败,经检查是由于客户端密码文件密码与服务端密码不相同,更改即可
当需要对 Linux文件系统进行高效率、细粒度、异步地监控时,可以采用 inotify,它允许监控程序打开一个独立文件描述符,并针对事件集监控一个或者多个文件,例如打开、关闭、移动/重命名、删除、创建或者改变属性,所以学习inoftiy对运维来说相当重要
优点:可以实时监控服务器文件系统的各种变化,当文件有任何变化时直接触发rsync同步,以保证数据的实时同步。
一、检查系统版本是否支持inotify,从linux 2.6.13内核开始支持inotify
[root@hrd ~]# uname -r
2.6.18-164.el5
二、检查系统是否安装inotify并进行下载安装
wget --no-check-certificate http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
1013 tar xzvf inotify-tools-3.14.tar.gz
1014 cd inotify-tools-3.14
1015 ls
1016 ./configure --prefix=/usr/local/inotify-tools-3.14
1017 make && make install
1018 ln -s /usr/local/inotify-tools-3.14/ /usr/local/inotify
1019 ll /usr/local/inotify
lrwxrwxrwx 1 root root 30 11-22 15:55 /usr/local/inotify -> /usr/local/inotify-tools-3.14/
[root@echarge2 ~]# ll /usr/local/inotify/bin/
总计 76
-rwxr-xr-x 1 root root 37276 11-22 15:55 inotifywait
-rwxr-xr-x 1 root root 35466 11-22 15:55 inotifywatch
安装完成后inotify有如下两个指令:
inotifywait用于等待文件或文件集上的一个特定事件,它可以监控任何文件和目录设置,并且可以递归地监控整个目录树
inotifywatch用于收集被监控的文件系统统计数据,包括每个inotify事件发生多少次等信息
三、inotify参数
[root@echarge2 ~]# ll /proc/sys/fs/inotify/
总计 0
-rw-r--r-- 1 root root 0 11-22 16:10 max_queued_events 最大队列数
-rw-r--r-- 1 root root 0 11-22 16:10 max_user_instances 可以创建的实例数
-rw-r--r-- 1 root root 0 11-22 16:10 max_user_watches 可以同时同步的文件数目
四、建立脚本进行监控目录变化,监控系统对文件的创建、删除
脚本内容如下:
[root@hrd soft]# cat inotify.sh
#!/bin/bash
host1=58.63.225.50
src=/root/test
dst1=fang
user1=rsync_backup
/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src \
| while read files
do
/usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/rsyncd.password $src $user1@$host1::$dst1
echo "${files} was rsynced" >>/tmp/rsync.log 2>&1
Done
五、执行脚本观察同步情况,发现文件同步正常
Chmod 755 inotify.sh
/bin/sh -x inotify.sh &
有时会遇到这样的情况:向inotify监控的目录(这里是/root/test/)写入一个很大文件时,由于写入这个大文件需要一段时间,此时inotify就会持续不停的输出该文件被更新的信息, 这样就会持续不停的触发rsync去执行同步操作,占用了大量系统资源,那么针对这种情况,最理想的做法是等待文件写完后再去触发rsync同步。 在这种情况下,可以修改inotify的监控事件,即:“-e close_write,delete,create,attrib”。
接着,将这个脚本命名为inotify.sh,然后给定可执行权限,放到后台运行,如果需要时时同步数据,可以直接添加到开机自启动程序echo '/bin/sh /opt/soft/inotify.sh &' >>/etc/rc.local