2013年3月20日水曜日

VERDE でVID環境の構築実験

久しぶりの更新。

IBMのやってるシス生ってUst番組で知ったVERDEっていうVDI基盤を動くところまでという感じで試してみたのでメモ。

LoveなのはCitrixのXenDesktopなので、それとの比較になる感じで書いてみる。


■インストール
VERDE自身を稼働させるにはLinux系OSが必要。今回はCentOS6.3のx64を使用。
インストールでは、いくつかのモジュールが必須だった。
・java
・libaio
・libXrandr
・libXfixes
が記載されていたけど、実際にはmkisofsが入っていないとNGのようで、最小構成から追加した状態だとうまくいかなかった。パスも通したし問題ない状況まで持っていったけどダメだったから最小構成+適当なライブラリ追加した状態でOSの再インストールを実施、。その後はうまくいった。
mkisofsはデプロイするOSイメージをISO化するのに使ってるのかな?
iptablesの設定やユーザの追加、パスワード設定などありがちな項目。
SELinuxは停止(Disabled)が必要。

VERDE自体のインストールはrpmでサクッと完了。
初期設定はCLIで番号を選んでいく形。


■利用者・管理者端末の設定
VDIツールっぽいのをインストールする必要がある。
ここも注意が必要で
・VERDE VDI User Tools(32-bit or 64-bit)
・VERDE VDI User Tools(GPL)
の2つを入れる必要がある。もう少し分かりやすいように名前を分けてくれるといいと思う。

これはちょっと分かりにくいかな・・・


このように、VDI用仮想PCの画面に文字が表示された場合
VERDE VDI User Toolsのどちらかが入ってない可能性が高い


■インストール後の初期設定
VERDEは、マネジメントコンソール的なものがWebで提供される。ユーザがログインするコンソールも同じ。Citrixさんはユーザログイン用と管理用コンソールがアプリで分離されているからこの変の違いはあるね。(ユーザが接続するのはWebInterfaceで、管理はWebからではない)

ブラウザでアクセスして設定を行うけど、ここで少しはまった。(マニュアル嫁って話だけど)
上で書いたようにユーザが利用するためのコンソールも、管理用のコンソールも同じサーバで同じくブラウザでの接続。よく管理用ポートが分かれていたりするけど、VERDEの場合はディレクトリで分離されてた orz

https://<サーバのIP>:8443 ←VERDE User Console と表示される
で接続すると、ユーザ用のログイン画面が表示される。

最初に接続しなければならないのは

https://<サーバのIP>:8443/mc ←VERDE Console と表示される
でマネジメントコンソール。ここが注意点。最初に接続するとパスワードの変更画面が出てきた気がする。


■マネジメントコンソールでの作業
・ユーザが利用する基本OSイメージの作成(ゴールデン・マスタ というらしい)
・ユーザを作成し、公開するゴールデン・マスタの関連付け

こんな感じで実にあっさりと利用できるようになる。


■VERDEの動き
深いところまでは分からないが、動かしてみて分かったことをメモしておく。
・仮想PCにはNICが2つ認識させられている。(ネットワークモードがデフォルトのNATだったから)
 それぞれのNICにはブリッジすべきネットワークとは別のネットワークが割り当てられる。
・ユーザプロファイルがDドライブに作成される
・標準の状態だと、停止→起動を行うとユーザプロファイルは初期化される?(未確認:デスクトップに配置したファイルは消えた)
・利用者端末と仮想PCの接続は、常にVERDEサーバを通じて行われる。


■XenDesktopと動きの比較
最後の「利用者端末と仮想PCの接続は、常にVERDEサーバを通じて行われる。」
という点について。これはXenDesktopと圧倒的に仕組みが違うので少し考えてみたい。

出典:オリゾンシステムズ
http://www.orizon.co.jp/products/verde/

販売元のオリゾンシステムズさんのサイトから拝借した図。つねにVERDEサーバが中継して通信が行われることが分かる。つまり、VERDEサーバが稼働していない状況だと、ユーザは利用できない事になる。


XenDesktopは、以下の流れとなっている。
出典:ThinkIT
http://thinkit.co.jp/article/1003/1


VERDEは、VDIと利用者端末間を中継しいているイメージ。
XenDesktopはIDによる利用者端末とVDIのひも付けだけを行いそれが終わった後は利用者端末とVDIが直接通信を行う。つまり、一旦関連付けが終わればコネクションを管理するサーバは稼働していないくても問題ない。利用中のユーザは影響を受けない。
ただし、CitrixにもVERDEのような動きをさせる事も可能。プロトコル変換を行うAccessGatewayやSecureGateway、NetScallerにもこの仕組みが搭載されている。外部からHTTPSで接続を受け、内部のVIDにプロトコル変換を渡して通信を中継する。常にこのGatewayを中継しながらの通信となるのでここに問題があれば利用者は利用できない。

どちらが良いか、悪いかは運用やサービスレベル、提供範囲に寄るので簡単には決められない。
Citrixでは別途仕組みが必要な事をVERDEで行えばつるしのままでOK。

検索してみたところ、UserConsoleを公開しているところはいくつかあった。
簡単に外部からの接続ツールとして利用するのも使い方の一つだなと思った。

VERDEがXenDesktopと違うポイントはまだある。
・ActiveDirectoryが必須ではない。(独自ののID/Password管理が可能)
・LinuxOSのVDI化が可能
・WindowsServer2008R2 DatacenterEditionをゲストとして利用可能(ライセンス制限による1ホスト上のゲスト数は無制限)


■まとめ
ほんのさわり程度しか触ってないのでまとめもなにもないんだけど、確かに簡単に利用できるイメージはある。
VDIとの接続は基本的にはVNCのようだけどローカル環境ではほとんど違和感を感じなかった。WANを超えるとどうなるかも試してみたかったんだけど、ちょっと私自身のパワー不足で orz

価格がよくわからないけど、単純にVID化して使いたいって場合のコストメリットはあると感じた。って事で。

2013年2月13日水曜日

XenServer 6.1の「activate free xenserver」ボタンがグレーアウトされてアクティベートできないぃ!!(涙目

こんにちわ。

つい先日自宅のXenServerを5.6から6.1に変更しました。
ライセンスは後でいいや。と思っていたら、あと16日となったので手続き開始。

XenCenterで該当サーバに接続して手続きをしようとしても
「activate free xenserver」がグレーアウトのままで押せない^^;

これはピンチです。貴重な日曜日を割いてサーバを移設したのに・・・再インストールとかだったら全米が泣くレベル。

よく考えたらXenCenterのバージョンをあげてなかったな・・・
と思ってXenServerにブラウザで接続。インストーラをゲットしてインストールを実施。

再度接続したらあっけなくアクティベートするサーバを選択することができました。

XenCenterもXenServerと同じバージョンを使いましょうねって事ですかね。


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月3日日曜日

AccessGateway 個人的な関連ナレッジ

個人的に構築する際にはまった内容のまとめ。

◆ログイン後に401エラーが発生する。

AGで認証後に401エラーとなる場合は、SSL証明書関係の不備の可能性が高い。
WebInterfaceサーバにもAGの証明書を認証している中間認証局の証明書が必要。
オレオレ証明とか使ってる場合は必須となる作業だと思う。

CTX126312:Citrix Access Gateway Enterprise Editionのログオンページで認証に成功した後に、「401 - 権限がありません:資格情報が無効であるため、アクセスが拒否されました」というエラーメッセージがWebブラウザに表示される
http://support.citrix.com/article/CTX126312

証明書をインポートするが、ユーザとしてでなく、コンピュータとしてインポートする。



◆AccessGateway用のサイトをWebInterfaceに作る際の注意

簡単に作れるが、HTTPSとHTTPの違いや単純なパスやファイル名の入力ミスに注意する。
また、ICAプロキシとして稼働させる場合は、ag用サイトの「セキュアなアクセス」の設定は
・ゲートウェイ直接を指定
・アドレス(FQDN)にはAccessGatewayのドメイン名
・ポートは443
セッション画面の保持を有効にする のチェックがデフォルトなのでチェックを外す
以上で設定する。


◆Online PluginのダウンロードをWebInterfaceからに変更

C:\Program Files (x86)\Citrix\Web Interface\5.4.0\Clients\Windows\Online Plug-in に
CitrixOnlinePluginWeb.exeを配置する。

C:\inetpub\wwwroot\<サイト名>\conf の WebInterface.conf を編集し

# ClientIcaWin32=Filename:CitrixOnlinePluginWeb.exe の先頭のコメントを削除

これでクライアント側に何もない場合はCitrixサイトではなくWebInterfaceからダウンロードできるようになる。

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さん、ゴメンナサイ。

次回に続く

2013年1月4日金曜日

Linux関連Tips (基本的な事)

Linuxで運用するにあたって操作に慣れる必要があるので必要な事のメモ。
AWSでの運用を考慮して。


■sudo su - で rootに昇格できるのはec2-userだけ。
これを変更するには
 1)ユーザを作成
 2)ユーザをWheelグループに追加

■wheelグループに所属しているユーザ一覧の表示
grep wheel /etc/group

■ユーザ一覧の表示
cat /etc/passwd

■ユーザの作成
adduser <ユーザ名>

■作ったユーザをwheelグループに所属させる
usermod -G wheel <ユーザ名>