ちょっと硬派なコンピュータフリークのBlogです。

カスタム検索
ラベル howto の投稿を表示しています。 すべての投稿を表示
ラベル howto の投稿を表示しています。 すべての投稿を表示

2010-05-14

今さらだけどChromeのTabキーによる検索が凄く便利だということに気がついた。

既出すぎる話で恐縮だが、役立つと思うのでエントリにしてみる。

Chromeはアドレスバーのところに適当な単語を入れてENTERを押すと、デフォルトの検索エンジンを使ってキーワード検索をするようになっている。デフォルトの検索エンジンはもちろんGoogleだ。Google検索だけでも十二分に便利なのだけど、検索エンジンをカスタマイズして必要に応じて切り換えると、もっともっと便利になってしまうからこれを使わないのは損である。Tabキー検索を使いこなせば、必要な情報にたどり着くまでの時間が大幅に短縮されることだろう。

2010-04-13

快適スケールアウト生活への第一歩。SPIDERストレージエンジンを使ってみよう!

先月、Not Only NoSQL!! 驚異的なまでにWRITE性能をスケールさせるSPIDERストレージエンジンというエントリでSPIDERストレージエンジンによるスケールアウトが凄い!という話を書いた。SPIDERストレージエンジンは凄いヤツだが、ノウハウがあまりウェブ上で見つからない。唯一見つかる日本語の記事は、ウノウラボによる「国産MySQLストレージエンジン「Spider」の作者、斯波健徳氏に聞く 」だけである。SPIDERストレージエンジンは斯波氏による単独の作品であるため、斯波氏は開発だけで手いっぱいであり、使い方の紹介記事を書くことまでは手が回らないのであろう。こんな凄いストレージエンジンをドキュメントが足りないせいで使って貰えないなんて勿体ない!!

というわけで、今日はSPIDERストレージエンジンの基本的な使い方について紹介する。少し長いエントリであるが、最後までお付き合い頂ければ幸いである。

2009-09-17

私は如何にして高性能ファンレスPCから超小型LinuxマシンにMediawikiを実質数時間の作業で移行したか。

ある日、オフィスに行くとキムラデービーの木村さんに面白いマシンがあると言うので見せて貰った。

マシンと言っても、小さい白い箱からプラグがニュッと出ているだけである。そう、一昔前に話題になったあのSheevaplugである。

Sheevaplugはニュースで見て知って居たが、実物を見るのは初めてだ。とはいっても、実際に稼働しているものを見たわけではなく箱から出したばかりのものを見せて貰っただけである。実物を見た第一印象は、軽い!小さい!の一言だ。この小さな箱でサクサクとUbuntu Linuxが動いてたったの$99(送料別)というから、俺が欲しくなるのは当たり前というものである。Sheevaplugを知らない人のために、簡単にSheevaplugのスペックを紹介しよう。
  • ARM 1.2GHz CPU
  • 512MB RAM
  • 512MB フラッシュメモリ
  • ギガビットイーサネット
  • SDカードアダプタ
  • USB 2.0 x1
  • 110mm (L) x 69.5mm (W) x 48.5 mm (H)
少々RAMやフラッシュメモリが貧弱な気はするが、$99ならば十分納得のスペックである。しかも完全ファンレスだから無音。そして19W程度の低消費電力。家庭でこっそりと使いたい男性諸氏にとって何とも有り難い仕様ではないだろうか。家庭にも財布にも優しいとはこのことである。

詳しい仕様などについては、Sheevaplugを販売しているGlobal Technologies社のページを見て頂きたい。ここまで低価格な製品に仕上げられたのは、ひとえにSystem-On-a-Chipだからであろう。(それでも安すぎるが、それはβ版という扱いだからだろうか。)

なんでこのSheevaplugが欲しかったかというと、MySQL Practice Wikiを運用するためのハードウェアをもっと小型のものにしたかったからだ。完全に無音で、低消費電力で、運用が楽ちんなもの。今は静音PCの老舗オリオスペックで購入したHFX MicroにSolaris 10をインストールして使っているのだが、さらにもっと静かで低消費電力でコンパクトなものに変えたかったのである。(ついでにHFX Microを他の用途で利用したくなったからである。)

このSheevaplug、色々弄ってみたがとても素直でいいこちゃんである。あれよあれよという間に設定が進み、電源を入れてからものの数時間程度の実作業でWikiを移行することが出来てしまった。まあ、ぶっちゃけMediawikiを移行したかっただけなので大した作業は必要なかったといえばなかったのだが、こうも作業がすんなり運ぶのはちょっと感動である。あまりにも作業がスムーズだったので、「よく分からないから手を出しづらいな」と思っている人のために設定すべき内容を残しておくことにする。皆さんの購買意欲に繋がれば幸いである。いや、ホントコレ$99の割にちゃんと動いてお買い得ですよ、ちょっとそこの奥さん!

というわけでまずは購入についてであるが、日本に代理店がないので海外から直接取り寄せる必要がある。しかも購入できるのはGlobal Technologies社のWebサイトだけ。海外からなので送料はけっこうかかる。Fedexなら$34.77。Sheevaplug本体$99とあわせると合計$133.77なり。円高だから12000円ちょっと。それでも安い!

Sheevaplugが届いたらまずは電源投入!であるが、Sheevaplugにはボタンなどの類は一切なく、電源を入れるといきなりOSが起動する。しかもSheevaplugにはディスプレイアダプタというものが存在しないので、モニタに接続することもできない。どうやって操作すればいいのだろうか??

答えはUSBケーブルである。Sheevaplugの側面にはデバッグ用のミニUSBポートがついており、付属のケーブルを使ってパソコンと接続することによって操作が可能である。筆者の場合はMacを使って設定したのだが、MacからSheevaplugへ接続するための設定方法はHisao's Blogさんで紹介されているのでそちらを参照した。至って簡単である!(筆者は種々のサーバーマシンをメンテナンスしてきた経験があるので、この手のコンソールからマシンにアクセスするのは抵抗がないのだが、PCしか触ったことがない人はちょっと抵抗があるかも知れない。けど簡単だからやってみるといいよ!)

LinuxやWindowsを母艦にしたい場合には、このへんやこのへんを参考にすると良いだろう。

USBのコンソールから接続すると、u-bootというファームウェア(PCでいうところのBIOSの役割に相当)が表示され、それからUbuntu Linuxが起動する。サーバー用途で利用したいので、もちろんOSには固定IPを割り当てたりDNSの設定をしたりするわけであるが、この辺の諸設定は普通のUbuntu Linuxとまったく同じである。のら犬にさえなれないさんで、設定すべき項目がよくまとめられているのでそちらを参照して欲しい。

諸設定が終わったら、今度はカーネルの更新を行う。デフォルトで搭載されているカーネルは、2.6.22.18なのだが、ファイルの書き込みが遅いらしい。そこで、カーネルを2.6.30.5へアップグレードしよう。といっても作業は簡単で、有志が作成してくれたスクリプトをイッパツ実行するだけである。

1. まずはwgetをインストールする。

shell> apt-get install wget

2. 実行出来る不思議なREADMEをゲットする。

shell> wget http://sheeva.with-linux.com/sheeva/README-2.6.30.5

3. READMEのパーミッションを変更して実行する。

shell> chmod 700 README-2.6.30.5
shell> ./README-2.6.30.5

するとこのスクリプトがカーネルのバイナリをダウンロードして、フラッシュメモリへの書き込みまで行ってくれる。簡単楽チンである。詳細な手順はHisao's Blogさんで紹介されているのでそちらを参照して欲しい。

さて、ここで問題になるのがデフォルトのフラッシュメモリが512MBしかないということである。流石にMediawikiしか利用しないといっても、これでは直ぐにデータが溢れてしまうことだろう。(パッケージも色々追加したいしね。)ならばSheevaplugに搭載されたSDカードスロットにSDカードを差し込んで利用すれば良い。SDカードは適宜事前に準備しておこう。筆者はちょっと奮発して、Sandiskの超速いヤツを購入した。SheevaplugよりもSDカードの方が高額だったのはご愛敬!である。SDカードを利用するには、u-Bootと呼ばれるファームウェアを更新する必要がある。u-BootはUSBケーブルでコンソールに接続し、OSが起動する前にキーを押すことで操作することができる。キーを押すタイミングは次の通り。(次はUSBケーブルを使って接続し、Sheevaplugを起動したときの出力例だ。)

       __  __                      _ _
        |  \/  | __ _ _ ____   _____| | |
        | |\/| |/ _` | '__\ \ / / _ \ | |
        | |  | | (_| | |   \ V /  __/ | |
        |_|  |_|\__,_|_|    \_/ \___|_|_|
 _   _     ____              _
| | | |   | __ )  ___   ___ | |_ 
| | | |___|  _ \ / _ \ / _ \| __| 
| |_| |___| |_) | (_) | (_) | |_ 
 \___/    |____/ \___/ \___/ \__| 
 ** MARVELL BOARD: SHEEVA PLUG LE 

U-Boot 1.1.4 (Aug 22 2009 - 11:36:42) Marvell version: 3.4.16

U-Boot code: 00600000 -> 0067FFF0  BSS: -> 006CF100

Soc: 88F6281 A0 (DDR2)
CPU running @ 1200Mhz L2 running @ 400Mhz
SysClock = 400Mhz , TClock = 200Mhz 

DRAM CAS Latency = 5 tRP = 5 tRAS = 18 tRCD=6
DRAM CS[0] base 0x00000000   size 256MB 
DRAM CS[1] base 0x10000000   size 256MB 
DRAM Total size 512MB  16bit width
Flash:  0 kB
Addresses 8M - 0M are saved for the U-Boot usage.
Mem malloc Initialization (8M - 7M): Done
NAND:512 MB

CPU : Marvell Feroceon (Rev 1)

Streaming disabled 
Write allocate disabled


USB 0: host mode
PEX 0: interface detected no Link.
Net:   egiga0 [PRIME], egiga1
Hit any key to stop autoboot:  0 <---- ココでキーを押す!

u-Bootはコマンドを入力して操作するのだが、以下は主なコマンドである。
  • help...コマンド一覧を表示する。
  • boot...OSを起動する。
  • printenv...環境変数を表示する。
  • setenv...環境変数を設定する。
  • saveenv...環境変数を保存する。(setenvだけではフラッシュメモリに書き込まれない。)
  • run...環境変数に設定されたコマンドを実行する。
  • mmcinit...SDカードを認識する。
  • bubt...u-Bootを更新する。
というわけで、bubtコマンドを使ってu-Bootを更新するわけである。更新する対象のu-Bootは、アクセス可能なtftpサーバーに事前に置いておかなければならない。Mac OS Xならば、デフォルトでtftpサーバーを利用することができる。u-Bootの新しいイメージを、/private/tftpbootディレクトリにコピーしよう。u-Bootのイメージは、Hisao's blogさんの方で配布されているのでそちらからダウンロードして欲しい。ついでに言うと詳細な更新手順もそちらに載っているので参照して欲しい。以下、実行手順例のダイジェストである。

Marvell>> setenv ipaddr 192.168.1.123
Marvell>> setenv serverip 192.168.1.100
Marvell>> setenv netmask 255.255.255.0
Marvell>> saveenv
Marvell>> bubt u-boot-rd88f6281Sheevaplug_400db_nand.bin

すると「Override Env parameters? (y/n)」と聞かれるので、必ず「n」を選択しよう。リセットすればいっちょあがりである。

Marvell>> reset

リセットが完了したらもう一度u-Bootに入り、mmcinitコマンドを実行しよう。これでSDカードを利用する準備は整った。OSを起動して、fdiskコマンドを利用するとSDカードを認識しているのが分かるだろう。

ここで次に考えるのは、恐らくSDカードからOSをブートすることが出来ないか?ということではないだろうか。実はこの作業、めちゃくちゃ簡単である。簡単であるにも関わらずその効果は絶大で、OSの起動がもの凄く高速化したり(u-Bootからものの5秒程度で起動するようになってしまう!)、SDカードから起動するようにしておけば、SDカードを差し替えることでOSを入れ替えるといった芸当も可能になり、超オススメなのである。SDカードからOSを起動する手順は次の通り。

1. パーティションを切る。

shell> sudo fdisk /dev/mmcblk0

パーティションの切り方はお好みで。筆者はswap用に1GB、残りをファイルシステム用に設定した。

2. ファイルシステムを作成する。

shell> sudo mkfs -t ext3 /dev/mmcblk0p1
shell> sudo mkswap /dev/mmcblk0p2
shell> sudo mount /dev/mmcblk0p1 /mnt

3. OSをコピーする。

shell> sudo cp -ax / /mnt
shell> sudo cp -a /dev /mnt

4. カーネルを/mntにコピーする。

カーネル本体はREADME-2.6.30.5を実行したときにダウンロードされているはずなので、これを使う。ファイルの場所は/mntではなく/mnt/bootでも構わない。/mnt/uImageとしてリンクを作成しておこう。

shell> sudo mv /root/sheeva-2.6.30.5-uImage /mnt
shell> sudo ln /mnt/sheeva-2.6.30.5-uImage /mnt/uImage

ついでに/mnt/etc/fstabを編集して、スワップを追加しておこう。

/dev/mmcblk0p2 none swap sw 0 0

5. u-Bootを設定する。

OSを全てSDカードにコピーしたら、再起動してu-Bootへ入ろう。そしてbootargs環境変数を変更し、「root=/dev/mtdblock1」となっているところを「root=/dev/mmcblk0p」に書き換えよう。また、OSを起動する前にu-Bootでmmcinitコマンドを実行する必要があるが、これはbootcmd環境変数の先頭に「mmcinit;」という一文を追加することで対処可能である。

6. OSを起動する。

OSはSDカードから起動しただろうか?これまでの一連の作業はPlug Wikiのページ(英語)にも載っているので、そちらも参照して欲しい。上記の手順は筆者が多少アレンジしたものである。

上記の設定では、SDカードが抜かれている場合にOSが起動しない。さらに一歩進んでu-Bootを設定すると、SDカードがある場合にはSDカードから、SDカードがない場合には内蔵のフラッシュメモリからOSが起動する・・・という具合に動作させることが可能である。この手順はのら犬にすらなれないさんで紹介されているので、そちらを参照して欲しい。

さて、ここまで来れば後は通常のUbuntu Linuxとまったく同じように操作が可能である。ディスク容量もそこそこあるので、あまり神経質になる必要もない。(あえて解説する必要すらないかも知れない。)しかし、こんな風にすればちゃんと出来ますよ!ということを紹介するために、実際に筆者が行った設定を紹介しておく。

1. MySQLのビルド(笑)

いきなりコレかよ!?と思うかも知れないが、MySQLerたるものまずはMySQLをコンパイルしたくなるのが人情というものだろう。MySQLをビルドするには、build-essentialおよびlibncursesw5-devパッケージをインストールする必要がある。

shell> sudo apt-get install libncursesw5-dev build-essential

ま、以下はお好みで。

shell> sudo apt-get install libtool bzr

MySQL Community Serverのソースコードをダウンロードサイトから入手し、解凍し、おもむろに...

shell> ./configure [オプション色々] && make

を実行する。さすがにSheevaplugのCPUではビルドに時間が掛かってしまう。筆者はコンパイル中に外食していたので実際にどれぐらい掛かったかは不明であるが、見るからにコンパイルが遅いので相当時間を要するのだろう。無事にビルドが完了したら

shell> sudo make install

でMySQLのインストールは完了である。/etc/mysql/my.cnfを編集しよう。ついでにソースコードに含まれるsupport-files/mysql.serverを/etc/init.dにコピーし、MySQL Serverが自動で起動するようにしておくといいだろう。

shell> sudo cp support-files/mysql.server /etc/init.d
shell> update-rc.d mysql.server defaults

データディレクトリの初期化とか諸々の設定に関しては説明を割愛する。筆者はMySQL 5.1.38に含まれるInnoDB Pluginを利用したかったのでソースコードからビルドしたが、まあ、ふつうは自分でビルドするよりはUbuntu標準のMySQLパッケージを利用するといいだろう。その場合のインストール方法は以下。

shell> sudo apt-get install mysql-server mysql-client

2. Apache/PHPのインストール

MySQL Practice Wikiは、Wikipediaと同じMediawikiを使って構築している。MediawikiはPHPで記述されているので、ApacheやらPHPやらをインストールする。

shell> sudo apt-get install apache2 php5 php5-mysql

3. データ移行

あとは既存のマシン(HFX Micro)からMySQLのデータをmysqldumpを使って移行し、利用しているMediawikiのファイル(ApacheのDocumentRoot以下)を全てコピーすれば作業は完了である。めでたしめでたし!!

以下、Sheevaplugを利用するにあたって参考になるサイトをリストアップしておく。この投稿を読んで「興味がわいたよ!」と思ってくれたギーク諸氏は、ぜひSheevaplugを試してみて頂きたい。さすがに発売からかなり経過しており、なおかつOSも標準的なLinuxなので、Sheevaplugは結構使えるというのが筆者の感想である。


PlugWiki
http://plugcomputer.org/plugwiki/

SheevaPlug@Pukiwiki
http://mizupc8.bio.mie-u.ac.jp/pukiwiki/index.php?SheevaPlug

Yu's Blog
http://notepad4yu.wordpress.com/

Hisao's Blog
http://www.alpha.or.jp/

のら犬にさえなれない
http://xeon.cocolog-pikara.com/blog/

Ubuntu Weekly Recipe: 第69回 GW特別企画・電源プラグ型コンピューターSheevaPlugの使い方(1):基礎編
http://gihyo.jp/admin/serial/01/ubuntu-recipe/0069

Ubuntu Weekly Recipe: 第70回 GW特別企画・電源プラグ型コンピューターSheevaPlugの使い方(2):インストール編
http://gihyo.jp/admin/serial/01/ubuntu-recipe/0070

2009-03-11

MySQLレプリケーションを安全に利用するための10のテクニック

MySQLのレプリケーションは非常に簡単に使える割には応用の幅が広いので非常に人気のある機能の一つである。レプリケーションの応用分野は例えば、
  • バックアップ
  • 参照系の負荷分散
  • HA(高可用性)
  • ディザスタリカバリ(サイト間レプリケーション)
  • BI(レポーティングetc)
という風にとても多くのバリエーションがある。このブログを読んで頂いている皆さんの中にもレプリケーションを使っている方は多いのではないだろうか。ご覧の通りMySQLのレプリケーション機能はミッションクリティカル分野でも利用されているが、レプリケーションの使い方が適切でないとシステムの安定稼働に支障を来してしまってDBAやシステム管理者の肉体的、精神的負担が増大してしまう。逆にレプリケーションを堅牢に運用することが出来ればマクラを高くして眠れるというものだ。レプリケーションはMySQLの代表的な機能であるので、レプリケーションを使いこなしてこそ真のMySQLエンジニアであると言えよう。

というわけで、今日はMySQLのレプリケーションをトラブルから守って安全に利用するポイントを10個紹介する。

2009-03-02

最強のMySQL HA化手法 - Semi-Synchronous Replication

MySQL 6.0で搭載される予定の機能の一つに、Semi-Synchronous Replicationというものがある。コイツを使うととんでもなく凄いHA化ができるので、今日はその方法を紹介しよう。

まずはSemi-Synchronous Replicationの機能説明から。そもそもSemi-Synchrounousってナニ?どうして完全な同期でもなく非同期でもなくSemi-Synchronousなの?という疑問をまずは解消したいと思う。さっそく次の図を見て欲しい。

2009-02-25

DB移行の7つのステップ

データベース移行ではどのような作業を行わないといけないのか?全体的な流れを俯瞰的に見なければ、作業の見積もりなどが難しいことだろう。というわけで、今日はデータベース移行時に必要になる作業について7つのステップに分けて紹介しようと思う。言うまでもないことであるが、移行時には既存システムを直接いじるわけではない。(稼働中のシステムを直接いじるのは、走ってるクルマに乗り込むのと同じぐらい危険な行為である!!)開発用のシステムを別途用意して作業を進めるという前提で読んで欲しい。

2009-02-19

MySQL Clusterへの接続方法

MySQL Clusterを使うにあたって直感的に理解しにくいことを一つ挙げると

どうやってたくさんあるSQLノードに接続すればいいんだ?
ロードバランスは?
フェイルオーバーは?

ということがあると思う。このテーマを扱ったドキュメントはありそうだちょうど良いものが見あたらない。おそらくこの点が明確でないために「よし、最近サイトのトラフィックも増えてきたことだし、いっちょMySQL Clusterを試してみようか!」という気にならず、多くの人が利用を躊躇ってしまっているのではないだろうか?なので今日はこの点について5パターンのソリューションを紹介したいと思う。

2009-02-16

InnoDBテーブルスペースの空き領域

以前の投稿でも書いたが、InnoDBのテーブルスペースは一度大きくなってしまうと縮小することができない。ならば実際にはどれだけのスペースが使われているのか?という疑問が沸いてくることだろう。それは、innodb_file_per_tableオプションを利用しているときとそうでないときで見方が違う。

2008-08-03

Drizzleという名前の新しいおもちゃ

先日、Drizzleという名のプロジェクトが発表された。これはMySQLをベースにした新しいブランチであり、主にバージョン5.0で行われた拡張をそぎ落とし、パフォーマンスに特化したものを目指している。そして、マイクロカーネルアーキテクチャを採用することにより、必要な時だけ機能をプラグインで改めて追加できるようになるという。

MySQLの大改造であり、Brian Aker氏をはじめ開発者たちにとってはまさに新しいおもちゃであろう。

Drizzleがどういうものかについては、Mixiの前坂氏のBlogが分かりやすいので参考にしていただきたい。
http://alpha.mixi.co.jp/blog/?p=189