Sersync+Rsyncトリガファイル同期実戦プロセスを実現します。


背景
通常、私たちはサーバー上でrsyncを使ってcrontabを加えて、タイミングよくいくつかの同期、バックアップファイルのタスクを完成します。業務と応用需要の拡大に伴い、リアルタイム性の要求が高まっています。普通のrsyncはすべてのファイルをチェックしてから、差動量を同期します。ファイル量が非常に大きいなら、rsyncで検査する過程も時間がかかります。しかも変化しているのは、その中のごく一部です。これは非常に非効率的な方法です。第二に、rsyncはリアルタイムでモニタリング、同期データができません。crontab方式で同期をトリガすることができますが、二回のトリガ動作には時間差があります。そうすると、サービス端末とクライアントデータが一致しない可能性があります。Sersync+Rsyncの組み合わせはこの問題をより良く解決できます。
Sersync紹介
1、sersyncはc++を使って作成し、linuxシステムファイルシステムで発生した臨時ファイルと重複したファイル操作をフィルタリングしています。(詳しくは付録を参照してください。このフィルタスクリプトプログラムは実現されていません。)ので、rsyncと同期した時に、運行時間とネットワークソースを節約しました。だからもっと早いです。
2、sersyncの構成は簡単です。binディレクトリには基本的に静的にコンパイルされた2進ファイルがあります。binディレクトリの下のxmlプロファイルに合わせて直接使用すればいいです。
3、また本プロジェクトは他のスクリプトのオープンソース項目と比較し、マルチスレッドを使って同期します。特に大きなファイルを同期させる場合、複数のサーバがリアルタイムで同期状態を維持することができます。
4、本プロジェクトにはエラー処理のメカニズムがあり、失敗したキューを通してエラーのファイルを再同期し、失敗した場合、10時間ごとに同期に失敗したファイルを再同期する。
5、本プロジェクトはcrontab機能を持っています。xmlの設定ファイルで開くだけで、あなたの要求に応じて、時間を置いて全体的に同期します。crontab機能を追加配置する必要はありません。
6、本プロジェクトのsocketとhttpプラグインは拡張して、あなたの二次開発の需要を満たします。
実戦の過程
一、サーバ環境
サービス端末:172.6.7.26 cents 6.7 rsync-server受信ファイル
クライアント:172.6.7.25 cents 6.7 sersync+rsync-client送信ファイル
二、サービス端末にrsync-serverをインストールする
1、rsyncをインストールする
癜rpm-qa grep rsync葑はrsyncがインストールされているかどうかを確認します。インストールされていないなら、yum installは直接インストールすればいいです。
2、xinetd方式でrsyncを起動する

# vim /etc/xinetd.d/rsync #  disable = no,flags = IPv4
3、rsync配置ファイルを修正する

# mkdir /etc/rsyncd
# vim /etc/rsyncd/rsyncd.conf #        
# GLOBAL OPTIONS
motd file=/etc/motd
port=873
pid file=/var/run/rsyncd.pid
lock file = /var/lock/rsyncd
log file=/var/log/rsyncd
transfer logging = yes
log format = [op]:%o [ip]:%a [module]:%m [path]:%P [file]:%f [size]:%l
syslog facility=daemon
max connections=100
[recv]
comment = "recv data from 57.25"
path = /opt/rsync_data/recv #           apprun,                apprun
list = yes
use chroot = yes
uid = apprun
gid = apprun
read only = no
write only = no
exclude =
include =
auth users = rsync
secrets file = /etc/rsyncd/rsyncd.secrets
strict modes = yes
hosts allow = 172.16.57.25
hosts deny = *
# ln -s /etc/rsyncd/rsyncd.conf /etc/rsyncd.conf
4、ユーザ認証ファイルを作成する

# vim /etc/rsyncd/rsyncd.secrets
rsync:111111   #       :  
#chmod 600 /etc/rsyncd/rsyncd.secrets #    600,       
5、rsyncを起動する

# /etc/init.d/xinetd start
# netstat -tpln | grep 873 #  873          
三、クライアントのセットアップsersync+rsync-client
1、rsyncをインストールして、サーバーと同じで、インストールしていない場合はyum installをインストールします。
2、sersyncをインストールする

# tar xzvf sersync2.5_64bit_binary_stable_final.tar.gz
# mv GNU-Linux-x86 /opt/programs/sersync #          
3、sersyncの配置

<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
  <host hostip="localhost" port="8008"></host>
  <debug start="false"/>
  <fileSystem xfs="false"/>
  <filter start="false">
  <exclude expression="(.*)\.svn"></exclude>
  <exclude expression="(.*)\.gz"></exclude>
  <exclude expression="^info/*"></exclude>
  <exclude expression="^static/*"></exclude>
  </filter>
  <inotify>
  <delete start="true"/>
  <createFolder start="true"/>
  <createFile start="true"/>
  <closeWrite start="true"/>
  <moveFrom start="true"/>
  <moveTo start="true"/>
  <attrib start="true"/>
  <modify start="true"/>
  </inotify>
  <sersync>
  <localpath watch="/opt/rsync_data/send"> #    ,           ,       
    <remote ip="172.16.57.26" name="recv"/>#   ip     
  </localpath>
  <rsync>
    <commonParams params="-artuz"/> #rsync    
    <auth start="true" users="rsync" passwordfile="/etc/rsync.pas"/> #       
    <userDefinedPort start="false" port="873"/>
    <timeout start="false" time="100"/><!-- timeout=100 -->
    <ssh start="false"/>
  </rsync>
  <failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
  <crontab start="false" schedule="600"><!--600mins-->
    <crontabfilter start="false">
    <exclude expression="*.php"></exclude>
    <exclude expression="info/*"></exclude>
    </crontabfilter>
  </crontab>
  <plugin start="false" name="command"/>
  </sersync>
</head>
4、サービス端末のパスワード認証

# vim /etc/rsync.pas #               ,          , chmod 600
# chmod 600 /etc/rsync.pas
5、sersyncを起動する

# ./sersync2 -d -o confxml.xml
四、テスト認証
クライアントの下でディレクトリ/opt/rsync_を監視します。data/sendでファイルを追加したり削除したりすると、サービス端末の受信ディレクトリはリアルタイムで更新されます。
この例では、サーバiptablesおよびselinuxはいずれもオフ状態である。
ノート:この方法でファイルを同期する場合、同期ファイルの数が多くなると、同期中に一部のファイルが失われる可能性があります。関連資料を調べて、次のような解決策が見つかった。この例では、xinetd方式で起動したrsyncサービスを使用していますので、xinetdのプロファイルでは、いくつかのパラメータを以下のように修正します。# vim /etc/xinetd.confいくつかのパラメータを変更します。

 cps       = 500 30
 instances    = UNLIMITED
 per_source   = UNLIMITED
締め括りをつける
以上は小编が皆さんに绍介したSersync+Rsyncがトリガーファイルの同期を実现しました。皆さんに何かご迷惑があったら、メッセージをください。小编はすぐに返事します。ここでも私たちのサイトを応援してくれてありがとうございます。