« 上一篇下一篇 »

【服务器数据备份】Linux系统香港服务器间文件实现同步热备份的方法

  随着Linux的普及,以及Linux的廉价性,越来越多的用户开始倾向于使用Linux作为服务器,而1个服务器最重要的就是它的应用程序所提供的数据和服务。但是由于不可预知的自然灾害,计算机硬件设施的损坏和人为的操作失误[1],服务器很容易遭到破坏,造成数据的丢失。预防这些灾难最有效的方法就是备份。传统的备份几乎都没有备份Linux系统的整体信息,导致灾难后不能在裸机上恢复整个系统,使系统立即投入运行。W.Preston首次提出了1种Linux裸机备份与恢复的方法,但是步骤复杂,且需要系统管理员手动的敲入一条条命令,他通过备份磁盘的mbr维护分区信息,恢复时不支持重新调整磁盘分区

 现有服务器A和服务器B,如果服务器A的指定目录(例如 /home/paul/rsync/ )中的内容发生变更(增删改和属性变更),实时将这些变更同步到服务器B的目标目录中(例如 /home/paul/rsync/ )。

  本文提出的Linux裸机备份与恢复方法备份整个Linux系统,包括硬件和软件信息,支持重新调整分区,整个过程用脚本自动完成,避免繁琐的操作,使1台裸机在灾难过后能够在最短时间内恢复到灾难前的状态,快速投入使用数据镜像备份工具Rsync

Rsync是一个非常快速和灵活的文件复制工具。它支持本机或者是和远程服务器间的文件复制。Rsync使用了delta-transfer算法,它只需要传送源端和目标端的文件差异部分,大大减少了网络带宽的消耗和复制

耗费的时间。Rsync多用于数据备份和镜像。
 
Rsync使用了快速检查算法,通过比较文件大小或最后修改时间的变化来判断文件是否需要同步。
 
Rsync连接远程主机有两种方式:使用ssh或rsync daemon。这里使用Rsync方式来实现远程文件备份。
 
Rsync的安装与操作
 

安装Rsync
 

分别在服务器A和服务器B的terminal执行:
 

sudo yum install rsync

安装完毕后,会发现rsync的配置文件位于 etc/rsyncd.conf 。该文件使用daemon方式同步时需要使用,此处暂不介绍。
 
配置服务器A和B之间的免密登录
 

服务器A执行:

ssh-keygenssh-copy-id

服务器B的IP地址

创建源端目录和目标端目录
 

在服务器A中:
 

mkdir /home/paul/rsync

在服务器B中:

mkdir /home/paul/rsync

在服务器A创建测试文件
 

echo "Hello from Server A" >> /home/paul/rsync/demo.txt

执行文件传送命令
 

在服务器A运行:

# (1)rsync -avPz --progress /home/paul/rsync 192.168.100.130:/home.paul/rsync# (2)rsync -avPz --delete --progress /home/paul/rsync 192.168.100.130:/home.paul/rsync

会发现在demo.txt也出现在了服务器B中/home/paul/rsync目录。
 
命令解析:
 
(1) 将服务器A中的/home/paul/rsync目录内的文件复制到服务器B(192.168.100.130)的/home.paul/rsync中。
 
(2) 比较目标端和源端的文件,如果目标端的文件在源端不存在,在目标端删除该文件。
 
Rsync存在的问题
 

Rsync仅是一个文件复制工具,它无法对源端文件的增删改操作进行监听。在源端做出更改后,需要执行rsync命令才能将变更同步到目标端。
 

Rsync在每次同步前需要扫描整个目录。如果源目录内的文件数量比较多,扫描可能需要耗费较多的时间。
 为了满足实时监听的要求,我们需要引入另一个工具:inotify。
 
文件系统事件监听工具inotify
 

inotify-tools为inotify提供一个简单接口。它是一个c语言编写的库,同时也包含命令行工具。
 
inotify-tools的详细介绍请点击: https://github.com/rvoicilas/inotify-tools/wiki
 
inotify-tools的安装
 

对于centos7系统,依次执行:
 

yum install -y epel-releaseyum --enablerepo=epel install inotify-tools

使用inotifywait命令进行事件监听
 

监听脚本如下(inotifywait-rsync.sh):

inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib /home/paul/rsync/ | while read filedorsync -avPz --progress /home/paul/rsync/

192.168.100.130:/home/paul/rsync/rsync -avPz --delete /home/paul/rsync/ 192.168.100.130:/home/paul/rsync/echo "${file} was synchronized"done

参数解析
 •-m 保持持续监听状态,如果不写该参数,inotifywait会在监听到一次事件之后退出。
•-r 递归方式监听目录。
•-q 安静模式,打印输出较少的内容。
•--timefmt 指定时间的输出格式。
•--format 指定事件输出的格式。
•-e 设置监听的事件类型。这里监听增删改和metadata的变更。
 
对于每次触发的监听时间,inotifywait会执行do和done之间的代码。在这里,我们调用之前所说的rsync命令进行文件同步。
 

   sync命令语法:

   #rsysnc [options] source path destination path

   以下将根据sync的参数和应用场景来给大家介绍具体的用法:

   示例: 1 - 启用压缩

   [root@localhost /]# rsync -zvr /home/aloft/ /backuphomedir

   building file list ... done

   .bash_logout

   .bash_profile

   .bashrc

   sent 472 bytes received 86 bytes 1116.00 bytes/sec

   total size is 324 speedup is 0.58

   上面的rsync命令使用了-z来启用压缩,-v是可视化,-r是递归。上面在本地的/home/aloft/和/backuphomedir之间同步。

   示例: 2 - 保留文件和文件夹的属性

   [root@localhost /]# rsync -azvr /home/aloft/ /backuphomedir

   building file list ... done

   ./

   .bash_logout

   .bash_profile

   .bashrc

   sent 514 bytes received 92 bytes 1212.00 bytes/sec

   total size is 324 speedup is 0.53

   上面我们使用了-a选项,它保留了所有人和所属组、时间戳、软链接、权限,并以递归模式运行。

   示例: 3 - 同步本地到远程主机

   root@localhost /]# rsync -avz /home/aloft/ azmath@192.168.1.4:192.168.1.4:/share/rsysnctest/

   Password:

   building file list ... done

   ./

   .bash_logout

   .bash_profile

   .bashrc

   sent 514 bytes received 92 bytes 1212.00 bytes/sec

   total size is 324 speedup is 0.53

   上面的命令允许你在本地和远程机器之间同步。你可以看到,在同步文件到另一个系统时提示你输入密码。在做远程同步时,你需要指定远程系统的用户名和IP或者主机名。

   示例: 4 - 远程同步到本地

   [root@localhost /]# rsync -avz azmath@192.168.1.4:192.168.1.4:/share/rsysnctest/ /home/aloft/

   Password:

   building file list ... done

   ./

   .bash_logout

   .bash_profile

   .bashrc

   sent 514 bytes received 92 bytes 1212.00 bytes/sec

   total size is 324 speedup is 0.53

   上面的命令同步远程文件到本地。

   示例: 5 - 找出文件间的不同

   [root@localhost backuphomedir]# rsync -avzi /backuphomedir /home/aloft/

   building file list ... done

   cd+++++++ backuphomedir/

   >f+++++++ backuphomedir/.bash_logout

   >f+++++++ backuphomedir/.bash_profile

   >f+++++++ backuphomedir/.bashrc

   >f+++++++ backuphomedir/abc

   >f+++++++ backuphomedir/xyz

   sent 650 bytes received 136 bytes 1572.00 bytes/sec

   total size is 324 speedup is 0.41

   上面的命令帮助你找出源地址和目标地址之间文件或者目录的不同。

   示例: 6 - 备份

   rsync命令可以用来备份linux。

   你可以在cron中使用rsync安排备份。

   0 0 * * * /usr/local/sbin/bkpscript &> /dev/null

   vi /usr/local/sbin/bkpscript

   rsync -avz -e ‘ssh -p2093′ /home/test/

小结

rsync的主要优点是:

速度:最初会在本地和远程之间拷贝所有内容。下次,只会传输发生改变的块或者字节。

安全:传输可以通过ssh协议加密数据。

低带宽:rsync可以在两端压缩和解压数据块。