Pages

2010/09/27

WindowsのmsysGitからGithubを利用するときの秘密鍵設定

Gitに慣れがてら、Githubを使います。
 

クライアントはPCがWindowsなのでmsysGitをセットアップ。
msysGitはsshやらssh-keygenがついているのでGithubリポジトリへsshアクセス、キーペアの準備は問題ない。

2010/09/26

GAEでjruby、windowsからデプロイ・後編

前回はgoogle-appengine のgemを入れたとこまでやったので、その後。
 
 

続きと言いつつ、windowsでやるなら最初からjrubyでやったほうが楽ぽいのでローカルからjruby、こんな環境で。


C:\ruby\jruby-1.5.2\bin\jruby --version
jruby 1.5.2 (ruby 1.8.7 patchlevel 249) (2010-08-20 1c5e29d) (Java HotSpot(TM) Client VM 1.6.0_21) [x86-java]

 
 

2010/09/25

VMWare ESXiでLeftHandの評価版をセットアップ

分散ストレージが欲しい、iSCSIがよい? ならばLeftHandが選択肢の1つ。
Virtual SAN Appliance(VSA) は60日評価版がある、早速環境構築だ。
 

60日フリーデモ付きの製品紹介ページはこちらから
http://h18000.www1.hp.com/products/storage/software/vsa/index.html


 

HPサイトへのユーザ登録が要るが、瑣末なことなのでさっさと登録しよう。
まずはESXi向けをダウンロードだ、構築していこう。
 
 

2010/09/24

GAEでjruby、windowsからデプロイ・前編

以前は色々と面倒だったが、google-appengineというgemでJrubyをGAEに持っていきやすくなったと聞いてwindowsからアプリのデプロイでもしようとしてみました。
 


まずrubyを入れて、gemを使えるまで


rubyからかよ!と思うかもですが...
jrubyは入れてたのですが、参考サイトがjrubyでなくて普通のruby(cruby)だったので、それにならって普通のrubyをWindows7に入れる所から。
 


Rubyのダウンロード
http://www.ruby-lang.org/ja/downloads/



mswin32版のバイナリをいれます。
一番下にあった1.9.2だとgemsのpathエラーとかになって困ったので1.9.1にします。

ZIPを展開してC:\ruby\ruby1.9.1\ に配置、パスは必要になったら通そう。
pythonとかrubyはとりあえず置けばバージョン別につかえていいよね。
 

さてgemsが要る。
 

2010/09/23

Apache httpd のコンフィグで、ホストヘッダ判別によるアクセス制限をする

NameBaseのVirtualhostじゃなく、Host: のホストヘッダで画面制御をしているWEBアプリのアクセス制限が必要になりました。
 

ああ、Virtualhostなら普通にmod_authz_host(旧mod_access)のAllow,Denyでいいのに。。
パッケージなのでアプリに直接手を入れたくないから他で何とかしなければ。
 

という事で、こんな要件をApache httpdのコンフィグで実装してみることに。

  1. リクエスト先のホストが"staffonly.example.jp"だったらアクセス拒否、それ以外宛は許可

  2. 特定のIPからの要求だけはstaffonlyも許可


 

結局mod_setenvifに手伝ってもらってできた。


<Location />
SetEnvIfNoCase ^HOST$ "staffonly.example.jp" STAFFONLY
SetEnvIfNoCase Remote_Addr (^127\.|^192\.168\.1\.50$) STAFFONLY_IP
Order Deny,Allow
Deny From env=STAFFONLY
Allow from env=STAFFONLY_IP
</Location>

 

これで大丈夫だろう。
 

ちなみにソフトは某パラレルスの、 providerとかresaler とか出てくる奴。
コンフィグ勝手に書き換わらないか注意しないとね。
 


参考サイト:http://www.askapache.com/htaccess/setenvif.html

2010/09/22

NFSでgetattrの割合がやたら多い場合のパラメータ設定

bin'd
Creative Commons License photo credit: Robert S. Donovan

とある環境でデータストアにNFSが使えるNASを使ったときのお話。

構築後にしばらく動作させて、NFSクライアントの統計をみるとgetattrの割合が9割近い!これはいかんだろうとNFSのマニュアルをチェック。

acregmin=n
一般のファイル (regular file) の属性 (attribute) がキャッシュされる 最小の時間を秒単位で指定する。 この時間内では、サーバーへの新たな情報の問い合わせは行われない。 デフォルトは 3 秒。
acregmax=n
一般のファイルの属性がキャッシュされる最大の時間を秒単位で指定する。 この時間を越えると、必ずサーバーへ新たな情報の問い合わせが行われる。 デフォルトは 60 秒。
acdirmin=n
ディレクトリの属性がキャッシュされる最小の時間を秒単位で指定する。 この時間内では、サーバーへの新たな情報の問い合わせは行われない。 デフォルトは 30 秒。
acdirmax=n
ディレクトリの属性がキャッシュされる最大の時間を秒単位で指定する。 この時間を越えると、必ずサーバーへ新たな情報の問い合わせが行われる。 デフォルトは 60 秒。
actimeo=n
acregmin, acregmax, acdirmin, acdirmax すべてを同じ値にする。デフォルト値はない。

 

やや特殊なNFSの使い方をしており、ファイル属性取りまくるが1つのクライアントから使う領域は他と共有しない構成だったのでactimeoをがっつり伸ばせばよさそうに見えた。
とりあえず一律120位にしよう。

ほかにもマニュアル見ながらずらずらと追加、
noatime,intr,actimeo=120,noacl,nocto,nodiratime


あたりを設定してクライアント側をOSごと再起動して再集計。
 
 

起動後すこしの状態だとgetattrが 変更前60%⇒変更前5% くらいの劇的な変化がみられました。

結局まったりした負荷しかかからないのであとで40%前後までは上がっていたが十分効果があった。
もっと激しく動くようになればgetattrの割合ももさらに減るかもしれないな。
 

ちなみに共有バリバリ、双方書き込みの環境ではこの設定をしないようにね、不整合を引き起こす。
 

2010/09/21

mod_proxy_balancerでWEBサーバ停止時に工事中画面を見せる、実用編(apache httpd)

No drinking alcohol on the construction site
Creative Commons License photo credit: quinn.anya

WEBサーバのメンテナンス中に、サイトへの訪問者をメンテ中ゴメンね画面に飛ばすソーリーサーバーを作ったのでメモ。
実用編と銘打ちつつ、基礎編とかないのであしからず。
 

mod_proxy_balancerでの基本的な設定


mod_proxy_balancerにはapache httpdのマニュアルに書いてあったりなかったりするオプションで、statusというのがあります。
で、"status=+H" がついているサイトは、他が全部ダメだったらバランスするという動作をします。

DNS上ではmod_proxy_balancerが動作しているサーバをサービス用に指定して、ロードバランスするサーバからリバースプロキシで実際のWEBサーバにリクエストする格好ですね。

このような設定がこうなります、サービスサーバは複数並べてもOK。


ProxyRequests Off
<VirtualHost _default_:80>
ProxyPass / balancer://cluster/
ProxyPassReverse / balancer://cluster/
<Proxy balancer://cluster>
BalancerMember http://{普通のサービス用サーバ1} retry=5
BalancerMember http://{メンテ中画面のサーバ} status=+H
</Proxy>
</VirtualHost>



これでサービスサーバへのHTTPリクエストが可能ならサービスサーバへ、ダメならメンテ中画面のサーバにリクエストしてくれます。

これで一件落着?ていうとそこまで単純でもない。
 

実際飛ばすとどうなるか


前述の設定でそのまま動かすとそれはそれで別の問題が色々浮上します。
パスは残るしクエリも残るし、結局は工事中画面側のサーバでRewriteなどの処理が必要なんですよね。

他にも色々、

  • リバース先がSSL

  • WEBアプリが内部リンクを絶対パスで書いちゃう場合困る



などと面倒な事に対応する必要があります。

2番目のは例えば DeskNet's 、あれはリバースプロキシ泣かせです。
メニューのリンクをホストヘッダ(またはIP)から生成しよるので、初回リクエストは良くてもその後がバランスされなかったり。
 

懸念をつぶしていく


しかし賢いもので、それらの懸念事項にはちゃんと対応するオプションがあります。


SSLに対応する

これは "SSLProxyEngine On" とすればOK、SSL対応しまっせというオプション

リンクをホストヘッダ(またはIP)から生成するアプリに対応

"ProxyPreserveHost On" を使う。
バックエンドのサーバにHTTP1.1のホストヘッダを渡すという設定です。あんまり要らないんですが、対NeoJapan製アプリでは必須。

URIのパス要らない、クエリ要らない

これはひねった実装に。
結局ローカルにプロキシして、Rewriteで削ってメンテ中画面にさらに飛ばすという2段構えになりました。
詳細は次項で。


 

バックではパスとクエリを掃除しつつ、ブラウザのアドレス欄は書き換えない


好みが分かれる所ですが、メンテ中ページに飛ばす際にブラウザのアドレス欄を置き換えるかどうかで設定を使い分けます。
アドレス欄を置き換えると、ロードバランスしているサーバへの負荷は減るけど、サービス復帰後にF5での元のページ再読み込みができません。置き換えなければその逆。

まあ置き換えてしまったほうが楽なんですが、今回は置き換えずに工事中画面をプロキシ経由で取ってくる形にしました。

そのサンプルコンフィグがこちら。


ProxyRequests Off
<VirtualHost _default_:443>
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW

SSLCertificateFile {証明書へのパス}
SSLCertificateKeyFile {秘密鍵へのパス}

SSLProxyEngine On
ProxyPreserveHost On
ProxyPass / balancer://cluster/
ProxyPassReverse / balancer://cluster/
<Proxy balancer://cluster>
BalancerMember https://{普通のサービス用サーバ1} retry=5
BalancerMember http://localhost:8080 status=+H
</Proxy>

</VirtualHost>

Listen 8080
<VirtualHost _default_:8080>
DocumentRoot /var/www/html/
ServerName {任意のサーバ名}
RewriteEngine On
RewriteRule ^.*$ http://{メンテ中画面のサーバ}/maintenance.html? [P,L]
</VirtualHost>


※手元のメモには ProxyPassReverse がなかったんだが、無いと困るよなあ?

と、こんな感じにして使いましたよ。
アドレス欄云々は RewriteRule のとこだね、プロキシのPフラグにすればアドレス欄書き換え無し、Rにすればリダイレクトで書き換えされます。

受け取ったリクエストは一旦ローカルの8080に裏で飛ばし、実際は遥かなサーバからメンテナンスページだけ引っ張ってきて返してあげるという仕様になります。
アドレス欄の見た目は変わらないので、再開さえしていればユーザがF5すれば元のサービス画面に戻ります。


うまいことやればメンテ中画面もローカルに持てるので、実際そうしたほうがいいかも。

2010/09/20

サーバ仮想化と分散ストレージ/ファイルシステムの組み合わせでスケーラブル なシステムを構築

先日とある製品のパンフにあった構成が目にとまったので個人的にまとめ。

サーバの仮想化と分散型のストレージ/ファイルシステムやデータベースを組み合わせると、あり合わせの材料でスケーラブルな性能・容量に加えて冗長性を備えた環境が構築できます。
 

必要なのは複数の物理サーバ


まず普通の物理サーバ(PSV)が3台あるとして構成してみましょう。

複数の物理サーバ
 

PSV1-3、それぞれにサーバ仮想化の仕組みを入れてVMを一つずつ入れます。
VMwareのESXiとかXenServerなど管理しやすいものがよいかと思います。

2010/09/16

MySQLでデータベース作って専用ユーザ作成(再掲)

オープンソースのCMSなどを構築するときにMySQLで専用のDBを作成して、そのDBに対するすべての権限を持ったユーザを作成する。
いつもGRANTの所でなんだっけ?となるのでメモ。
 
まずいずれかでmysqlコンソールに接続
  • root@localhost空パス(デフォルト)
    # mysql

  • root@localhostのパスあり
    # mysql -p
    < <(rootのパスワード入力)

  • 別の管理用ユーザ
    # mysql -u {管理用ユーザ} -p
    < <(管理用ユーザのパスワード入力)


 
★mysqlコンソールへ
mysql> CREATE DATABASE hogehogeDB DEFAULT CHARACTER SET utf8;
Query OK, 1 row affected (0.00 sec)
 
mysql> GRANT ALL PRIVILEGES ON hogehogeDB.* TO "hogehoge_user"@"localhost" IDENTIFIED BY "{password}";
Query OK, 0 rows affected (0.00 sec)

DB・ユーザ名とパスワードは任意
 
デフォルトで選択する文字コードがUTF-8の「hogehogeDB」を作成して、管理用ユーザの「hogehoge_user」、パスワードは"password" ができた。
 
 
 
ついでにパスワード変更とGRANTで権限を変更した時の権限テーブルの再読み込み
mysql> SET PASSWORD FOR root@localhost=PASSWORD('wordpass');
 
mysql> FLUSH PRIVILEGES;





自分でこの記事を一番使っているので前のブログから再掲。
何度ここからコピペしたか。。
 

VMwareESXiのアップグレードでdestinationNot enough free memory

秋の夜長にVMwareESXiを4.0から4.1アップグレードしてみようとしたらちょっと困った話。

開発用の環境を貸すのに仮想サーバは便利、その中にVMwareESXiを使ってる奴がある。
サービス系メンテナンスのため夜間に会社に来てるのでついでにそれもメンテすることにした。

このへん、VMware vSphere一連のアップデートで、ホストしてる部分はVMware vSphereのHypervisor(≒ESXi)と呼ぶのが正しいのかな?
VMware関連は種類多くてよく定義がわからないや。


で、まあ詳しい手順があるわけで、
http://www.vmware.com/files/jp/pdf/support/VMware-vsp_41_upgrade_guide-PG-JP.pdf

これに習ってWindowsのCLIから実施したらエラー。
※実行には手順書そのままでなく、perlに渡す必要あり。

There was an error setting up ESXi installation destinationNot enough free memory available to stage firmware image.


なんだろう。4GのUSBメモリブートしてディスク無し(iSCSI共用ストレージ)で使ってるのでそこらで何かあるのかも。



で、困ったところで下記の記事を発見。

VMware ESXi 4.0 から 4.1 へアップグレードしようとすると metadata.xml が見つからないエラーの対処

全く同じ方法、ローカルで esxupdate コマンドを使えば正常にアップグレードできた。
 
 

ちなみにESXi側をUpgredeしたら、vSphere Clientも同バージョンに上げないと使えない。
これが意外と時間食うので、サーバ側での作業と平行してやっておいた方がよいです、ゲスト起動の状態確認をしようとしても待たされる羽目に。

2010/09/09

ニフティクラウドのCentOS(x86_64)にzabbixをインストールのhistory

zabbixのAPIを叩きたいので検証用に一つ立てようと思い、ちょうど空いてたニフティクラウドにインストール。
また他でも入れると思うのでhistoryをちょろっと貼り。
 

2010/09/01

KnowledgeTree で公開フォルダを作成する

KnowledgeTree パーミッション編集

オープンソースのドキュメント管理ソフト knowledgetree をセットアップしてみた。

 

初期設定ではログインしないと一切利用できないようになっていて、これでは何かと不便だ。
フォーラムに匿名アクセス許可と公開フォルダの作成方法が載っていたので設定した。

How do I setup KnowledgeTree with a publicly accessible folder? - Stack Overflow

設定するパーミッションはキャプチャのような感じでよさげ。
継承できるので公開する範囲に応じて最小限の設定をしてあげよう。
今回はお試し導入という事もあってRootから継承した。

Anonymousは読み専としたいなら Write と Add Folder をとったらOK。