Browse Month: March 2011

完全に MacPorts から Homebrew に切り替えた

普段使っている OSX を再インストールしたのを機に、完全に MacPorts から Homebrew に切り替えてみた。

MacPorts なかなか便利だったんだけど、次の点がすこしいけていなかった。

  • OSX に入っているツールもまとめて全部コンパイルしている
  • デフォルトだと、/opt/local に root でインストールしないといけない(デーモンもすべて root 権限で起動される)
  • コンパイルしたファイルが全部残っている(port clean コマンドを実行しないと、削除されない)

個人的には、kumofs とかの MacPorts をコミットしていた頃が懐かしい。

 

homebrew のインストール

  1. homebrew をインストールするディレクトリにて、$ ruby -e “$(curl -fsSLk https://gist.github.com/raw/323731/install_homebrew.rb)” を実行する
  2. Xcode バージョン 3 以降をインストールする
  3. homebrew の bin ディレクトリにパスをはる
  4. homebrew をアップデートする $ brew update

ちなみに僕の場合は、自分で formula を作成することがあるんで、本家の github のリポジトリからフォークしたものを使っています。Homebrew は、ポリシー上問題がない場合は、すぐに自分で作成した formula を取り込んでくれます。

 

次に必要なものを、どんどんインストールしていきます。$BREW_PATH は HomeBrew をインストールした先を示しています。$BREW_PATH/bin は、すでにパスに追加されているものとしています。

まずは MySQL。MySQL は、開発に必要なので 127.0.0.1 で起動するようにします。

  1. brew install mysql
  2. cp $BREW_PATH/Cellar/mysql/5.1.56/com.mysql.mysqld.plist ~/Library/LaunchAgents/
  3. vi $BREW_PATH/var/mysql/my.cnf
  4. launchctl load ~/Library/LaunchAgents/com.mysql.mysqld.plist
  5. mysql_install_db

これで問題ないです。エラーログなどは、初期状態で $BREW_PATH/var/mysql/ に出力されています。

HandleSocket を使う場合は、コンパイルしたあと、次のようにインストールします。

$ cp ./handlersocket/.libs/handlersocket.so $BREW_PATH/Cellar/mysql/5.1.56/lib/mysql/plugin/handlersocket.so
$ mysql -u root
mysql> INSTALL PLUGIN handlersocket SONAME 'handlersocket.so';

 

次に Apache は、Homebrew にはないので、OSX にすでに入っているものを使います。起動方法は、共有設定からウェブサーバを起動するだけですが、デフォルトだと外部に公開されてしまうのでちゃんと設定しておいたほうがよいでしょう。httpd.conf は、/private/etc/apache2/httpd.conf にありますので、ローカル専用のファイルを読み込むように次のようにしました。

  1. cd /private/etc/apache2
  2. sudo ln -s $HOME/apache2 local

$HOME/apache2 に、Apache を 127.0.0.1 で起動するようにしておきます。あわせて開発に必要な設定も施しておきます。もちろん、デフォルトの Listen 80 は、コメントにしておきます。

ServerName localhost
Listen 127.0.0.1:80

 

次に Postfix、Postfix も Homebrew にはないので、すでにインストールされているものを使います。Postfix の設定は、/private/etc/postfix/main.cf にあるので設定します。Postfix も同様にローカルから飲み配送を許可しつつ、gmail 経由でメールを送信するようにしました。次のような感じです。このあたりは、このあたりを参考にするといいと思います。


#
# local configuration
#
inet_interfaces = 127.0.0.1
mydomain = <自分のドメイン>
myorigin = $mydomain

relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash: <sasl パスワードファイル名>
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
smtp_use_tls = yes
smtp_tls_CApath = /private/etc/CA

 

その他、今のところ次のようなものをインストールしました。インストールも、とても早くエコです。

  • ack
  • imagemagick
  • libtiff
  • nkf
  • sqlite
  • cpanminus
  • jasper
  • little-cms
  • node
  • wget
  • gdbm
  • jpeg
  • memcached
  • python3
  • zsh
  • git
  • keychain
  • mongodb
  • readline
  • growlnotify
  • libevent
  • mysql
  • scala

Ruby は、RVM でさくっと入れて使っています。

今までは MacPorts を併用していたけれど、Homebrew だけで十分なことが分かってよかったです☆

 

RamSan について

先月、初めてデータベース友の会に行ってきた。タイトルは、「第2回 データ・ストレージ勉強会 ITに効く!SSD最先端」ということで、システムクリエイト様から SSD に至るまでの歴史、SSD の内部的な仕組む、システムクリエイト様が提供されているストレージ製品群、などの説明があった。どの内容も非常に興味深く話を聞いて、とても勉強になった。おそらく、資料は公開されると思うので期待をしたい。

その中で、Texas Memory System 社の RamSan-10/20 というフラッシュモデルの PCIe カードタイプの製品が紹介された。この製品は、簡単にいってしまうと Fusion-io の ioDrive と同じような製品だが、いくつか違いがある。

まずは、それぞれの製品仕様を比較してみよう。以下の比較情報は、RamSan-10/20 の公式ページおよびシステムクリエイト様のページ)、ioDrive の公式ページ東京エレクトンデバイス様のページ)から抜粋して転載している。

| 比較項目 | RamSan-10/20 | ioDrive |

| フラッシュ容量 | 225 / 450 GB | 160/320/640GB |

| NAND タイプ | SLC | SLC(160/ 320GB) / MLC(320/640GB) |

| 読み込み IOPS | 120,000 | 140,000(160/320GB), 100,000(320GB), 93,000(640GB) |

| 書き込み IOPS | 120,000(*1) | 135,000(160/320GB), 141,000(320GB), 145,000(640GB) |

| バスインターフェイス | PCIe x 4 | PCIe x 4 |

| 対応OS | Windows / Linux | 64-Bit Microsoft Server 2003/2008, 64-Bit Microsoft Windows XP/Vista/Win7, RHEL 4/5, SLES 10/11, OEL v4/v5 |

| 消費電力 | 15W | 7.5W |

| 保証 | 5年 | 明記なし |

(*1) システムクリエイト様のページには、50,000 IOPS とある

 

仕様をみる限り、ほぼ Fusion-io の ioDrive と似た仕様であるが、もっとも大きな違いは RamSan-10/20 には PowerPC が PCI ボード上に搭載されており磨耗平均化処理はオンボード上で簡潔するとのことである。おそらく、ioDrive には CPU が搭載されていないため、そのあたりの処理はホスト OS 上の CPU を使う必要があるとか思う。この点は、RamSan-10/20 の消費電力が ioDrive 160GB タイプに比べて約2倍近くになっていることから分かると思う。

個人的には、業務などで Fusion-io ioDrive を使ったことはまったくないけれど、PCIe カードタイプのフラッシュメモリ製品といえば Fusion-io しか知らなかったので、別の製品の選択肢を知ることができる有意義な機会であった。どんな製品にも、必ず競合製品があるはずで、製品を購入するときには競合製品からそれぞれコストや機能などいろいろな面から製品を選択するということが重要となってくる。

システムクリエイト様にも聞いたところ、Fusion-io は各サーバベンダーの OEM にされているため非常に有名だが、RamScan はあまり有名でないのでこれから広めていきたいとおっしゃっていた。また、製品の試用貸し出しや価格などの問い合わせも随時受け付けているとのことなので、興味のある人はシステムクリエイト様に問い合わせてみるといいと思う。

 

僕の業務でいえば、特にデータベースサーバの台数を大幅に減らしたいときに PCIe カードタイプのフラッシュメモリ製品を使うことが想定されるが、それはかなり先のことになると思う。かなり先のことにはなるけれど、将来に渡ってのキャパシティプラニングは重要な業務の一つであるので情報収集は欠かさずに行いたい。

 

# 03/21 追記

Lif さんにいただいたコメントのとおり、ioDrive の読み込み IOPS の桁が一桁違っていましたので修正しました。

他にも VIRIDENT 社の tachIon という製品もあるようです。

 

 

インフラエンジニアであるか見分ける10の質問

もし、自分ならこういう質問するかなと思ったものをあげてみたので、かなり偏見のある内容になっています。

  1. 今まで自身で構築したサーバの種類と、その構築方法について説明せよ
  2. サーバ用途で使用するオペレーティングシステムの種類と、その特長について説明せよ
  3. スケールアウトとスケールアップの違いを説明せよ、またそれぞれどのような長所・短所があるのか説明せよ
  4. システムを運用する上で、どのようなモニタリング(いわゆる監視)が必要な説明せよ、またその際に使用する具体的なアプリケーションとその特長をあげよ
  5. ハードディスクと SSD の内部構造の違いについて説明せよ、またそれぞれどの場面で使うと有効であるか説明せよ
  6. SSH を設置するために、セキュリティ的な観点で気をつけなければならない点をすべてあげよ
  7. 自前インフラとクラウドインフラ、それぞれの特長(長所・短所)を説明せよ
  8. TCP と UDP のプロトコル上の違いを説明せよ、また具体的にそれぞれのプロトコルを一般的に使用しているアプリケーションをあげよ
  9. (具体的に高負荷になっているサーバを例に出して)このサーバが高負荷となっているその理由、あわせてその対策を説明せよ
  10. (僕が運用しているシステムを例に出して)このシステム構成での問題点、および近い将来に問題となるであろう点がどこかであるかその理由と、その対策をあわせて説明せよ

 

うーん、もうすこし絞れそうな気がしますが、なかなか難しいですね><

 

dstat が更新されていた

しばらく前にブログに書いた dstat(記事1記事2)ですが、ふとチェックしてみるとバージョン 0.7.2 がでていました。さっそくアップデートしてみたのですが、0.7 系にバージョンアップしたので、若干オプションが変わっています。

プロセスごとの IO をみたい場合には、次のようにします。

$ dstat –top-io-adv –top-bio-adv
Terminal width too small, trimming output.
——-most-expensive-i/o-process——->
process              pid  read write cpu>
init [3]             1     246k  18k0.0%>

実際に試してみると、カラフルなので、とても見やすいです。

CentOS の場合は、EPEL にあるバージョンは古いので、ここから RPM をダウンロードすればさくっとインストールすることができます。

自分で RPM を作りたいという人は、SRPM をダウンロードしてから、MD5 のチェックサムエラーがでるので –no-md5 オプションを付けて SPEC ファイルなどをインストールしてから RPM をビルドしましょう。

dstat、とても便利ですね。