Browse Month: May 2009

MySQL 5.1 on CentOS

CentOS 5.3 x86_64 上で MySQL 5.1 をインストールしたいため、自分で RPM を作ってみました。いろいろと検索した結果、Fedora の CVS にあるものが最新でかつ、既存の MySQL 5.0 系と同じような SPEC ファイルのため、これを使うことにしました。

まず、CVS で checkout します。

export CVSROOT=:pserver:anonymous@cvs.fedoraproject.org:/cvs/pkgs
cvs co mysql

そうすると、mysql/devel に MySQL 5.1 系(今日現在では、5.1.34) の SPEC やらパッチファイルなどがあります。SPEC ファイルを ~/rpm/SPEC に、パッチファイルや SPEC ファイルに書かれているパッチやシェルスクリプトなどを ~/rpm/SOURCES にコピーします。

僕の場合は、MySQL を puppet で管理しているため、MySQL の RPM では my.cnf と mysqld.init をわざとインストールしないようにしてあるので、専用のカスタマイズをしています。どうして、このカスタマイズをしているかは MySQL の puppet module を公開したときにあわせて説明したいと思います。

コピーし終わったら、さっそくビルドします。

$ rpmbuild -ba ~/rpm/SPECS/mysql.spec

MySQL をビルドしたあと、テストも実行されるのでけっこう時間がかかります。テストを省略したければ、mysql.spec の runselftest を 0 に設定しましょう。

# 独自の RPM を作ってローカルの yum リポジトリで管理することはよくあることですが、そこで問題になってくるのが SPEC やパッチなどのいわゆる SRPM に含まれるファイルです。Fedora project でどうやら SRPM ではなく SPEC やパッチをまとめて管理してくるようなので、どうやって管理しているか調べてみたいと思います。

# 2009.12.06 追記:

cvs up した fedora cvs の mysql.spec やパッチを手動で自分の rpmbuild ディレクトリにコピーするのは面倒なので、簡単なシェルスクリプトを作成してみた。

#!/bin/sh
SOURCE_DIR=`rpm -E ‘%_topdir’`/SOURCES
SPECS_DIR=`rpm -E ‘%_topdir’`/SPECS
for i in `egrep ‘^Source.*:’ mysql.spec`
do
if [ -f “$i” ]; then
cp “$i” $SOURCE_DIR
fi
done
for i in `egrep ‘^Patch.*:’ mysql.spec`
do
if [ -f “$i” ]; then
cp “$i” $SOURCE_DIR
fi
done
cp ./mysql.spec $SPECS_DIR

このブログに寄せられたコメントと近況報告

まさかこのブログがたくさんの人に読まれていることを知らなかったです。最近、ブログにコメントをしてくださった人ありがとうございます。こちらの設定ミスで、毎回承認するようになっていました。スパムコメント、どーんと来いということでコメント承認制は無効にしました(たぶん。。。)。

最近、忙しくまとまったアウトプットを出せていませんが、来月インフラエンジニアのサミット Velocity に行く予定としたので、このブログでできる限りレポートをしていきたいと思います!たぶん、日本人は誰もいないと思いますが、いわゆるメガサイトと言われているインフラエンジニアが多数講演する予定になっているので、今からとても楽しみです!
まず、出席する予定の workshop と session を公開していきたいと思います!!!


Velocity, the Web Performance and Operations Conference 2009

スイッチの VLAN ではまった

DELL のスイッチを使っているけれど、VLAN を設定してしようとしてはまった。登場人物は、PowerConnect 2748 と 5448。このスイッチの違いは、DELL – PowerConnect の選び方を参考にしよう。

どちらのスイッチも Web 管理画面から、最大 8 個まで VLAN を作ることができる。初期状態では、デフォルトの VLAN ID:0 が設定されている状態で、デフォルトの VLAN は仕様上削除することができない。

すでに PowerConnect 2748 で、外部ネットワーク用に VLAN ID:1(タグなし)を設定していた。この状態で、PowerConnect 5448 を新たにセットアップしてスイッチの冗長化をめざすために 5448 でもまず同様の VLAN ID:1(タグなし)を作成した。

次に疎通確認として、5448 の VLAN ID:1 のポートに2台のサーバを接続して正しく ping 疎通できていること、VLAN ID:0 のポートにサーバを1台 ID:1 のポートにサーバを1台接続して ping 疎通ができないことを確認した。VLAN ID:1 は正しく設定されていることは確認した。次のような接続では問題なし。

| s1 | <- -> | PowerConnect 5448 VLAN ID:1 | <- -> | s2 |

そして、2748 と 5448 の VLAN ID:1 同士の疎通を確認してみたが、まったく疎通できない。このときは、次のような接続になっていた。

| s1 | <- -> | PowerConnect 2748 VLAN ID:1 | <-  -> | PowerConnect 5448 VLAN ID:1 | <- -> | s2 |

どうも 5448 はポートにサーバを接続したとき、かなり認識に時間がかかる(1分弱くらい?)のが原因なのかなと思ったがいつまでたっても疎通が確認できなかった。

そこで、次のような構成で VLAN ID:0 同士の疎通を確認してみたところ、何の問題もなかった。

| s1 | <- -> | PowerConnect 2748 VLAN ID:0 | <-  -> | PowerConnect 5448 VLAN ID:0 | <- -> | s2 |

おかしい。。。tcpdump でパケットを見てみても s1 から ping しても s2 へ到達していない。

VLAN の設定ミスなのかなと思ったけれど、スイッチ1台では問題なかったのでそうとも考えにくい。

もう一台 5448 があったので、同様に VLAN ID:1(タグなし)を作って、今度は次の構成で接続を確認してみた。

| s1 | <- -> | PowerConnect 5448 VLAN ID:1 | <-  -> | PowerConnect 5448 VLAN ID:1 | <- -> | s2 |

そうして、疎通を確認してみると。。。疎通できた!!!

PowerConnect 2748 はすでに本番環境で稼働しているスイッチのため容易に設定変更することはできないが、このことからどうやら違うスイッチでデフォルトの VLAN 以外を接続すると疎通できないことが分かった。これがいったいどうして起こるのか分からないけれど。

ということで、このこと学んだ教訓は「同じタイプのスイッチでネットワーク構成を組んだ方がベター」。ということで、5448 同士を別ネットワークで接続して本番へ投入する予定です。

DELL サーバで IPMI を使う方法2

今回は、SC4135 という AMD のプロセッサを利用したサーバで IPMI を使う方法を解説しておきます。SC1435 は、DRAC(DELL Remote Access Controller) といういわゆる DELL の IPMI カード + αはサポートされていません。

しかし、標準で IPMI をサポートしています。SOL にも対応していて、NIC 1 経由からアクセスすることができます。

まず、BIOS を起動して、Serial Redirection を COM2 に設定します。これは、R300 と同様です。

sc1435_biosping

次に、ブートする直前に Board Management Contoller の BIOS を Ctrl+E で起動します。この BIOS は、5秒間という短い時間なので注意します。起動したら、R300 と同様に IPMI Over LAN を Enable にして、IP アドレスやら管理者のアカウントを設定します。

sc1435_ipmi

上の画面を見て分かるとおり、NIC は Shared というモードになっていてオンボードの NIC と共存しています。もし、別途 NIC を分離したい場合は PCI スロットに NIC を差す必要があります。

SC1435 は、コストパフォーマンスがかなりよい 1U サーバだと思いますが IPMI も対応していて、とてもありがたいです。

rpmdevtools

RPM をビルドするための環境を作るのはけっこうめんどうなわけですが、RPM のビルド環境を手助けしてくれる rpmdevtools というツールがあります。公式ページにもあるとおり、rpmdevtools には次のツールが含まれています。

  • rpmdev-setuptree: ユーザのホームディレクトリ内に RPM のビルドツリーを作成する
  • rpmdev-diff: 二つのアーカイブの内容の差分を表示する
  • rpmdev-newspec: テンプレートから新しい .spec ファイルを作成する
  • rpmdev-rmdevelrpms: “development” RPMS から検索する
  • rpmdev-checksig: RPM 署名をチェックする
  • rpminfo: 実行ファイルやライブラリついての情報を表示する
  • rpmdev-md5: RPM のすべてのファイルの md5sum を表示する
  • rpmdev-vercmp: RPM バージョンを比較するチェッカー
  • spectool: SPEC ファイルに含まれているソースやパッチをダウンロードして展開する
  • rpmdev-wipetree: rpmdev-setupree によって作成されたディレクトリをすべて削除する
  • rpmdev-extrac: さまざまなアーカイブを “tar xvf” スタイルで展開する

となかなか便利そうなツールがあるので、本末転倒かもしれませんがさっそく rpmdevtools の RPM を作ってみます。Fedora 向けにはデフォルトで RPM が提供されていると思いますが、CentOS 5.x では提供されていないのでビルドしてみました。

まず、開発ツールなどをまとめてインストールします。

# yum groupinstall -y ‘Development Tools’

# yum install rpm-devel

続いて、rpmdevtools をダウンロードします。最新版は、lzma 形式のアーカイブで CentOS の tar では未対応なのでバージョン 6.8 を公式サイトからダウンロードします。あわせてビルドに必要な spectool をダウンロードします。spectool はなんとなく 1.0.10 ではなくて最新版をダウンロードします。

$ wget https://fedorahosted.org/releases/r/p/rpmdevtools/rpmdevtools-6.8.tar.bz2

$ wget http://people.redhat.com/nphilipp/spectool/spectool-1.0.11.tar.bz2

次に rpmdevetools を展開して、SPEC ディレクトリに  rpmdevtools.spec ファイルを、SOURCES ディレクトリに rpmdevtools-6.8.tar.bz2 をおきます。SPEC/rpmdevtools.spec の spectool のバージョンを変更します。

rpmdevtools のビルドに必要な src.rpm をダウンロードします。

$ wget wget ftp://download.fedora.redhat.com/pub/epel/5/SRPMS/help2man-1.36.4-1.el5.src.rpm

$ wget ftp://download.fedora.redhat.com/pub/epel/5/SRPMS/fakeroot-1.6.4-15.el5.src.rpm

help2man と fakeroot をビルドしてインストールしておきます。さらに必要なパッケージをインストールします。

# yum install -y help2man fakeroot sharutils

あとは、rpmdevtools をビルドしてインストールするだけです。

その他にも yum-builddep という src.rpm で依存しているパッケージをダウンロードしてくれる便利なコマンドもあります。(参考記事

freeipmitool

IPMI をアクセスするコマンドラインツールに、ipmitool があるけれど、前述したとおり man しただけではコマンドの使い方が分からなくて使いにくい印象がある。

かわりにもうすこし簡単なコマンドラインツールがないかなと思って調べてみると、GNU に Freeipmi というツールがあった。Freeipmi は、IPMI v1.5/2.0 の仕様に準拠したコマンドラインツール。かなり頻繁にアップデートされているのもうれしい。

インストールは、SRPM が提供されているのでさくっと RPM をビルドしてインストールした。

Freeipmi には、それぞれの用途に応じて、次のようなコマンドラインツールが提供されている。

bmc-info: BMC 情報を読むためにツール

bmc-config: BMC の全般的な設定と IPMI 情報を表示するツール

bmc-watchdog: BMC ウォッチドックを管理ツール

ipmi-chassis: chassis(パワー) を管理/モニターするツール

ipmi-fru: FRU(Field Replaceable Unit) のフィールドを読み込むためのツール

ipmi-sel: IPMI のシステムイベントログ(SEL) を読み込んだり管理するためのツール

ipmi-sensors: IPMI センサー情報や SDR (Sensor Data Repository) 情報を読み込むためのツール

ipmipower: 遠隔で電源制御するためのツール

ipmiconsole: SOL(Serial Over LAN) コンソールにアクセスするためのツール

ipmi-raw: IPMI コマンドの 16 進数入出力を提供するためのツール

ipmi-locate: BMC デバイスのアドレスのようなロケーションに関する情報を取得するためのツール

ipmimonitoring: センサーをモニタリングしたり解釈するためのツール

pef-config: PEF(Platform Event Filtering) 情報を設定するためのツール

ipmi-chassis-config: IPMI chassis 情報を設定するためのツール

bmc-device: BMC コマンドの拡張用のツール

ipmiping: デバッグ用の IPMI ping ツール

rmcpping: デバッグ用の RMCP ping ツール

ipmi-oem: OEM 専用コマンド用のツール

ipmidetect/ipmidetect: IPMI ノード検出するためのツールとそのデーモン

使い方は、–help オプションを指定するとすぐに分かる。よく使うコマンドは、ipmipower や ipmiconsole。

例えば、ipmiconsole コマンドのときは、次のようにして使う。

$  ipmiconsole -h <ホスト名> -u <ユーザ名> -P

これでパスワードを入力すれば、SOL コンソールにアクセスすることができる。-p オプションを使うとコマンドライン上でパスワードを指定することができるけれど、シェルのコマンド入力履歴に入るので誤って実行しないために -P オプションを使ったほうがおすすめ。

Enjoy IPMI!

Xen-Server が無料化!

ついに Xen-Server が無料化になって、ダウンロード可能になりました。公式ホームページに VMware ESXi との比較がありました。

| 無料に含まれている機能 | Citrix XenServer | VMware ESXi |

| Hypervisor | 64ビット | 32ビット |

| 最大仮想化 CPU 数 | 8 | 4 |

| Windows と Linux ゲストサポート | OK | OK |

| サーバ、VM、メモリの無制限 | OK | OK |

| P2V & V2V の変換(物理マシンから仮想マシンの変換、仮想マシンから仮想マシンの変換) | OK | OK |

| 共有の SAN や NAS ストレージ | OK | OK |

| 中央での複数のサーバ管理 | OK | NO |

| 柔軟性がある分散管理アーキテクチャ | OK | NO |

| ライブモーション | OK | NO |

| 共有の VM テンプレートライブラリ | OK | NO |

| 中央での設定管理 | OK | NO |

| 仮想的なインフラパッチ管理 | OK | NO |

| 賢い初期設定の VM 置換 | OK | NO |

| 賢いサーバのメンテナンスモード | OK | NO |

| すばらしい精密な CPU リソースコントロール | OK | NO |

| ディスクと NIC のホットスワッピング可能 | OK | NO |

よく分からない機能があるけれど、なかなかよさげです。特に最後のホットスワッピングは気になる機能の一つです。さっそく iso イメージをダウンロードしてみたけれど、今は試せるサーバがないことに気がついた…。

yum で特定のバージョンをインストール

yum で最新版ではなくて、特定のバージョンをインストールするにはパッケージ名の最後にバージョン情報をつけるだけだということを初めて知った。

例えば、現在の kernel と同じ kernel-devel のバージョンをインストールするには、次のようにする。

$ sudo yum install kernel-devel-`uname -r`

ngIRCd のすすめ

自分のサーバに IRC サーバを構築したいときは、IRCD-Hybrid を使うのが一般的だと思う。しかし、この IRCD-Hybrid はいかんせん設定ファイルの変更方法が分かりにくい、設定ファイルの雛形をみると所々に OLD とか書いてあって必要な設定なのか任意で必要なのかよく分からない。なんとか設定してみたが、本当にちゃんと設定されているか不安になったので削除してしまった。

そこで、他のオープンソースな IRC サーバはないかなと探してみたところ、ngIRCd というがあった。ngIRCd は、その名前のとおり次世代の IRC サーバとして開発されている。ライセンスは、GPL。なんといっても「Simplicity」ということで設定ファイルがとても簡単なのが特徴的で、これぞまさに探していた IRC サーバ!!!設定ファイルの雛形をみても、コメントがちゃんと分かりやすく書いてあって素晴らしすぎる。

ということでさっそく、CentOS 5.3 x86_64 へ導入しようとしたらが、init スクリプトが Debian のものしか用意されていない。そこで、init スクリプトを作って ngIRCd の bugzilla へ登録しておいた。ソースコードに同梱してくれるとうれしいけれど。

SPEC ファイルは、contrib にあるものをそのまま使って RPM にして ngircd をインストールしたあと、/etc/init.d/ngircd を手動でインストールした。デフォルトだと nobody ユーザで動作するので注意しましょう。実行ユーザも切り替えられるけど、SPEC ファイルでは IRCD-Hybrid ように自動的に ircd ユーザを作るようになっていないので要注意。

IRC の設定もさくっと完了した、とても分かりやすい。SSL を利用方法も公式ページに解説されていて素晴らしい。

IRC のサーバを構築するなら、ngIRCd がかなりおすすめです。とても設定が簡単なのが IRC 初心者にとってありがたい。

# 追記

ngIRCd の CentOS/RHEL 向けの init スクリプトは、今日リリースされる ngircd 14.1 に取り込まれることになりました。

SSL で使うおうと設定したら、LimeChat 0.20 で kCFStreamErrorDomainSSL error -9844 というエラーがでてしまった、ngircd 側は特にエラーがでていないので相性の問題だと思われますので、SSL なしで使うことにします。。。

MySQL V3 Google Patch

先日の MySQL Conference 2009 のプレゼン資料は公開されていますが、その中で MySQL V3 Google Patch のパフォーマンスに関するスライドが公開されていたので、さっそくチェックしてみました。

該当する講演は、「This is Not a Web App: The Evolution of a MySQL Deployment at Google」にあたると思われます。

MySQL colud performance というスライドから。

  • ベンチマークツール: iibenchsysbench、wisconsin
  • InnoDB を高速にするには、tcmallock とリンクする、XFS ( noatime,nodiratime,nobarrier オプションを指定するのがいいらしい)を使う、マルチコアサーバ用の mutex contention を減らす、複数のバックエンドの I/O スレッドを使って忙しいサーバの I/O の割合を減らす
  • IO バウンドのチューニング方法: innodb_read_io_threads、innodb_write_io_threads、という Google Patch で提供されている値
  • innodb_read_io_threads: 完全テーブルスキャン用の事前フェッチがたくさんあるときの助けとなるパラメータ
  • innodb_write_io_threads: たくさんの遅延があるときの助けとなるパラメータ(SATA writeback キャッシュなしで O_DIRECT を使っているとき、ハードウェア RAID write cache なしで O_DIRECT を使っているとき、ネットワーク接続のストレージを使っているとき)
  • innodb_io_capacity: たくさんの書き込みがあるときの助けとなるパラメータ
  • SHOW INNODB STATUS というコマンドが追加されている
  • いくつかのベンチマークテスト結果が紹介されている、例えば 2 CPU core, 4GB or 8GB RAM、ソフトウェア RAID 0 で2台のハードディスク接続、XFS、innodb_buffer_pool_size=1TB, O_DIRECT, innodb_flush_log_at_trx_commit=2、MySQL 5.0.37 + v3 Google Patch + tcmallock の組み合わせで innodb_io_read_threads を 1 から 2 にすると20 秒くらい IO バウンドが下がった
  • 仮想化なしの場合、8 コア以上だと Concurrent users が増えるたびに TPS が良くなる(4 コアだと 4 Concurrent users 以上にしても TPS は変わらない)
  • Xen や KVM で仮想化した場合のパフォーマンスも解説されている
  • このパッチは、MySQL 5.4 で入る予定(今年リリース予定とのこと)

さらに興味のある人は、講演の動画も BLIP.TV で公開されているのでチェックしてみるといいでしょう。

  • 1
  • 2