APP下载

基于Rsync的文件实时同步系统在电商企业中的应用

2017-04-15王金恒张凡

电脑知识与技术 2016年34期
关键词:复制数据备份

王金恒+张凡

摘要:该文以云时代电子商务企业门户网站项目为案例,利用Rsync和Inotify机制,结合Mysql主从复制技术,设计并实现了Linux平台下的文件实时同步系统。系统将需要备份的文件分为网站静态文件和数据库动态文件,对于网站静态文件,利用Linux下的Inotify实时监控主服务器上的指定文件,一旦文件发生变动,就触发Rsync服务,自动将更新变化了的文件更新到备份服务器上;对于数据库动态文件,文件发生变化时,利用MySQL复制机制实现数据的自动同步更新,有效地保证了数据安全性和一致性。文件实时同步系统的应用避免了手工操作的麻烦和可能带来的遗漏,大幅度提高工作效率,从数据安全性和数据持续访问两个方面保证了企业应用业务的高可用性,具有理论意义和实用价值。

关键词:Rsync;Inotify;复制;文件同步;数据备份

中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2016)34-0281-04

Abstract:In this paper, the cloud era e-commerce enterprise portal project as a case, the use of Rsync and Inotify mechanism, combined with Mysql master slave replication technology, design and implementation of the Linux Platform file real-time synchronization system. ,will need to backup file is divided into static files and dynamic database file, for the website static files, using Linux's inotify real-time monitoring on the primary server for the specified file, once the file changes is triggered Rsync services, will update the changed file update to the backup server; for dynamic database file, the file changes, using MySQL replication mechanism to realize data automatic synchronization update, effectively ensures the data security and consistency. Application of real time file synchronization system avoids the manual operation of the trouble and may lead to the omission of, greatly improve the work efficiency, from data security and data persistent access to two aspects to ensure the high availability of enterprise applications, with theoretical significance and practical value.

Key words:rsync; inotify; copy; file synchronization; data backup

1 概述

大多數数据是以文件的形式存储的,在遇到突发事件时,如果数据存储系统没有及时备份数据,企业集团等会受到重大的损失,这就涉及到要将用户文件传输到远程备份服务器上,但是,如果每次都将整个数据重新上传,覆盖原有数据,将造成网络以及服务器资源的严重浪费,一种更有效的解决方案是使用文件同步将新版本的文件同步到服务器,目前Linux下较成熟的文件同步软件Rsync等提供了文件同步功能,但它们仍然存在很多不足:首先,不能实时监控文件系统来判断文件的更新变化,而只能通过守护进程或者手动的方式进行指定文件的同步;

其次,未能考虑到企业中的一些特别的需求,对实时数据文件的同步没有实现;再次,传统的软件利用定点备份的方法,设置一个时间段,每隔一个时间段备份一次,数据实时性较低。

2文件实时同步系统的设计

2.1设计目标

云时代电子商务企业有一个门户网站,包括商品、资讯、论坛、服务等版块,现有网站主服务器和备份服务器,Web服务器的操作系统是Linux,以后可根据企业的发展扩大网站规模,增加多台Web服务器。网站数据每天都会增加,为了保证数据安全以及用户访问数据的实时性,需建立一个实时文件同步系统,同步网站的数据到备份服务器上。出现故障后,可以通过备份最大程度地恢复数据。

为实现Web主从服务器之间文件的自动同步,实时文件同步系统采用Rsync和Inotify组合以及MySQL主从复制技术,利用Linux下的Inotify机制实时监控网站服务器上的文件,当文件发生变化时,Inotify触发Rsync服务,网站服务器上的文件自动同步到备份服务器上,同时,在数据库文件更新时,通过MySQL复制机制实现数据的同步,有效地保证了数据的一致性。

一个可防止数据丢失且可保证数据持续访问的文件实时同步系统对于企业是十分重要的,有了文件实时同步系统,在灾难发生后,能迅速通过备份数据进行灾难恢复,从而继续对外提供业务,将企业损失降到最低。文件同步系统不同于传统意义上的数据备份。传统意义上的数据备份一般采用离线、静态的方式,进行数据备份时需要暂停应用程序的运行,备份耗费的时间也很长,并且需要系统维护人员定期、手工进行十分繁琐的工作,容易因人为误操作而产生严重问题。而文件实时同步系统不需要离线并且动态地保存本地数据的一个远程备份,这样在本地数据中心出现故障的情况下,备份系统就可以接替本地系统继续对外提供服务,大大地提高了数据业务的可用性。

2.2 系统整体架构

主服务器作为Rsync源即服务器端,备份服务器作为Rsync目标即客户端。为实现企业网站的同步测试,两台服务器上均需搭建LAMP环境,并建立论坛网站。两台Web服务器的操作系统均为Red Hat Enterprise Linux 6.2,其内核为2.6.32,在服务器端需安装Inotify-tools。

2.3 文件实时同步方案

网站信息大多存储在服务器的数据库中,网站连接数据库来呈现内容,网站数据可分为数据库动态数据和网站静态数据。因此,本系统应包含两种备份策略,分别为数据库动态文件的同步和网站静态文件的同步。对于数据库的动态文件,可以通过MySQL主从复制机制来实现文件同步,使主从节点动态数据保持一致;对于网站静态文件的同步,需要通过文件同步工具来实现,这里采用Rsync,同时又要保证数据是实时的,这就需要Inotify,即利用Inotify机制监视主服务器文件的变化,一旦文件有变动,就会触发Rsync,将文件实时同步到备份服务器上。

3文件实时同步系统的实现

3.1 前期准备工作

3.1.1 Discuz!搭建企业网站论坛版块

1)网络设备的初始化设置

在两台服务器上分别进行网络初始化设置。设置IP地址,Web1的IP为192.168.1.131/24,Web2的IP为192.168.1.132/24;修改网卡配置信息和主机名;关闭防火墙和selinux。

2)搭建LAMP环境

安装Apache、PHP、MySQL,并进行相关配置,可以下载源码包编译安装,也可以使用yum命令安装,安装完成后分别启动两台服务器上的httpd和mysqld服务,验证其安装的正确性。最后,分别把启动脚本加入系统服务项,并设定开机自启动。

3)使用Discuz!搭建论坛

下载 Discuz! X3.2官方版,解压后将upload这个目录下的所有文件上传到服务器上设置的网站目录(/www/web)下,将该目录下的所有文件的属性设置为可读、可写、可执行,分别在Web1和Web2中的浏览器里入“http://192.168.1.131/install/”和“http://192.168.1.132/install/”进入安装界面开始安装,安装完成后可进入论坛首页,登录前面设置的账号即可进入管理中心进行相关优化。

3.1.2 配置双机SSH信任

在root用户的主目录内创建.ssh目录并设置正确权限,使用ssh-keygen命令生成第2版的SSH协议的RSA密钥,是一对DSA公/私钥。分别将公钥内容写入Web1和Web2中的authorized_keys,在Web1中,将authorized_keys复制到.ssh,这样将允许主服务器从远程以基于RSA的验证来代替口令验证连接到备份服务器上。

3.2 动态文件实时同步的实现

3.2.1 MySQL安装后的基本配置

1)设置MySQL数据库root账号的密码:mysqladmin -u root password ‘123456

2)修改MySQL的配置文件my.cnf,一般是“/etc/my.cnf”

3)啟动mysqld服务,使用命令mysql -u root –p登录MySQL数据库

3.2.2 配置主MySQL数据库

1)在Web1上修改MySQL数据库的配置文件my.cnf,使其设置为主MySQL数据库

在my.cnf文件中修改服务端模块[mysqld]的参数配置,加上:log-bin = mysql-bin,即打开二进制日志功能;server-id = 1,即设置主服务器的唯一的服务辨识号为1,注意其数值位于1到2^32之间,且必须和从服务器不同;binlog-do-db = discuz,即指定需要备份的数据库。

2)重启mysqld服务

3)设置MySQL数据库管理账号

mysql> grant replication slave,replication client on *.* to webuser@'%' identified by '123456';

4)获取二进制日志文件名位置

查看Master的状态,其中mysql -bin.000007表示二进制文件名,106表示二进制文件位置。

3.2.3 配置从MySQL数据库

1)在Web2上修改MySQL数据库的配置文件,使其设置为从MySQL数据库

在my.cnf文件中修改服务端模块[mysqld]的参数配置,加上如下内容:log-bin = mysql-bin;server-id = 2;read-only = 1;binlog-do-db = discuz。

2)配置MySQL Slave连接MySQL Master,开始重做Master二进制日志中的事件。

mysql>reset slave;

mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.131',MASTER_USER='webuser',

-> MASTER_PASSWORD='123456',

-> MASTER_LOG_FILE='mysql-bin.000013',

-> MASTER_LOG_POS=106;

其中,MASTER_HOST指定主服务器的IP地址,MASTER_USER指定MySQL管理用户名,MASTER_PASSWORD指定MySQL管理密码,MASTER_LOG_FILE指定主服务器的二进制日志文件名,MASTER_LOG_POS指定二进制文件位置。

3)在MySQL中使用命令start slave启动Slave,并show slave status\G查看Slave状态

4)重启mysqld服务

3.3 静态文件实时同步的实现

3.3.1 配置Rsync客户端

1)安装Rsync软件

在http://rsync.samba.org/下载你需要的软件版本,在Web2中先后执行configure、make、make install命令实现安装。或者还可以使用yum方式进行安装。

2)安装xinetd,配置Rsync的守护进程

通过xinetd管理Rsync,编辑/etc/xinetd.d/rsync,将disable默认是yes,启动时需要修改成no。

3)配置Rsync

Rsync的配置文件为/etc/rsyncd.conf,在安装完Rsync时,默认没有这个文件,需要手动创建。

其中,[backup]是认证模块名;path = /www/web/,即指定需要备份的文件或目录;hosts allow =192.168.1.131,即设置可以连接rsync服务器主机;auth users = webuser,即定义可以连接该模块的用户名;secrets file = /etc/rsync.passwd,即定义可以连接该模块的密码。

4)创建认证用户的密码文件/etc/rsync.passwd,文件格式为:用户名:密码(一行一个用户)

创建密码文件/etc/rsync.passwd,写入webuser:webserver。

5)设置用户密码文件权限为root可读可写:chmod 600 /etc/rsync.password

6)启动Rsync守护进程,并设置为开机自启动

3.3.2 配置Rsync服务器端

1)在Web1中使用命令yum –y install rsync安装Rsync软件

2)创建认证用户密码文件/etc/rsync.passwd,写入webserver,并设置权限为仅root可读可写

3)启动Rsync守护进程,并设置为开机自启动

4)设置Inotify运行环境,首先需要检查是否支持Inotify-tools,然后设置相应限制值的大小

5)安装Inotify-tools,可以到http://inotify-tools.sourceforge.net/下载相应版本的Inotify-tools,然后进行编译安装

6)编写shell脚本程序

在主服务器上编写shell脚本程序,监控主服务器上文件变化,同时将更新的静态数据文件实时同步到备份服务器上。实时监控脚本/opt/sh/rsync.sh的内容如图4所示。

7)为此脚本设定可执行权限放到后台运行,并加入到系统自启动文件/etc/rc.d/rc.local中

chmod 755 /opt/sh/rsync.sh;/opt/sh/rsync.sh;echo "/opt/sh/rsync.sh" >>/etc/rc.d/rc.local

4系统测试

4.1 静态文件实时同步测试

在Web1的网站目录下创建一个静态网页测试文件fanny.html,并写入相应内容,如图5所示。

从以上结果可看出,静态文件已经从服务端同步到客户端了,结果表明Web1上的网站静态文件能实时同步更新到Web2上,网站目录下静态文件同步成功。

4.2动态文件实时同步的测试

在主服务器的论坛网站发布帖子,随着数据的更新,查看备份服务器论坛网站是否也更新了相同的内容。在Web1的论坛上以管理员admin登录,发帖子情况如图7所示。

两台服务器的论坛发布帖子信息相同,动态文件同步功能成功实现。由此得出结论,当主服务器的数据库文件发生变化时,备份服务器的数据库文件也会随之变化,数据发生更新使主从服务器的数据库文件内容保持一致。

5结束语

本文利用Rsync远程同步技术和Linux2.6.13及以上内核提供的Inotify文件系统事件监控机制,以及MySQL复制技术设计和实现了文件实时同步系统,适应了企业项目的需求。此方案可应用于所有类似架构的系统中,并且随着企业规模变大,需要增加更多台服务器时,还可以對其进行扩展,用于实现多台协同工作的服务器之间的数据文件同步。

参考文献:

[1] 高俊峰.高性能Linux服务器构建实战:运维监控,性能调优与集群应用[M].北京:机械工业出版社,2011:126,139.

[2] 孙东奇,王秀梅.用Rsync实现Linux文件系统备份[J].教育信息化:学术版,2006(2):35-36.

[3] 姜永军.Linux下的高效备份[J].网管员世界,2012(1):71-74.

猜你喜欢

复制数据备份
泉州高速公路收费系统远程数据备份研究
海洋数据备份平台的设计和实现
No.4 IDC:2019年上半年数据备份与恢复市场同比增长10.0%
论以PS实现有规律复制图形
一种协同工作环境中(分布式)的容错和安全数据存储方法
数据备份与恢复技术在门户中的应用探讨