linux 多服务器下目录数据文件实时同步

测试环境搭配

两台服务器:

若需要实时同步则需要用inotify,安装之前需查看系统内核:uname -a只能在高于2.6.13版本的系统上安装

192.168.1.7(主服务器)

192.168.1.21(备份服务器)

实现主服务器上的某个目录中的文件添加,删除,修改时,实时同步到备份服务器上的某个目录。

首先在192.168.1.21上开始:

备份服务器需要安装rsync

在新建立的目录下执行以下步骤:

1、安装rsync(备份服务器只安装rsync)

wget http://rsync.samba.org/ftp/rsync/src/rsync-3.0.9.tar.gz

tar zxvf rsync-3.0.9.tar.gz

cd rsync-3.0.9

./configure --prefix=/usr/local/rsync

make

make install

2、建立用户与密码认证文件

echo "root:123456" > /usr/local/rsync/rsync.passwd

请记住,在server端建立的密码文件,只有密码,没有用户名;而在备份服务端client里建立的密码文件,用户名与密码都有。

chmod 600 rsync.passwd 需要给密码文件600权限

/apache-tomcat-8.0.24/backfile/ROOT

3、建立rsync配置文件

uid = root

gid = root

use chroot = no

max connections = 10

strict modes = yes

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log

path = /opt/test (192.168.1.21同步的目录位置)/apache-tomcat-8.0.24/backfile/ROOT

web

comment = web

ignore errors

read only = no

write only = no

hosts allow = 192.168.1.7

hosts deny = *

list = false

uid = root

gid = root

auth users = root

secrets file = /usr/local/rsync/rsync.passwd

其中web是server服务端里的认证模块名称,需要与主服务器里的一致,以上的配置我的自己服务器里的配置,以供参考。

把配置文件命名为rsync.conf,放到/usr/local/rsync/目录里

启动rsync

rm -rf /var/run/rsyncd.pid(提示rsyncd.pid存在的话,执行这一句)

/usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsync.conf

/webapp/rsync/rsync/bin/rsync --daemon --config=/webapp/rsync/rsync.conf

/webapp/rsync/rsync/bin/rsync --daemon --config=/webapp/rsync/rsync.conf

开启873端口

vi /etc/sysconfig/iptables

-A INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT

192.168.1.7

在新建立的目录下执行以下步骤:

1、安装rsync(备份服务器只安装rsync)

wget http://rsync.samba.org/ftp/rsync/src/rsync-3.0.9.tar.gz

tar zxvf rsync-3.0.9.tar.gz

cd rsync-3.0.9

./configure --prefix=/usr/local/rsync

make

make install

2、建立密码认证文件

cd /usr/local/rsync/

#[root@nginx rsync]# echo "123456" >/usr/local/rsync/rsync.passwd

chmod 600 rsync.passwd

3、安装inotify

ll /proc/sys/fs/inotify命令,是否有以下三条信息输出,如果没有表示不支持。

在新建立的目录下安装

total 0

-rw-r--r-- 1 root root 0 Dec 11 15:23 max_queued_events

-rw-r--r-- 1 root root 0 Dec 11 15:23 max_user_instances

-rw-r--r-- 1 root root 0 Dec 11 15:23 max_user_watches

/proc/sys/fs/inotify/max_queued_evnets

表示调用inotify_init时分配给inotify instance中可排队的event的数目的最大值,超出这个值的事件被丢弃,但会触发IN_Q_OVERFLOW事件。

/proc/sys/fs/inotify/max_user_instances

表示每一个real user ID可创建的inotify instatnces的数量上限。

/proc/sys/fs/inotify/max_user_watches

表示每个inotify instatnces可监控的最大目录数量。如果监控的文件数目巨大,需要根据情况,适当增加此值的大小。

例如: echo 30000000 > /proc/sys/fs/inotify/max_user_watches

cd /usr/src/

src\]# wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz \[src\]# tar zxvf inotify-tools-3.14.tar.gz \[src\]# cd inotify-tools-3.14 \[inotify-tools-3.14\]# ./configure --prefix=/usr/local/inotify \[inotify-tools-3.14\]# make \[inotify-tools-3.14\]# make install 4、创建rsync复制脚本 此项功能主要是将server端的目录/tmp里的内容,如果修改了(无论是添加、修改、删除文件)能够通过inotify监控到,并通过rsync实时的同步给client的/tmp里,下面是通过shell脚本实现的。 rsync排除 使用inotifywait排除监控目录的情况下,必须同时使用rsync排除对应的目录,否则只要有触发同步操作,必然会导致不该同步的目录也会同步。与inotifywait类似,rsync的同步也有--exclude和--exclude-from两种写法。 在rsync_exclude.list文件里添加上不同步的目录 admin/ adminthemes/ b2b2c/ cms/ commons/ config/ core/ docs/ editor/ excel/ font/ html/ install/ license/ logs/ META-INF/ products/ shop/ test/ themes/ WEB-INF/ host=192.168.1.21 src=/opt/test/ (192.168.1.7要同步的目录位置) des=web user=root /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=/usr/local/rsync/rsync.passwd $src $user@$host::$des echo "${files} was rsynced" \>\>/opt/rsync.log 2\>\&1 done host=192.168.1.21 src=/apache-tomcat-8.0.24/backfile/ROOT/ des=web user=test1 rsync_exclude='/apache-tomcat-8.0.24/backfile/rsync/rsync_exclude.list' /apache-tomcat-8.0.24/backfile/rsync/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 --exclude-from=${rsync_exclude} --delete --progress --password-file=/apache-tomcat-8.0.24/backfile/rsync/rsync.passwd $src $user@$host::$des echo "${files} was rsynced" \>\>/apache-tomcat-8.0.24/backfile/rsync/rsync.log 2\>\&1 done 放在任一目录下都可以 # chmod 764 rsync.sh 然后运行这个脚本就可以 sh /tmp/rsync.sh \&(用这个命令时当关闭命令窗口时此服务就停止了) ./rsync.sh \&(用这个命令可解决关闭窗口服务停止的问题) 加入开机启动项: echo "/work/installed/inotify/rsync.sh \&" \>\> /etc/rc.local 在rsync+inotify这种备份方法的时候,我公司遇到了一个问题,那就是主服务已经给备用服务同步完数据了,但主服务器磁盘看见满了,需要把已经备份的文件删除,但同时在备份服务器里保留主服务器里的文件,也就是说主服务器里删除文件的时候,备份服务器里不跟着删除文件,我查看了很多英文文档,测试了很多遍,最后找到了一个解决方法,那就是在主服务器里,把rsync.sh这个脚本里第9行的--delete参数给去掉,就可以解决这个问题。

相关推荐
绵羊20236 小时前
单细胞转录组测序上游——cellranger
linux
Awkwardx8 小时前
Linux系统编程—线程同步与互斥
linux·服务器
赖small强9 小时前
[Linux]内核队列实现详解
linux·kfifo·请求队列·工作队列(workqueue)·等待队列·kfifo_init
www.0211 小时前
linux服务器升级显卡驱动(笔记)
linux·运维·服务器·笔记·ubuntu·服务器环境
wdfk_prog11 小时前
[Linux]学习笔记系列 -- [kernel][time]hrtimer
linux·笔记·学习
摇滚侠11 小时前
Spring Boot3零基础教程,把 Java 程序打包为 Linux 可执行文件,笔记91
java·linux·笔记
xuhe211 小时前
🛠️ 深度解析我的 Overleaf 私有化部署:一份稳定、高兼容性的 `docker-compose.yaml`
linux·docker·科研·overleaf
技术小白爱FPGA12 小时前
zynq7000- linux平台 PS读写PL测试
linux·fpga开发
BD_Marathon12 小时前
【Linux】awk命令
linux·运维·服务器
前端世界12 小时前
Linux 防火墙实战:用 firewalld 配置 External/Internal 区域,实现 NAT 内网共享上网
linux·服务器·网络