2009年5月31日日曜日

HTMLを綺麗にしないで高速化は出来ない。

仕事の都合と自分の趣味の両方で必要になったので買ってみた。
HTMLの表示、応答時間、Renderingにかかる時間を減らして全体的に高速化する方法をまとめてある本。
ハイパフォーマンスWebサイト ―高速サイトを実現する14のルール
ハイパフォーマンスWebサイト ―高速サイトを実現する14のルール武舎 広幸 福地 太郎 武舎 るみ

オライリージャパン 2008-04-11
売り上げランキング : 16442

おすすめ平均 star
star仕事で作る人、趣味で作る人、両方にためになります
starフロントエンド方面の最適化手法がわかる本
star目からウロコでした。

Amazonで詳しく見る
by G-Tools
個人的にはW3C準拠とかcss整理とかJavaScriptの整理だとか重要視してて大好きなんだけど、仕事だとどうしても裏側のLogic部分だったり、HTMLは兎に角画面がキチンとでればそれでOKが優先されて来てた。
が、最近になってやっとこっちの重要性が理解され始めたのと、抜本的な高速化が決まったので本格的に作業をする事に。
という経緯で買った本。
バックエンド側(Server処理)にかかる時間が半分になっても、応答時間全体の5~10%程度が早くなるだけ。
フロントエンド側(通信とかRenderingとか)にかかる時間が半分になれば、応答速度全体の40~45%が早くなる。
最初のこの言葉に納得。
実際Server側の処理早くしても、Tableタグ使いまくりとか、JavaScriptファイルがばらばらとか、HTML中に記述とか、cssがばらばらなHTMLじゃ殆ど意味ないからな・・・。

さてこの本に書かれている具体的な高速化手段は
  • HTTPリクエストを減らす
  • CDNを使う
  • Expiresヘッダを使う
  • コンポーネントをgzipする
  • スタイルシートは先頭に置く
  • スクリプトは最後におく
  • CSS Expressionの使用を控える
  • JavaScriptとCSSは外部ファイル化する
  • DNSルックアップを減らす
  • JavaScriptを縮小化する
  • リダイレクトを避ける
  • スクリプトを重複させない
  • ETagの設定を変更する
  • AJAXをキャッシュ可能にする
・・・まぁ辺り前な事だけど、実際はキチンとやられてないんだよな。
取りあえず順次実践してくしかない。
キャッシュの管理についてもBrowserとかに任せて放置じゃなくて意図的に操作しないと駄目だなぁ。

2009年5月30日土曜日

ESXiを入れようとするとでるCPUIDlimit対策

DellのOptiPlexGX280とかにESXi3.5を入れようとするとCPUIDlimitって奴でErrorが出て巧くInstall出来なかったので、調べてまとめ。

■VMWare ESXi working on a Dell Optiplex GX280
ESXi3.5を焼いたCDから起動して最初に止まる画面でTabキーを押す。
そうするとInstallのOptionを設定出来る画面が出るので、vmkernel.gzにnocheckCPUIDlimitという引数を追加する。
mboot.c32 vmkernel.gz nocheckCPUIDlimit --- binmod.tgz --- ienviron.tgz --- cim.tgz --- oem.tgz --- license.tgz --- install.tgz

これでEnterを押すとInstallが開始する。
んでこの後再起動するとまたCPUIDlimitのエラーでESXiが起動せずに止まってしまうのでESXiの起動設定ファイルを書き換える。

ここで使うのがLinux系のLiveCD。上で紹介してる先ではUbuntu8.04だけど、LiveCDが出来ればなんでもいい。因みに私はUbuntu9.04で作業しました。
作業内容はまずESXiをInstallしたPCにLiveCDを入れてCDから起動してLinuxの画面が出るまで待つ。
でHDDにアクセスして、「HYPERVISOR1」て名前のパーティションを開く。
するとそこに「boot.cfg」ってファイルがあるのでこれを開いて、kerneloptという設定項目を下記の様に修正する。
kernelopt=nocheckCPUIDlimit

終わったら再起動。

で正常に起動したらVIClientで接続して、メイン画面が出たら対象のServerを選択して
「Configuration」→「advanced settings」→「VMKernel 」
と開いて、でそこで
「VMKernel.Boot.checkCPUIDlimt」
のチェックを外す。

で再起動。
以上で終了。以後は毎度きちんと立ち上がる様になる。

2009年5月29日金曜日

世代通信プラットフォーム「Google Wave」

■米Googleが次世代通信プラットフォーム「Google Wave」発表
■Google Wave API (Labs)
■米Google、次世代コミュニケーションプラットフォーム「Google Wave」発表
■米Googleが次世代通信プラットフォーム「Google Wave」発表


「Google Wave」はこれらが混在している状況を改善し、異なるタイプのコミュニケーションモデルをほとんど連続的に1つのシステム上で扱うことはできないだろうかという考えから生まれた。


なんだこれは。
なんか凄そうだけど何が出来るんだろう。

SourceForgeに少し具体的な事が書いてある。

・Google Web ToolkitとHTML5を土台としたWebアプリケーション
・リッチテキストエディタ、ドラッグ&ドロップなどの機能、プレイバック機能
・オープンと拡張性を重視。組み込み型と拡張型の2種類のAPIを公開し、開発者はWave向けにサービスを開発できる
・Google Code LabsよりWave APIにアクセス可能
・Wave正式版は今年後半予定
・ソースコードも公開(OpenSource)

うーむ。
なんか色々なSoftwareのConsoleとして使えそうだ。

2009年5月28日木曜日

Dell OptiPlex760にESXiを入れる

VMWare-ESXi3.5Update4でACHIがSupportされたけどNICに関してはまだまだな部分が多い。
という事でDellの比較的新しめのPCであるOptiPlex760にESXiを入れるとNICを認識しない。
ネットを探してみた&会社の先輩からのアドバイスで下記のページを発見。
■Dell Optiplex 760 OEM.TGZ
先輩の話だとこれでいけたそう。
今度760に入れる機会があるのでその時に実験。

Chromiumで画面文字が小さくなる問題

実は私はGoogle Chromeではなく、ChromiumのDailyビルドを使っている。数時間毎に最新Buildが公開されているが、気が向いた時に更新して使っている。
が、そのChromiumで掲題の問題が発生した。
数日前、恐らくGoogleのChromeのVerが2になり開発β版であるChromiumがVer3になった頃だと思う。それ以後にDLしてきたChromiumを解凍して利用するとChromiumの画面の文字が異常に小さくなっていた。
「あぁ3になった事のバグか」
と思ってたけど一向に直らず。

そんな中、今日ふと思ってChromiumを一度アンインストール。本体があるフォルダを開いてゴミも消す。
その後ChromiumのDailyBuild用mini_installerを利用して再インストール。

そしたら直った。
どうやら2と3の間に結構仕様の変更が入ってるみたいです。

☆2009年5月29日追記
公式からも告知がでました。
■Google Chrome: Dev リリース 3.0.182.3

KAZさんすいません!

blogの見た目の変更していたら漏らしていたコメントに気付きました・・・。
KAZさん申し訳ないですorz。

して今の状況ってどんな具合でしょうか・・・?

あ、blogの見た目変えてみました。
Fusionってtemplateです。

2009年5月25日月曜日

気になる記事

■マルチコア・コンピューティング

仮想化支援技術

第一世代CPU仮想化支援機能


■AMD-V/Intel-VT
・仮想Machineが直接物理CPUコアに命令が出せる
・物理CPUコアが、相手が仮想MachineなのかHyperVisorなのかを判断して処理結果を返せる。

第二世代CPU仮想化支援機能


■AMD-RVI/Intel EPT
・仮想Machineが物理メモリ空間に直接書込が出来る

■AMD Extended Migration/Intel FlexMigration
・物理CPUコアが実装している特殊命令群(SSE等)に差異があっても仮想MachineのMigrationを可能とする機能。

■AMD IOMMU/Intel VT-d
・仮想Machineが、物理PCに搭載されている各種物理デバイス(主にLAN等)を直接制御、占有出来る技術

■VM Chimney/VMQ
TCP/IPの処理をNIC側で行う。

参考
■Intel VTvsAMD AMD-V ハードウェア仮想化 徹底比較

仮想化とクラウドの間

最近色々とクラウド関係の技術やら仮想化技術やらを調べている間に色々思うことがある。
特に自分の試行を整理する為に必要な単語として
仮想化以上クラウド未満

を指し示す言葉がない。

・第一段階:「仮想化」するという事は一個の物理的なPCで複数個の仮想Machineを動かす事。
・第二段階:その次の段階として要求に応じて必要とされる仮想Machineを簡単に準備出来る状態
・第三段階:さらに負荷に応じてその負荷に対応する仮想Machineサーバ構成を動的に変更してくれる「クラウド」


雑誌や俗に言うIT関係の技術を扱うニュースサイト、更に殆どのソフトウェア会社がいうクラウドは第二段階の状態を指し示して
いる。SalesForceを始めとする一連の「SaaS」もほぼ第二段階の環境を利用したサービスだ。

なので実際に段三段階つまり「クラウド」を実現しているのはやはりGoogleとAmazonだけだと思う。

こんな状態でこの第二段階を区別して指し示す言葉が、あるのなら知りたいし、無いのであれば何か定義した方がいいのでは無いだろうか。
逆にこの段階をそのまま区別用語に使ってもいいけど。

2009年5月22日金曜日

Next Target KVM

LinuxがKernel-Levelで持つ仮想化機能。「Kernel-based Virtual Machine」

取り敢えずググったらもっさり出てきた。というわけでいつものようにメモ。
■Ubuntu で KVM (Kernel-based Virtual Machine)

ヲタクら注意

同人系のサイトに猛威をふるう、webサイト感染型のVirusが大流行中。
同人系サイトの感染例が多いため、ヲタク系の方々が大量に感染中。

■通称「GENOウイルス」・同人サイト向け対策まとめ
■GENOウイルスまとめ


皆注意。
とにかく怖いというか面倒なのは、まだウイルス対策ソフトでフォロー仕切れてない事。
感染するとPCが重くなって、FTPでPC内部のファイルを適当に外部に送るらしい。

簡単な確認方法はこっち
とりあえず感染してるか確認する手順(2000・XPユーザー)

http://gdata.co.jp/press/archives/2009/05/geno.htm

2009年5月20日水曜日

Amazonのツールの整理

Amazonの公式ツールに関する情報を纏めて見る。まず翻訳。間違ってたら指摘してクレイ。
※間違ってる可能性高いっすorz
■Amazon CloudWatch を使ってみた
■New Features for Amazon EC2: Elastic Load Balancing, Auto Scaling, and Amazon CloudWatch
カギ括弧で囲まれている英単語はAmazonのサービス名です。

CloudWatch


各InstanceのCPU負荷、DiskのI/O、NetworkのTraffic量等の情報を毎分取得しており、この過去2週間分の統計情報を「Auto Scaling Group」毎、Instanceの型毎、[
Availability Zone」毎等の視点から閲覧する事が出来ます。
なお統計情報取得作業はEC2側が行っているので、個別のInstance毎に何か処理をする必要はありません。
この機能を使えばリアルタイムでEC2上のInstanceの負荷を監視出来して高負荷なInstance等、問題を素早く検出出来ます。

AutoScaling


CloudWatchで取得した統計情報の中の負荷具合に応じてEC2上のInstanceを自動で増減してくれるので、高負荷に反応が遅れたり、不要なInstanceが動いて料金が無駄に増えるのを防いでくれます。
このサービスでは監査証跡(情報システムの信頼性や安全性、効率性、有効性などが確保されていることを実証する為に用いられる情報)を記録しています。
とあるApplicationを提供するInstance群を「Auto Scaling Group」として扱っておりGroup毎に「どのInstanceを、何時、どれくらい」スケーリングするかを設定する事が出来ます。
この設定、或いは「Scaling Trigger」という設定を設け、それらに基づいてInstanceを増減させる事が出来ます。なおGroup内で起動した新たなInstanceのAMI-ID、Instanceの型等の情報はそのGroup内で共有されます。

ElasticLoadBalancing


「Availability Zone」を跨いで複数個のInstanceを一つのLoadBalancer下に置くことが出来ます。
LoadBalancer毎にInstanceIDのリスト、公開URL、利用するポート番号を保持しており、新たに追加されたInstanceをLoadBalancer管理下に加える事ができます。
この機能を利用する場合は貴方が管理するDNSサーバにCNAMEエントリを追加し、このURLと提供するApplicationを関連付ける必要があります。
「HealthCheck」機能を利用するとURLフェッチとPingを通して管理下のInstanceを監視し、管理下のInstanceの問題が発生した場合はそのInstanceが正常に戻るまで、そのInstanceに処理を振る事はありません。

Win7でXPモードを使う方法

Windows7の上位3エディションにて利用可能なXP互換モードの使い方。
■古いアプリを XPモードのWindows 7で使い続ける

最大の魅力は
仮想Machine上のXPにインストールしたソフトだけをWin7上から呼び出して使える事。
つまりわざわざ7のデスクトップを開いて、更にそこにXPのデスクトップを開いて、そこでソフトを起動なんてやらなくて良い。直接アプリが呼び出せる。

なお、GPU仮想化の関係でゲームは出来なさそうです。
参考
■Windows 7のWindows XP Mode、現在わかっていることまとめ

2009年5月19日火曜日

食材メモ

醤油
暮坪カブ
大王山葵

クラウドとユビキタスって何が違うの?

あちら側が何でもいいのがクラウド。こちら側が何でもいいのがユビキタス。

■クラウドとユビキタスの関係をそろそろまとめたほうが、よくね?

超納得。
一応、あちら側→サーバ側。
こちら側→ユーザが利用する端末。

一応堅い言葉で定義しておくと
クラウドとはWebServiceに対して負荷に応じたリソースを自動配分してWebServiceを快適に利用出来るようにしてくれるサーバ側の技術を指す言葉。
ユビキタスとはあらゆる端末から何時でも何処からでもServiceが利用出来る状態を示す言葉。

WebServiceを提供する会社からみれば「クラウドを使ってユビキタスを提供」って事になる訳。

2009年5月18日月曜日

Amazon公式負荷監視

■Category: Developer Tools
AmazonがEC2上のInstanceの監視サービス始めたよ!
コマンドラインで管理しろ、って事だけどJARが提供されてる。このLibraryを組み込んだアプリ作ればいいのかな。

2009年5月13日水曜日

Scalr:作業メモ

Scalrを使ってLocalに立てたEucalyptusを監視させたいんだが、画面上からAmazonEC2のURLを設定している場所が見あたらない。どこかの設定ファイルにあるのかな?と思って探したんだけど見つからず。
まさか、と思って探してみると案の定Programの中にべた書き('A`)。

あ、Eucalyptusのインストールに関しては
CentOS5.3にEucalyptus1.5.1をインストールしてみたに纏まってるんで割愛。
Scalrに関してはこっち
Under the MOON: ScalrをUbuntuにInstallする。

「class.AmazonEC2.php」ってファイルになってるから同じようにphpをかけばLocalのEucalyptusにもつながるかな・・・?
php書いた事ないから勉強しながらやらにゃ駄目だな

気になる文章発見。翻訳間違ってたら教えてください。
■scalr-discuss
I was asked if a thing like scalr was supposed to work outside Amazon Webservices.
I read once that version 2 of scalr was supposed to work on different cluster environments.
Is it still the case. I discovered Eucalyptus this week (http://eucalyptus.cs.ucsb.edu/) and
I still don't understand how this works and how this could work on a personnal cluster.
But if this is the case, would it be possible to use scalr to manage it?

Scalrの様な物がAWS以外の物に対応しているのかと聞かれたが、私はScalrのVersion2は別のクラスター環境にも対応するようになっていたと読んだ事がある。
しかしながら、今週Eucalyptusという物を見つけたが、これを個人クラスタ上でどうやって動かせば良いのか解らない。
仮に出来たとしても、ScalrでEucalyptusを運営する事は出来るのだろうか?

■Scalrに関係のあるものども
nginx
Gluster
安全・確実・大容量・高速なファイルシステム
こんなに簡単! Linuxでロードバランサ (1)

Scalr公式のFAQ

Scalr(スケィラー)公式サイトにあるFAQの和訳を試みる。
ついでに解答を粉飾してみる。私の方で付け加えた情報は※の部分です。
■Frequently Asked Questions
間違ってたら指摘してくれると、泣いて喜びます。


Q1.Scalr使うのにAWSのAccountって必要なの?
A1.必須だよ。
Do I need an AWS account to use SCALR?
Yes, you do need to have an AWS account.


Q2.自分のAWSのAccountIDってどこみれば解る?
A2.AWSにアクセスしてログイン、その後「Your Account > Personal Information 」と移動。その後の画面の右上にある「Account Number」が「AccountID」。
※よく間違える人いるけどログインの時に使うIDじゃないよ。
Where do I get my AWS account ID?
It can be found in "Your AWS Profile" page inside http://aws-portal.amazon.com, find an "Account Number" field.


Q3.「Farm」て何?
A3.特定のApplicationを提供するのに必要な何個かのInstanceの集まりの事を「Farm」と呼ぶ。典型的な例でいえば下記のようなInstanceのSetを指す。
・LoadBalancerが入ったInstance・・・1~2個
・Applicationが入ったInstance・・・2~個
・DBが入ったInstance・・・1~個
What is "farm"?
Farm is a set of instances that are serving one or more applications. Typical farm consists of one or more www instances, two or more app instances and one or more mysql instances.


Q4.「Role」て何?
A4.「Role」は「とある特定の機能を提供する為のAMI」。Scalrの方で幾つかの「共有Role」を用意してあるよ。
・www - LoadBalancerが入ってる
・app - Apacheがはいってる
・mysql - MySQLが入ってる
・base - 何も手をつけていない綺麗なAMI。これを元に独自のRoleが作ってね。
これらのRoleを元に独自のRoleを作る事も出来るよ。
What is "role"?
Role is AMI that is built for specific task. Currently Scalr comes with the following pre-built "shared" roles:
• www - frontend web servers that are proxying HTTP requests to all instances of app role. It can also serve static files with minimal overhead.
• app - instances originally running Apache
• mysql - MySQL master or slave instances.
• base - a clean AMI that can be used to create new roles.
You can also create your own roles based on existing "shared" ones.


Q5.「Application」て何?
A5.「Farm」を利用して提供するWebサイト、或いはWebServiceの事。
What is "application"?
Application is basically a website that is running on a farm.


Q6.「Farm」が再構成された際、DNSって自動で書き換わるの?
A6.ネームサーバの設定をns1.scalr.net, ns2.scalr.net and ns3.scalr.netにしてくれれば、Scalrが巧くやってくれるよ。
※Scalr.netに登録した場合の話。自力で環境作る場合は自分で用意する必要あり。
How do I get my domain DNS zone updated when farm is reconfigured?
Just set nameservers for your domain to ns1.scalr.net, ns2.scalr.net and ns3.scalr.net. Scalr will take care of the rest.


Q7.AppInstanceで仮想ホストって使える?
A7.まだ使えません。1Farm上で複数個のアプリ使いたい時は自己責任で☆
Does Scalr configure virtual hosts on app instances?
Not yet, if you are going to host more than one application of one farm, you are responsible for this.


Q8.MySQLのReplicationってどうなるの?
A8.ScalrはMySQLのReplicationとか設定変更も監視してる。突然MySQL-Instanceが落ちても、他のMySQL-Instanceは動的にMaster/Slaveを切り替えてくれるよ。
How MySQL replication work?
Scalr takes care about MySQL replication and re-configuration. Instances of mysql role can become master or slave dynamically, if any of mysql instances suddenly crash.


Q9.おk。俺のアプリ完成、Farmも立ち上げた。次は?
A9.立ち上げたFarmの中のApplicationInstanceに作ったアプリをアップロードしれ。
OK, I created application, built and launched a farm. Now what?
Upload your application on app instances.


Q10.自分でファイル起きたいんだけど、どこに置けばいいの?
A10.AppRoleのInstanceなら「/var/www」。WWWRoleのInstanceなら「/var/www/nginx-default」。
まぁWWWRoleのInstanceになんか置くことないだろうけどね。
Where do I place my files? What are default directories?
/var/www for app
/var/www/nginx-default for www (you won't place anything here in most cases)


Q11.InstanceにSSH接続したいな
A11.Farmの一覧画面で、画面右のOptionの所から「Get Private Key」を押してダウンロードして。んでこの暗号鍵ファイルを使ってSSHClientとか、Puttyでつないでよ。
How do I SSH into my instance?
Go to the list of farms and click on Private key -> Download. Use this private key with OpenSSH client (-i switch) or Putty to authenticate on all instances in this farm.


Q12.ダウンロードした暗号鍵をPuttyで使うにはどうしたらええの?
A12.ここ見れ。Follow this manual
How do I use downloaded private key in Putty?
Follow this manual


Q13.「Synchronize to all」ってやるとどうなるの?
A13.とあるInstanceに加えた変更を、同一Roleの他のInstanceにも反映させたい時に使えばいい。押すとScalrがそのInstanceをAMIとして保存し直して、順次他の古いInstanceを落とし、新しいAMIを元にしたInstanceに切り替えてくれる。
※すいません。ここよく分からないです。
How "Synchronize to all" feature works?
Say you've made changes to files on some instance. Now you want to save them on all instances in this role, so they will not be lost upon instance crash and on newly created instances. You find the instance in the list and click "Synchronize to all".
• Scalr rebundles this instance
• Scalr terminates old instances one-by-one and replaces them with new ones.


Q14.App-InstanceとWWW-Instanceとの間のコンテンツの同期ってScalrは面倒見てくれるの?
A14.いいえ。自分でやってください。そういうScriptを準備するか、「Synchronize to all」を使ってね。
Does Scalr take care about synchronizing my content between my instances for www and app roles?
No, but you can either take care of this by yourself (a simple rsync script will do the job) or use "Synchronize to all" feature.


Q15.Instanceを制御するのにScalrとElasticFoxみたいのを組み合わせて使えない?
A15.Instance、EBS、ElasticIP等をScalr以外から操作する事は推奨出来ません。例えばElasticFoxからElasticIPの変更をした場合、Scalrはこの操作を殆ど追跡できないので意図しない結果を招く事になります。
Can I use Scalr and other tools like Elasticfox simultaneously to control my instances?
You are strongly advised to not do any changes on your instances, EBS volumes, Elastic IPs etc outside Scalr. Scalr is unable to track these changes in most cases and you can end up with unexpected behavior. Good example is assign of Elastic IP to an instance via Elasticfox.


Q16.「Min LA」と「Max LA」って何?
A16.LAは「LoadAverage」の略。Scalrは全Instanceの最後15分の負荷を元にInstanceの数を調整する。平均負荷が上限設定を超えたら新しいInstanceを立ち上げるし、下限設定を下回ったら一個Instanceを落とすよ。
What are "Min LA" and "Max LA" settings for roles?
LA is a common abbreviation for "Load Average". You can read more on this in this Wikipedia article . Scalr scales your role based on average LA on all instances for last 15 minutes. If LA grows higher than Max LA, new instance is started.If LA fails lower than Min LA, one instance is terminated.


Q17.「Min Instances」と「Max Instances」って何?
A17.Scalrは、LAの制限なんて無視してその二つで指定された範囲内でInstanceの数を調整するよ。
What are Min Instances and Max Instances?
Scalr will keep a number of running instances of particular role between Min and Max, regardless of LA limits.


Q18.Scalr.netから退会したら俺の作ったFarmとかInstanceって止まってくれるの?
A18.いいえ。Scalrから監視もされないでそのまま放置されます。
Will my farms/instances be stopped if I unsubscribe?
No, but you will no longer be able to control them from Scalr web interface and they will not be monitored anymore.


Q19.HTTPRequestなげると、全WWW-Instanceに伝わるの?
A19.ScalrはWWW-InstanceそれぞれにPublicIPを割り当てます。これはDNSラウンドロビンと呼ばれる機能です。別の利用者からのRequestは別のWWW-Instanceに届くでしょう。
How HTTP requests are spreaded across all www instances?
Scalr assigns public IP addresses of all www instances to your application domain name. This is called DNS round-robin. Different visitors/requests will go on different www instances.


Q20.WWWのRoleに入ってるロードバランサーって何?
A20.nginx
What software is running on www role instances?
nginx.


Q21.俺のAMIとかInstanceをScalrに登録出来る?
A21.ごめん。今だとScalrが提供してる「Base」Roleから作った奴じゃないと登録出来ないんだ。次のVersionからはどんなAMIでも登録出来る様になるよ。
※1.0RC5をInstallしたけど、Base以外のも登録できた気がする。
Can I add my existing AMI/instance into Scalr?
For now you can only use Scalr's "base" role AMI to create your custom one. A next version of scalr will allow you to "scalrize" any AMI.


Q22.独自でRoleを作るには?
A22.Base-Roleを一個含めて新規Farmを作成します。でそのBaseの所で「Synchronize to all」オプションを使います。するとどういう名前のRoleで保存するのか聞かれますからそこで作ってください。
※ここも解らん。
How do I create my custom role/AMI out of "base" one?
Include a base role when starting a new farm. Go to a base AMI and use "Synchronize to all" option. You will be asked for a new role name. The new AMI will be owned by you.


Q23.
A23.
I made changes on instance, clicked "Synchronize to all" and now it won't be recognized by Scalr or MySQL snaphsot not working or it hangs in "Synchronizing…..." state.
Make sure that you did not mess essential scalr programs on your instance.
Four things that you should never do when customizing your instance:
1. Deleting/disabling snmpd and snmptrapd
2. Disabling PermitRootLogin or PubkeyAuthentication, changing Port in sshd_config
3. Removing scalr public key from /root/.ssh/authorized_keys
4. Delete the following packages or invalidate their dependencies: ec2tools, s3cmd


Q24.独自で作ったRoleのInstanceでapt-getしたいだけど、絶対に上書きしちゃいけないProgramってある?
A24.apt-getした後、SNMPデーモンが動いてる事は確認してね。あと触らない方がいいDirectoryは「/etc/aws」と「/usr/local/aws」。後「/etc/rc.local」を編集する時は気を付けてね。
I want to run apt-get upgrade on an instance of my custom role. Is there any essential software on scalr AMI that I must keep intact?
Make sure that SNMPd is running after the upgrade. Some important dirs that must not be touched: /etc/aws, /usr/local/aws. Finally, be careful when modifying /etc/rc.local.


Q25.ファイルを利用してSession管理するアプリなんだけど、複数個App-Instanceある時に動作がおかしくならないかな?
A25.その心配はいらないよ。Nginxが利用者のIPとかUser-Agent等を元に特定して利用するServer割り当ててるからね。
※ここもよく分からん。
My application uses file-based sessions. What if my visitor's requests will be proxied to a different app instances?
This wont happen. Nginx is configured to keep visitors bundled to a specific backend server (based on his IP, User-Agent etc).


Q26.DNSゾーン編集しなきゃいけなくなんだけど?
A26.ログインした後、Applications->View->Edit DNS zoneって移動すれば編集画面あるよ
What if I need to edit my DNS zone?
You can do that in Applications->View->Edit DNS zone.


Q27.あるInstanceから、同じFarmで動いてる他のInstanceのIPしりたい時はどうしたらいい?
A27.そういった情報をScalrは「/etc/aws/hosts/」に保存してるよ。例えば「ls /etc/aws/hosts/www」ってコマンドを打つとWWW-Instance群のIP一覧が表示される。或いは「int-{ROLENAME}.domain」みたいな形でサブドメインを使ってもアクセス出来るよ。
How do I know IP adresses of all farm instances from any particular instance?
Scalr stores them in /etc/aws/hosts/ folder. For example
ls /etc/aws/hosts/www
will list all internal IPs of www instances. You can also access them as subdomains int-ROLENAME.domain.


Q28.Roleの外部IP知りたい
A28.「ext-{ROLENAME}.domain」でアクセス出来るよ。
How do I know external IP adresses of my roles?
You can use ext-ROLENAME.domain


Q29.App-InstanceからMySQL-InstanceのDBに接続するには?
A29.
How do I connect to MySQL servers from my application?
Like with any master-slave replication, it is important that your application writes only on master and reads from any. This is because slaves are only reading changes from master.
Here is a simple PHP code that will list your mysql master host (to write on) and all mysql hosts (to read from):
$mysql_masters = (array)@glob("/etc/aws/hosts/mysql-master/*");
$mysql_master_host = basename($mysql_masters[0]);
$mysql_all = (array) @glob("/etc/aws/hosts/mysql/*");
$mysql_all_hosts = array();
foreach ((array)$mysql_all as $h) {
array_push($mysql_all_hosts, basename($h));
}
Another, even simpler way is to use int-rolename.yourdomain dynamic hostnames that resolve to internal IP adresses. Say, you have launched application my.com. MySQL master in this case will be accessible as int-mysql-master.my.com and one random mysql instance will be int-mysql.my.com


Q30.nginxの設定をいぢりたいんだけど?
A30.「/etc/nginx/nginx.conf」を編集して。で「killall -HUP nginx」を投げて動いているnginxを全部止め。
※次から起動するnginxは新しい設定を読む。
How do I reconfigure nginx?
Edit /etc/nginx/nginx.conf and issue "killall -HUP nginx" command.


Q31.
A31.
My application tracks IP adresses of visitors. nginx substitutes visitor IP with it's own IP. How do I know client IP address?
nginx passes IPs in X-Real-IP HTTP header. Modify your application to use this header instead, or set up mod_rpaf Apache module (no code modifications will be needed in this case).


Q32.InstanceのOSって何?
A32.Ubuntu 7.04 GNU/Linux
What OS is running on instances?
Ubuntu 7.04 GNU/Linux


Q33.Scalr.netをやめるには?
A33.PayPalの支払いを停止すればOK。やめても最後の支払いの有効期限までは使えるよ。
How do I cancel my account?
Just cancel your PayPal subscription. You account will remain active until due date.

2009年5月12日火曜日

Scalr:Incorrect XMLってERRORがでる。

Scalr(スケィラー)のこの問題に関する情報をtomoさんからのScalr関連のエントリまとめにコメントとしていただきました。
どうやらApacheの設定の問題みたいです。ApacheのERRORログ見て、Apacheに少し気使ってれば気づいた問題だなこれは・・・。
まぁ何はともあれ早速チャレンジ。
参考:■Get A Sys Admin: Scalr errors after install

ERROR内容。
Scalrをインストールして使っていると所々の画面で下記のようなERRORがでる。
Error Type: LoadXML
Description: Incorrect XML

まず確認するのはApacheのログ。
今回私が使っているのはApache2で、特に素のままであれば下記の場所にログがある。
/var/log/apache2

でこのログの中に「farm_amis.xmlがないぞ( ゚Д゚)ゴルァ!」というERRORがあれば、それを修正します。

下記のファイルを編集する。
vi /etc/apache2/sites-available/default

書き換えるのは「DocumentRoot /var/www」の中の設定。書き換える内容は下記の通り。
AllowOverride None

AllowOverride All

続いてMod_RewriteをLoadする様に設定変更してApacheの再起動
cd /etc/apache2/mods-enabled
ln -s ../mods-available/rewrite.load
/etc/init.d/apache2 restart

動いたー!
tomoさんありがとうございました!

Scalr:phpのHttpRequestClassがないというエラーがでる。

Scalr(スケィラー)で事ある毎にphpの「HttpRequest」Classがねぇよ( ゚Д゚)ゴルァ!とERRORが出てくるのでその解決策を模索。
なんか色々足りない物がある様なのでインストールする。

php5-devをインストール(入っているならそれでおk)
apt-get install php5-dev

Zlibをインストール
wget -P /usr/local/src http://www.zlib.net/zlib-1.2.3.tar.gz
cd /usr/local/src
tar xzf zlib-1.2.3.tar.gz
cd zlib-1.2.3
./configure --prefix=/usr/local
make
make install

libcurl4-gnutls-devをインストール
apt-get install libcurl4-gnutls-dev

pecl_httpのインストール
pecl install pecl_http

でもってphp.iniにパラメータを追加して再起動
echo extension=http.so >> /etc/php5/apache2/php.ini
sudo /etc/init.d/apache2 restart


参考サイト
■Ubuntu PECL HttpRequest インストール
■PHPのHTTPRequestクラスを入れるのに一苦労
■zlib のインストール
■installing curl-devel on amd64

Scalrの構造図

簡単にいうと。ScalrとはAmazonEC2上で動作するWebServiceのスケーリングを自動で行ってくれるProgram。
「ScalrがあればEC2で動作する仮想PCの負荷監視が出来る!」って喜んでる人は一杯いると思う。勿論俺もそう。
でもそろそろその実態がどうなっているのかを把握しないといけない時期になってしまった。という事で調査してみる。
調べながらやってるし、どこか誤解して書いている可能性が十二分にあるんで、鵜呑みは危険です。
もしどこか間違っていたら教えてください。速攻で直します。

まずは分かり易い図から。という事でScalr(スケィラー)の図を和訳してみた。
■Scalr ProcessDiagrams


さて続いてScalr全体の構造の解説。
Scalrは特定のApplicationを提供するInstance群をFarmという単位で管理する。どんなFarmを作るかはScalr上で設定を行い、この設定をFarm定義と呼ぶ。
Farm定義は
このFarmではAPサーバとしてこのAMIを。DBサーバとしてこのAMIを使う。
という形で設定する。
この時の「APサーバ」「DBサーバ」等、ある特定の機能を提供する為の役割を「Role」と呼ぶ。
ScalrではこのRoleを予め幾つか用意しているので下記に紹介する。またRoleは自分達で新たに作り追加する事が出来る。
WWW Role・・・LoadBalancerの役割。Nginxを搭載。
App Role・・・APServerの役割。Apacheを搭載。
DB Role・・・DBServerの役割。MySQLを搭載。
Base Role・・・独自Role構築用


Farm内で「AP サーバ」RoleのAMIから作られたInstance群はAP サーバ「Role Group」と呼ぶ。
ScalrはこのRole Group毎に負荷を監視し、Role Group内のInstance全体の負荷が増加した場合、そのGroupにInstanceを追加する。
なお基本的にInstance の追加などに伴うIP 管理等はScalr がDNS サーバを書き換えて対応している。

さてScalrの最大の売りである自動負荷対応機能だが、特定のRoleGroupに所属する全Instanceの最後15分の平均負荷から判断する、というアルゴリズムを搭載している。
なお新規Instanceを立ち上げる平均負荷の基準値、Instanceを減らす平均負荷の基準値、及び最大Instance数、最低Instance数、Farm立上時の初期Instance数もScalrの画面から設定する事が出来る。

Scalrが想定しているのは
Client
Load Balancer/WWW Server・・・(Nginx)
Application Server・・・(Apache)
Database Server・・・(MySQL)

という4層構造。

APサーバのInstanceが増減した場合はScalrがDNSを更新する。
APサーバを担当するInstanceが増加した場合はLoadBalancerであるNginxがDNSに基づきAP
サーバInstance群を管理する。
DBサーバのInstanceが増減した場合はScalrがDNSを更新する。
ScalrではMySQLをDBとして採用しており、このMySQLの自動クラスタ機能(Master/Slave設定)
機能を利用してDBサーバをクラスタ化管理している。

恐らく企業用途ではOracleを使う機会が多くなると思うがMySQLの代わりにOracleを使ってこの辺りが巧くいくのか、現段階の私では解りません。
知っている方いたら教えてください。

2009年5月11日月曜日

Scalr関連のエントリまとめ

自分が見にくいので。Scalr(スケィラー)関係のエントリを纏めて見る。

■ScalrをUbuntuにInstallする。
■Scalrを日本語化したい
■Scalrの設定
■Scalrの構造図
■Scalr:phpのHttpRequestClassがないというエラーがでる。
■Scalr:Incorrect XMLってERRORがでる。
■Scalr公式のFAQ

残りの問題
・DNSの設定
・rrdtoolの設定

Scalrの設定

Scalr(スケィラー)の設定リスト

■Admin account
・Login: (任意の文字列)
・Password: (任意の文字列)
・E-mail: (任意の文字列)
・Name: (任意の文字列)

■eMail settings
・SMTP connection: (右記の形式で書く。user:password@host:port. Leave empty to use MTA)
・Scalr team emails: (送信先Addressを改行区切りで並べる):

■Log rotation settings
・Keep logs for: (任意の数値)

■DNS settings
・Dynamic A record TTL: (任意の数値)
・Default SOA owner: (URL)
・Default SOA parent: (URL)
・Default SOA TTL: (任意の数値)
・Default SOA Refresh: (任意の数値)
・Default SOA Retry: (任意の数値)
・Default SOA Expire: (任意の数値)
・Default SOA Minimum TTL: (任意の数値)
・Named.conf Zone template: (記載されているテンプレートに従った書式)

■AWS settings
・Account ID: (EC2にログインする際に利用するID)
・Key name:
・Access key: (Home > Your Account > Access Identifiers > Access Key ID and Secret Access Key > Your Secret Access Key)
・Access key ID: (Home > Your Account > Access Identifiers > Access Key ID and Secret Access Key > Your Access Key ID)
・Security groups prefix: (EC2にて自分が利用しているSecurityGroup)
・S3cfg template: (記載されているテンプレートに従った書式)
・Instances limit: (任意の数値)

■RRD statistics settings
・Path to rrdtool binary: (rrdtoolのDirectoryPath。「which rrdtool」で取得可能)
・Path to font (for rrdtool):
・Path to RRD database dir:
・Statistics URL: Allowed tags:
・Store graphics in:
・Path to graphics:

■Application settings
・Path to snmpinform:
・Event handler URL:
・Terminate instance if it doesn't send 'rebootFinish' event after reboot in (任意の数値) seconds.
・Terminate instance if it doesn't send 'hostUp' or 'hostInit' event after launch in (任意の数値) seconds.
・Cron processes number: (任意の数値)
・Server IP address: (IP)

■Apache settings
・Default document root: (DirectoryPath)
・Default logs dir: (DirectoryPath)

Scalrを日本語化したい

軽くググってみてもScalr(スケィラー)日本語化ファイル等は見あたらない。これはひょっとして自力でやれという事か?
という訳で日本語化する為のちょっと調査。
どうやら
/var/scalr/app/templates/
に各言語のファイルがある模様。でもja-JPファイルはない。

取り敢えずen-USをコピーして作らないと駄目か

ScalrをUbuntuにInstallする。

Scalr(スケィラー)をLinux族Debian系UbuntuにInstallする為のメモ。適宜内容は追加、修正していきます。
参考:Get A Sys Admin: How to install Scalr on Ubuntu 8.10 EC2 Instance

今回はUbuntu9.04Serverを利用。なぜかって?最新版が好きだから(゚Д゚)。

1.OS自体の準備。


まず最初にUbuntuをInstall。インストール途中の設定でLAMP機能、SSH2機能をインストール。
MySQLインストール時にパスワード設定するからお忘れなく。
インストールおわったらとりあえずシステム更新。Ubuntuでroot権限やる時は
sudo -i

更新おわったら再起動
apt-get update
apt-get upgrade
shutdown -hr now


2.追加パッケージのインストール


後から追加するよりも、本当ならOS入れる時に選択してるのがスマートなんだろうなぁ。
パッケージ入れ終わったらApache再起動を忘れずに。
apt-get install bind9 mysql-server mysql-client apache2 php5-cli libapache2-mod-php5 php5-mysql php5-mcrypt php5-mhash php5-snmp make rrdtool snmp php5-dev libcurl4-gnutls-dev php-pear libssh2-1 libssh2-1-dev

で次にApache再起動
/etc/init.d/apache2 restart


3.SSH関係のインストール


次に一番の難関SSH2周り。ここが難関。
取り敢えずまず下記のコマンドを打ってインストール試行
pecl install ssh2 "channel://pecl.php.net/ssh2-0.10"

もしこの状態でエラーが出ずにインストール出来たならラッキー。次へ進む。もしエラーが出たら(殆どの場合出ると思うけど・・・)下記の作業を実施する。
SSH2のSourceの一部を修正する。SSH2.Cファイルの480行目付近を変更する為にファイルを開いて
vi /tmp/pear/download/ssh2-0.10/ssh2.c

480行目辺りまで移動して下記の様に書き換える
#if LIBSSH2_APINO < 200412301450 ↓ #if false


再度インストール試行
configure
make
make install
echo extension=ssh2.so >> /etc/php5/apache2/php.ini
/etc/init.d/apache2 restart


4.Scalr本体のダウンロードと解凍


さてやっとScalr本体に手をつけます。
wget http://scalr.googlecode.com/files/scalr-1.0RC5.tar.gz
tar zxvf scalr-1.0RC5.tar.gz

解凍したファイルの中にあるMySQL用のSQLを実行する
mysqladmin -p create scalr
mysql -p scalr < scalr/sql/database.sql


SQL終わったらScalrを移動させて、各種パーミッション設定。
mkdir /var/scalr
cp -R scalr/* /var/scalr/
chmod 777 -R /var/scalr/app/cache /var/scalr/app/cron/cron.pid /var/scalr/app/etc/.passwd
chown www-data:www-data -R /var/scalr/app/templates/
chmod 777 -R /var/scalr/app/templates/
rm -rf /var/www/
ln -sf /var/scalr/app/www /var/
chmod a+rX -R /var/www

でインストール終了。

5.ScalrにMySQLの設定をする


次にScalrにMySQLの接続設定をする
/var/scalr/app/etc/config.ini を編集して
vi /var/scalr/app/etc/config.ini

下記の内容を追加する。
[db]
driver=mysql;
host = "localhost"
name = "scalr"
user = "root"
pass = "*YOUR PASS HERE*"


6.Cronを設定する


定時実行処理を設定するのでCron設定ファイルを開いて
vi /etc/crontab

下記内容を追記する。
* * * * * /usr/bin/php -q /var/scalr/app/cron/cron.php --Poller
1 1 * * * /usr/bin/php -q /var/scalr/app/cron/cron.php --RotateLogs
*/15 * * * * /usr/bin/php -q /var/scalr/app/cron/cron.php --MySQLMaintenance
*/6 * * * * /usr/bin/php -q /var/scalr/app/cron/cron.php --DNSMaintenance
*/3 * * * * /usr/bin/php -q /var/scalr/app/cron/cron.php --DNSZoneListUpdate
*/2 * * * * /usr/bin/php -q /var/scalr/app/cron/cron.php --DBQueueEvent
*/11 * * * * /usr/bin/php -q /var/scalr/app/cron/cron.php --Cleaner


7.EC2接続用のファイルを設置する


XXXの部分は個々のAccountで違う値。certで始まるファイルとpkで始まるファイルの二つを下記の場所にアップロードする
/var/scalr/app/etc/cert-XXXXXXXXXXXX.pem
/var/scalr/app/etc/pk-XXXXXXXXXXXX.pem


8.Apacheの設定


Scalr:Incorrect XMLってERRORがでる。の関係。
下記のファイルを編集する。
vi /etc/apache2/sites-available/default

書き換えるのは「DocumentRoot /var/www」の中の設定。書き換える内容は下記の通り。
AllowOverride None

AllowOverride All

続いてMod_RewriteをLoadする様に設定変更してApacheの再起動
cd /etc/apache2/mods-enabled
ln -s ../mods-available/rewrite.load
/etc/init.d/apache2 restart


9.phpのpecl_httpのインストール


Scalr:phpのHttpRequestClassがないというエラーがでる。関係。
Zlibをインストール
wget -P /usr/local/src http://www.zlib.net/zlib-1.2.3.tar.gz
cd /usr/local/src
tar xzf zlib-1.2.3.tar.gz
cd zlib-1.2.3
./configure --prefix=/usr/local
make
make install

pecl_httpのインストール
pecl install pecl_http

でもってphp.iniにパラメータを追加して再起動
echo extension=http.so >> /etc/php5/apache2/php.ini
sudo /etc/init.d/apache2 restart




最終更新
2009/05/13
・XMLのERRORと、httpRequestのERROR対応の為の内容を追記
・Templateファイルを画面上から設定する為のコマンドを追記。

2009年5月1日金曜日

豚(トン)フルエンザの情報

2009年インフルエンザ様疾患(ILI)時系列まとめ
4/24メキシコにて「メキシコの死亡例は25~45歳の健常成人が目立つとの報道」

5/1の午前一時現在。
成田でA型感染疑惑者と、どっかで豚フル観戦疑惑者。計2名確認らしい。
WHOが発表している通り豚フルは弱毒性。メキシコだけで異常な致死率が出ているだけ。
メキシコ以外での死者はアメリカで1歳の赤ちゃんのみ。
WHOが警告しているのはあくまで感染であって、病死ではない。
相変わらずそのあたり激しく大げさに書いてる報道大杉。
関係ないけど今回のメキシコだけ高い致死率の考察でこれがおもろかった
■[時事]豚インフルエンザの拡散と人類の拡散