この場合、クラスターアーキテクチャやデバッグの微妙な違いについては検討しませんが、クラスターを管理し、構成とデバッグを高速化する非常に便利な方法について説明します。
同意して、同じロールを持つサーバー上で常に同じように見えるファイルのセット(たとえば、configs)があると便利ですか? カットの下で、最短時間でこれを達成する方法を説明します。
説明したクラスターには、次のホスト名で内部ネットワークを介して互いに通信する7つの専用サーバーがあります。
Load Balancers lb1 lb2 
      
        
        
        
      
     Application Servers app1 app2 
      
        
        
        
      
     Database Servers db1 db2 
      
        
        
        
      
     Backup server bckp1
      
      そして、今日の物語の主人公はcsync2です。これは多くのnixリポジトリで利用可能なかなり古いプログラムであり、 tarballまたはgitリポジトリからダウンロードすることもできます 。
したがって、csync2のインストール、構成、および利点を得るための段階的なガイドです。
設置
クラスターのすべてのノードでインストールを実行する必要があります。
debian \ ubuntuリポジトリから
apt-get install csync2 -y
      
      ソースから
インストールする前に、システムにlibrsyncが存在することを確認してください
それ以外の場合は、 librsync-0.9.7.tar.gzをダウンロードする必要があります。
そしてそれをインストールする
tar -xf librsync-0.9.7.tar.gz && cd librsync-0.9.7 
      
        
        
        
      
     ./configure && make 
      
        
        
        
      
     make install
      
      Csync2は、ソースからコンパイルできるlibsqliteも期待しています。
 wget www.sqlite.org/sqlite-autoconf-3070603.tar.gz && tar -xf sqlite-autoconf-3070603.tar.gz && cd sqlite-autoconf-3070603 
      
        
        
        
      
     ./configure && make 
      
        
        
        
      
     make install
      
      また、csync2を構成(./configure)するときに、ライブラリでtarballへのパスを指定することにより、かなり珍しい方法を使用できます。
./configure --with-libsqlite-source=/path/to/libsqlite.tar.gz
      
      他の要件はありませんでしたが、年齢により、プログラムにはほとんどのOS用のパッケージがプリコンパイルされています( RedHat RPM 、apt-get \ aptitude install csync2、 FreeBSD ports )
csync2自体をコンパイルします
 cd /usr/local/src && wget oss.linbit.com/csync2/csync2-1.34.tar.gz 
      
        
        
        
      
     tar -xf csync2-1.34.tar.gz && cd csync2-1.34 
      
        
        
        
      
     ./configure && make 
      
        
        
        
      
     make install 
      
        
        
        
      
    
      
      Ubuntu 10.04 LTSですべての操作を実行しました。csync2は1行でインストールされています。
OSで何か問題が発生した場合は、コメントを書いてください。
初期設定
そのため、すべてのノードにcsync2をインストールしました。それらを接続し、互いにファイルを交換する必要があります。
csync2は暗号化されたSSL接続を介してファイルを交換するため、サーバーが相互に「信頼」できるようにする単一のcsync2証明書を作成する必要があります。
指示に従って、ソースフォルダーでコマンドを実行できます。
make cert
      
      または(私がしたように)、証明書を手動で生成します。
openssl genrsa -out /etc/csync2_ssl_key.pem 1024 
      
        
        
        
      
     openssl req -new -key /etc/csync2_ssl_key.pem -out /etc/csync2_ssl_cert.csr 
      
        
        
        
      
     openssl x509 -req -days 600 -in /etc/csync2_ssl_cert.csr -signkey /etc/csync2_ssl_key.pem -out /etc/csync2_ssl_cert.pem
      
      次に、csync2キー生成を開始する必要があります。
csync2 -k /etc/csync2.cluster.key
      
      このコマンドの完了にはかなり時間がかかり、その後/etc/csync2.cluster.keyファイルが表示されます。
次に、クラスターのすべてのノードにコピーして、単一の同期クラウドに表示されるようにする必要があります。 たとえば、データベースサーバーがアプリケーションサーバーと通信できないように複数のキーを作成できますが、銀行のクラスターを構築していない場合、これはまったく必要ありません。
最初の同期
最も重要なプログラムファイルは/etc/csync2.cnfです
次の原則に従って動作します。
論理サーバーグループを定義し、それらに共通するものを示していますか?
たとえば、IPではなくホスト名ごとに内部アドレス指定を使用し、すべてのマシン上のファイル/ etc / hostsを同じにする必要があります。新しいノードを追加するときは、一度変更するだけで、すべての変更が漏れます。他のクラスターノードで、たとえばapp3が誰であるかを知っていました 。
LoadBalancersにはnginxがインストールされており、異なるマシンでも同じ設定が必要です。
したがって、構成ファイルで、サーバーを論理グループにマージします。
#すべてのサーバーが設定の基本セットを同期します
group all { 
      
        
        
        
      
     #    IP,       
      
        
        
        
      
     host app1 app2; 
      
        
        
        
      
     host db1 db2; 
      
        
        
        
      
     host lb1 lb2; 
      
        
        
        
      
     host bckp1; 
      
        
        
        
      
     
      
        
        
        
      
     #   
      
        
        
        
      
     key /etc/csync2.cluster.key; 
      
        
        
        
      
     
      
        
        
        
      
     #   \   ? 
      
        
        
        
      
     include /etc/hosts; #  hosts 
      
        
        
        
      
     include /etc/csync2.cfg; # !   csync2    ! ;) 
      
        
        
        
      
     
      
        
        
        
      
     auto younger;#   ?    -    
      
        
        
        
      
     } 
      
        
        
        
      
     
      
        
        
        
      
     #    LoadBalancer'       nginx 
      
        
        
        
      
     group lb { 
      
        
        
        
      
     host lb1 lb2; 
      
        
        
        
      
     
      
        
        
        
      
     key /etc/csync2.cluster.key; 
      
        
        
        
      
     
      
        
        
        
      
     include /etc/nginx/*; 
      
        
        
        
      
     auto younger; 
      
        
        
        
      
     }
      
      次に、同期可能なすべてのものを同期するように指示してcsync2を実行します。
csync2 -x
      
      初期認証の後、すべてのホストが同期され、指定したファイルはすべてのノードで同じになります。
考えられる問題
何か問題が発生した場合は、実行します
csync2 -xv 
      
        
        
        
      
     csync2 -xvv
      
      など
私はcsync2が他のマシンの/ etc /ホストへの書き込みアクセス権がないことを誓いましたが、csync2が最初に実行された後、この問題は自動的に解決されました。
csync2がSSLを誓う場合-ファイル/etc/csync2.cluster.keyがすべてのホストにコピーされているか、構成で正しく指定されているかを確認します。
他に問題はありませんでした。何か他に問題があれば、書きましょう。
グッズ
必要なすべての設定を同期するのは素晴らしいことです。mysql、php、nginxなどからcsync2の設定を追加します。 構成をcsync2からcsync2自体に入れると非常に便利であることがわかりました(ほとんど再帰)。
ただし、ファイルを同期するだけでは不十分です。
nginxファイルを変更したら、再起動する必要があります! そして、これを百台のマシンで行う必要がある場合はどうでしょうか?
nginxがインストールされているのと同じ役割を持つサーバーのグループで、次を追加します。
group lb { 
      
        
        
        
      
     host lb1; 
      
        
        
        
      
     host lb2; 
      
        
        
        
      
     key /etc/csync2.cluster.key; 
      
        
        
        
      
     
      
        
        
        
      
     include /etc/nginx; #       
      
        
        
        
      
     action { 
      
        
        
        
      
     pattern /etc/nginx/*; #    ,   ? 
      
        
        
        
      
     exec "/etc/init.d/nginx reload "; #    ? 
      
        
        
        
      
     logfile "/var/log/csync2.actions.log"; #   ? 
      
        
        
        
      
     do-local; #    ,      ,     ,    ,    
      
        
        
        
      
     } 
      
        
        
        
      
     auto younger; 
      
        
        
        
      
     }
      
      素晴らしいアクションアイテムにより、特定のファイルの変更後に任意のbashコマンドを実行できます。示された例では、nginxをリロードします。
reloadではなくrestartコマンドが実行されることに注意してください。 神が禁じている場合、nginx configにコンマを入れずに100台のマシンでクラッシュすると、エラーをすばやく修正し、100台のマシンで回復します。 原則として、csync2の設定を変更することは可能ですが、貴重なダウンタイムがかかります。
おわりに
そのため、1台のサーバーしか持っていないかのように、私たちが慣れ親しんでいる構成を何のトリックもなく編集し、変更を他のN台のサーバーに転送する非常に安全な機会を得ました。
csync2にはホストサーバーがないため、任意のノードに変更を加えることができ、csync2 -xを実行した後、変更は残りに波及します。
私はcsync2を介して設定を同期するだけでなく、実際にはプロジェクトファイル自体も同期します。その一部はユーザーによってダウンロードされるため、csync2をkroonsに配置しました(これを行ったノードの数を推測しますか?
ローション:
先日、 authorized_keysファイルをcsync2に入れ、今度は自分のマシンからパスワードを入力せずに任意のノードに移動します。 これは、すべてのノードのパスワードが複雑で異なる場合に便利です。 ホストファイルをコンピューターにコピーし、内部名でノードに移動することもできます。
私のマシンのように、7個のクラスターをインストール、構成、およびデバッグすると、時間を大幅に節約できます。
デバイスについて少し
Csync2は非常に簡単に機能します。 同期するすべてのファイルのリストは、ローカルのsqliteデータベースに保存され、タイムスタンプに対してチェックされます。 数百ギガバイトのファイルをそこに保存することはできませんが、彼は数万のファイルに散らばっている私の5-6 Gbを非常にうまく分散しています。 さらにファイルがある場合は、csync2を頻繁に使用しないでください。大量のコピーが開始され、サーバーの速度が低下し始めます。 csync2データベースはクリーンアップでき、通常はそれを使用してあらゆる種類の操作を実行できます。 プログラムのドキュメント(すぐ下のリンク)には、使用するデータベースの構造も示されているため、創造性の範囲は素晴らしいです。
アナログ
ノードがリモート設定をロードできるシステムがあります。 私はそれらが好きではありませんでしたが、クラスター内の車を毎日交換する場合は、それらを見てください: シェフ 、 パペット 。
==============================
便利なリンク:
Csync2ドキュメント( pdf )
公式のcsync2 Webサイト: http ://oss.linbit.com/csync2/