数百台のマシンで自発的な分散コンピューティングを迅速に実行する方法

IT部門で働いている間、私はさまざまな組織上の理由で退屈しているコンピューターを常に観察しています。 CPUでのビットコインのマイニングの黄金時代は過ぎ去りました。新しい便利なビジネスを探して、私は自発的な分散コンピューティング、特にWorld Community Gridに行きました。 がんの治療法を最初に探すのは、仮想化クラスター上のコールドリザーブと低優先度の仮想マシンの不可解なサーバーでした。 ワークステーションではより困難で、インストール、構成、BOINCの削除のたびに、長期間にわたって絶えず行ったり来たりするため、技術的に高度ではありません。



有線BOINCを使用してライブ配信を構築し、ネットワーク経由で配信することが決定されました。 コンピューターの電源を入れ、F12を押し、目的のアイテムを選択しました-そしてすでに人類に利益をもたらします!



プラットフォームはDebianによって選択されました。a)長い間馴染みがあり、b)このトピックに関するすばらしいマニュアルがあります。 それにも関わらず、レーキはなくてはならず、この場合、ほとんどすべての新しいレーキは、イメージのかなり長い再組み立てを意味します。 この投稿が管理者の時間を節約すると同時に、WCGのようなすばらしいプロジェクトの存在を思い出すことを願っています。



すべてが非常に閉鎖された環境で行われ、セキュリティにほとんど注意を払う必要がなかったことに注意してください。 おそらく、あなたの場合、セキュリティには追加の作業が必要になります。



準備する



システムは次のもので構成されています。

  1. ネットワークブートサーバー。
  2. NFSサーバー
  3. 組立ステーション
私は2と3を持っています-1台の車。



1.ネットワークブートサーバー。 すべての準備が整ったので、構成済みのTFTPとDHCPは、プロジェクトからシンクライアント用に残されました。 そうでない場合は、新しいものを選ぶのは簡単です。 一言で言えば、tftpd-hpaをインストールして実行し、DHCPでパラメーター66と67を指定します。ネットワークに誰も入れないでください(私の場合、これらは士官候補生です)。これは危険です。 BIOSに加えて、TFTPサーバーのブートメニューの一部をパスワードで保護できます。



2. NFSサーバー。 まず、BOINCはそのプロセスでデータを保存できるはずです。 ローカルハードドライブに触れることができないことを前提としているため、NFSが/srv/boinc-nfs



などのディレクトリに書き込むことを許可します。 ここで、各コンピューターは、MACアドレスと一致する名前のサブディレクトリを作成します。 第二に、 /srv/debian-live



ディレクトリは、ネットワークブートのルートFSになります。 だから:

 mkdir /srv/debian-live mkdir /srv/boinc-nfs chown nobody:nogroup /srv/boinc-nfs chmod 755 /srv/boinc-nfs
      
      





/etc/exports



追加します。

 /srv/boinc-nfs *(rw,sync,no_root_squash,no_subtree_check) /srv/debian-live *(ro,async,no_root_squash,no_subtree_check)
      
      





その後、サービスを再起動します(何らかの理由で、推奨されるexportfs -rv



結果が得られませんでした)。

 /etc/init.d/nfs-kernel-server restart
      
      





3.アセンブリステーション。 通常のDebian Wheezyを備えた単なる仮想マシンです。 live-build



パッケージがインストールされ、メインジョブが実行されます。 ここにインターネットがあるはずです。



組立工程



集合ステーションに向かいます。

 mkdir /srv/live-default && cd /srv/live-default
      
      





NFSサーバーのアドレスを指定して、ディストリビューションの基本構成を作成します。

 lb config -b netboot --net-root-path "/srv/debian-live" --net-root-server "192.168.15.20"
      
      





ディレクトリの特定のツリーが形成され、その中に異なるコンテンツがあります。アセンブリをカスタマイズできます。 以下を追加します。

1. config/package-lists/boinc.list



アセンブリに必要なパッケージのリスト。 書き込みます:

 boinc-client nfs-common
      
      





2. config/includes.chroot/etc/init.d/boinc-preps



-NFSをマウントし、BOINCを構成し、ホスト名を変更するinitスクリプト( おそらく同じホスト名がWCGによるコンピューターの識別を妨げ、多くのタスクが実行されます)切り離された状態)。 このスクリプトでは、NFSのアドレスと、パスワードなしの管理が許可されるホストのアドレスを挿入する必要があります。 スクリプトの内容:

 #!/bin/bash ### BEGIN INIT INFO # Provides: boinc-preps # Required-Start: nfs-common # Required-Stop: # Should-Start: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Various stuff for BOINC # Description: Various stuff for BOINC ### END INIT INFO PATH=/sbin:/usr/sbin:/bin:/usr/bin . /lib/init/vars.sh do_start () { MYMAC=`ifconfig eth0 | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}' | sed s/://g` ancien=`hostname` nouveau=DYNWCG-$MYMAC mkdir -p /mnt/boinc-nfs mount 192.168.15.20:/srv/boinc-nfs /mnt/boinc-nfs && mkdir -p /mnt/boinc-nfs/$MYMAC service boinc stop sed -i "s/^BOINC_DIR=.*/BOINC_DIR=\/mnt\/boinc-nfs\/$MYMAC/;s/^BOINC_USER=.*/BOINC_USER=\"root\"/" /etc/default/boinc-client echo "192.168.10.60" > /mnt/boinc-nfs/$MYMAC/remote_hosts.cfg echo "192.168.10.61" >> /mnt/boinc-nfs/$MYMAC/remote_hosts.cfg echo "" >> /mnt/boinc-nfs/$MYMAC/gui_rpc_auth.cfg for file in \ /etc/hostname \ /etc/hosts #    #/etc/ssh/ssh_host_rsa_key.pub \ #/etc/ssh/ssh_host_dsa_key.pub \ #   SSH do [ -f $file ] && sed -i.old -e "s:$ancien:$nouveau:g" $file done invoke-rc.d hostname.sh start invoke-rc.d networking force-reload service boinc start } case "$1" in start|"") do_start ;; restart|reload|force-reload|status) echo "Error: argument '$1' not supported" >&2 exit 3 ;; stop) # NOP exit 3 ;; *) echo "Usage: ... [start|stop]" >&2 exit 3 ;; esac :
      
      





3. config/hooks/boinc-preps-init.chroot



アセンブリ中に実行され、前のアイテムからboinc-preps



をオートロードに追加する1つのコマンドからのスクリプト:

 #!/bin/sh update-rc.d boinc-preps defaults
      
      





必要な設定を追加した後、アセンブリ自体を開始します。

 lb build
      
      





この値は、結果のbinary.netboot.tar



ファイルです。 /srv



ます。

 cd /srv && tar -xvf live-default/binary.netboot.tar
      
      





/srv/debian-live



(ネットワークブートのルートFS)および/srv/tftpboot



(TFTPサーバーのファイル)に解凍されます。 私の場合、アセンブリステーションとNFSサーバーは1台のコンピューターであるため、 /srv/debian-live



既にその場所にあります。

tftpboot



の内容は既製のブートメニューであり、TFTPサーバーに配置する必要があります。 私は自分のメニューで動作するTFTPサーバーを持っているので、その動作を確認しませんでした。ここからはデータの一部だけが必要でした。 最初に、すべてのファイルをtftpboot/live/



からTFTPサーバーにimages/debian-live/



(TFTPサーバーのルートディレクトリに相対的)でコピーしました。 次に、 tftpboot/live.cfg



からテキストを借用して、新しいメニュー項目を追加し、この状態に変更します(ここでは、NFSサーバーのアドレスも指定する必要があります)。

 label live-686-pae menu label BOINC-live (686-pae) linux images/debian-live/vmlinuz1 initrd images/debian-live/initrd1.img append boot=live config nosplash root=/dev/nfs nfsroot=192.168.15.20:/srv/debian-live
      
      





今、すべてがその場所にあります。



アセンブリ後にルートFSの内容を確認する場合は、ルートFSで起動する必要はありません;単にループデバイスとしてマウントできます。

 mount -o loop,ro /srv/debian-live/live/filesystem.squashfs /mnt/squash/
      
      





新しいパラメーターでディストリビューションを再構築する必要がある場合は、その前にlb clean --binary



またはlb clean



を実行できます。



使用する



  1. コンピューターの電源を入れ、ネットワーク経由でブートを選択します(通常はF12キーを押してください)。
  2. ブートメニューに応じて、「BOINC-live」項目を選択するか、タイムアウトによってロードされるまで単に待機します。
  3. 表示されるコマンドラインで(すべてが正常に実行された場合)、 sudo ifconfig



    (パスワードを入力する必要はありません)を書き込み、IPアドレスを書き込みます。
  4. 制御コンピューター( config/includes.chroot/etc/init.d/boinc-preps



    指定したコンピューターの1つ)でboinc-managerを実行し、「詳細-コンピューターの変更」をクリックします(このボタンは「フルビュー」のみにあります) ) この場合、BOINCはユーザーにパスワードを要求しないでください。
  5. 接続後、ウィザードが表示されます。このウィザードでは、プロジェクト(私の場合はWorld Community Grid)を選択し、ログイン/パスワードを入力する必要があります。


すべて数分で、「実行準備完了」および「動作」状態の新しいタスクが作成されます。

この手順は、各コンピューター(より正確には、各MACアドレス)に対して1回だけ実行する必要があります。 別の場所で長い操作を行った後に戻ってきても、コンピューターはNFSサーバー上のMACアドレスでデータを見つけ、電源を入れた直後に動作を続けます(一部のタスクのみが既に期限切れになりますが、これは些細なことで、新しいタスクを受け取ります)。



まとめ



未解決のままであるもの:




All Articles