Linuxでのマルチマシンのリアルタイム同期の構成
7901 ワード
お金がない時、この方案でウェブサイトの内容の負荷の均衡、異郷のバックアップをして、経済的で便利です(ウェブサイトのファイルだけに対してリアルタイムの同期をして、データベースの場合、mysqlのマルチプライマリアーキテクチャを考慮します)
一、機械配置及び機械室IP
A機、杭州に位置し、IP:15.33.3.25.25 CentOS 6.4_x64
B機、米に位置し、IP:192.8.172.133 CentOS 6.4_x64
二、基礎ソフト
データファイルのリアルタイム同期を実現するには、次の2つのソフトウェアが必要です.
1.rsyncは本機のフォルダmirrorを別の機械に実現することができ、多種のモードをサポートする.詳細はman rsync
2.inotify-toolは、Linuxのフォルダの下で、追加、削除、アクセス、権限の変更など、すべての変更をリスニングできます.
三、実現構想
inotify-toolを使用して、指定したフォルダの下のファイルの変化を傍受し、変化したファイルのリストを取得し、rsyncを利用して、変動したファイルをリアルタイムで指定したターゲットマシンにプッシュします.
四、実際の操作
以上の原理を理解したら、以下の手順で操作します.
step1.2台の機械にrsyncをそれぞれ取り付ける
step2. 杭州ノードサーバーIP 115を配置する.33.2.25:rsyncd.conf
step 3. 杭州ノードサーバーはrsyncがdaemon形式で起動する時必要なパスワードファイルを創立します
pass_の作成server.conf、内容は以下の通りです.
step4. 杭州ノードrsyncサービスを開始
サービスの開始:
Step 4.1米国のサーバーはデータの杭州への手動プッシュを実現する
ただし、pass_に手動で入力する必要があります.server.confに設定されているパスワードabc 23は、この問題を解決するために、アメリカの機械にpassを構築しています.confファイルは、rsyncコマンドを実行するときに、パスワードをファイルから読み出します.
次のコマンドを実行します.パスワードを入力する必要はありません.
准备はすでに大半完了しているが、米国の机械では、/var/www/ディレクトリの下にファイルを追加した后、上记のコマンドを実行し、杭州のサーバー上の/var/wwwフォルダの下で同期されているかどうかを见る.
Step 5米国ノードにinotify-toolをインストールし、ファイルの変更があった場合に自発的にプッシュする
Step 5.2傍受開始
Step 6. 変更を杭州ノードにリアルタイムで同期するかどうかをテストします.
cd/var/www
touch a.txt
杭州ノードIPまで、/var/wwwの下で、ファイルが同期したことを確認して、もし問題が発生したら、nohupを見ることができます.logは、エラー情報に基づいて、データを並べ替えます.
Step 7. Step 1-4アメリカのマシンで同様にして、その中のIPを杭州のIPに修正することに注意する
Step 8. Step 5-6杭州の機械で同様にして、その中のIPをアメリカのIPに修正することに注意する
Step9. 2つのマシンがファイルの修正、削除のリアルタイム同期を実現
発生する可能性のある問題:
rsync: failed to connect to X.X.X.X: No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(107) [sender=2.6.8]
2台のホストは互いにpingすることができて、情報を間違えてホストにルーティングしていないと言います!
ネットで検索して、質問の答えを見つけました.以下のようにします.
故障原因:相手が電源を入れていない、ファイアウォールが遮断されている、通過したネットワークにファイアウォールが遮断されている、いずれも可能である.
解決方法:ファイアウォールを閉じるか、ファイアウォールのtcp udpの873ポートを開いてrsyncを通過させます.
実施形態:
1、ファイアウォールの起動と停止
# service iptables start/stop
2、rsyncがファイアウォールを通過することを許可する
再起動してルールをクリアしないように、ルールプロファイルにルールを直接追加しました(/etc/sysconfig/iptables)、以下のようにします.
-A INPUT -p tcp -s X.X.X.X --dport 873 -j ACCEPT
注意、このルールはREJECTルールの前に追加します.
追加後、iptables(#service iptables restart)を再起動します.
参考資料:
http://250688049.blog.51cto.com/643101/1019663
http://blog.csdn.net/songxixi/article/details/8787923
一、機械配置及び機械室IP
A機、杭州に位置し、IP:15.33.3.25.25 CentOS 6.4_x64
B機、米に位置し、IP:192.8.172.133 CentOS 6.4_x64
二、基礎ソフト
データファイルのリアルタイム同期を実現するには、次の2つのソフトウェアが必要です.
1.rsyncは本機のフォルダmirrorを別の機械に実現することができ、多種のモードをサポートする.詳細はman rsync
2.inotify-toolは、Linuxのフォルダの下で、追加、削除、アクセス、権限の変更など、すべての変更をリスニングできます.
三、実現構想
inotify-toolを使用して、指定したフォルダの下のファイルの変化を傍受し、変化したファイルのリストを取得し、rsyncを利用して、変動したファイルをリアルタイムで指定したターゲットマシンにプッシュします.
四、実際の操作
以上の原理を理解したら、以下の手順で操作します.
step1.2台の機械にrsyncをそれぞれ取り付ける
yum install rsync -y # rsync
step2. 杭州ノードサーバーIP 115を配置する.33.2.25:rsyncd.conf
mkdir /etc/rsyncd # rsync
touch /etc/rsyncd/rsyncd.conf # rsync.conf
ln -s /etc/rsyncd/rsync.conf /etc/rsyncd.conf # rsyncd.conf etc
vim /etc/rsyncd/rsyncd.conf # rsyncd.conf :
uid = apache # apache
gid = apache # apache
read only = false
transfer logging = true
max connections = 10
slp refresh = 300
hosts allow = 192.8.172.133 # : IP , , IP IP
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
log format = %h %o %f %l %b
[web] # , web module
path = /var/www/html #
comment = rsynctest
read only = false # false, true,
list = false
auth users = hanxianlong # daemon rsync ,
secrets file = /etc/rsyncd/pass_server.conf # , , :username:password
exclude from = /etc/rsyncd/exclude.txt # , ,
step 3. 杭州ノードサーバーはrsyncがdaemon形式で起動する時必要なパスワードファイルを創立します
pass_の作成server.conf、内容は以下の通りです.
vim /etc/rsyncd/pass_server.conf # :
hanxianlong:abc123
chmod 600 /etc/rsyncd/pass_server.conf # 600,
step4. 杭州ノードrsyncサービスを開始
サービスの開始:
rsync --daemon --config=/etc/rsyncd/rsyncd.conf
Step 4.1米国のサーバーはデータの杭州への手動プッシュを実現する
rsync -avzP /var/www/ [email protected]::web
ただし、pass_に手動で入力する必要があります.server.confに設定されているパスワードabc 23は、この問題を解決するために、アメリカの機械にpassを構築しています.confファイルは、rsyncコマンドを実行するときに、パスワードをファイルから読み出します.
vim /etc/rsyncd/pass.conf # , abc123
abc123
次のコマンドを実行します.パスワードを入力する必要はありません.
rsync -avzP --password-file=/etc/rsyncd/pass.conf /var/www/ [email protected]::web
准备はすでに大半完了しているが、米国の机械では、/var/www/ディレクトリの下にファイルを追加した后、上记のコマンドを実行し、杭州のサーバー上の/var/wwwフォルダの下で同期されているかどうかを见る.
Step 5米国ノードにinotify-toolをインストールし、ファイルの変更があった場合に自発的にプッシュする
wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
cp inotify-tools-3.14.tar.gz /usr/local/src/
cd /usr/local/src
tar -xzvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure --prefix=/usr/local/inotify/ --libdir=/usr/lib64
make && make install
以上安装inotify-tool完成,接下来要做的是实现inotity对指定文件夹的监听:
step 5.1 实现inotify对指定文件夹的监听,使得在有数据发生变化时同步到杭州节点
在任意目录下,创建inotify.sh文件,并修改其权限为a+x( chmod a+x inotify.sh)
#!/bin/sh
src=/var/www/
des=web
ip=115.33.25.25 # IP
/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib ${src} | while read file
do
rsync -avz --delete --progress --password-file=/etc/rsyncd/pass.conf ${src} hanxianlong@${ip}::${des} &&
echo "${src} was rsynced"
# echo "---------------------------------------------------------------------------"
done
~
Step 5.2傍受開始
nohup inotify.sh &
Step 6. 変更を杭州ノードにリアルタイムで同期するかどうかをテストします.
cd/var/www
touch a.txt
杭州ノードIPまで、/var/wwwの下で、ファイルが同期したことを確認して、もし問題が発生したら、nohupを見ることができます.logは、エラー情報に基づいて、データを並べ替えます.
Step 7. Step 1-4アメリカのマシンで同様にして、その中のIPを杭州のIPに修正することに注意する
Step 8. Step 5-6杭州の機械で同様にして、その中のIPをアメリカのIPに修正することに注意する
Step9. 2つのマシンがファイルの修正、削除のリアルタイム同期を実現
発生する可能性のある問題:
rsync: failed to connect to X.X.X.X: No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(107) [sender=2.6.8]
2台のホストは互いにpingすることができて、情報を間違えてホストにルーティングしていないと言います!
ネットで検索して、質問の答えを見つけました.以下のようにします.
故障原因:相手が電源を入れていない、ファイアウォールが遮断されている、通過したネットワークにファイアウォールが遮断されている、いずれも可能である.
解決方法:ファイアウォールを閉じるか、ファイアウォールのtcp udpの873ポートを開いてrsyncを通過させます.
実施形態:
1、ファイアウォールの起動と停止
# service iptables start/stop
2、rsyncがファイアウォールを通過することを許可する
再起動してルールをクリアしないように、ルールプロファイルにルールを直接追加しました(/etc/sysconfig/iptables)、以下のようにします.
-A INPUT -p tcp -s X.X.X.X --dport 873 -j ACCEPT
注意、このルールはREJECTルールの前に追加します.
追加後、iptables(#service iptables restart)を再起動します.
参考資料:
http://250688049.blog.51cto.com/643101/1019663
http://blog.csdn.net/songxixi/article/details/8787923