Linux 之 inotify+rsync 备份文件系统
一、需求
1.线上有不同的机房,并且每个机房所对公网开放端口不一样。
2.A机房中的a机器是台文件服务器,需要备份到B机房中的b机器,以及C机房中的c机器。
3.并且保持实时同步。只要a上面的文件有改动,立即同步到b、c机器
二、方案
1.同步方面,使用的软件是rsync。要保持实时同步,用到inotify程序来检测文件变化,进行同步操作。
拓扑图如下
如上图所示,下面介绍的是数据服务器,即数据源的rsync安装以及配置,之后会介绍clinet1的安装与配置(clinent2配置同client1即可)。
三.实施
- 数据源服务器配置及安装
1.安装rsync,创建目录[root@py ~]# yum -y install rsync xinetd [root@py ~]# useradd rsync -s /sbin/nologin [root@py ~]# mkdir /tmp/testback [root@py ~]# chown rsync.rsync /tmp/testback [root@py ~]# ll -d /tmp/backup/
解释:第1行,安装rsync,默认系统会自带,安装升级一下,xinetd这个服务需要安装。第2行添加一个用于同步的用户,给予不让登陆系统的权限。第3行,创建一个数据源目录,用于同步时,将此下面的文件同步给其它主机。第4行,修改属组和属主为新建的rsync用户。
2.编辑rsync配置文件,vim /etc/rsyncd.conf, 该文件默认不存在,需要新建,添加以下内容uid = rsync gid = rsync use chroot = no max connections = 5 timeout = 300 pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log [backup] path = /tmp/testback ignore errors read only = false list = false hosts allow = 110.12.32.25, 123.34.23.78 hosts deny = 0.0.0.0/32 auth users = rsync_backup secrets file = /etc/rsync.passwd
解释:上面是服务配置,uid、gid、以及是否可以切换目录为no;最大连接数为5个客户端;日志文件存放位置;[backup] 为rsync同步的模块名字,该名字可以起个有意义的。在服务中,相对应代表的是path的路径。hosts allow 只允许某个或某些主机,auth users 使用的是虚拟用户。最后1行指定用于rsync认证的文件存放的位置。
3.创建密码文件[root@py ~]# echo “kalashitiaogou.2016” > /etc/rsync.passwd [root@py ~]# chod 600 /etc/rsync.passwd
在源服务器上,密码文件的内容只需要存放密码即可,client必须要用户名:密码 这样的格式。另外修改改密码文件的权限。
4.修改xinetd服务下的rsync,将disable = noservice rsync { disable = no flags = IPv6 socket_type = stream wait = no user = root server = /usr/bin/rsync server_args = --daemon --config=/etc/rsyncd.conf log_on_failure += USERID }
解释:此文件只需要修改2处. 第1,将disable = yes 修改成 disable = no;第2,修改 server_args 为 --daemon --config=/etc/rsyncd.conf。使用我们设置的配置文件来启动rsync服务
以上步骤修改完成后,重启rsync服务,并检查rsync 是否运行在873端口。[root@py ~]# /etc/init.d/xinetd restart [root@py ~]# netstat -lntup | grep :873
- 备份服务器client1的安装与配置
1.安装rsync、xinetd,并添加rsync系统账号,以及创建同步文件存放的目录,并将属主属组修改rsync[root@client1 ~]# yum -y install rsync xinetd [root@client1 ~]# useradd rsync -s /sbin/nologin [root@client1 ~]# mkdir -p /tmp/testback/
[root@client1 ~]# chown rsync.rsync /tmp/testback -
2.创建密码文件[root@client ~]# echo “rsync_backup:kalashitiaogou.2016” > /etc/rsync.passwd [root@client ~]# chmod 600 /etc/rsync.passwd
解释:此处不同的是密码文件里存放着是用户名:密码的对应。
3.编辑/etc/rsyncd.confuid = rsync gid = rsync use chroot = no max connections = 5 timeout = 300 pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log [backup] path = /tmp/testback/ ignore errors read only = false list = false hosts allow = 104.23.45.17/32 hosts deny = 0.0.0.0/32 auth users = rsync_backup secrets file = /etc/rsync.passwd
上述文件和源服务器的配置相差无几,仅仅是host allow 有区别,其它一致。另外模块名[backup] 以及path 路径在clinet 可以根据自己使用的场景进行自定义。
4.由于应用的环境不一样,客户端的端口仅可以使用80端口,这里我们需要修改下clinet1的rsync监听端口。编辑/etc/services,找到rsync 修改如下。[root@client1 ~]# vim /etc/services rsync 80/tcp rsync 80/udp
5.修改/etc/xinetd.d/rsync,将disable 的值改为no,并以--daemon 运行,如下所示:service rsync { disable = no flags = IPv6 socket_type = stream wait = no user = root server = /usr/bin/rsync server_args = --daemon --config=/etc/rsyncd.conf log_on_failure += USERID }
重启服务,并检查rsync 端口监听是否在我们修改后的80端口上
[root@client1 ~]# /etc/init.d/xinetd restart [root@client1 ~]# netstat -aultnp | grep xinetd
- 备份服务器client2的安装与配置
1.与client1的安装步骤保持一致。使用同样方式配置client2即可。 - 测试环节:在数据源服务器上执行以下同步操作,之后去检查客户端模块中对应的path目录下是否有同样的文件。
[root@py ~]# rsync -avz test.txt --port=80 rsync_backup@110.12.32.25::backup --password-file=/etc/rsync.passwd [root@py ~]# rsync -avz test.txt --port=80 rsync_backup@123.34.23.78::backup --password-file=/etc/rsync.passwd