ごみを良くするには

私は䜕に぀いお話しおいるのですか



さたざたなタスクがありたす...単玔なタスクず耇雑なタスクがありたすが、1週間以䞊かかり、解決するのに十分な数の神経现胞が必芁なタスクがありたす。 これらのタスクの1぀は、倧量の匱い鉄の䞊に深刻な䜕かを展開するこずず考えるこずができたす。 すなわち...



以䞋、LTSPのわずかに具䜓的で最適化された構成ず、それに基づいたサヌバヌクラスタヌの䜜成に぀いお説明したす。



䞀郚の組織は、タヌミナルサヌバヌず倚数のタヌミナルクラむアントを展開するこずを決定したした。 予備的な蚈算、テスト、そしお明らかに脳なしで、誰かがいく぀かのタむプのHP端末を賌入したした。 䞻に、RAMの量ず内蔵フラッシュドラむブのサむズが異なりたした。 RAMサむズは128から512 mbの範囲で、ドラむブのサむズは64から256の範囲でした。完党を期すために、x86 Via / AMDプロセッサ〜800 MHz、および同じViaたたはSiSからのビデオに蚀及する䟡倀がありたす。 動物園は短いです。



さお、すでにここにあるものを買っお買った。 サヌバヌを展開し、クラむアントを接続し始めたした...そしお、70番台を接続した埌、かなり匷力なサヌバヌが単玔にサグし始めたした。 サヌバヌずずもに、クラむアントはスロヌダりンし始めたしたが、それ以倖の堎合はどうでしょうか ネットワヌクリ゜ヌスもサヌバヌ自䜓のリ゜ヌスも十分ではありたせんでした。 どうする 結局のずころ、玄150の未接続の端末がただ存圚しおいたす。 Ai-ai-ayは、ナヌザヌ、管理者、およびその他の人を同時に蚀った。 私たちは半幎間めお、埗点したした。 ちなみに、はい、タヌミナルはもずもずWindows CEの䞋にあったため、RDPを介しおタヌミナルサヌバヌずやり取りしたした。



そしおさらに6ヶ月埌、圌らは突然思い出したした...そしお圌らはそれを倖郚委蚗したした。 「しかし、パフォヌマンスの問題を解決すれば、誰もが倧䞈倫です」ずいう別れの蚀葉で。 実際には、端末から珟圚必芁なもの。 タヌミナルの起動時に、ナヌザヌが「䜕があっおも」サヌバヌにログむンできる手曞きの゜フトりェアを起動し、認蚌が成功した堎合はブラりザヌを起動する必芁がありたした。 デロフ ええ...そしお、これはすべお死んだタヌミナルでも動䜜するはずです。 ぀たり、バヌ-RAMの128 MB、ドラむブ䞊の64 MB。 プロセッサに぀いお心配する必芁はありたせん。なんずか凊理できたす...



䜕回か詊すか、組み蟌みLinuxが圹立ちたす



圓然、クラむアントの数を考慮しお、端末゜リュヌションを䜿甚せず、各クラむアントを自絊自足にするこずが決定されたした。 このため、Buildrootは元々zayuzanでした。 カヌネル、最小限のシステムおよびネットワヌクナヌティリティのセット、Qt Embedded、独自の゜フトりェアの䞀郚を含む小さな配垃キットが組み立おられたした。...はい、それですべおです。 箄40 mbのサむズが出たした。぀たり、最も匱い鉄片に完党に収たりたす。 真実はすべおの端末で機胜したせんでした。 Viaで組み立おられたコンプレックスが半分のキックで動䜜した堎合、AMDを搭茉した端末ではたったく起動したせんでした。 そのタむプのハヌドりェアにはdofigの堎所があったため、Debianを個別にアセンブルする必芁がありたした。



プロゞェクトは正垞に完了し、顧客に届けられたした。 もちろん、すべおが機胜し、完璧ではなく、プラグがありたした。ブラりザのタブの数を5番目に制限しなければなりたせんでした。そのため、端末のリ゜ヌスに特に䟝存したせんでした。 チュチュルカにチュチュルクを入れおください 誰もが幞せでした、それはただ...



しかし、楜しい蟲堎はどうですか



はいはい...ナビキタスFlashプレヌダヌが必芁です。 さお、ヒヌプぞ-ブラりザ甚のJavaプラグむン。 問題は同じたたです-ファヌムりェアに十分なスペヌスがなく、すべおのRAMがWebKitによっおすでに消費されおいたす。 さらに、十分なスペヌスがあったずしおも、Qt Embeddedはブラりザヌプラグむンをサポヌトしたせん。Linuxでこれらのプラグむンが機胜するにはX.Orgが必芁だからです。 たあ、はい、同じXEmbedWindow、たたはそれが䜕であれ...短いゎミ。アプリケヌションに倖郚りィンドりを埋め蟌むこずができたす。 そしお、私が蚀ったように、たずえ十分なスペヌスがあったずしおも、128 MBのデッドタヌミナルはX + Qt + Webキット+ Flashを搭茉した実行䞭のブラりザヌを匕っ匵るこずはありたせんでした。 悲しい 私たちはカブを傷぀けたす...私たちは長い間傷぀けたす...最埌に私たちは䜕か他のものを詊したす。 オプションずしお次のスキヌムを䜿甚したす。OSは端末から起動されたすが、ログむンするず、セッションは匕き続きNXクラむアントを介しお端末サヌバヌから起動されたす。 理論的には、これによりサヌバヌの負荷が少なくずもわずかに軜枛されたす。 わさびハゲ...



新しいBuildrootを構築しおいたす。今回はQtをスロヌし、X.OrgずNXクラむアントを詰め蟌みたす。 サヌバヌには、テストのために公匏のNoMachine NXサヌバヌを配眮したした。 誰かが知らない堎合、これはここにありたす 。 起動し、英語でメガログむンダむアログを衚瀺し、理解し、カスタムセッションに接続したす...出来䞊がり、サヌバヌからブラりザを起動したした。 YouTubeには5぀のタブが甚意されおいたす。ビデオを開始しおください。 動䜜したす。 テストサヌバヌの負荷を確認したす...「Lyat」ずいう蚀葉は口を倱いたいだけです。1぀のクラむアントブラりザヌが100〜120 MBのRAMを削陀しおも、最適化の目暙に近づくこずはできたせん。これにネットワヌク負荷を加えたす。楜しい...



少なくずも15〜30台のクラむアントがいれば、我慢できたす。しかし、300を超えるこずはありたせん。しかし、再び... NXクラむアントの自動入力の蚭定が芋぀からず、起動時に枡される必芁なパラメヌタも芋぀かりたせんでした。 -この蚭定で開始するように、サヌバヌ䞊でそのような゜フトりェアを芋せおください。䞀方、Basurmの顔でカルスをせずに黙っおください



ハハ そしお、あなたは成功したせんでしたか



さお、あなたはどうでしょう...そしお、このテキストはすべおありたせん=䞀般的に、いく぀かのオプションを探したすssh -Xのような同じビルダヌですべおを実行するなど、私はこれがすべお正しくないずあなたは行動する必芁があるずいう結論に達したしたそうでなければ。



この時点で、私の怜玢で、 LTSP -Linux termianl Server Projectに出䌚いたした。 原則ずしお、私は最初にそれに぀いお読みたしたが、「結局、タヌミナルサヌバヌがありたす。始めたずころに戻りたしょう」ず思い、りィキペディアのペヌゞを懐疑的に閉じたした。 ただし、䞀郚は他のオプションがないため、たた䞀郚はLTSPのUbuntuヘルプセクションで、タヌミナル自䜓でロヌカルアプリケヌションを実行する機胜ずしお説明されおいるため、詊しおみるこずにしたした...



ダストゞョヌむット



だから。 初期条件ずしお、i386コンピュヌタヌたたは仮想マシン2枚のネットワヌクカヌドを搭茉ずUbuntu Server 11.04配垃キットがあるずしたす。 さらに、ネットワヌク経由で起動できるいく぀かの端末。 テストのために...



もちろん、たず、Ubuntuサヌバヌを䜿甚したす。 その盎埌に、远加のリポゞトリを砎棄し、必芁な゜フトりェアをむンストヌルしたす。



echo "deb http://ftp.ubuntu.com/ubuntu/ natty main restricted universe multiverse" > /etc/apt/sources.list apt-get update apt-get install bash-completion openbox xserver-xorg xorg xbase-clients xterm ltsp-server-standalone arora gettext -y
      
      





次に、䞡方のネットワヌクむンタヌフェむスを構成する必芁がありたす。 そう。 そのため、1぀は共有ネットワヌクを、もう1぀は独自のサブネットを確認したす。 ファむル/ etc / network / interfacesを線集したす。

 auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.1.170 netmask 255.255.255.0 gateway 192.168.1.1 auto eth1 iface eth1 inet static address 192.168.22.1 netmask 255.255.255.0
      
      





次に、クラむアントを収集したす。

 ltsp-build-client
      
      





最埌になりたしたが、DHCPサヌバヌ、ファむル/etc/ltsp/dhcpd.confをセットアップしたす。

  #authoritative; class "ltsp-clients" { match if substring (hardware,1,8) = "00:14:85"; } subnet 192.168.22.0 netmask 255.255.255.0 { #range 192.168.22.20 192.168.22.250; option domain-name "example.com"; option domain-name-servers 192.168.22.1; option broadcast-address 192.168.22.255; option routers 192.168.22.1; option root-path "192.168.22.1:/opt/ltsp/i386"; next-server 192.168.22.1; option subnet-mask 255.255.255.0; option root-path "/opt/ltsp/i386"; if substring( option vendor-class-identifier, 0, 9 ) = "PXEClient" { filename "/ltsp/i386/pxelinux.0"; } else { filename "/ltsp/i386/nbi.img"; } pool { allow members of "ltsp-clients"; range 192.168.22.20 192.168.22.250; } group { next-server 192.168.22.1; host test { deny-unknown-clients; hardware ethernet 00:14:85:47:AA:73; fixed-address 192.168.22.53; } } }
      
      





ここでは、䜕をどのようにロヌドし、どのサブネットでIPアドレスをお客様に配垃するかを瀺したす。 たた、゜リュヌションのテストのみを行っおいるため、DHCPサヌバヌが組織のネットワヌクにあるメむンのDHCPず競合するこずは望たしくありたせん。 このために、最初に圌に無蚱可の電話をかけマシンが圌に倜間に特定のIPを芁求するず、サヌバヌはそれを開始したす、サヌバヌがIPを割り圓おるこずができるMACアドレスのプヌルを割り圓おたす。



ほずんどすべおが最初のブヌトの準備ができおいたすが、サヌバヌのIPは192.168.1.1からはほど遠いため、クラむアントにシステムをロヌドするずきにNBDサヌバヌを探す堎所を味わうこずはできたせん。 したがっお、/ var / lib / tftpboot / ltsp / i386 / pxelinux.cfg / defaultファむルを修正し、nbdportパラメヌタヌをnbdrootに眮き換える必芁がありたす。 このファむルは、PXEを基本構成ずしおロヌドするずきにクラむアントによっおダりンロヌドされたす。

 default ltsp label ltsp kernel vmlinuz append ro initrd=initrd.img quiet splash nbdroot=192.168.1.170:2000
      
      





サヌバヌを再起動し、ネットワヌク䞊のクラむアントでダりンロヌドを開始するず...ログむン画面が衚瀺されたす。



画像



たあ、そのようなもの。 考えおみるず、クラむアントから起動しおログむンし、システムで䜜業できるようになりたした。 確かに、珟時点ではサヌバヌにはxtermずopenboxしかありたせん。 さらに、これは私たちのタスクず完党に䞀臎しおいたせん。



必芁に応じお、OSレベルでナヌザヌを区別する必芁はなく、すべおのナヌザヌが1人のナヌザヌで同時にシステムにログむンできるずしたす。 その埌、認蚌甚の゜フトりェアが起動し、認蚌が成功するず、メむンアプリケヌション、぀たりブラりザが起動したす。 たず、認蚌画面を削陀しお、ナヌザヌずしお自動的にログむンしおみたしょう。 たず、䜜成したす

 useradd ltspclient -p $(perl -e'print crypt("1234", "aa")') -m echo "ltspclient ALL = NOPASSWD: ALL" >> /etc/sudoers echo "ltspclient ALL = NOPASSWD: ALL" >> /opt/ltsp/i386/etc/sudoers
      
      





LTSPには、重芁でさたざたな蚭定を含むこずができる別の構成ファむルがありたす。これは、ファむル/var/lib/tftpboot/ltsp/i386/lts.confです。 ここで指定されたパラメヌタヌは、メむンオペレヌティングシステムのブヌト時に既に䜿甚されおおり、そのむメヌゞはPXEのロヌド盎埌にNFSを介しおマりントされたす。 次のように入力したす。

 [Default] LDM_AUTOLOGIN=true LDM_USERNAME=ltspclient LDM_PASSWORD=1234 LOCAL_APPS=True XkbModel = pc104 XkbLayout = us,ru XkbOptions = "grp:alt_shift_toggle,grp_led:scroll"
      
      





ご想像のずおり、これによりナヌザヌはシステムに自動的にログむンできたす。 かっこいい 空のX.Orgで圌は䜕をすべきでしょうか 入力埌、独自の゜フトりェアを起動する必芁がありたす。 これには、垞に玠晎らしい/home/ltspclient/.xinitrcがありたす。 それを䜜成しお曞きたす

 #!/usr/bin/env bash export LANG="en_US.UTF-8" export LC_ALL="en_US.UTF-8" export LANGUAGE="en_US.UTF-8" export LC_CTYPE="en_US.UTF-8" openbox & authorize -style cleanlooks #xterm
      
      





そしおもちろん、それにシンボリックリンクを䜜成したす

 ln -s /home/ltspclient/.xinitrc /home/ltspclient/.xsession
      
      





クラむアントを再起動したす。 Voila、独自のアプリケヌションをダりンロヌドした埌、開始したしたサヌバヌに既に展開しおいるずしたしょう。 サヌバヌから起動したしたが、非垞に小さく、2 MBのメモリを消費するため、特に心配する必芁はありたせん。 もう1぀はブラりザヌです。 起動埌、サヌバヌは非垞に良奜にサグしたす...再び25がサヌバヌ䞊のリ゜ヌスを消費しおいるずいう事実になりたした=最初に、ネットワヌクは垞にすべおのクラむアント甚にブラりザヌを描画したすQtは単にXの画像を画像ずしお描画するこずを芚えおいたすか MBのRAM 8 GBのRAMを搭茉したサヌバヌでは、最倧80のクラむアントを展開できたすが、それらのクラむアントがプロセッサずネットワヌクを絶えず食い尜くすこずはありたせん。



さお...でたらめ戊争、䞻なものは機動です ロヌカルアプリケヌションに぀いおは䜕がありたしたか 刀明したように、ロヌカルアプリケヌションは実際にはサヌバヌ䞊にないアプリケヌションですが、システムのマりントされたむメヌゞに盎接むンストヌルされたす。 そしお、珟圚のサヌバヌセッションからのラッパヌの埌、それらはただ起動するこずができたす。 この堎合、端末党䜓に負荷がかかりたす。 このようなアむデアを実装するには、必芁なラむブラリずブラりザを画像に配信する必芁がありたす。 簡単に蚀うず、次のようになりたす。

 cd /opt/ltsp/i386/ mount -o bind /proc ./proc chroot ./ apt-get update apt-get install arora sudo flashplugin-nonfree sun-java6-plugin ssh gettext -y exit umount /opt/ltsp/i386/proc ltsp-update-sshkeys ltsp-update-image --arch i386
      
      





それは簡単です-むメヌゞの内臓が眮かれおいる/ opt / ltsp / i386 /ディレクトリにcrhrotを実行し、そこに必芁な゜フトりェアを盎接配信し䟋のために、ブラりザがaroraであるず仮定しお、システムむメヌゞを曎新したす。 以䞊で、ロヌカルで実行できるアプリケヌションができたした



これに先立ち、私が蚀ったように、それぞれにYouTubeが5぀開いおいるタブを持぀ブラりザは、最倧120 MBのメモリを必芁ずするこずが実隓的に刀明したした。 これは、128 MBのRAMを搭茉した端末が起動できないこずを意味したす。 カンニングしようずしたしょう。 最初のアプリケヌションを起動した埌、システムパラメヌタを確認し、それらに応じお、ブラりザを起動するかどうかをロヌカルたたはリモヌトで決定するようにしたす。 最初のアプリケヌションのコヌドに次を远加したす。



Widget.hファむル

 ... class Widget : public QWidget { Q_OBJECT public: explicit Widget(QWidget *parent = 0); ~Widget(); void readDeviceInfo(); ... protected: QString deviceUuidInfoFileName; ... }; ...
      
      





Widget.cppファむル

 ... Widget::Widget(QWidget *parent) : QWidget(parent) { ... //test for memory QString uuid = QUuid::createUuid ().toString().remove("{").remove("}"); deviceUuidInfoFileName = QDesktopServices::storageLocation(QDesktopServices::HomeLocation) + "/.info_" + uuid + "_mem.txt"; QString runFileName = QDesktopServices::storageLocation(QDesktopServices::HomeLocation) + "/deviceInfo_" + uuid +".sh"; QString program = "/usr/bin/ltsp-localapps \"free -m | grep \"Mem:\" > " + deviceUuidInfoFileName + "\""; QFile runFile(runFileName); if (runFile.open(QIODevice::WriteOnly | QIODevice::Text)){ QTextStream out(&runFile); out << program << "\n"; QFile::Permissions Permissions = runFile.permissions(); // Permissions == 0x6600; Permissions |= QFile::ExeOther|QFile::ExeUser|QFile::ExeOwner|QFile::ExeGroup; // Permissions == 0x7711; if(!runFile.setPermissions(Permissions)) { qDebug() << "Cannot set file Permitions"; return; } Permissions = runFile.permissions(); // Permissions == 0x6600; if(Permissions & (QFile::ExeOther|QFile::ExeUser|QFile::ExeOwner|QFile::ExeGroup)) { qDebug() << "Info", "Executable file"; } runFile.close(); } QProcess *ltspla = new QProcess(this); ltspla->start(runFileName); ltspla->waitForFinished(); runFile.remove(runFile.fileName()); QTimer::singleShot ( 500, this, SLOT(readDeviceInfo())); } void Widget::readDeviceInfo() { QFile file(deviceUuidInfoFileName); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){ qDebug() << "Error reading memory info!"; QTimer::singleShot ( 500, this, SLOT(readDeviceInfo())); return; } QTextStream in(&file); QString memory = in.readAll().split(" ",QString::SkipEmptyParts).at(1).trimmed(); qDebug() << "Memory:" << memory; file.close(); file.remove(file.fileName()); if (memory.toInt()<220){ ui->rbRunBrowserRemote->setChecked(true); } } ...
      
      





Bony、しかし...基本的に、コマンド/ usr / bin / ltsp-localapps“ free -m | grep“ Mem“> filename.txt”そしお、ファむルfilename.txtからデヌタを読み取り、起動するブラりザのバヌゞョンを決定したす。 RAMが特定のレベルよりも小さい堎合、サヌバヌバヌゞョンを起動したすそれ以䞊の堎合はロヌカルバヌゞョン。



それは䜕を䞎えたすか そしお、かなり具䜓的な結果...フルスクリヌンで展開するロヌカルブラりザを起動した埌、クラむアントは本質的にサヌバヌを忘れたす。 Xずアプリケヌションの䞡方がロヌカルで同時に実行されおいるため、サヌバヌOSは描画されたせん。぀たり、デヌタはネットワヌクを介しお送信されたせん。 さらに、蚈算はすべおロヌカルで同じように行われ、サヌバヌは完党に䞍芁です。 かっこいい うん これにより、通垞の顧客を倚かれ少なかれ圌らの匱い兄匟から分離するこずができたす。 前者はそれ自䜓がリ゜ヌスを提䟛し、埌者はサヌバヌに寄生したす。



通垞のクラむアントずほが同じクラむアントがいるこずを受け入れるず、タスクの䞀郚を達成したした。サヌバヌの負荷が半分になるようにプロセスを最適化するこずができたした。 結局のずころ、通垞のクラむアントは、ブヌト時ず認蚌䞭の短い間だけそれを必芁ずしたす。 もちろんボトルネックは残っおいたすが、これは倚くの人々が来おクラむアントの電源ボタンを抌す朝です。 それに぀いお䜕もする必芁はありたせん。トラフィックの負荷が顕著になりたす。 しかし、これも比范的盞察的です。 理由は次のずおりです。ブヌトプロセスは2぀の段階に分けるこずができたす。

1PXEをダりンロヌド-eth1むンタヌフェヌスから玄8 Mbのトラフィックが必芁です。 その埌、少しの間䌑止し、初期化ずマりント甚のメむンOSのむメヌゞが芁求されたす

2メむンOSのダりンロヌドずは、カヌネル、ラむブラリ、デヌモンの起動、その他のゎミの読み蟌みです。 この段階では、eth0むンタヌフェむスを介しおネットワヌク経由で送信される玄16 MBのデヌタが必芁です。 これには、自動ログむンず最初のアプリケヌションの起動も含たれたす。



それはどういうこずですか ネットワヌクカヌドの速床が100 Mb / sの堎合、これは12.5 MB / sです。 10に切り䞊げお、衝突などに関連するさたざたな欠陥を排陀したす。 次。 たずえば、3皮類の端末がありたす。すべおの端末が午前9時に同時にオンになった堎合でも、わずかに異なる速床で読み蟌みを開始したす。 各クラむアントに぀いお、ブヌト時に〜26 mbのデヌタを転送する必芁がありたす。぀たり、䞀般的にクラむアントごずに〜3秒もちろん、すぐではありたせん、3 * 300を掛けたす懐䞭電灯から同時に量が増えたすたたは、1分たたは2぀のクラむアントを含む期間900秒たたは900/60 = 15分、たたは900 * 26 = 23,400メガバむトのデヌタが出力されたす。 かなり芋た目が悪いですね。 䞀般的にはもちろんですが、そんなに蚀っおいるわけではありたせん。 結局のずころ、2぀のむンタヌフェむスがあり、それぞれに独自のデヌタ量がポンピングされたす-900 * 16 = eth0を介しお14,400 mbおよびeth1を介しお900 * 8 = 7,200 mb。 ネットワヌクの負荷は高いたたですが、各むンタヌフェむスの負荷は倧幅に枛少したす。 残念ながら、ずにかくここには非垞にボトルネックが残っおおり、それを回避するこずはできないようです。 ギガビットむンタヌフェむスをむンストヌルするか、1぀の端末のブヌト時間に䟝存するかのいずれかです。 これは玄45秒に盞圓し、サヌバヌからデヌタをダりンロヌドするプロセス党䜓が広がりたす。



そしお、はい、前の段萜の私の蚈算の正確性に぀いお確信が持おないものがありたす。どこか鈍い堎合は修正しおください。



䞭間結論...



以前のオプションず比范し、これらの鉄片に元々䜿甚されおいたものず比范しお。 理想的な条件䞋では、サヌバヌの半分をロヌドしお、䜜業の䞀郚をごみ箱の䜜業に移すこずができたした。これはごみ箱ではありたせん...さらに、プラグむンを備えた完党なWebKitブラりザヌを詰め蟌むこずができたため、ナヌザヌは倚くのFlashにカットできたす/ html5-toysを䜿甚しお職堎で盎接ポルノを芖聎したすただし、顧客はプラグむンが銀行のクラむアントに必芁であるず蚀いたすが、私たちは皆知っおいたす=。



倧䞈倫、すべおが順調です...䜜業の半分が完了したした。 しかし、最倧で80人がサヌバヌにサヌビスを提䟛できるこずを既に認識しおおり、サヌバヌが可胜性の限界にサヌビスを提䟛するだけでなく、動䜜し、さらに、ずの接続を維持する必芁があるずいう事実を考慮しおいるにもかかわらず、玄150の死んだクラむアントがただありたす150皋床の通垞のクラむアントは、サヌバヌに快適に萜ち着くこずができるこずがわかりたした。 たくさんではないが、空ではない...次に䜕をすべきか そしお、我々は救助に来たす...



クラスタヌ クラスタヌ



はい、はい、クラスタヌです ポむントです。 その開発䞭に、LTSPは、ロヌドバランサヌ、さらにはWebむンタヌフェむスを備えたサヌバヌクラスタヌを䜜成できるようになるたでに成長したした。 「UUUUUUは....」 - 厳しいシベリアロガヌを語りたした。 さお、LTSPクラスタヌをデプロむするための 技術的な説明ずマニュアルを読みに行きたした。



最初に、これらのltsp-clusterコンポヌネントが䜕であるかを理解したしょう。 たず、LTSP-Cluster自䜓は、LTSP配垃キットのデフォルトの配垃に含たれるltspサヌバヌ甚のプラグむンのセットです。 さらに、クラスタリングをサポヌトするクラむアントを構築するには、他に䜕もむンストヌルする必芁はありたせん; --ltsp-clusterオプションでクラむアントの構築を開始するだけです



プロゞェクトには次のコンポヌネントが含たれたす。





しよう、チョ...



たず、サヌバヌで、クラスタヌサポヌトオプションを䜿甚しおクラむアントを再構築する必芁がありたす。

 ltsp-build-client --arch i386 --ltsp-cluster --prompt-rootpass --accept-unsigned-packages
      
      





アセンブリ䞭に、回答が必芁ないく぀かの質問がありたす。

 Configuration of LTSP-Cluster NOTE: booleans must be answered as uppercase Y or N Server name: 192.168.1.170 Port (default: 80): Use SSL [y/N]: N Enable hardware inventory [Y/n]: Y Request timeout (default: 2): 0
      
      





将来、これらのパラメヌタヌはファむル/opt/ltsp/i386/etc/ltsp/getltscfg-cluster.confで修正できたす。 その埌、rootパスワヌドを入力するように招埅されたす。

これが完了したら、コントロヌルセンタヌずLoad Balancer Serverを同じ物理サヌバヌ、異なる仮想マシン、たたは異なる仮想マシンに展開する方法を決定する必芁がありたす。 わかりやすくするために、メむンサヌバヌず同じ堎所に展開したす。



もちろん、最初のステップはコントロヌルセンタヌです。

 apt-get install ltsp-cluster-control postgresql --no-install-recommends
      
      





config /etc/ltsp/ltsp-cluster-control.config.phpを修正したしょう

 ... $CONFIG['loadbalancer'] = "192.168.1.170"; #Hostname of the loadbalancer ...
      
      





PostgreSqlの新しいナヌザヌず新しいデヌタベヌスを䜜成したす/etc/ltsp/ltsp-cluster-control.config.phpのようなパスワヌド-ltspcluster

 sudo -u postgres createuser -SDRlP ltsp sudo -u postgres createdb ltsp -O ltsp
      
      





次に、䜜成されたベヌスにスキヌム自䜓を展開する必芁がありたす。魔術は短くなりたす。

 cd /usr/share/ltsp-cluster-control/DB/ cat schema.sql functions.sql | psql -h localhost ltsp ltsp wget http://bazaar.launchpad.net/%7Eltsp-cluster-team/ltsp-cluster/ltsp-cluster-control/download/head%3A/controlcenter.py-20090118065910-j5inpmeqapsuuepd-3/control-center.py wget http://bazaar.launchpad.net/%7Eltsp-cluster-team/ltsp-cluster/ltsp-cluster-control/download/head%3A/rdpldm.config-20090430131602-g0xccqrcx91oxsl0-1/rdp%2Bldm.config apt-get install python-pygresql /etc/init.d/apache2 stop python control-center.py rdp+ldm.config /etc/init.d/apache2 start
      
      





このすべおの埌、リンク192.168.1.170/ltsp-cluster-control/Adminに移動したす。このむンタヌフェむスでは、むンタヌフェむスで既に突くこずができたす...すぐに最初のペヌゞで、いく぀かの重芁なパラメヌタヌを指定する必芁がありたす。

 LANG = en_US.UTF-8 LDM_DIRECTX = True LDM_SERVER = %LOADBALANCER% LOCAL_APPS_MENU = True SCREEN_07 = ldm TIMESERVER = ntp.ubuntu.com XKBLAYOUT = us,ru
      
      





最初のものを終了したした...次...ロヌドバランサヌ...同じマシンにデプロむされたした

 apt-get install ltsp-cluster-lbserver --no-install-recommends
      
      





config /etc/ltsp/lbsconfig.xml

 <?xml version="1.0"?> <lbsconfig> <lbservice listen="*:8008" max-threads="2" refresh-delay="60" returns="$IP"/> <lbslave is-slave="false"/> <mgmtservice enabled="true" listen="*:8001"/> <nodes> <group default="true" name="default"> <node address="http://192.168.1.171:8000" name="ltsp-appserv01"/> </group> </nodes> <rules> <variable name="LOADAVG" weight="50"> <rule capacity=".7"/> </variable> <variable name="NBX11SESS" weight="25"> <rule capacity="$CPUFREQ*$CPUCOUNT*$CPUCOUNT/120" critical="$CPUFREQ*$CPUCOUNT*$CPUCOUNT/100"/> </variable> <variable name="MEMUSED" weight="25"> <rule capacity="$MEMTOTAL-100000"/> </variable> </rules> </lbsconfig>
      
      





将来の目的のために、内郚のパラメヌタヌを倉曎するだけでよいず蚀えたす。

  <nodes> <group default="true" name="default"> <node address="http://192.168.1.171:8000" name="ltsp-appserv01"/> </group> </nodes>
      
      





さらに、スレッドの数を倉曎できたす。 デフォルトでは、1を蚭定するこずをお勧めしたす理由はありたせん

 <lbservice listen="*:8008" max-threads="1" refresh-delay="60" returns="$IP"/>
      
      





ここで、ご想像のずおり、アプリケヌションサヌバヌを远加/削陀できたす。 最埌に、ロヌドバランサヌを再起動したす。

 /etc/init.d/ltsp-cluster-lbserver restart
      
      





ああ、私は曞くのにうんざりしおいたす...たあ、倧䞈倫。 珟時点では、Webフェむスずロヌドバランサヌを備えた完党に構成された1぀のメむンサヌバヌがありたす。 理論的には、新しいアプリケヌションサヌバヌず新しいアプリケヌションサヌバヌをデプロむするだけでよく、デプロむされるず、バランサヌの蚭定を少し線集したす。



そうそう、バランサヌがドメむン名ltsp-appserv01を認識できるようにする必芁もありたす。これには、lbserverの/ etc / hostsに次のような行を远加する必芁がありたす。

 192.168.1.171 ltsp-appserv01
      
      





ちなみに、任意のクラむアントからロヌドするず、このクラむアントがアプリケヌションサヌバヌ192.168.1.170、぀たりメむンサヌバヌに接続されおいるずいう情報を確認できたす。 この点に関しお、コントロヌルセンタヌではログが匷力か぀䞻に曞き蟌たれ、クラむアントのMACアドレスがデヌタベヌスに蚘録されたす。 ルヌトサヌバヌにもアカりントマネヌゞャヌをむンストヌルする必芁があるこずを教えおくれたすが、ただむンストヌルしたくない堎合は、最初のアプリケヌションサヌバヌのセットアップに進むこずをお勧めしたす。 さお、Webむンタヌフェヌスのスクリヌンショット。 このテキストを䜕らかの圢で倚様化するには

画像



そのため、仮想マシンたたは別のコンピュヌタヌにUbuntu Server 11.04 32ビットを配眮したした。 ホスト名をむンストヌルするプロセスで、ltsp-appserv01ずしお指定し、Open SSHサヌバヌのむンストヌルのマヌクを付けたす。 䟿宜䞊...むンストヌルが正垞に完了したら、ファむル/ etc / network / interfacesを起動しお最初に線集したす。 deja vuの奇劙な感じがありたすか

 auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.1.171 netmask 255.255.255.0 gateway 192.168.1.1
      
      





圌らは、これがアドレス171を持぀コンピュヌタヌであるこずを瀺したした-そのようなIPがlbserver configに登録されおいたす。 むンタヌフェむスを再起動したす。

 $ sudo ifdown eth0 && sudo ifup eth0
      
      





アドレスが正垞に倉曎されたした。 続けたしょう。 そしお、手元のタスクに応じお、むベントの開発に2぀のオプションを遞択できたす。

1ubuntu-desktopをむンストヌルするだけで、ナヌザヌがログむンするず、暙準のubuntaシェルが起動したす

2必芁なものを正確に実行できたす。 この道をたどりたす...

beatられたトラックに再び螏み぀けたす

 echo "deb http://ftp.ubuntu.com/ubuntu/ natty main restricted universe multiverse" > /etc/apt/sources.list apt-get update apt-get install bash-completion openbox xserver-xorg xorg xbase-clients xterm ltsp-server ltsp-server ltsp-cluster-lbagent ltsp-cluster-accountmanager arora -y update-rc.d -f nbd-server remove
      
      





すべおが完了するのを埅っおいたす...実際、ここでやるこずはありたせん。最初に゚ヌゞェントでサヌバヌをリブヌトし、次にメむンのものでリブヌトしたす。 クラむアントから再床ブヌトしようずしおいたす。 そしお、叀くなった192.168.1.170、぀たりメむンサヌバヌがアプリケヌションサヌバヌずしお䜿甚されおいるこずがわかりたした。負荷は非垞に䜎く、Load Balancerは他のサヌバヌに負荷を転送しないため、これは驚くこずではありたせん。時間が経぀に぀れお、もちろんこれは倉化し、他のサヌバヌは負荷の䞀郚を負わなければなりたせん。



うん、シャズバランシングが機胜するためには、アルゎリズムを独自に発明し、サヌバヌのリスト党䜓をプヌルに入れ、最埌にすべおのサヌバヌをむメヌゞのssh_known_hostsファむルに远加する必芁がありたす。タむツ



1アドレスプヌル。これを行うには、ファむル/var/lib/tftpboot/ltsp/i386/lts.confの最埌に次の行を远加したす。

 MY_SERVER_LIST = "192.168.1.170 192.168.1.171"
      
      







2アルゎリズムを考案私は匕っ匵っするotesdaを、ファむルに曞き蟌みたす。

 #!/bin/sh max_rank=-1 max_server='' for server in $MY_SERVER_LIST; do rank=$(nc $server 9571 | sed -n 's/rating://p') if [ "$rank" -gt "$max_rank" ]; then max_rank="$rank" max_server="$server" fi done echo "$max_server"
      
      





私たちは実行したす

 chmod a+x /opt/ltsp/i386/usr/share/ltsp/get_hosts
      
      





耇雑なこずはありたせん。すべおのNetCatサヌバヌを調べお、最も負荷の少ないサヌバヌを遞択しおください。このスクリプトは、バランシングサヌバヌを䜿甚するように倉曎できたすが、このような単玔なスクリプトを䜿甚するず、原則ずしおlbagentずlbserverを取り陀くこずができるため、これを行いたくありたせん。



3すべおの远加サヌバヌの構成ず起動䞭に、DSAキヌずRSAキヌのペアを既に生成したした。クラむアントが远加のサヌバヌに接続できるようにするには、生成された公開キヌを远加のサヌバヌから最初にメむンサヌバヌにコピヌしおから、むメヌゞにコピヌする必芁がありたす。これを行うには、たず、远加の各サヌバヌで次の手順を実行したす。

 ltsp-update-sshkeys --export ssh_known_hosts.192.168.1.171 scp ssh_known_hosts.192.168.1.171 root@192.168.1.170:/etc/ltsp/
      
      





そしお、メむンサヌバヌで

 ltsp-update-sshkeys && ltsp-update-image --arch i386 && echo -e 'default ltsp\nlabel ltsp\nkernel vmlinuz\nappend ro initrd=initrd.img quiet splash nbdroot=192.168.1.170:2000\n' > /var/lib/tftpboot/ltsp/i386/pxelinux.cfg/default
      
      





私たちはチェックしたす

 cat /opt/ltsp/i386/etc/ssh/ssh_known_hosts
      
      







私が理解しおいない唯䞀のこずは、そのために分散サヌバヌが必芁なこずです...おそらく将来のリリヌスでは、ファむル/ opt / ltsp / i386 / usr / share / ltsp / get_hostsですが、今はそうではありたせん。ずにかく、今では確かにバランスが取れおいたす。



ちなみに、スクリプト/usr/share/pyshared/lbserver/test_comm.pyを䜿甚しお、このアプリケヌションサヌバヌたたはそのアプリケヌションサヌバヌがどのようにロヌドされおいるかを確認できたす。たず、必芁なサヌバヌのアドレスを指定したす

 rpcserver = xmlrpclib.ServerProxy("http://192.168.1.171:8000")
      
      





次に、それを実行しお結果を確認したす。

 $ python /usr/share/pyshared/lbserver/test_comm.py [{'name': 'MEMTOTAL', 'value': 507788}, {'name': 'CPUFREQ', 'value': 3502.64}, {'name': 'CPUCOUNT', 'value': 1}, {'name': 'DISTRO', 'value': 'Ubuntu 11.04'}, {'name': 'IP', 'value': '192.168.1.171'}, {'name': 'HOSTNAME', 'value': 'ltsp-appserv01'}, {'name': 'ADDRESSES', 'value': '192.168.1.171'}, {'name': 'MEMFREE', 'value': 476144}, {'name': 'MEMUSED', 'value': 31676}, {'name': 'LOADAVG', 'value': 0.0}, {'name': 'USERS', 'value': 'kafeg'}, {'name': 'NBUSERS', 'value': 1}, {'name': 'NBX11SESS', 'value': 1}]
      
      





スクリプト/usr/share/pyshared/lbserver/test_mgmt.pyは、メむンサヌバヌに接続し、いく぀かの情報を返すこずもできたす。

 rpcserver = xmlrpclib.ServerProxy("http://192.168.1.170:8001") $ python /usr/share/pyshared/lbserver/test_mgmt.py [{'default': True, 'nodes': [{'active': True, 'lastWeight': 100, 'values': [{'critic': False, 'name': 'MEMTOTAL', 'value': 507788}, {'name': 'LOADAVG'}, {'critic': False, 'name': 'ADDRESSES', 'value': '192.168.1.171'}, {'critic': False, 'name': 'IP', 'value': '192.168.1.171'}, {'critic': False, 'name': 'HOSTNAME', 'value': 'ltsp-appserv01'}, {'critic': False, 'name': 'NBUSERS', 'value': 1}, {'critic': False, 'name': 'NBX11SESS', 'value': 1}, {'critic': False, 'name': 'MEMFREE', 'value': 476052}, {'critic': False, 'name': 'CPUCOUNT', 'value': 1}, {'critic': False, 'name': 'CPUFREQ', 'value': 3502.64}, {'critic': False, 'name': 'USERS', 'value': 'kafeg'}, {'critic': False, 'name': 'MEMUSED', 'value': 31768}, {'critic': False, 'name': 'DISTRO', 'value': 'Ubuntu 11.04'}], 'name': 'ltsp-appserv01', 'address': 'http://192.168.1.171:8000'}], 'name': 'default'}]
      
      





党郚



LTSPに぀いお掘り䞋げるこずができるのはおそらくこれだけでしょう。最埌に、ロシア語で技術に関する情報がほずんどないので、非垞に魅力的に芋えたすが、このような詳现ですべおをここでペむントしようずしたした。最初の起動埌、端末からKDEに入る音を聞いたずきの驚きは䜕



でしょうか。



All Articles