SemonixのPhilipp TorchinskySmartOSをむンストヌルし、Node.jsを䜿甚する

11月29日、サンクトペテルブルクのYandexオフィスで、 科孊セミナヌ 「DTrace-コヌドの怜蚌䜜業」を実斜したす。 YaC 2012の人々は、Illumos Kernel Cloud Computing Infrastructure および他の倚くの人々 に関する私の講挔を聞いおいたした。Semonixでは、SmartOSに密接に関連するクラりドテクノロゞヌに取り組んでいたす。 セミナヌでは、DTraceテクノロゞヌを䜿甚しお、詳现なパフォヌマンス分析を行い、アプリケヌションの動䜜を詳现に研究する方法を説明したす。 Habréで怜玢するずSmartOSに関する蚘事が1぀しか芋぀かりたせん。 そのため、すでにそれをよく知っおいる人がセミナヌに参加するため、SmartOSのむンストヌルずNode.jsの䜿甚に぀いお事前に曞くこずにしたした。



たず、SmartOSの目的を説明したす。 芁するに、その目的は仮想マシンのホストシステムになるこずです。 JoyentやMITACクラりドサヌビスなど、パブリッククラりドずプラむベヌトクラりドの基盀ずしおよく䜿甚されたす。 LinkedInはJoyentサヌビスを䜿甚したす。モバむルサヌバヌ郚分はすべお、Joyentクラりドで実行されるNode.jsで䜜成されおいたす。 これに぀いおは、SemonixブログのSmartOSに関する蚘事ずillumosに基づいたクラりドで詳现に説明したしたが、すでに述べたYaC 2012の講挔で話したした。



SmartOSの兞型的なアプリケヌションは、デヌタセンタヌシステム、ロヌドされたWebアプリケヌションを開発および運甚するためのシステム、プラむベヌトたたはパブリッククラりドを䜜成するためのプラットフォヌムです。 この蚘事に取り組むずき、私はStu Rudnageの蚘事を積極的に䜿甚したした。StuRudnageは、私ずほが同じSmartOSむンストヌルパスに埓いたしたが、VirtualBoxの代わりにVMwareを䜿甚したした。



テストむンストヌルを蚈画しおいたす



あなたがSmartOSを詊しおみたい人の䞀人だずしたしょう。 どうすれば簡単ですか 私は、WindowsたたはLinuxが仮想マシンで実行されるのを防ぎ、既補のSmartOS + Node.jsを䜿甚できるようにする、最も簡単な方法で進めたした。 VirtualBoxでSmartOSを起動したす。 VirtualBoxの仮想マシンでKVMが機胜しないこずは明らかであり、残りは倧金を皌ぐ必芁がありたす。



SmartOSは、Windows、Linux、およびSmartOS自䜓を実行しおいるゲストのホストシステムになるこずができたす。 この蚘事では、SmartOSを実行するゲストシステムのオプションのみを怜蚎したす。 軜量仮想化SolarisのゟヌンずFreeBSDのセルに䌌たものず同じを実装しおいるため、物理コンピュヌタヌでのみサポヌトされおいるKVMは必芁ありたせん。 構成党䜓を次の図に瀺したす。 SmartOSホストは、ラップトップ䞊のWindowsに関連するゲストであり、このSmartOS内のゟヌンで実行されおいるSmartOSシステムに関連するホストであるシステムです。

ᅩ





2぀のネットワヌクむンタヌフェむスを持぀仮想マシンにSmartOSをむンストヌルしたす。 なんで 非垞に簡単ホストシステムこの堎合はWindowsから通垞のsshをSmartOSに接続しお、SmartOS内のゲストシステムごずに少なくずも1぀のりィンドりを開くこずができるようにしたす。



コン゜ヌルでグラフィカルモヌドを䜿甚し、適切な量のxtermたたはgnome-terminalをそこで実行しおみたせんか 実際、グラフィックス "X"-XはSmartOSにむンストヌルされおいたせん。 X11のサポヌトをSmartOSに移怍するプロゞェクトがありたすが、ただ完了しおいたせん。このプロゞェクトの䞻任ボランティアであるJonathan Perkinから、䜜業の期限が䞍明であるこずが通知されたした。 したがっお、sshからSmartOSに5぀のりィンドりを開きたい堎合、ホストシステムからVirtualBoxのSmartOSぞのTCPアクセスが必芁です。



さらに、VirtualBox Guest AdditionsはSmartOSゲストマシンにむンストヌルできないため、ゲストシステムず、蚘事を曞いおいるホストシステムずの間でカットアンドペヌストを行うこずができたす端末からテキストをコピヌしたい。 理論的には、Guest Additionsをむンストヌルできるず思いたす基本的にそこにカヌネルモゞュヌルをむンストヌルする必芁がありたすが、Solarisに䌌たシステムの堎合、Guest Additionsは.pkgパッケヌゞの圢匏で提䟛されたす。 ホストシステムからsshでアクセスするよりも、パッケヌゞを解凍しお手動でモゞュヌルをカヌネルにねじ蟌む方が問題が倚いず刀断したした。



なぜ2番目のむンタヌフェむスが必芁なのですか そのため、SmartOSはむンタヌネット䞊のパケットに察しおNATを通過できたす。 タスクの条件に関するこの制限は、VirtualBoxによっお課せられたす。NAT/ DHCPを備えた仮想マシンにホストシステムからアクセスできるようにするには、ブリッゞネットワヌクを介しおのみ可胜です。これは必ずしも䟿利ではありたせん。 あたり䟿利ではないたたは特定のホストシステムやVirtualBoxのバヌゞョンでサポヌトされおいないケヌスの説明は、この蚘事の範囲を超えおいたすが、信じおください-これは起こりたす。 最も単玔なオプションは次のずおりです。物理コンピュヌタヌが接続されおいるネットワヌク䞊のDHCPアドレスが䞍足しおいるか、sshがフックされる前にシステムにこのアドレスが発行されたたびに確認したくない堎合。



VirtualBoxで2぀のネットワヌクむンタヌフェむスを䜜成する方法



2぀のネットワヌクアダプタヌがあるように仮想マシンを構成するのは簡単ですネットワヌクタブで、最初のアダプタヌがホストアダプタヌモヌドでアクティブであるだけでなく、2番目のアダプタヌがNATモヌドでアクティブであるこずを瀺す必芁がありたす䞋図を参照。 SmartOSの堎合、Solaris 10仮想マシン10/09以降64ビットのタむプを遞択するこずに意味があるこずに泚意しおください。 Solaris 11オプションの方が優れおいる堎合がありたす。 問題も遅延もなく機胜したした。



他に䜕を蚭定する必芁がありたすか





latest.isoファむルを仮想マシンのCD-ROMに添付する必芁がありたす-SmartOSはそこから起動したす。





ᅩ

初めおブヌトした埌、システムは蚭定特にルヌトパスワヌドに぀いおいく぀かの質問をし、ディスクをフォヌマットし、ディスク䞊にZFSプヌルを䜜成し、蚭定をディスクに曞き蟌みたす。 再起動埌、次の図のようなものが衚瀺されたす。

ᅩ





前に蚭定したパスワヌドを䜿甚しお、rootずしおログむンしたす。 sshを䜿甚しおSmartOSに接続できるようになりたした。そのためには、サヌバヌのアドレスを確認するだけです。



ipadm show-addr
      
      







SmartOSで2぀のネットワヌクむンタヌフェむスを䜜成する方法



SmartOSのシステム構成は、/ usbkey / configファむルに保存されたす。 / usbkeyファむルシステムは、/ etcずは異なり、ディスクからマりントされたす。/etcは、LiveCDたたはLiveUSBから垞にロヌドされ、RAMディスクにマりントされたす。 したがっお、/などからファむルに加えられた倉曎は再起動時に倱われ、/ usbkeyに保存されたす。

ファむル/ usbkey / configは、コンピュヌタヌでSmartOSを初めお起動したずきに䜜成され、デフォルトではシステムの最初のむンタヌフェむスのみを蚘述したす。 2番目のものを衚瀺するには、ファむルをわずかに倉曎する必芁がありたす。 倉曎するには、むンタヌフェむスのMACアドレスを芋぀ける必芁がありたす。 これを行うには、次のコマンドを䜿甚できたす

 dladm show-phys -m
      
      





 LINK SLOT ADDRESS INUSE CLIENT e1000g0 primary 8:0:27:f7:e9:a3 yes e1000g0 e1000g1 primary 8:0:27:d0:35:3b no --
      
      







/ usbkey / configファむルを次のように倉曎したしょう。



 # # This file was auto-generated and must be source-able by bash. # # admin_nic is the nic admin_ip will be connected to for headnode zones. admin_nic=8:0:27:f7:e9:a3 admin_ip=dhcp admin_netmask= admin_network=... admin_gateway=dhcp external_nic=8:0:27:d0:35:3b external_ip=dhcp external_netmask=255.255.255.0 external_gateway=dhcp dns_resolvers=8.8.8.8,8.8.4.4 dns_domain= ntp_hosts=pool.ntp.org compute_node_ntp_hosts=dhcp
      
      







SmartOS内で仮想マシンを䜜成する



最初に、仮想マシンのむメヌゞをダりンロヌドする必芁がありたす。 これを行うには、画像のリストを曎新したす。

 imgadm update
      
      





次に、リポゞトリにある既補のむメヌゞを芋おみたしょう。

 imgadm avail
      
      







 UUID OS PUBLISHED URN 78ab4d60-2610-11e2-b3f7-b3bd2c369427 linux 2012-11-04 sdc:jpc:ubuntu-12.04:2.1.2 6a67c702-2083-11e2-b4fa-03f9d1d64ef0 linux 2012-10-28 sdc:jpc:ubuntu-12.04:2.1.1 b00acc20-14ab-11e2-85ae-4f03a066e93e smartos 2012-10-12 sdc:sdc:mongodb:1.4.0 1fc068b0-13b0-11e2-9f4e-2f3f6a96d9bc smartos 2012-10-11 sdc:sdc:nodejs:1.4.0 8700b668-0da4-11e2-bde4-17221283a2f4 linux 2012-10-03 sdc:jpc:centos-6:1.3.0 55330ab4-066f-11e2-bd0f-434f2462fada smartos 2012-09-25 sdc:sdc:base:1.8.1 60a3b1fa-0674-11e2-abf5-cb82934a8e24 smartos 2012-09-25 sdc:sdc:base64:1.8.1 ...
      
      







これで、むンストヌル可胜なむメヌゞのリストができたした。 ここにリストの䞀郚だけがありたす-それはずっず長いです。 執筆時点では、96個の画像がリポゞトリで利甚可胜でした。 node.jsを含む最小限のシステムであるbase64むメヌゞに興味がありたす。 珟圚、このむメヌゞの最新バヌゞョンは1.8.1ノヌド0.8.9を含むで、そのUUIDは60a3b1fa-0674-11e2-abf5-cb82934a8e24です。



仮想マシンのむメヌゞをダりンロヌドしたす。

 imgadm import 60a3b1fa-0674-11e2-abf5-cb82934a8e24
      
      







次に、仮想マシンの説明を䜜成したす。これは、ロヌドしたばかりのむメヌゞに基づいお䜜成し、SmartOSホスト内で実行したす。



説明はJSONファむルの圢匏で䜜成されたすプロセスの詳现はsmartos.orgのドキュメントで説明されおいたす。ここに実際の䟋を配眮したす。ここでは/zones/template.jsonに配眮したす。 ファむルはファむルシステムにある必芁がありたす。ファむルシステムはディスク䞊にあり、再起動の間に保存されたす。最も䟿利なのは/ゟヌンです。

dataset_uuidに泚意しおください-これは、リポゞトリから受信したばかりのむメヌゞに属するUUIDず同じです。 ゟヌンには、「内郚」ず「倖郚」の2぀のネットワヌクむンタヌフェむスもありたす。 この蚭定は、実際のデヌタセンタヌで䜿甚されたす。内郚ネットワヌクは、デヌタセンタヌ管理者が働く内郚むンタヌフェむスに接続され、倖郚ネットワヌクは、クラむアントの発信元であるむンタヌネットに接続されたす。

 { "brand": "joyent", "dataset_uuid": "60a3b1fa-0674-11e2-abf5-cb82934a8e24", "max_physical_memory": 1024, "nics": [ { "nic_tag": "admin", "ip": "dhcp", "gateway": "dhcp" }, { "nic_tag": "external", "ip": "dhcp", "gateway": "10.0.3.2" } ] }
      
      







珟圚、新しいSmartOS仮想マシンを䜜成しおいたす簡朔にするため、匕き続き「ゟヌン」ず呌びたす。



 vmadm create -f /zones/ template.json
      
      







すべおがうたくいった堎合、次のコマンドを入力しお、起動された新しいゟヌンを確認できたす。

 vmadm list UUID TYPE RAM STATE ALIAS 570cccb2-0511-400b-9143-7616b2ca8a3d OS 1024 running -
      
      







これで、SmartOSコン゜ヌルたたはsshから新しいゟヌンに接続できたす。

 zlogin 570cccb2-0511-400b-9143-7616b2ca8a3d
      
      





泚同じむメヌゞから倚くのゟヌンを䜜成できるため、ゟヌンのUUIDはゟヌンむメヌゞのUUIDずは異なりたす。 同時に、1぀のSmartOSホストシステムで最倧8191台の仮想マシンを起動できたす。



sshを介しおゟヌンに接続するには、どのアドレスが割り圓おられおいるかを明確にする必芁がありたす;このためには、たずzloginを介しお参加し、次にアドレスを芋぀ける必芁がありたす。

 zlogin 570cccb2-0511-400b-9143-7616b2ca8a3d ipadm show-addr
      
      





パッケヌゞ管理



これで、必芁なパッケヌゞをゟヌンにむンストヌルできたす。 これを行うには、 pkgin updateを䜿甚しお利甚可胜なパッケヌゞに関する情報を曎新するか、それらのリストpkginリストを取埗するか、 pkgin searchを䜿甚しお必芁なものを怜玢する必芁がありたす 。 パッケヌゞをむンストヌルするには、 pkgin installを䜿甚したす。



Node.jsの実行方法



以前にNode.jsに慣れおいなかったずしたす。 次に、初心者向けに、簡単なHello、Worldを生成する非垞にシンプルなWebアプリケヌションを䜜成できたす。 よく知られたガむドを読むこずでNode.jsのマスタヌを開始できたす 。 それに続いお、Hello、Worldを䜜成したす。



これを行うには、ゟヌンに接続したす

 zlogin 570cccb2-0511-400b-9143-7616b2ca8a3d
      
      





そしお、たずえば、/ home / nodeディレクトリに、次の内容のserver.jsファむルを䜜成したす。

 var http = require("http"); http.createServer(function(request, response) { response.writeHead(200, {"Content-Type": "text/plain"}); response.write("Hello World"); response.end(); }).listen(80);
      
      





ノヌド/home/node/server.jsを実行し、通垞のブラりザヌからゟヌンにアクセスしたす。 私の堎合、これにはゟヌンずWindowsホストシステム間のルヌティングのセットアップが必芁でした。



ゟヌン内route add 192.168.56.1 192.168.56.101

Windowsの堎合192.168.56.102 192.168.56.101を远加するルヌト



アドレス192.168.56.1はWindowsのVirtualBoxむンタヌフェむス、192.168.56.101はSmartOSホストシステム、192.168.56.102はそのゟヌンです。





Node.jsでDTraceを䜿甚する方法は



ノヌドのDTraceプロバむダヌはサプラむズノヌドず呌ばれたす。 これはUSDTタむプのプロバむダヌであるため、センサヌはnode * ::: <センサヌ名>の圢匏で指定するか、 node3297 ::: <センサヌ名>などのノヌドプロセスの特定のPIDで指定する必芁がありたす。



Node.jsでDTraceを䜿甚しおサヌバヌの動䜜を監芖する実際の䟋は、呌び出しを蚘録するこずです。 さたざたなゟヌンからのサヌバヌが受信する芁求を芋぀けるにはホスティングプロバむダヌの䞀般的なケヌス、短いスクリプトを実行したす。

 # dtrace -L /var/lib/dtrace -n 'node*:::http-server-request{printf("%s: %s of %s\n",zonename, args[0]->method, args[0]->url)}' -q 570cccb2-0511-400b-9143-7616b2ca8a3d: GET of / 570cccb2-0511-400b-9143-7616b2ca8a3d: GET of /favicon.ico 570cccb2-0511-400b-9143-7616b2ca8a3d: GET of / 570cccb2-0511-400b-9143-7616b2ca8a3d: GET of /favicon.ico 570cccb2-0511-400b-9143-7616b2ca8a3d: GET of / 570cccb2-0511-400b-9143-7616b2ca8a3d: GET of /favicon.ico
      
      





リク゚ストの送信元アドレスを確認するには、スクリプトをわずかに倉曎できたす。

 # dtrace -L /var/lib/dtrace -n 'node*:::http-server-request{printf("%s: %s of %s\n",args[1]->remoteAddress, args[0]->method, args[0]->url)}' -q 192.168.56.1: GET of / 192.168.56.1: GET of / 192.168.56.1: GET of /favicon.ico 192.168.56.1: GET of / 192.168.56.1: GET of /favicon.ico 192.168.56.1: GET of / 192.168.56.1: GET of /
      
      





次のセンサヌは、DTraceのノヌドで䜿甚できたす。



gc-start

gc-done

http-client-request

http-client-response

http-server-request

http-server-response

ネットサヌバヌ接続

ネット゜ケット読み取り

ネット゜ケット曞き蟌み

ネットストリヌム゚ンド



䞀郚のセンサヌが䜿甚できないこずがわかった堎合、これは/usr/lib/dtrace/node.dファむルがないこずを瀺しおいたす。 次に、/ var / lib / dtrace /ディレクトリを䜜成し、そこにファむルをダりンロヌドし https://raw.github.com/joyent/node/master/src/node.dにありたす 、-L /スむッチを指定しおdtraceを実行する必芁がありたす。 var / lib / dtrace /「DTraceラむブラリ怜玢パスでLキヌの埌に指定されたディレクトリを含める」こずを意味したす。



コヌド䟋英語を含むセンサヌの詳现な説明は、 dtrace.org / blogs / rm / 2011/03/01 / dtrace-probes-for-node-v0-4-x /httpdペヌゞにありたすただし、 Node.jsの叀いバヌゞョン。



おわりに



SmartOS蚭定の特別な魅力は、䞀床むンストヌルするず、曎新埌に繰り返す必芁がないこずです。 最新のlatest.isoをダりンロヌドし、以前のものず眮き換えお、新しいものから起動できたす。 すべおの蚭定、仮想マシン、およびその䞭のファむルは自動的に取埗されたす。これは、誰も䜕も倉曎しないためです。ダりンロヌドされたむメヌゞのみが倉曎され、蚭定はそれずは別に存圚したす。



DTraceに぀いおの私の話を聞きたい人は、11月29日19:00にYandexのサンクトペテルブルクオフィスで埅っおいたす。 セミナヌは完党に無料ですが、座垭数は限られおいるため、 登録する必芁がありたす 。 それに該圓しない人のために、䞻催者はオンラむン攟送を提䟛したす 。 セミナヌの重芁な郚分は実際的な問題の解決になるため、VirtualBoxの䞋にSmartOSがむンストヌルされたラップトップを持参する必芁があるず蚀いたす。



この䌚議は、UNIX系システムのアプリケヌションパフォヌマンスの分析に関心がある人、特にSolaris゜フトりェア開発者、Node.js゜フトりェア開発者、システム管理者、およびパフォヌマンスを担圓するその他の人FreeBSD、Solaris、QNX、OpenIndiana SmartOSおよびDTraceをサポヌトするその他。



All Articles