王金恒+張凡
摘要:該文以云時代電子商務(wù)企業(yè)門戶網(wǎng)站項目為案例,利用Rsync和Inotify機制,結(jié)合Mysql主從復制技術(shù),設(shè)計并實現(xiàn)了Linux平臺下的文件實時同步系統(tǒng)。系統(tǒng)將需要備份的文件分為網(wǎng)站靜態(tài)文件和數(shù)據(jù)庫動態(tài)文件,對于網(wǎng)站靜態(tài)文件,利用Linux下的Inotify實時監(jiān)控主服務(wù)器上的指定文件,一旦文件發(fā)生變動,就觸發(fā)Rsync服務(wù),自動將更新變化了的文件更新到備份服務(wù)器上;對于數(shù)據(jù)庫動態(tài)文件,文件發(fā)生變化時,利用MySQL復制機制實現(xiàn)數(shù)據(jù)的自動同步更新,有效地保證了數(shù)據(jù)安全性和一致性。文件實時同步系統(tǒng)的應(yīng)用避免了手工操作的麻煩和可能帶來的遺漏,大幅度提高工作效率,從數(shù)據(jù)安全性和數(shù)據(jù)持續(xù)訪問兩個方面保證了企業(yè)應(yīng)用業(yè)務(wù)的高可用性,具有理論意義和實用價值。
關(guān)鍵詞:Rsync;Inotify;復制;文件同步;數(shù)據(jù)備份
中圖分類號: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 概述
大多數(shù)數(shù)據(jù)是以文件的形式存儲的,在遇到突發(fā)事件時,如果數(shù)據(jù)存儲系統(tǒng)沒有及時備份數(shù)據(jù),企業(yè)集團等會受到重大的損失,這就涉及到要將用戶文件傳輸?shù)竭h程備份服務(wù)器上,但是,如果每次都將整個數(shù)據(jù)重新上傳,覆蓋原有數(shù)據(jù),將造成網(wǎng)絡(luò)以及服務(wù)器資源的嚴重浪費,一種更有效的解決方案是使用文件同步將新版本的文件同步到服務(wù)器,目前Linux下較成熟的文件同步軟件Rsync等提供了文件同步功能,但它們?nèi)匀淮嬖诤芏嗖蛔悖菏紫龋荒軐崟r監(jiān)控文件系統(tǒng)來判斷文件的更新變化,而只能通過守護進程或者手動的方式進行指定文件的同步;
其次,未能考慮到企業(yè)中的一些特別的需求,對實時數(shù)據(jù)文件的同步?jīng)]有實現(xiàn);再次,傳統(tǒng)的軟件利用定點備份的方法,設(shè)置一個時間段,每隔一個時間段備份一次,數(shù)據(jù)實時性較低。
2文件實時同步系統(tǒng)的設(shè)計
2.1設(shè)計目標
云時代電子商務(wù)企業(yè)有一個門戶網(wǎng)站,包括商品、資訊、論壇、服務(wù)等版塊,現(xiàn)有網(wǎng)站主服務(wù)器和備份服務(wù)器,Web服務(wù)器的操作系統(tǒng)是Linux,以后可根據(jù)企業(yè)的發(fā)展擴大網(wǎng)站規(guī)模,增加多臺Web服務(wù)器。網(wǎng)站數(shù)據(jù)每天都會增加,為了保證數(shù)據(jù)安全以及用戶訪問數(shù)據(jù)的實時性,需建立一個實時文件同步系統(tǒng),同步網(wǎng)站的數(shù)據(jù)到備份服務(wù)器上。出現(xiàn)故障后,可以通過備份最大程度地恢復數(shù)據(jù)。
為實現(xiàn)Web主從服務(wù)器之間文件的自動同步,實時文件同步系統(tǒng)采用Rsync和Inotify組合以及MySQL主從復制技術(shù),利用Linux下的Inotify機制實時監(jiān)控網(wǎng)站服務(wù)器上的文件,當文件發(fā)生變化時,Inotify觸發(fā)Rsync服務(wù),網(wǎng)站服務(wù)器上的文件自動同步到備份服務(wù)器上,同時,在數(shù)據(jù)庫文件更新時,通過MySQL復制機制實現(xiàn)數(shù)據(jù)的同步,有效地保證了數(shù)據(jù)的一致性。
一個可防止數(shù)據(jù)丟失且可保證數(shù)據(jù)持續(xù)訪問的文件實時同步系統(tǒng)對于企業(yè)是十分重要的,有了文件實時同步系統(tǒng),在災難發(fā)生后,能迅速通過備份數(shù)據(jù)進行災難恢復,從而繼續(xù)對外提供業(yè)務(wù),將企業(yè)損失降到最低。文件同步系統(tǒng)不同于傳統(tǒng)意義上的數(shù)據(jù)備份。傳統(tǒng)意義上的數(shù)據(jù)備份一般采用離線、靜態(tài)的方式,進行數(shù)據(jù)備份時需要暫停應(yīng)用程序的運行,備份耗費的時間也很長,并且需要系統(tǒng)維護人員定期、手工進行十分繁瑣的工作,容易因人為誤操作而產(chǎn)生嚴重問題。而文件實時同步系統(tǒng)不需要離線并且動態(tài)地保存本地數(shù)據(jù)的一個遠程備份,這樣在本地數(shù)據(jù)中心出現(xiàn)故障的情況下,備份系統(tǒng)就可以接替本地系統(tǒng)繼續(xù)對外提供服務(wù),大大地提高了數(shù)據(jù)業(yè)務(wù)的可用性。
2.2 系統(tǒng)整體架構(gòu)
主服務(wù)器作為Rsync源即服務(wù)器端,備份服務(wù)器作為Rsync目標即客戶端。為實現(xiàn)企業(yè)網(wǎng)站的同步測試,兩臺服務(wù)器上均需搭建LAMP環(huán)境,并建立論壇網(wǎng)站。兩臺Web服務(wù)器的操作系統(tǒng)均為Red Hat Enterprise Linux 6.2,其內(nèi)核為2.6.32,在服務(wù)器端需安裝Inotify-tools。
2.3 文件實時同步方案
網(wǎng)站信息大多存儲在服務(wù)器的數(shù)據(jù)庫中,網(wǎng)站連接數(shù)據(jù)庫來呈現(xiàn)內(nèi)容,網(wǎng)站數(shù)據(jù)可分為數(shù)據(jù)庫動態(tài)數(shù)據(jù)和網(wǎng)站靜態(tài)數(shù)據(jù)。因此,本系統(tǒng)應(yīng)包含兩種備份策略,分別為數(shù)據(jù)庫動態(tài)文件的同步和網(wǎng)站靜態(tài)文件的同步。對于數(shù)據(jù)庫的動態(tài)文件,可以通過MySQL主從復制機制來實現(xiàn)文件同步,使主從節(jié)點動態(tài)數(shù)據(jù)保持一致;對于網(wǎng)站靜態(tài)文件的同步,需要通過文件同步工具來實現(xiàn),這里采用Rsync,同時又要保證數(shù)據(jù)是實時的,這就需要Inotify,即利用Inotify機制監(jiān)視主服務(wù)器文件的變化,一旦文件有變動,就會觸發(fā)Rsync,將文件實時同步到備份服務(wù)器上。
3文件實時同步系統(tǒng)的實現(xiàn)
3.1 前期準備工作
3.1.1 Discuz!搭建企業(yè)網(wǎng)站論壇版塊
1)網(wǎng)絡(luò)設(shè)備的初始化設(shè)置
在兩臺服務(wù)器上分別進行網(wǎng)絡(luò)初始化設(shè)置。設(shè)置IP地址,Web1的IP為192.168.1.131/24,Web2的IP為192.168.1.132/24;修改網(wǎng)卡配置信息和主機名;關(guān)閉防火墻和selinux。
2)搭建LAMP環(huán)境
安裝Apache、PHP、MySQL,并進行相關(guān)配置,可以下載源碼包編譯安裝,也可以使用yum命令安裝,安裝完成后分別啟動兩臺服務(wù)器上的httpd和mysqld服務(wù),驗證其安裝的正確性。最后,分別把啟動腳本加入系統(tǒng)服務(wù)項,并設(shè)定開機自啟動。
3)使用Discuz!搭建論壇
下載 Discuz! X3.2官方版,解壓后將upload這個目錄下的所有文件上傳到服務(wù)器上設(shè)置的網(wǎng)站目錄(/www/web)下,將該目錄下的所有文件的屬性設(shè)置為可讀、可寫、可執(zhí)行,分別在Web1和Web2中的瀏覽器里入“http://192.168.1.131/install/”和“http://192.168.1.132/install/”進入安裝界面開始安裝,安裝完成后可進入論壇首頁,登錄前面設(shè)置的賬號即可進入管理中心進行相關(guān)優(yōu)化。
3.1.2 配置雙機SSH信任
在root用戶的主目錄內(nèi)創(chuàng)建.ssh目錄并設(shè)置正確權(quán)限,使用ssh-keygen命令生成第2版的SSH協(xié)議的RSA密鑰,是一對DSA公/私鑰。分別將公鑰內(nèi)容寫入Web1和Web2中的authorized_keys,在Web1中,將authorized_keys復制到.ssh,這樣將允許主服務(wù)器從遠程以基于RSA的驗證來代替口令驗證連接到備份服務(wù)器上。
3.2 動態(tài)文件實時同步的實現(xiàn)
3.2.1 MySQL安裝后的基本配置
1)設(shè)置MySQL數(shù)據(jù)庫root賬號的密碼:mysqladmin -u root password ‘123456
2)修改MySQL的配置文件my.cnf,一般是“/etc/my.cnf”
3)啟動mysqld服務(wù),使用命令mysql -u root –p登錄MySQL數(shù)據(jù)庫
3.2.2 配置主MySQL數(shù)據(jù)庫
1)在Web1上修改MySQL數(shù)據(jù)庫的配置文件my.cnf,使其設(shè)置為主MySQL數(shù)據(jù)庫
在my.cnf文件中修改服務(wù)端模塊[mysqld]的參數(shù)配置,加上:log-bin = mysql-bin,即打開二進制日志功能;server-id = 1,即設(shè)置主服務(wù)器的唯一的服務(wù)辨識號為1,注意其數(shù)值位于1到2^32之間,且必須和從服務(wù)器不同;binlog-do-db = discuz,即指定需要備份的數(shù)據(jù)庫。
2)重啟mysqld服務(wù)
3)設(shè)置MySQL數(shù)據(jù)庫管理賬號
mysql> grant replication slave,replication client on *.* to webuser@'%' identified by '123456';
4)獲取二進制日志文件名位置
查看Master的狀態(tài),其中mysql -bin.000007表示二進制文件名,106表示二進制文件位置。
3.2.3 配置從MySQL數(shù)據(jù)庫
1)在Web2上修改MySQL數(shù)據(jù)庫的配置文件,使其設(shè)置為從MySQL數(shù)據(jù)庫
在my.cnf文件中修改服務(wù)端模塊[mysqld]的參數(shù)配置,加上如下內(nèi)容: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指定主服務(wù)器的IP地址,MASTER_USER指定MySQL管理用戶名,MASTER_PASSWORD指定MySQL管理密碼,MASTER_LOG_FILE指定主服務(wù)器的二進制日志文件名,MASTER_LOG_POS指定二進制文件位置。
3)在MySQL中使用命令start slave啟動Slave,并show slave status\G查看Slave狀態(tài)
4)重啟mysqld服務(wù)
3.3 靜態(tài)文件實時同步的實現(xiàn)
3.3.1 配置Rsync客戶端
1)安裝Rsync軟件
在http://rsync.samba.org/下載你需要的軟件版本,在Web2中先后執(zhí)行configure、make、make install命令實現(xiàn)安裝?;蛘哌€可以使用yum方式進行安裝。
2)安裝xinetd,配置Rsync的守護進程
通過xinetd管理Rsync,編輯/etc/xinetd.d/rsync,將disable默認是yes,啟動時需要修改成no。
3)配置Rsync
Rsync的配置文件為/etc/rsyncd.conf,在安裝完Rsync時,默認沒有這個文件,需要手動創(chuàng)建。
其中,[backup]是認證模塊名;path = /www/web/,即指定需要備份的文件或目錄;hosts allow =192.168.1.131,即設(shè)置可以連接rsync服務(wù)器主機;auth users = webuser,即定義可以連接該模塊的用戶名;secrets file = /etc/rsync.passwd,即定義可以連接該模塊的密碼。
4)創(chuàng)建認證用戶的密碼文件/etc/rsync.passwd,文件格式為:用戶名:密碼(一行一個用戶)
創(chuàng)建密碼文件/etc/rsync.passwd,寫入webuser:webserver。
5)設(shè)置用戶密碼文件權(quán)限為root可讀可寫:chmod 600 /etc/rsync.password
6)啟動Rsync守護進程,并設(shè)置為開機自啟動
3.3.2 配置Rsync服務(wù)器端
1)在Web1中使用命令yum –y install rsync安裝Rsync軟件
2)創(chuàng)建認證用戶密碼文件/etc/rsync.passwd,寫入webserver,并設(shè)置權(quán)限為僅root可讀可寫
3)啟動Rsync守護進程,并設(shè)置為開機自啟動
4)設(shè)置Inotify運行環(huán)境,首先需要檢查是否支持Inotify-tools,然后設(shè)置相應(yīng)限制值的大小
5)安裝Inotify-tools,可以到http://inotify-tools.sourceforge.net/下載相應(yīng)版本的Inotify-tools,然后進行編譯安裝
6)編寫shell腳本程序
在主服務(wù)器上編寫shell腳本程序,監(jiān)控主服務(wù)器上文件變化,同時將更新的靜態(tài)數(shù)據(jù)文件實時同步到備份服務(wù)器上。實時監(jiān)控腳本/opt/sh/rsync.sh的內(nèi)容如圖4所示。
7)為此腳本設(shè)定可執(zhí)行權(quán)限放到后臺運行,并加入到系統(tǒng)自啟動文件/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系統(tǒng)測試
4.1 靜態(tài)文件實時同步測試
在Web1的網(wǎng)站目錄下創(chuàng)建一個靜態(tài)網(wǎng)頁測試文件fanny.html,并寫入相應(yīng)內(nèi)容,如圖5所示。
從以上結(jié)果可看出,靜態(tài)文件已經(jīng)從服務(wù)端同步到客戶端了,結(jié)果表明Web1上的網(wǎng)站靜態(tài)文件能實時同步更新到Web2上,網(wǎng)站目錄下靜態(tài)文件同步成功。
4.2動態(tài)文件實時同步的測試
在主服務(wù)器的論壇網(wǎng)站發(fā)布帖子,隨著數(shù)據(jù)的更新,查看備份服務(wù)器論壇網(wǎng)站是否也更新了相同的內(nèi)容。在Web1的論壇上以管理員admin登錄,發(fā)帖子情況如圖7所示。
兩臺服務(wù)器的論壇發(fā)布帖子信息相同,動態(tài)文件同步功能成功實現(xiàn)。由此得出結(jié)論,當主服務(wù)器的數(shù)據(jù)庫文件發(fā)生變化時,備份服務(wù)器的數(shù)據(jù)庫文件也會隨之變化,數(shù)據(jù)發(fā)生更新使主從服務(wù)器的數(shù)據(jù)庫文件內(nèi)容保持一致。
5結(jié)束語
本文利用Rsync遠程同步技術(shù)和Linux2.6.13及以上內(nèi)核提供的Inotify文件系統(tǒng)事件監(jiān)控機制,以及MySQL復制技術(shù)設(shè)計和實現(xiàn)了文件實時同步系統(tǒng),適應(yīng)了企業(yè)項目的需求。此方案可應(yīng)用于所有類似架構(gòu)的系統(tǒng)中,并且隨著企業(yè)規(guī)模變大,需要增加更多臺服務(wù)器時,還可以對其進行擴展,用于實現(xiàn)多臺協(xié)同工作的服務(wù)器之間的數(shù)據(jù)文件同步。
參考文獻:
[1] 高俊峰.高性能Linux服務(wù)器構(gòu)建實戰(zhàn):運維監(jiān)控,性能調(diào)優(yōu)與集群應(yīng)用[M].北京:機械工業(yè)出版社,2011:126,139.
[2] 孫東奇,王秀梅.用Rsync實現(xiàn)Linux文件系統(tǒng)備份[J].教育信息化:學術(shù)版,2006(2):35-36.
[3] 姜永軍.Linux下的高效備份[J].網(wǎng)管員世界,2012(1):71-74.