如何在Linux服务器中实现数据实时同步及备份

如何在Linux服务器中实现数据实时同步及备份,第1张

科技时代,任何行业都离不开数据的分析以及统筹,如果掌握了最关键的数据及技术,那成功就指日可待,所以数据对于一个企业来说,就是最无形的财富,而一个企业的数据基本都有服务器保存及管理着,如何保证数据安全,实现数据同步及备份?诚恺科技小编就同大家一起来看看在Linux服务器中利用rsync配合inotify实现数据实时同步及备份的方法。

rsync:可以镜像保存整个目录树和文件系统。可以很容易做到保持原来文件的权限、时间、软硬链接等等。第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。

方案:起初用rsync进行数据备份是利用计划任务,定时执行一下命令实现rsync的同步,但最近开发这边修改比较频繁,看来需要实时同步备份来完善备份机制!所以需要利用inotify触发器来改善!达到一旦指定的位置有了新的变动就将其同步!

环境:

CentOS 6.4 64位

rsync-3.0.9

inotify-tools-3.14

说明:

10.10.1.6 (rsync+inotify)----------网站程序(/data0/htdocs/)

10.10.1.9 (rsync)------------------网站程序备份(/data0/htdocs/)

目的:

实现10.10.1.6的/data0/htdocs/目录下发生任何变动都将实时同步到10.10.1.9的/data0/htdocs/上(另,这两台都跑有keepalived+nginx,来实现出现故障自动切换的容灾,详细配置会在后面补上)

一、web服务器10.10.1.6 (rsync+inotify)

1、准备软件包

2、安装Rsync

1)、1234 tar-zxvf rsync-3.0.9.tar.gz

2)、cdrsync-3.0.9

3)、./configure--prefix=/usr/local/rsync

4)、makemakeinstall

建立密码认证文件

[root@ftp ~]# echo "111111">/etc/rsyncd/rsyncd.secrets建立密码认证文件

*其中111111可以自己设置密码,rsyncd.secrets名字也可以自己设置;

权限:要将/etc/rsyncd/rsyncd.secrets设置为root拥有, 且权限为600。

# chmod 600 /etc/rsyncd/rsyncd.secrets

3、安装inotify

1)、1234 tar-zxvf inotify-tools-3.14.tar.gz

2)、cdinotify-tools-3.14

3)、./configure--prefix=/usr/local/inotify

4)、makemakeinstall

4、创建rsync复制脚本

此项功能主要是将ftp端的目录/data0/htdocs/里的内容,如果修改了(无论是添加、修改、删除文件)能够通过inotify监控到,并通过rsync实时的同步给10.10.1.9的/data0/htdocs里,下面是通过shell脚本实现的。

[root@web ~]# vim /root/shell/rsync.sh

[root@web ~]# chmod u+x /root/shell/rsync.sh

[root@web ~]# setsid /root/shell/rsync.sh &

#后台运行脚本,关闭shell终端继续后台运行

rsync.sh脚本加入开机启动项

# echo "/root/shell/rsync.sh" >>/etc/rc.local

防火墙开启rsync端口:873

添加:

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 873 -jACCEPT

重启:

# /etc/init.d/iptables restart

二、备份服务器10.10.1.9(rsync)

1、准备工作

创建备份目录:

# mkdir /data0/htdocs

2、安装rsync(备份主机只安装rsync)

1)、1234 tar-zxvf rsync-3.0.9.tar.gz

2)、cdrsync-3.0.9

3)、./configure--prefix=/usr/local/rsync

4)、makemakeinstall

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

[root@backup ~]# echo "root:111111" >/etc/ rsyncd/rsyncd.secrets

[root@backup ~]# less /etc/rsyncd/rsyncd.secrets

root:111111

注意:

请记住,在10.10.1.6端建立的密码文件,只有密码,没有用户名;而在10.10.1.9里建立的密码文件,用户名与密码都有。

权限:要将/etc/rsyncd/rsyncd.secrets设置为root拥有, 且权限为600。

#chmod 600 /etc/rsyncd/rsyncd.secrets

4、建立rsync配置文件

[root@backup ~]# vim /etc/rsyncd/rsyncd.conf

启动rsync服务

# /usr/local/rsync/bin/rsync --daemon --config=/etc/rsyncd.conf

# ps -ef |grep rsync

Rsync服务加入开机启动项

# echo "/usr/local/rsync/bin/rsync --daemon --config=/etc/rsyncd.conf" >>/etc/rc.local

防火墙开启rsync端口:873

添加:

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 873 -jACCEPT

重启:

# /etc/init.d/iptables restart

完成,其实这个时候数据已经同步了!

测试一下:

由于/data0/htdocs/下涉及到一些公司信息,所以就以/data0/htdocs/tmp/为例

主机名可以区别是两台机器,里面的内容完全一直,连文件的属性都一样

再对里面修改一下试试,创建一个文件,然后删除user目录试试

Rsync (remote rsync) 是可以实现 增量备份 的远程(和本地)文件复制工具,目的是实现本地主机和远程主机上的文件同步(包括本地推到远程,远程拉到本地两种同步方式),也可以实现本地不同路径下(不同目录、分区之间)文件的同步,但不能实现远程路径1到远程路径2之间的同步(scp可以实现)。配合计划任务,rsync能实现 定时或周期同步 ;配合inotify或sersync,可以实现触发式的 实时同步

本篇文章主要介绍rsync的使用方法和它常用的功能。

rsync官方网站: https://rsync.samba.org/

不考虑rsync的实现细节,就文件同步而言,涉及了源文件和目标文件的概念,还涉及了以哪边文件为同步基准。例如,想让目标主机上的文件和本地文件保持同步,则是以本地文件为同步基准,将本地文件作为源文件推送到目标主机上。反之,如果想让本地主机上的文件和目标主机上的文件保持同步,则目标主机上的文件为同步基准,实现方式是将目标主机上的文件作为源文件拉取到本地。当然,要保持本地的两个文件相互同步,rsync也一样能实现,这就像Linux中cp命令一样,以本地某文件作为源,另一文件作为目标文件,但请注意,虽然rsync和cp能达到相同的目的,但它们的实现方式是不一样的。

既然是文件同步,在同步过程中必然会涉及到源和目标两文件之间版本控制的问题,例如是否要删除源主机上没有但目标上多出来的文件,目标文件比源文件更新(newer than source)时是否仍要保持同步,遇到软链接时是拷贝软链接本身还是拷贝软链接所指向的文件,目标文件已存在时是否要先对其做个备份等等。

rsync同步过程中由两部分模式组成:决定哪些文件需要同步的检查模式以及文件同步时的同步模式。

(1).检查模式是指按照指定规则来检查哪些文件需要被同步,例如哪些文件是明确被排除不传输的。默认情况下,rsync使用"quick check"算法快速检查源文件和目标文件的大小、mtime(修改时间)是否一致,如果不一致则需要传输。当然,也可以通过在rsync命令行中指定某些选项来改变quick check的检查模式,比如"--size-only"选项表示"quick check"将仅检查文件大小不同的文件作为待传输文件。rsync支持非常多的选项,其中检查模式的自定义性是非常有d性的。

(2).同步模式是指在文件确定要被同步后,在同步过程发生之前要做哪些额外工作。例如上文所说的是否要先删除源主机上没有但目标主机上有的文件,是否要先备份已存在的目标文件,是否要追踪链接文件等额外 *** 作。rsync也提供非常多的选项使得同步模式变得更具d性。

相对来说,为rsync手动指定同步模式的选项更常见一些,只有在有特殊需求时才指定检查模式,因为大多数检查模式选项都可能会影响rsync的性能。

以下是rsync的语法:

由此语法可知,rsync有三种工作方式:

(1).本地文件系统上实现同步。命令行语法格式为上述"Local"段的格式。

(2).本地主机使用远程shell和远程主机通信。命令行语法格式为上述"Access via remote shell"段的格式。

(3).本地主机通过网络套接字连接远程主机上的rsync daemon。命令行语法格式为上述"Access via rsync daemon"段的格式。

前两者的本质是通过管道通信,即使是远程shell。而方式(3)则是让远程主机上运行rsync服务,使其监听在一个端口上,等待客户端的连接。

但是,还有第四种工作方式:

(4).通过远程shell也能临时启动一个rsync daemon,这不同于方式(3),它不要求远程主机上事先启动rsync服务,而是临时派生出rsync daemon,它是单用途的一次性daemon,仅用于临时读取daemon的配置文件,当此次rsync同步完成,远程shell启动的rsync daemon进程也会自动消逝。此通信方式的命令行语法格式同"Access via rsync daemon",但要求options部分必须明确指定"--rsh"选项或其短选项"-e"。

如需源码安装,请关注即将发布的《详解Rsync,一款卓越的增量同步工具(二)》

系统环境:

服务器配置:阿里云ECS 11G

*** 作系统:CentOS7.2

rsync 版本:3.1.2

rsync 服务器:rsync-server (10.168.152.72)

rsync 客户端:rsync-client (10.117.217.172)

检查rsync 是否已经安装

若已安装,无需重新安装;若未安装,用以下命令安装:

写入以下配置到该文件:

输入,格式是“用户名:口令”,用户不要求是系统用户

root:pwd123456

输入:

======welcome to synchronize appdata======

如果rsync启动成功,可以看到873端口已经在监听了。

检查rsync 是否已经安装

若已安装,无需重新安装;若未安装,用以下命令安装:

更多同步数据的场景演示,请关注即将发布的《详解Rsync,一款卓越的增量同步工具(二)》

配置文件 rsyncd.conf 由全局配置和若干模块配置组成。配置文件的语法为:

全局参数

在文件中 [module] 之外的所有配置行都是全局参数。当然也可以在全局参数部分定义模块参数,这时该参数的值就是所有模块的默认值。

模块参数

模块参数主要用于定义 rsync 服务器哪个目录要被同步。模块声明的格式必须为 [module] 形式,这个名字就是在 rsync 客户端看到的名字,类似于 Samba 服务器提供的共享名。而服务器真正同步的数据是通过 path 来指定的。可以根据自己的需要,来指定多个模块,模块中可以定义以下参数:

a. 基本模块参数

b. 模块控制参数

c. 模块文件筛选参数

d. 模块用户认证参数

e. 模块访问控制参数

客户主机列表定义可以是以下形式:

f. 模块日志参数

设置了”log file”参数时,在日志每行的开始会添加”%t [%p]“。

可以使用的日志格式定义符如下所示:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9800922.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存