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参数给去掉,就可以解决这个问题。

相关推荐
hweiyu003 小时前
Linux 命令:mount
linux·运维·服务器
AI视觉网奇3 小时前
redis 配置学习笔记
linux·服务器
红尘客栈23 小时前
K8S基本命令操作
linux·容器·kubernetes
阑梦清川4 小时前
linux网络基础
linux
月墨江山5 小时前
Ubuntu 20.04 使用 Issac Gym 进行宇树G1人形机器人进行强化学习训练(Linux仿真)
linux·ubuntu·机器人
天朝八阿哥7 小时前
关于xfce4-pulseaudio-plugin中文翻译的bug
linux·debian
z202305087 小时前
linux之 remoteproc 内核实现源码分析
linux·运维·服务器
阿方索7 小时前
shell脚本
linux·运维
努力努力再努力wz7 小时前
【C++进阶系列】:万字详解智能指针(附模拟实现的源码)
java·linux·c语言·开发语言·数据结构·c++·python