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

相关推荐
Yxrrr__28 分钟前
Linux系统常用命令
linux·运维·服务器
wdfk_prog32 分钟前
[Linux]学习笔记系列 -- [kernel]signal
linux·笔记·学习
栈低来信33 分钟前
Linux I2C子系统
linux
百***060138 分钟前
Linux下PostgreSQL-12.0安装部署详细步骤
linux·运维·postgresql
c++逐梦人40 分钟前
Linux下编写进度条小程序
linux·运维·小程序
求知若渴,虚心若愚。1 小时前
traefik 启用并指定根证书*.cer
linux·运维·服务器
Claudedy2 小时前
Linux 网络代理指南:解决下载慢、访问受限的开发痛点
linux·运维·网络·代理·proxy代理
zhaqonianzhu2 小时前
【保姆级】无外网 Linux 服务器用 VSCode 通义灵码:SSH 代理配置全流程
linux·服务器·vscode
Murphy_lx2 小时前
C++ 条件变量
linux·开发语言·c++
LCG元3 小时前
Linux 信号(Signals)机制详解:如何优雅地关闭你的进程?
linux