Browse Month: April 2009

LAN ケーブルのナンバリング

LAN ケーブルの本数が増えてくると LAN ケーブルにナンバリングするのは常識だと思う。前に LAN ケーブルをナンバリングしていなくて大変な思いをしたことがあったので、今度は最初から LAN ケーブルにナンバリングしてみた。

最初は、表示スペース付結束バンドで手書きで番号を書いて対応していたけれど、LAN ケーブルの本数が増えてくるとスイッチ側が下の写真のようにすごいことになってしまった。(写真はいずれも iPhone で撮影したので見にくいかもしれない。。。)

さらに表示スペースの部分だけとれてしまったり、実際に LAN ケーブルの番号を見たいとき見にくいことが発覚した。

そこで、次からは LAN ケーブル自体に番号のシールを張るようにしてみた。このシールは、近くの雑貨店で購入して \1,500 円程度だった。もしかすると熱ではがれおちる可能性もあるかもしれないが、シールの方がスイッチ側の配線も綺麗になって番号を見やすいので気に入った。LAN ケーブルの両端にそれぞれナンバリングするので、数字の見方はコネクタ側から読むようにシールを張ってみた。

あと LAN ケーブルの色については、このような方法があるけれども、僕の場合はなるべく多くの色で1台のサーバに同じ色のケーブルを接続しないように気をつけている。ナンバリングとあわせて色でケーブルを識別しやすくなって、とても便利だ。サーバのサービス別とか役割別とか、今の時代のサーバは物理的な1台に複数のサービスや役割を割り当てることなんてあたりまえなので、この方法は通用しないと思う。

cobbler 1.4.3 -使い方1-

cobbler 1.4.3 をインストールしたところで、さっそく設定して使ってみる。

cobbler の設定ファイルは、/etc/cobbler/settings にある。設定ファイルが正しいか確認するために、次のコマンドを実行する。

$ sudo cobbler check
#0: since iptables may be running, ensure 69, 80, 25150, and 25151 are unblocked
#1: The default password used by the sample templates for newly installed machines (default_password_crypted in /etc/cobbler/settings) is still set to ‘cobbler’ and should be changed
#2: fencing tools were not found, and are required to use the (optional) power management features. install cman to use them

このように問題がある設定がリストアップされるので、上から順番になおしていく。ちなみに、上の問題は僕が使う環境ではあったく問題ないのでそのままにした。

そして、distro をインポートする。例えば、CentOS 5.3 x86_64 をインポートするには、次のようにする。

$ sudo cobbler import –name=centos5 –mirror=rsync://ftp.iij.ad.jp/centos/5.3/os/x86_64/

インポートすると、通常の CentOS と Xen 用の distro が自動的に生成される。生成された distro 一覧を見るには、次のコマンドを実行する。

$ sudo cobbler distro list
centos5-x86_64
centos5-xen-x86_64

それぞれの distro 詳細をみるには、次のコマンドを実行する。

$ sudo cobbler distro report –name=centos5-x86_64
distro               : centos5-x86_64
architecture         : x86_64
breed                : redhat
(省略)

distro をインポートすると、自動的に profile も作られる。profile 一覧を見るには、次のコマンドを実行する。上からそれぞれ通常カーネルの CentOS、Xen カーネルの CentOS、レスキュー用の CentOS、の profile となっている。

$ sudo cobbler profile list
centos5-x86_64
centos5-xen-x86_64
rescue-centos5-x86_64

PXE kickstart 経由でブートすると、profile 一覧がメニューとして表示されて、メニューを選択することでその profiile の設定にそって kickstart でインストールすることができる。profile には、kickstart ファイルの設定を含んでいる。profile に含まれる kickstart ファイルを確認するには、次のコマンドを実行する。

$ sudo cobbler sudo cobbler profile report –name=centos5-x86_64
profile : centos5-x86_64
distro : centos5-x86_64
comment :
created : Thu Mar 12 00:31:19 2009
dhcp tag : default
enable menu : True
kernel options : {}
kickstart : /var/lib/cobbler/kickstarts/sample.ks
(省略)

上の例だと、/var/lib/cobbler/kickstarts/sample.ks が使われることが分かる。使用する kickstart ファイルを変更したいときには、次のコマンドを実行する。

$ sudo cobbler profile edit –name=centos5-x86_64 –kickstart=/var/lib/cobbler/kickstarts/hoge.ks

続いて、CentOS などの場合、ローカルに yum リポジトリをもつと自分の RPM なども含めて管理することがとても便利だけれど、cobbler でもこの機能をサポートしている。例えば、CentOS の os パッケージを管理したい場合は、次のコマンドを実行する。

$ sudo cobbler repo add –name=centos5-x86_64-os –mirror=http://ftp.iij.ad.jp/pub/linux/centos/5/os/x86_64/

パッケージの内容を mirror サイトと同期したい場合は、次のコマンドを実行する。

$ sudo cobbler reposync

次のような cron を設定しておけば、毎日自動的に yum リポジトリを更新することができる。

45 4 * * * /usr/bin/cobbler reposync –tries=3 –no-fail > /dev/null 2>&1

もちろん、ローカルでビルドした RPM もリポジトリも、次のコマンドを実行することで含めることができる。

$ sudo cobbler repo add –name=centos5-x86_64-origs –mirror=/home/hoge/rpm/RPMS

追加した yum リポジトリは、このままだと profile には適用されていないので、profile に追加するために、次のコマンドを実行する。

$ sudo cobbler profile edit –name=centos5-x86_64 –repos=”[‘centos5-x86_64-addons’, ‘centos5-x86_64-os’, ‘centos5-x86_64-extras’, ‘centos5-x86_64-updates’, ”centos5-x86_64-origs]”

これで、centos5-x86_64 の profile でインストールすると、ローカルの yum リポジトリが自動的に使われてパッケージのインストールが行われる。さらに /etc/cobbler/settings の yum_post_install_mirror に 1 を指定することで、インストール後もローカル yum リポジトリが使われるように /etc/yum.repos.d/cobbler-config.repo が配置されるので、とても便利。

ここまでみて分かるとおり、cobbler コマンドは「cobbler [distro|profile|repo|system|…] サブコマンド」という形式ととっていて、とても分かりやすい。サブコマンドには、次の種類がある。

  • add: 設定の追加をする
  • remove: 設定の削除をする
  • list: 設定の一覧を表示する
  • report: 設定の一覧を詳細表示する
  • copy: 設定をコピーする
  • rename: 設定の名前を変更する
  • replicate: 別のサーバへ cobbler の設定をコピーする(いわゆる、cobbler マスターサーバのレプリケーション)
cobbler コマンドの使い方は、man cobbler するとかなり詳しく分かりやすく解説されているので、とても参考になる。
次は、system の使い方について解説する。

tty0 のパワーセーブを無効にする方法

最近やっと IPMI を導入したこともあって、昔より 1U サーバの VGA コネクタにディスプレイをつなぐことは少なくなってきましたが、それでも何かあったときは直接ディスプレイをつないでサーバの状態を見ることがあります。

CentOS 5.x x86_64 では、デフォルトで tty0 にパワーセーブの状態が設定いるらしく、kernel panic になったときパワーセーブになっていると何を見ることができません。

/usr/bin/setterm -foreground green -background black -blank 0 -powersave off -powerdown 0 -store < /dev/tty0 > /dev/tty0 2>&1

これを応用するには、それぞれの tty に違う色をつけることで今表示している tty がすぐに分かるようになりますね。とはいっても IPMI SOL(Serial Over LAN) を使えばその恩恵に預かれる機会はほとんどないのですが。

ちなみに FreeBSD で同じようにスクリーンの色を変更するには vidcontrol を使います。/etc/rc.conf に次のように追記しておくと簡単にスクリーンの色を変更することができます。

allscreens_flags=”-c blink lightgreen”

この設定をしておくと、カーソルを点滅にして lightgreen な文字色に変更するという意味になります。setterm コマンドは、指定できる色に8色しかなくてすこし寂しい想いがしました(vidcontrol は 16 色指定できます)。

MySQL の slowlog を logrotate する方法

よく MySQL に発行されている重いクエリーをチューニングするために slowlog を出力すると思います。サービスが成長してくると slowlog は増えていく傾向にあります。毎日、せっせとチューニングしているのは基本中の基本ですが、slowlog が肥大化してしまうとチューニングの結果がだんだんと見えなくなってしまいます。特に mysqldumpslow で解析をしているときなら、過去のクエリーまで分析に含まれてしまったりします。

かなり前置きがなくなりましたが、この slowlog を logrotate する方法をまとめておきます。やり方は、いたってシンプルで /etc/logrotate.d/ に次のファイルを置くだけです。

/var/lib/mysql/mysqld.log /var/lib/mysql/mysql-slow.log  {
# create 600 mysql mysql
notifempty
daily
rotate 30
missingok
compress
postrotate
# just if mysqld is really running
if test -x /usr/bin/mysqladmin && \
/usr/bin/mysqladmin ping &>/dev/null
then
/usr/bin/mysqladmin flush-logs
fi
endscript
}

上の例では MySQL のログと slowlog を logrotate しているので、ログファイル名は環境に応じて変更してください。

この状態で mysqldumpslow した結果を毎日メールで送ると便利かもしれません。

Passenger 2.1.2 リリース!

ついに Passenger 2.1.2 がリリースされた。変更点は、次のとおり。

  • Rails 2.3 をサポート
  • 他の Apache モジュールとの互換性を高めた(RailsAllowModRewrite ディレクティブは mod_rewrite と完全互換になっている)
  • Ruby 1.9 サポート
  • NFS 経由でのインストールをサポート
  • さまざまな I/O ハンドリングと高負荷時のパフォーマンス向上とその修正(mod_xsendfile のサポートがさらに強化)
  • PassengerEnabled オプションにによる Passenger の無効化をサポート(VirtualHost で PHP アプリケーションなどと同居可能になった)
  • アプリケーション互換性を高めた
  • クロスプラッフォームのサポートを強化(OSX や 64 ビット OS)
  • 対話なしのインストーラー (コマンド一発でインストールできるようになった、これはかなりうれしい)
  • passenger-status などのコマンドラインツールを強化
  • すべてのスレッドのバックトレースを表示できるようになった
  • セキュリティの向上
  • カスタマイズオプションが増えた
  • 使い勝手の向上
  • マイナーな不具合の修正
インストールは、gem 経由でインストール可能になっている。
$ sudo gem list -r passenger
*** REMOTE GEMS ***
passenger (2.1.2)
さっそく、手元の MacBook で 2.0.6 とのパフォーマンスを ab 計測してみた。計測対象は、MySQL に接続して select するだけの簡単な merb アプリケーション。
まず、2.0.6 の結果。
Concurrency Level:      10
Time taken for tests:   0.767 seconds
Complete requests:      100
Failed requests:        10
(Connect: 0, Receive: 0, Length: 10, Exceptions: 0)
Write errors:           0
Total transferred:      70510 bytes
HTML transferred:       41310 bytes
Requests per second:    130.45 [#/sec] (mean)
Time per request:       76.660 [ms] (mean)
Time per request:       7.666 [ms] (mean, across all concurrent requests)
Transfer rate:          89.82 [Kbytes/sec] received
次に 2.1.2 の結果。
Concurrency Level:      10
Time taken for tests:   0.894 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Total transferred:      75100 bytes
HTML transferred:       45900 bytes
Requests per second:    111.91 [#/sec] (mean)
Time per request:       89.358 [ms] (mean)
Time per request:       8.936 [ms] (mean, across all concurrent requests)
Transfer rate:          82.07 [Kbytes/sec] received
それほどパフォーマンスは変わらない模様、やはり本番サーバで試してみないとよく分からないが開いている本番サーバがないなぁ。

DELL サーバで IPMI を使う方法

最近の 1U サーバなどでは、IPMI という Intel の規格にそったものが搭載されています。IPMI を使うと、おもに次のようなことがなんとネットワーク経由で操作できます。詳しくは、DSAS 開発者のブログを参照してください。

  • BIOS の設定変更
  • 電源のオフオン
  • 各種センサーの情報の取得(温度やファンの回転数など)

今回、IPMI を使ってみようと思ったのは、おもに BIOS の設定変更を遠隔でやりたいと思ったからで、さらにいうと BIOS のブート順序の設定変更をいちいちデータセンターまで行って行いたくない。データセンターでの現場作業はあまり心身によろしくないということではじめて IPMI を設定して使ってみました。

さて、今回は DELL 1U サーバの R300 + DRAC5 と R200 + DRAC4 での組み合わせでの IPMI の設定方法です。DRAC というのは、Dell Remote Access Controller の略で簡単に言ってしまうと DELL 製の IPMI カードです。DRAC がない場合でも IPMI に対応していましたが、DRAC があるメリットもあるので後述します。

まずは、R300 + DRAC5 の組み合わせでの設定方法から。R300 は SOL(Serial Over LAN) をサポートしているので SOL 経由で IPMI を使うことができます。

  1. BIOS POST 画面が表示されているとき、F2 キー押下で BIOS を起動する
  2. Serial Communication 項目を選択して、次の項目を変更する(実際に変更するのは上の二つ、Redirection After Boot は必ず Enabled にしておかないと PXE ブートメニュー画面を表示することができなくなります)
    • Serial Communication ……. On with Console Redirection via COM2
    • External Serial Connector .. COM2
    • Failsafe Baud Rate ……… 115200
    • Remote Terminal Type ……. VT100/VT220
    • Redirection After Boot ….. Enabled

  3. BIOS POST 画面が表示されているとき、Ctrl + E キー押下で Remote Access Configuration Utility を起動する(OS が起動する直前のタイミングで5秒以内にキーを押す必要があるので注意)
  4. Remote Access Configuration Utility の画面で、IPMI Over LAN を ON にする(BMS の Traffic Management 機能が動かなくなくという警告が出るが無視する)
  5. LAN User Configuration 項目を選択して、管理者のパスワードを変更する

ここまで設定すれば、DRAC のウェブ管理画面を開いていろいろと設定することができますが、SOL に関してはデフォルトのパラメータのままで問題ありません。ちなみに通信速度は、57600kbps になっています。

これで BIOS の設定は完了です。DRAC カードにある NIC に LAN ケーブルを接続してネットワークの疎通を確認します。

疎通が確認できたところで、ipmitool でアクセスしてみます。今回は、CentOS で動作確認したけれど、CentOS でインストールできる ipmitool を含んだ OpenIPMI-tools というパッケージはすこし古いので最新の ipmitool 1.8.9 を使いました。ipmitool の基本構文は、次のとおりです。

$ ipmitool -I lanplus -H ホスト名 -U ユーザー名 [-P パスワード] コマンド

ipmitool は、man を見てみと具体的な使い方がよく分からないので、よく使うコマンドリファレンスは次のとおりです。

  • power status: 電源の状態を確認する
  • power on: 電源をオンにする
  • power off: 電源をオフにする
  • power reset: 電源を再起動する
  • power soft: OS からシャットダウンさせる
  • sol activate: シリアル接続する
  • sol deactivate: シリアル接続を解除する
  • lan print: IPMI の IP 情報などを表示する
  • shell: shell のようなインタラクティブモードに入る
  • sdr: ハードウェア情報を表示する
  • sensor: センサー情報を取得する

例えば、次のようなになります。

$ ipmitool -I lanplus -H 192.168.0.1 -U root lan print
Password:
Set in Progress         : Set Complete
Auth Type Support       : NONE MD2 MD5 PASSWORD

Cipher Suite Priv Max   : aaaaaaaaaaaaaaa
:     X=Cipher Suite Unused
:     c=CALLBACK
:     u=USER
:     o=OPERATOR
:     a=ADMIN
:     O=OEM

このようにうまくいけば、power on で電源をオンしたり、power off で電源をオフしたり、サーバ OS がハングアップしてどうしてもないとき power reset でリセットしたりすることができます。BIOS を操作したいときは、sol activate コマンドを使って遠隔にあるサーバのコンソール画面を自分のターミナルに表示して行います。このときは、まるでデータセンターにあるサーバの BIOS が VNC 経由で遠隔操作されているように見えて素敵です。BIOS の POST 画面は搭載しているハードウェアの BIOS の表示などによって多少画面が乱れることがありますが、許容範囲内です。コンソール画面を閉じたいときには、~ . <enter> と入力します。リモートのサーバへ SSH 経由でログインしてそこから ipmitool を使っていると SSH 接続ごと落ちるので注意してください。

BIOS を起動するとき、よく F2 などの特殊なキーを使いますが、F2 はそのままだとターミナルから入力できません。F2 は <ESC> + 2 キーを同時押します。このあたりについての詳細は、こちらを参照してください。個人的によく使うであろうキーは、次のとおりです。

  • F2  – <ESC> + 2
  • F10 – <ESC> + 0
  • F11 – <ESC> + !
  • F12 – <ESC> +@

なるほどよく考えられていますね!

さて、次はエントリ 1U サーバである R200 + DRAC4 での設定方法です。R200 は、R300 と同じように SOL を設定する BIOS があるのですが、不思議なハードウェア構成になっていて試した結論から言うと SOL に対応してません。なので、DRAC4 に ssh 経由で接続してシリアルポート経由でコンソール画面を操作したり、DRAC4 の専用コマンド (CLI) で操作します。このあたりの情報は DELL のサポート情報にもなく、サポートに聞いても微妙な回答しか得られなかったので、かなりはまりました。。。

  1. F2 キー押下で BIOS を起動する
  2. Console Redirection 項目で、次の項目を変更する
    • Console Redirection Serial … Port 1
    • Failsafe Baud Rate 115200
    • Remote Terminal Type VT100/VT220
    • Redirection After Boot … Enabled
  3. Integrated Devices 項目で、次の項目を変更する
    • Serial Port 1 … RAC
  4. BIOS POST 画面が表示されているとき、Ctrl-D キーを押下して DRAC BIOS を起動する
  5. LAN Parameters 項目を選択して、IP アドレス、サブネットマスク、デフォルトゲートウェイを入力して保存する
  6. DRAC の IP アドレスに SSH 経由でログインして、次のコマンドを実行して管理者のパスワードを変更する
    • [root]# racadm config -g cfgUserAdmin -o cfgUserAdminPassword -i 1 <新しいパスワード>

ちなみに DRAC4 は、DRAC5 と比べてるとウェブの管理画面のレスポンスがかなり遅いので実用的ではないです。SSH 経由の場合はすこし遅いという印象なので、SSH 経由で操作することをおすすめします。なお、SSH のセッション数は 1 、telnet は同時 4 接続までなので注意しましょう。ここからは、DRAC4 特有のバットノウハウになりますが、SSH 経由でログインしたあと connect com2 してコンソール画面を表示したあと <enter> ~ . でセッションを閉じると SSH のセッションが開きっぱなしになって二度と SSH 経由でログインできなくなります。そこで telnet 接続を有効にして、コンソール画面を表示するときには telnet 接続の方で使うことにしましょう。DRAC4 で telnet 接続を有効にするには、次のコマンドを実行します。これは、SSH は同時接続最大 1 という制限があるのに対して、telnet の方は同時接続数に制限がないことを利用したバットノウハウです。telnet を解放するのでセキュリティには十分注意しましょう。

$ racadm config -g cfgSerial -o cfgSerialTelnetEnable 1

ちなみに SSH 接続ができなくなったときに回復する方法は、サーバの電源ケーブルを抜き差しするしかありませんので慎重に作業しましょう。(正直な感想としては、こんなに制限があるのなら R200 + DRAC4 はやめたほうがよいなと思いました、R200 は感覚的に後から IPMI を無理矢理サポートしたという印象があります、コスト的なメリットがかなりない限りもう個人的にはもう R200 + DRAC4 を選択することないでしょう…)

ここで設定するポイントは、3 に Serial Port 1 の出力先をどこにするかという設定です。この設定は、たくさんの選択肢があるので注意します。

DRAC4 からコンソール画面を表示するには、DRAC4 にログインしたあと、次のコマンドを実行します。

[root]# connect com2

表示したコンソール画面を閉じるのは、<Enter> ~ . をキーを入力します。この設定は任意のキーに変更できます。R200 のスペック表によると IPMI に対応しているようなのですが、SOL に対応していないので実質あまり使えないと思って確認していません。

ここで、DRAC があるメリットを考えてみます。

  • https 経由の管理画面経由でさまざまな情報を閲覧や電源のオフオンなどの操作をすることができる
  • NIC が DRAC のカードに内蔵しているため、オンボードの NIC とは物理的にわけることができる(特にメンテナンス回線がある場合は便利になる)
  • DRAC 側でシステムの状態を監視して、アラートをメールで送ることができる(実際にECC エラーのアラートが実際に届いてメモリを交換したことがある)
  • DRAC に SSH や telnet 経由でログインして設定変更や設定の閲覧ができる

というメリットがあります。デメリットはカード費用と DRAC のファームウェアはけっこう更新されているのでそのアップデートする手間コストがあります。前者は、他の IPMI カードと同じくらいのコスト、後者は管理画面経由で簡単にアップデートできることからそれほどデメリットは感じません。DRAC4 のファームウェアアップデートを Firefox で行おうとするとアップデートの進捗状況を現すプログレスバーがちゃんと完了ならないけれどファームウェアのアップデートは完了しているという不思議な現象にはまったけれど。でも、これは TFTP 経由でファームウェアをアップデートできるようなので、次回からはサーバの台数も多いので TFTP 経由にして改善したいと思っています。

ここまで、それぞれのサーバの BIOS POST 画面は IPMI 経由でアクセスすることが可能になりました。

しかし、実際の OS(Linux) をブートしたときの画面が表示されないので、OS の出力をシリアルポートにも出力します。今回は、CentOS 5.3 x86_64 を例に設定方法を説明します。

まず、grub の設定ファイル (/boot/grub/grub.conf) を次のように変更します。

— /boot/grub/grub.conf-org    2009-04-10 16:45:04.000000000 +0900
+++ /boot/grub/grub.conf        2009-04-14 13:00:45.000000000 +0900
@@ -8,10 +8,12 @@
#          initrd /initrd-version.img
#boot=/dev/sda
default=0
-timeout=5
-splashimage=(hd0,0)/grub/splash.xpm.gz
+timeout=10
+serial –unit=0 –speed=57600 –word=8 –parity=no –stop=1
+terminal –timeout=10 console serial
+#splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-128.1.1.el5)
root (hd0,0)
–       kernel /vmlinuz-2.6.18-128.1.1.el5 ro root=/dev/datavg/data
+       kernel /vmlinuz-2.6.18-128.1.1.el5 ro root=/dev/datavg/data console=tty0 console=ttyS1,57600n8
initrd /initrd-2.6.18-128.1.1.el5.img

ここで一番注意するべきは、terminal のところ。terminal の最後に console serial と指定していますが、これを serial console としてしまうと grub が起動する直前でのキーボード入力待ち時間がかなり長く5分くらいになってしまうので注意します。今のところシリアルポートは使っていないのでこの設定で問題ないです。grub.conf の設定パラメータについては、JF を参照してください。R200 のときは、com1 しかないので ttyS1 ではなくて ttyS0 になります。

次に /etc/inittab に次の内容を追記します。

# Console Redirection via COM1/COM2
s0:2345:respawn:/sbin/agetty -h -L 57600 ttyS0 vt100
s1:2345:respawn:/sbin/agetty -h -L 57600 ttyS1 vt100

最後に、/etc/securetty に次の内容を追記します。

ttyS0
ttyS1

これで設定完了です。再起動して、リモートコンソール画面に正しく Linux の起動画面が表示されることを確認します。文字化けしている場合は、通信速度が違っているときに発生します。

また、OpenIPMI をインストールすると ipmi デーモンもあわせてインストールされますが、これは自分のサーバの IPMI へアクセスするサービスを提供するものなので基本的には不要です。

あとは、上記の設定を kickstart ファイルに書いておけば便利になります。

# 2009.04.22 追記: 参考資料

Enjon IPMI!

MySQL スレーブを便利に作るためのスクリプト

MySQL スレーブを増やすには、/var/lib/mysql ディレクトリをコピーする方法が一般的かもしれないけれど、個人的には毎日 mysqldump している SQL を流したい。そこで、次のようなスクリプトを作ってみた。このスクリプトは、「データベース名_mysql-bin.ログファイル名_ログポジション.sql」という名前の mysqldump した SQL ファイルを流して Slave を作るだけの簡単なシェルスクリプト。(puppet template なので一部おかしいですが、最初の変数定義だけです)

#!/bin/sh

DATABASE=<%= mysql_database_name %>
MASTER_HOST=<%= mysql_master_host %>
MASTER_USER=<%= mysql_repl_user %>
MASTER_PASSWORD=<%= mysql_repl_password %>

function create_slave()
{
SQL_FILE=$1
if [ ! -f $SQL_FILE ]; then
echo Could not found sql file – $SQL_FILE
exit -1
fi

LOG_FILE=`echo $SQL_FILE | cut -d ‘.’ -f 2 | cut -d ‘_’ -f 1`
if [ -z $LOG_FILE ]; then
echo Log file name is empty
exit -1
fi
LOG_POS=`echo $SQL_FILE | cut -d ‘.’ -f 2 | cut -d ‘_’ -f 2`
if [ -z $LOG_POS ]; then
echo Log position is empty
exit -1
fi

mysql -u root $DATABASE < $1
mysql -u root -e “CHANGE MASTER TO MASTER_HOST=’$MASTER_HOST’, MASTER_USER=’$MASTER_USER’, MASTER_PASSWORD=’$MASTER_PASSWORD’, MASTER_LOG_FILE=’mysql-bin.$LOG_FILE’,
MASTER_LOG_POS=$LOG_POS”
mysql -u root -e “START SLAVE”
}

echo -n “Are you sure want to create mysql slave server? [y/N] ”
read INPUT
if [ -z $INPUT ]; then

INPUT=n
fi

if [ $INPUT == ‘y’ ]; then
if [ ! -f $1 ]; then
echo Usage: `basename $0` \”SQL file\”:
exit -1
fi

if [ ! -f /var/lock/subsys/mysqld ]; then
echo MySQL is not running
exit -1
fi

create_slave $1
exit 0
else
exit -1
fi

近々の予定では、結果を IRC に通知したい。puppet でがんばって自動的に Slave を作ろうとしたけれどけっこう無理があったし、それほど Slave を増やすことはないので手っ取り早くシェルスクリプトにした。

それで、この SQL ファイルを mysqldump するシェルスクリプトも必要なのであわせて作った。これは引数に対象のデータベース名を指定するだけ。

#!/bin/sh

if [ x”$1″ = “x” ]; then
echo Usage: `basename $0` \”Database name\”
exit -1
fi
DATABASE=$1

MYSQLDUMP=/usr/bin/mysqldump
if [ ! -x $MYSQLDUMP ]; then
exit -1
fi

if [ ! -f /var/lock/subsys/mysqld ]; then
echo “MySQL server is not running.”
exit -1
fi

LOG_FILE=`echo ‘show slave status\G’ | mysql -u root | egrep ‘Relay_Master_Log_File:’
| tr -d ‘ ‘ | cut -d ‘:’ -f 2`
LOG_POS=`echo ‘show slave status\G’ | mysql -u root | egrep ‘Read_Master_Log_Pos:’ |
tr -d ‘ ‘ | cut -d ‘:’ -f 2`
if [ -z $LOG_FILE ]; then
echo “Log file name is empty.”
exit -1
fi
if [ -z $LOG_POS ]; then
echo “Log position is empty.”
exit -1
fi

mysqldump -u root –databases ${DATABASE} > ${DATABASE}_${LOG_FILE}_${LOG_POS}.sql

もっとも効率的な MySQL Slave サーバの作り方を知りたいところ。

# 追伸

最近、知ったけれど mysqldump すると、あたりまえだけれど次のクエリーがスローログとして報告されることがあるので、定期的に mysqldump してバックアップしているサーバではスローログを監視しないように注意しましょう。

# Time: 090415  4:35:30
# User@Host: root[root] @ localhost []
# Query_time: 27  Lock_time: 0  Rows_sent: 2234711  Rows_examined: 2234711
SELECT /*!40001 SQL_NO_CACHE */ * FROM `hoge_hoges`;

自由への扉 – DOORS TO FREEDOM –

ふと立ち寄った本屋さんにサイン本コーナーがあって、「こんなコーナー」あるんだなと思って立ち寄ってみた。そこで「自由への扉 – DOORS TO FREEDOM -」という心にピンときた本があったので購入してみた。

この本は世界中を旅した高橋歩さんという人が写真と一言がのっているとてもアーティスティックな本。

次の言葉が心に残った。

  • WE ARE BRON TO BE FREE.(僕らは、自由に生まれるために生まれてきた。)
  • MEET YOUR JOB.(自分の仕事に出逢おう。)
  • ENJOY THE STORY OF LIVE.(人生という物語を楽しもう。)
  • LOVE & FREE(愛する人と自由な人生を。)

最後の言葉が特にすばらしい。そうだ、そのはずだ。

そして、次の文章はまったくの同感。

  • くだらないことで悩むんは、もうやめよう。いらない荷物はすべて捨ててしまえ。生きていくうえで大切なことはそんなに多くない。
  • 自分は、どうしたいか。本当は、すべて知っているだろう?

さあ、LOVE & FREE をめざして生きていこう!なかなか素敵な本なので、ふと自分を振り返ってつつ、これからの自分について考えたい人にはおすすめできる本です。

VMWare ESXi を自宅サーバに導入してみた

VMWare ESXiが、昨年8月頃に無償公開されたので自宅サーバのリプレイス記念もかねて導入してみた。サーバは、Intel Core 2 Quad 9550、メモリ 8GB の環境。
VMware-VMvisor-InstallerCD-3.5.0_Update_3-123629.i386 をマウントする。
install.tgz を解凍して、install/usr/lib/vmware/installer/VMware-VMvisor-big-3.5.0_Update_3-123629.i386.dd.bz2 を解凍する。解凍してできた VMware-VMvisor-big-3.5.0_Update_3-123629.i386.dd(700MB) を USB メモリーに書き込む。OSX は USB メモリーを挿すと自動的にマウントしてしまうので Disk Utility で /dev/disk5s1 をアンマウントする必要がある。Finder からアンマウントしてしまうと /dev/disk5 が見えなくなってしまうので注意する。念のため USB メモリーは事前に完全フォーマットしてみた。このイメージは、VMWare ESXi のインストール後のイメージなのでけっこう書き込むのに時間がかかる。僕の環境では、Mac mini で 15 分くらいだった。USB メモリーは、1G くらいあればいい。

dd if=VMware-VMvisor-big-3.5.0_Update_3-123629.i386.dd of=/dev/disk5

USB メモリーに書き込みが済んだら、BIOS のブート順を USB HDD が一番最初になるように設定しようとこころみたが、BIOS に USB ブートできるオプションがない。。。どうやらこの BIOS は対応していないようだ。

仕方がないので、普通に VMWare ESXi のインストーラー CD を焼いて普通にインストールした。インストールは無事終了して、実際に仮想 OS のセットアップを開始しようとするとなぜかオンボードの NIC が認識しない。この NIC は、 MARVELL 社製 88E8053 だけれど対応していないようだ。調べてみると、VMWare ESXi はかなりサポートされている NIC が少ないようだ。かなり迷った結果、Intel Pro/1000 の PCI カードの NIC を 6000 円くらいで買ってきて増設した。これはかなり悔しいが、FreeBSD / Windows XP / CentOS を一台で動作させたいと思っていたので苦痛の選択だった。

VMware ESXi で IP アドレスなどをセットアップしたら、あとは別のコンピュータから VMware ESXi クライアントプログラム(Windows のみ提供されている)を使ってその画面上から仮想 OS をセットアップする。

今のところ、VMware ESXi 上で FreeBSD、Windows XP 64bit、CentOS、が動いているけれどかなり快適に使えている。これは無料なんてかなりすごいことだなと思う。

参考資料は、このあたりにまとめておきました。

# 追伸

Xen Server もついに無料になったみたいなので、機会があれば試してみたい。

Ctrl+Alt+Del で再起動を防止する方法

サーバを運用しているときは、Ctrl+Alt+Del でサーバの再起動を防止したいもの。ついに、先日誤って Ctrl+Alt+Del でサーバを再起動してしまいました。。。これでいかんと思って、Ctrl+Alt+Del で再起動を防止する方法を調べてみました。

CentOS 5.3 x86_64 では、/etc/inittab に次のような変更するだけです。

— inittab     2009-04-09 22:29:32.000000000 +0900
+++ /etc/inittab        2009-04-02 11:09:54.000000000 +0900
@@ -29,7 +29,8 @@
l6:6:wait:/etc/rc.d/rc 6

# Trap CTRL-ALT-DELETE
-ca::ctrlaltdel:/sbin/shutdown -t3 -r now
+#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
+ca::ctrlaltdel:/usr/bin/logger ‘CTRL-ALT-DELETE trap is disabled’

# When our UPS tells us power has failed, assume we have a few minutes
# of power left.  Schedule a shutdown for 2 minutes from now.

こうすることでよって Ctrl+Alt+Del を押してしまったときは、シスログに出力するだけの動作になります。変更を適応するには、再起動するか、再起動できないときは次のコマンドを実行します。

$ sudo telinit q

サーバを運用しているときは、基本的にリモートで作業することがほとんどですが、念のためやっておいたほうがいいでしょう。

こういう基本的なところができていないのはなさなけないということで、システム管理者として失格だと自覚させるためのエントリです。

  • 1
  • 2