ラベル AWS の投稿を表示しています。 すべての投稿を表示
ラベル AWS の投稿を表示しています。 すべての投稿を表示

2013年2月5日火曜日

はじめてのAWSでわかったこと、わからないこと -3-

第三回目です。そろそろ終わりかな。

2NIC構成のマシンをAutoScalingでデプロイすると1NICになる

どうやってもわからなかったので、今なお1NICでデプロイしています。
AutoScalingで2NICのWebサーバをデプロイしたい。上はELBからのバランスを受けて後ろではNFSサーバと接続したい。
こういう構成でAutoScalingを使いたかったので。

でも、AutoScalingするときに2NICにできない。設定が無いような気がする。
実際に2NIC構成をデプロイする方法、ご存知であればご教示いただけませんか。


ELB作成時に2Zoneの構成とし、片側にだけインスタンスをぶら下げると不定期にWebの表示が行えなくなった

ELBを作成してぶら下げるインスタンスを選定します。セオリーに従い2つのZone上のインスタンスをぶら下げる予定でした。ですから2つのAvailabilityZoneを設定しましたが、この時点ではぶら下げるインスタンスは1個しかありませんでした。
それでも設定は可能なので2つのAvailabilityZoneを設定したのに1つのAvailabilityZone、1台の構成で検証を続けました。
すると、不定期に無応答となり、気がつくとまた応答が帰ってくるような状況になりました。
ApacheのログをみるとAccessに来ていないようです。
この状態でELBのPublicDNS名をLookupしてみると2つのIPが帰って来ました。もしかすると、インスタンスが無い方のAvailabilityZoneに行こうとしているのかなと思いELBの設定からインスタンスが無いZoneを削除しました。
これで再度Lookupすると帰ってくるIPアドレスは1つとなりました。
その後は正常にアクセスできるようになりました。

ヘルスチェックしてるから、インスタンスが無い方には行かないと思っていましたが、最初から2つのAvailabilityZoneを指定してインスタンスを置かない状況だと行っちゃうこともあるのかな?
それらしき原因は見当たるけど、これが意図した動きなのかどうかは不明。
だから、最初から2Zoneを構成してインスタンスを置かないというような事は止めておきます。
必要ならAvailabilityZoneを増やしてインスタンスを追加します。

インスタンスはAvailabilityZoneをまたいで2NICの構成はとれない

VPC内にNFSサーバをおいた場合、AvailabilityZoneをまたぐと2-3ms程度の遅延が発生するので、同一AvailabilityZoneでNFSを組みたかったのですが、どうするかな・・・と考え。
そうだ!NFSを2NICにして、それぞれのAvailabilityZoneに出せばいいじゃん!オレカッコイイ!とか安易に考えたのですが・・・
結果はインスタンスがあるAvailabilityZoneと同じところにしか2つ目のNICを作る事ができませんでした。
当たり前といわれば当たり前かもしれませんが、当たり前じゃ無いことができちゃうAWSなので。

サブネット内にDHCPによる動的割り当てと明示的な固定割り当てが共存して良いのか

最初のシンプルな構成はPrivateIPを固定して構成しました。その後AutoScalingで自動的に仮想マシンをデプロイする場合はDHCPでの割り当てとなると思います。
このような場合、同じサブネット内に静的に定義されたIPとDHCPによる自動割り当てが混在する事になります。果たしてIPアドレスのバッティングが発生しないのかが疑問でした。
DHCPの動作を考えればバッティングしてもそのまま重複したままということは無いんじゃないの?というのが大方の意見でしたが、AWSとしてこれはどういう動きをするのか、とても知りたいです。
こちらも動作の仕様をご存知の方がいらっしゃれば是非ご教示ください。


他にも色々あったのですが、いい勉強になりました。
AvailabilityZoneとネットワークまわりの理解は進んだ気がします。
インスタンスタイプやその他のサービスについて、もう少し理解したいです。

2013年2月1日金曜日

はじめてのAWSでわかったこと、わからないこと -2-

引き続き、実際の構築で色々あった内容の総括です。

EC2環境のインスタンスにEIPを設定していても、インスタンス停止→開始のタイミングで勝手に外れる

基本的なオペレーションはManagementConsoleから実施しています。

停止→起動のタイミングでいつまでたってもEIPが割り当てられず ん?? となっていました。

Google先生に聞いたところ、解決方法まで示していただけている先人がおられたので参考というか丸パクリで解決です。

EC2 インスタンス起動時に自動で EIP をセットする (AWS Advent Calendar 2012 20日目)
http://dogmap.jp/2012/12/20/aws-advent-calendar-2012-day-20/

やってる事としては、インスタンスが起動してきたタイミングで自動的に実行されるCronを仕込んでおくというものです。インスタンス内には「EC2 API Tools」等のインストールが必要です。
今回は、AmazonLinuxでインスタンスを作成していたため、最初から入っていました\(^o^)/

Cronの先頭を @reboot とすると、起動時だけに実行されるCronになるんですね。知らなかったです。
他にもあるみたいですね!

@yearly → 0 0 1 1 * と同意
@monthly → 0 0 1 * * と同意
@weekly → 0 0 * * 0 と同意
@daily → 0 0 * * * と同意
@hourly → 0 * * * * と同意

と、寄り道しましたけど、これで誰がオペレーションしても確実にEIPが割り当てられるようになりました。

EC2やRDSのパッチってどうなってるの?

これも不明でした。特にAmazonLinuxを使うという事が確定していまいたがパッチの提供方法や適用について誰も知らなかったので調べてみると、これも自動的に適用されるという事が分かりました。

自動的に適用されるためのスケジュールがManagementConsoleに示され、それまでの範囲内で管理者の希望する日時に再設定も可能なようです。

Amazon Elastic Compute Cloud Maintenance Help Page
http://aws.amazon.com/jp/maintenance-help/

2013/02/01修正
↑これは、ハイパバイザレベルのパッチに関する記述でした。

正しくは、Amazon側が用意したリポジトリにパッチが挙げられるので、その後利用者側にてアップデートが必要なようです。
検索を行なってみると、インスタンスコンソールにログインした際にアップデートがある旨のメッセージがでるとの記事がありました。


RDSについては、DB作成時に自動的なマイナーアップデートを行うか否かのチェックボックスがあるのでこちらで設定を行います。
適用時期についてはEC2と同じくManagementConsoleで確認することができます。

Amazon RDS よくある質問
http://aws.amazon.com/jp/rds/faqs/#75

作成した2NIC構成のインスタンスをAMI化。手動でデプロイしてみたけど、2個目のNICが正しく認識されない。

2NICとしてWebサーバをAMI化し、それを手動でデプロイしてみましたが、2個目のNICがいつまでたっても通信できません。

ip addrで確認すると、Eth0,Eth2として認識されているようです。ifcfg-eth2をみてみると、実際に接続されているENIとは異なるMACが記載されています。
結果的には

/etc/udev/rules.d/70-persistent-net.rules
を削除し、再起動することで認識されました。
AMI化する前のベースインスタンスで、/etc/udev/rules.d/70-persistent-net.rulesを削除した後に停止。この状態をAMI化することで手動デプロイを行なっても問題なく利用できるようになりました。
運用時のオペレーションに制約が増えてしまいますが、これはやむを得ないのでしょうか。
良い案がありましたら是非、ご教示ください。

メンテナンス用のOpenVPNサーバに接続しても、VPC側にパケットが流れない。

これは、少しハマったというか今回の件以前からうまくいかなかった事です。
今回の構築で解決できて、個人的にもすっきりしました。
AmazonLinuxにOpenVPNサーバを構築し、TAP構成としてクライアントから接続を行います。
OpenVPNサーバとクライアント間はあっさりと接続できていますが、VPC側にパケットが流れません。VPC側のルーティングは途中で気づいたのですが、あと2つ設定が必要でした。

一つは、OpenVPNサーバのIPパケット転送を有効にする事でした。
/etc/sysctl.conf を編集して
net.ipv4.ip_forward = 1
とする必要がありました。

2点めは、AWSのManagementConsoleで行いました。
OpenVPNサーバのインスタンスを右クリックし「Change Source / Dest Check」をDisableとする必要がありました。

どれも、検索すえば出てくるようなものですけど、メモ。という事で。

次回に続く(かな)

2013年1月30日水曜日

はじめてのAWSでわかったこと、わからないこと -1-

機会があって、初めてAWSを使って仕事をしました。
とある公開Web系サービスの構築です。

公開系自体、あまり経験がないので色々な意味でいい勉強になりました。
今回は、AWS環境ではまった内容、わからなかった内容、未だに謎な項目を上げておきたいと思います。

せっかくですので発生した順に並べます。

CDP(Cloud Design Pattern)を、どうやって実装すればいいの?

やりたい事、簡単な構成を書き出し、CDPの「NFS Sharingパターン」が近いという事で認識が一致しました。
NFSサーバ上にソースを配置してとりあえず2台のWebサーバ+NFSをELBでバランスさせることとなりました。基本的な構成だよねって事でインスタンスをデプロイ。

ん?でも・・・これって。
インスタンス同士はネットワーク的に、どういう風に接続されてるんだろう。

IPアドレスもバラバラだし。どうなってるんだろう。全くわかりませんでした。これらがネットワーク的につながっている事はPingを発射してわかりましたが、そもそもこのままでいいの?単純な疑問でモヤモヤとしましたが、ネットワークを好きに設計できないEC2はそんなもんだという事で納得しました。

EC2環境で構成を始めたけど、NFSでパフォーマンスが出ない

公開系サービスで凝った事するんじゃないからEC2でいいんじゃない?という満場一致の賛成意見によりEC2環境で構築を行いました。
NFSの構成も特にハマる事なく完了。でも、いざソースを配置してELB経由で動かしてみると・・・

「遅い・・・」
Webサーバのローカルにソースを置いた状態よりも遅い。明らかに遅い。
そもそも構成的にNFS接続用のネットワークを分離していないため、後々レスポンスの問題は発生するだろうと思ってはいました。
でも、今の環境はWebサーバ2台、しかも1台だけでの接続でこんなに遅いなんて!('A`)

まず、WebサーバとNFSサーバ間のネットワーク的な遅延を考えました。この間のPingによる折り返し応答は2-3ms。LANという意識としては遅延が大きいです。
遅い原因はこれだろうと考えました。

でも、解決する方法があるのだろうか?そもそもEC2環境に実装した時にIPアドレスはバラバラだしネットワーク的にどうなっているのかも理解できていないままでした。
そこでVPC環境でサブネットを切り、そこにWebサーバとNFSサーバを配置して、同一のサブネットでどうなるかを実験してみました。
すると、Pingの折り返しは0.5ms以下となりました。
これで問題は解消されるはずだと判断し、VPC環境に同じ構成を構築しました。
その結果

若干のレスポンス解消は見られたものの、根本的な解決にはいたっていませんでした。


NFSの構成自体に慣れてないため、根本的な過ちを犯している可能性もあります。
Twitterにて状況をつぶやいていると、色々な方から助言をいただくことができました。ソースを作っているチームに話を聞いてみるとNFS上にはソースを置いているだけでなく様々なテンポラリも配置していることが分かりました。試しにテンポラリをWebサーバのローカルに吐くとレスポンスの悪化は見られません。
以上の事から、テンポラリを吐くタイミングでレスポンスが悪化しているのではないかと想定され、これについてNFSマウントオプションでasyncを設定してみる事で回避できるのではないか?とアドバイスを受けました。
結果的にはこれが正解でした。NFSクライアント側のマウントコマンドをsync→asyncとすると良好なレスポンスを得られるようになりました。

EC2環境とVPC環境の違いを舐めきってました。ただ単にサブネットが自由につくれるぐらいの認識しかありませんでした。
VPCさん、ゴメンナサイ。

次回に続く