2009年05月

2009年05月28日

Gitでギットギト

このエントリーをはてなブックマークに追加

Gitを使い始めた

Wakame」でGitを使い始めたのがきっかけ。

今までに実行したgitコマンド。

  • git clone
  • git add
  • git diff
  • git commit
  • git status
  • git log
  • git checkout
  • git branch
  • git pull
  • git push

タイミング良くWEB+DB PressにGit特集が載ってたので読んでみた。
分散管理の「ぶ」をちょっとだけ分かった気がする程度。

兎にも角にも、使い慣れるしかないと感じた。
本格的な戦いはこれからだ。


WEB+DB PRESS Vol.50
WEB+DB PRESS Vol.50
posted with amazlet at 09.05.28
WEB+DB PRESS編集部
技術評論社
売り上げランキング: 1014



2009年05月27日

クライマーはエンジニア

このエントリーをはてなブックマークに追加

何人かの常連さんと仲良くなった

時間があればボルダリング(フリークライミング)。
今ではすっかり自分の習慣になった。少なくても週2ペース。

ジムへ通っていれば見慣れた顔が出来始め、自然と会話生まれる。
最近、面白い傾向に気付いた。

職業を聞いた常連の男性客の業種は「IT系」

登りたくなる業種なのだろうか?

ゴールした時の小さな達成感の積み重ね。
それがエンジニアを夢中にさせる要因なのかも知れない。

一緒にクライミングやりませんか?


The Cliff(ザ クリフ) 尾川智子 ボルダリングトライアル [DVD]
ジェネオン エンタテインメント (2009-04-24)
売り上げランキング: 8425




2009年05月26日

[Wakame] PostgreSQLもスケール対象へ (4/n)

このエントリーをはてなブックマークに追加

[Wakame] PostgreSQLもスケール対象へ (3/n)の続編

予告通り、今回はオンラインリカバリを実行してみる。

  • node1(PostgreSQL)
    • オンラインリカバリ用にnode1の鍵作成
    • オンラインリカバリ用にnode2に鍵登録
    • リカバリスクリプト配置
  • pgpool-II
    • 対象ノードを登録
    • pgpool-IIを再起動
    • node2をノードから外す
    • node2に対してリカバリを実行
    • pgbenchしてみる?

作業内容: node1(PostgreSQL)

▼作業が面倒なので、あらかじめUNIXアカウントpostgresになっておく

node1$ sudo su postgres

▼node1の鍵作成

node1$ ssh-keygen -t dsa -N ""
鍵のファイル名を問われるので、デフォルトファイル名で問題なければEnter

▼node2に鍵を登録

node1$ cat /var/lib/postgresql/.ssh/id_dsa.pub | ssh (node2)  "cat >> /var/lib/postgresql/.ssh/authorized_keys"

▼リカバリスクリプト配置

pgpool-IIによるレプリケーションとオンラインリカバリからスクリプトを拝借。

node1$ cd /usr/local/pgsql/data

node1$ chmod +x recovery_1st_stage.sh
node1$ chmod +x recovery_2nd_stage.sh 
node1$ chmod +x pgpool_remote_start 

作業内容: pgpool-II

pgpool-II$ cd /usr/local/pgpool2/etc

pgpool-II$ sudo vi pgpool.conf
listen_addresses = '*'
port = 9999
pcp_port = 9898

# for debian
socket_dir = '/var/run/postgresql'
pcp_socket_dir = '/var/run/postgresql'
backend_socket_dir = '/var/run/postgresql'

# Logging directory
logdir = '/tmp'

# pid file name
pid_file_name = '/var/run/postgresql/pgpool.pid'

# Replication mode
replication_mode = true

# Health check user
health_check_user = 'nobody'

# node1
backend_hostname0 = '192.168.1.123'
backend_port0 = 5432
backend_weight0 = 1
backend_data_directory0 = '/usr/local/pgsql/data'

# node2
backend_hostname1 = '192.168.1.124'
backend_port1 = 5432
backend_weight1 = 1
backend_data_directory1 = '/usr/local/pgsql/data'

recovery_user = 'postgres'

recovery_1st_stage_command = 'recovery_1st_stage.sh'
recovery_2nd_stage_command = 'recovery_2nd_stage.sh'

▼pgpoolを起動

pgpool-II$ sudo -u postgres /usr/local/pgpool2/bin/pgpool -n &

▼pcp_node_infoでノード情報を確認

pgpool-II$ /usr/local/pgpool2/bin/pcp_node_info 100 192.168.1.122 9898 postgres postgres 0
192.168.1.123 5432 1 1073741823.500000
pgpool-II$ /usr/local/pgpool2/bin/pcp_node_info 100 192.168.1.122 9898 postgres postgres 1
192.168.1.124 5432 1 1073741823.500000

pgpoolのノード対象となっている事を確認。

この時、node2のPostgreSQLは停止状態にあるにも関わらず、pcp_node_infoではステータスが「1」となっている。 一度pgpoolへ接続すると状態に変化が現れた。

pgpool-II$ psql -h localhost -p 9999

pgpool-II$ /usr/local/pgpool2/bin/pcp_node_info 100 192.168.1.122 9898 postgres postgres 0
192.168.1.123 5432 2 1073741823.500000
pgpool-II$ /usr/local/pgpool2/bin/pcp_node_info 100 192.168.1.122 9898 postgres postgres 1
192.168.1.124 5432 3 1073741823.500000

ノードの状態がそれぞれ、node1は「2」、node2は「3」となった。

▼node2をクラスタから切り離す

pgpool-II$ /usr/local/pgpool2/bin/pcp_detach_node 100 192.168.1.122 9898 postgres postgres 1

出力が無いので、無事に切り離されたのかが良く分からない。

pgpool-II$ /usr/local/pgpool2/bin/pcp_node_info 100 192.168.1.122 9898 postgres postgres 1
192.168.1.124 5432 3 1073741823.500000

pcp_node_infoで確認してみると、状態は「3」のまま。

▼オンラインリカバリを実行

pgpool-II$ pcp_recovery_node 100 192.168.1.122 9898 postgres postgres 1

メッセージが出力されないので、成功したのか失敗したのかが分かりづらい。

pgpool-II$ ./pcp_node_info 100 192.168.1.122 9898 postgres postgres 1
192.168.1.124 5432 1 1073741823.500000

どうやら成功したようだ。
pgpool-recoveryを使うと簡単にノードを追加出来るね。

今後の予定

  • 図を使ってpgpool-recoveryを使ったオンラインリカバリのまとめ
  • AWS(Amazon EC2, Amazon EBS)を使ってノード増殖検証

関連エントリ






[Wakame] PostgreSQLもスケール対象へ (3/n)

このエントリーをはてなブックマークに追加

[Wakame] PostgreSQLもスケール対象へ (2/n)の続編

前回の予定を変更し、今回はpgpool-IIの追加設定。
オンラインリカバリ検証は次回予定。

今回の前提条件として、pgpool-IIがインストールされている事。
作業内容は前回のエントリを参照。

作業の流れ

作業対象サーバは2台で、pgpool-IIとノード(PostgreSQL)。
重要なのはアーカイブログの有効化とpgpool-recoveryの組み込み。

  • pgpool-II
    • pcpアカウント作成
    • pgpool-recoveryビルド
  • ノード(PostgreSQL)
    • pgpool-recoveryを配置
    • initdbコマンドでdataディレクトリ作成
    • アーカイブログ用ディレクトリ作成
    • configを変更しアーカイブログを有効化
    • pgpool-recoveryをPostgreSQLに組み込む

作業内容: pgpool-II

PCP コマンドの設定より

pgpool-II では PCP コマンドと呼ばれるインタフェースを通して pgpool-II の停止やデータベースノードに関する情報の表示を行います。
PCP コマンドを使用するにはユーザ認証が必要になるので、ユーザ名とパスワードを pcp.conf ファイルに設定します。
pcp.conf ファイルの書式は以下のように 1 行ごとにユーザ名と MD5 ハッシュに変換されたパスワードを : で区切ったものです。

pcp用アカウントを設定して行く

▼pcpアカウント用パスフレーズ生成

$ /usr/local/pgpool2/bin/pg_md5 postgres
e8a48653851e28c69d0506508fb27fc5

md5sumコマンドと何が違うのか…

$ echo -n postgres | md5sum
e8a48653851e28c69d0506508fb27fc5  -

当たり前だけど、ハッシュ値は同じだ。
echoだと「-n」をつけ忘れる可能性があるので、pg_md5を使うのがベター。

▼pcp用アカウント追加

$ cd /usr/local/pgpool2/etc/; pwd
/usr/local/pgpool2/etc
$ sudo cp -pi pcp.conf.sample pcp.conf
$ sudo vi pcp.conf
$ diff pcp.conf.sample pcp.conf
28a29
> postgres:e8a48653851e28c69d0506508fb27fc5

▼pgpool-recoveryをビルドするための準備

$ sudo apt-get install postgresql-server-dev-8.3

▼pgpool-recoveryをビルド

$ cd sql/pgpool-recovery/
$ make

▼pgpool-recoveryのインストール先ディレクトリ作成

$ sudo mkdir /usr/local/pgsql
$ sudo mkdir /usr/local/pgsql/lib
$ sudo mkdir /usr/local/pgsql/share

▼pgpool-recoveryのインストール先ディレクトリを変更したので、パス変更

$ perl -pi -e 's,\$libdir,/usr/local/pgsql/lib,' pgpool-recovery.sql

▼pgpool-recoveryをインストール

$ sudo cp -pi pgpool-recovery.so  /usr/local/pgsql/lib/.
$ sudo cp -pi pgpool-recovery.sql /usr/local/pgsql/share/.

作業内容: ノード(PostgreSQL)

▼PostgreSQL用ディレクトリ準備

$ sudo mkdir /usr/local/pgsql
$ sudo chown postgres:postgres /usr/local/pgsql

psqlコマンドなどはDebianパッケージでインストールされている物とする

▼pgpool-IIからノードへpgpool-recoveryを配置

$ cd /usr/local/pgsql
$ sudo mkdir lib
$ sudo mkdir share

$ scp (pgpool-II):/usr/local/pgsql/lib/pgpool-recovery.so    ./lib/pgpool-recovery.so
$ scp (pgpool-II):/usr/local/pgsql/share/pgpool-recovery.sql ./share/pgpool-recovery.sql

▼initdbコマンドでdataディレクトリ作成

$ sudo -u postgres /usr/lib/postgresql/8.3/bin/initdb -D /usr/local/pgsql/data

▼archive_logの準備

$ sudo -u postgres mkdir     /usr/local/pgsql/data/archive_log/
$ sudo -u postgres chmod 700 /usr/local/pgsql/data/archive_log/

▼postgresql.conf変更 アーカイブログを有効化

$ sudo vi /usr/local/pgsql/data/postgresql.conf
listen_addresses = '*'
archive_mode = on
archive_command = 'cp %p /usr/local/pgsql/data/archive_log/%f'

▼pg_hba.conf変更

$ sudo vi /usr/local/pgsql/data/pg_hba.conf
local   all         all                               trust
host    all         all         127.0.0.1/32          trust
host    all         all         192.168.1.0/24          trust
host    all         all         ::1/128               trust

pgpool-IIからの接続を許可する

▼PostgreSQLを起動

$ sudo -u postgres /usr/lib/postgresql/8.3/bin/pg_ctl -D /usr/local/pgsql/data start

▼pgpool-recoveryをpostgresに組み込む

$ sudo -u postgres psql -c "\i /usr/local/pgsql/share/pgpool-recovery.sql" template1
CREATE FUNCTION
CREATE FUNCTION

オンラインリカバリを検証する為の受け皿は整った。

今後の予定

  • オンラインリカバリ検証

関連エントリ



PostgreSQL徹底入門 第2版
浅羽 義之 石田 朗雄 稲葉 香理 永安 悟史
翔泳社
売り上げランキング: 34255



2009年05月22日

日ハムが「Sledge」を使っていた事に気づいた

このエントリーをはてなブックマークに追加

何気なくスポーツニュースを見ていた

TV: 「スレッジが○○」
自分:「す・・・すれっじ?!」

背中の選手名を見ると…なんと、SLEDGE!!

調べてみると「ターメル・スレッジ」と言う選手が2008年から「日ハム」に所属している。
去年から居たのに、今頃気づいた。


個人的にSledgeと言うと「Sledge

何故Sledgeに反応したかと言うと、
その理由は、whois.hansode.orgでSledgeを使っている事。

Sledgeを開発したのは「livedoor」。
livedoorポータルサイトの構築でSledgeが多く使われている。

livedoorが日ハムのスポンサーだったら面白いのに。

頑張れSledge選手!




2009年05月21日

Re: LDR 購読者数を XPath Graph で可視化する

このエントリーをはてなブックマークに追加

LDR 購読者数を XPath Graph で可視化するより

刺身さん」に教えて頂いた「XPath Graph」。
刺身さんのアドバイス通りに設定してみた。

▼半袖blog 読者数(LDR)

読者数(LDR)

今はまだ取得期間が少ない。
今後、増減すると面白い状態になるはず。

刺身さん、ありがとう!




「ホワイトボードナイト vo.1」開催

このエントリーをはてなブックマークに追加

2009/05/18(月) ホワイトボードナイト

NEC_4549

あくしゅ事務所にて「ホワイトボードナイト vol.1」が開催された。

▼開催までの流れ

  1. 2009/04/11(土)、あくしゅ事務所が新宿へ移転した
  2. livedoor時代の元同僚と、新宿移転&ホワイトボード有無の話となる
  3. ホワイトボードの話題からsasakillさんの「ホワイトボードナイトやりたい」エントリの存在を教えてもらう
  4. 元同僚に、sasakillさんのblogエントリに「懇親会を兼ね、うちでやりませんか?」とコメント
  5. sasakillさんからメールで連絡が入る
  6. →ホワイトボードナイトの開催が決定

▼全てが手探り。まずは自己紹介。

NEC_4550
  • 横軸に「文系」「理系」
  • 縦軸に「営業」「技術」

各自自由に自分のポジションを紹介。

トップバッターが5分以上かかったからか「これは時間がかかる」と思ったのか、途中から「持ち時間1分ルール」が適用される。更に、次の人は指名制が適用された。

  • 持ち時間1分
  • 次の人を指名

▼「聞きたい事」と「話したい事」

NEC_4551

聞きたい事をリクエスト。
とても興味深い会話が交わされた。


結局、ホワイトボードナイトとは…

NEC_4552

sasakillさんも書かれている通り
自分もまた参加メンバーに何度も趣旨を聞かれた。そして「コレ」と言う答えもなく…

今回の参加メンバーにも何度も何度も会の趣旨を聞かれましたが、
やってみてわかりました。どうやら単なる飲み会ですw

そう。単なる飲み会!
しかし、単なる飲み会と違うのは「ホワイトボード」の存在。

  • ホワイトボードがあるおかげで、話題が分散しない
  • 10人程度(今回の参加者数)なら1つの話題に集中出来る
  • 参加者が注目するのは、ホワイトボード

ホワイトボード居酒屋の需要はありそうだと実感した。
壁に貼るタイプのホワイトボードシートが存在するので、それを居酒屋へ持ち込んでみると面白いかも知れない。


まとめ

NEC_4553
  • 用意した物
    • ホワイトボード
    • ビール (人数x3本程度)
    • ツマミ (ペンを手が汚れにくいと良いのかも)
  • 参加者の持ち物
    • 名刺
    • デジカメ or カメラ付き携帯
  • 自己紹介
    • 持ち時間は1分
    • 次の人を指名
  • 「聞きたい事」「話したい事」
    • 結局は飲み会なので、基本的に自由
  • blogエントリ
    • 必須ではないけど書いた方が良い

参加者のみなさん、ありがとうございました。
またやりましょう!


おまけ

「ホワイトボードナイト」は翌朝までが「ホワイトボードナイト」です。

翌朝の片付けは、
いつも早めに出社する取締役2人(1人は自分)で30分…かかったのであった。


参加者エントリ(投稿時間順)




2009年05月20日

[Wakame] PostgreSQLもスケール対象へ (2/n)

このエントリーをはてなブックマークに追加

[Wakame] PostgreSQLもスケール対象へ (1/n) の続編

前回の予告通り、今回はpgpool-II 2.1以降をインストールする。

http://pgfoundry.org/projects/pgpoolを確認すると、2009/05/20現在「2.2.2」が最新版。
今回はpgpool-II 2.2.2をインストールする。

作業記録

▼事前準備

$ sudo apt-get install libpq-dev

pgpool-IIをビルドするにはpg_configコマンドが必要なので、libpq-devをインストールしておく必要がある。

$ which pg_config
/usr/bin/pg_config

pg_configコマンドの存在を確認。

▼pgpool-IIのソースパッケージをダウンロード

$ wget http://pgfoundry.org/frs/download.php/2191/pgpool-II-2.2.2.tar.gz

▼tar ballを伸長

$ tar zxvf pgpool-II-2.2.2.tar.gz

▼ビルドとインストール

$ cd pgpool-II-2.2.2/; pwd
/home/axsh/work/pgpool-II-2.2.2
$ ./configure --prefix=/usr/local/pgpool2
$ make
$ sudo make install

▼config用意

$ cd /usr/local/pgpool2/etc/; pwd
/usr/local/pgpool2/etc

$ sudo cp -pi pgpool.conf.sample pgpool.conf
$ sudo vi pgpool.conf

$ diff pgpool.conf.sample pgpool.conf
17c17,18
< socket_dir = '/tmp'
---
> #socket_dir = '/tmp'
> socket_dir = '/var/run/postgresql'
21c22,23
< pcp_socket_dir = '/tmp'
---
> #pcp_socket_dir = '/tmp'
> pcp_socket_dir = '/var/run/postgresql'
24c26,27
< backend_socket_dir = '/tmp'
---
> #backend_socket_dir = '/tmp'
> backend_socket_dir = '/var/run/postgresql'
60c63,64
< pid_file_name = '/var/run/pgpool/pgpool.pid'
---
> #pid_file_name = '/var/run/pgpool/pgpool.pid'
> pid_file_name = '/var/run/postgresql/pgpool.pid'
177a182,185
> backend_hostname0 = '127.0.0.1'
> backend_port0 = 5432
> backend_weight0 = 1
>

configのコメントには「Debianではこの設定値」と書かれていて、 Debianユーザーには優しいコメントとなっている。

▼pgpool-IIを起動

$ sudo -u postgres /usr/local/pgpool2/bin/pgpool -n

pgpoolコマンドに「-n」を付けるとforegroundで起動する。
daemontools」でプロセス管理させる事も検討したい。

▼postgresへの接続テスト

$ psql -p 9999 -d postgres
Password:
Welcome to psql 8.3.7, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

postgres=# \q

問題なくpgpoolへ接続出来た。

課題

  • pgpool-IIの起動管理
    • 個人的にはdaemontoolsで管理したい所だ
    • オンラインリカバリとの相性がどうなのか分からないので
    • →とりあえず保留

今後の予定

  • オンラインリカバリ検証
  • 作ったスクリプトがあればそのスクリプト

関連エントリ




PostgreSQL徹底入門 第2版
浅羽 義之 石田 朗雄 稲葉 香理 永安 悟史
翔泳社
売り上げランキング: 6803



[Wakame] PostgreSQLもスケール対象へ (1/n)

このエントリーをはてなブックマークに追加

Wakame」で「PostgreSQL」を使えるようにしたい

WakameでPostgreSQLを使えるなら使ってみたい

Wakameに興味を持って下さった方々から、
こう言った声を少なからずとも、いや、意外と多く聞く様になった。

だったら、PostgreSQLもどうにかしよう。
個人的には久しぶりにPostgreSQLに触れる機会となった。

PostgreSQLでレプリケーション構成を構築するには「pgpool-II」を使うと良いらしいよ

噂の真相を突き止めるべく、検証してみる事にした。


作業記録

作業環境

ディストリビューションDebian GNU/Linux 5.0.1
カーネル2.6.18-6-xen-amd64
postgresql8.3.7-0lenny1
pgpool21.3-2

PostgreSQLをインストール

$ sudo apt-get install postgresql

PostgreSQLアカウント作成

$ sudo -u postgres createuser -P axsh
Enter password for new role:
Enter it again:
Shall the new role be a superuser? (y/n) y

psqlでpostgresに接続テスト

$ psql -d postgres
Welcome to psql 8.3.7, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

postgres=# \q

pgpool-IIをインストール

$ sudo apt-get install pgpool2

pgpool-IIにノードを追加

$ cd /etc; pwd
/etc
$ sudo cp -pi pgpool.conf pgpool.conf.0
$ sudo vi pgpool.conf
$ diff pgpool.conf.0 pgpool.conf
149a150,153
> backend_hostname0 = '127.0.0.1'
> backend_port0 = 5432
> backend_weight0 = 1
>

pgpool-IIを再起動

$ sudo /etc/init.d/pgpool2 restart

pgpool-IIへ接続テスト

$ psql -d postgres -p 5433
Password:
Welcome to psql 8.3.7, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

postgres=# \q

繋がった

LISTENポートを調べてみる

$ sudo netstat -nap |grep -w LISTEN
tcp        0      0 0.0.0.0:9898            0.0.0.0:*               LISTEN      8378/pgpool
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1069/sshd
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      7613/postgres
tcp        0      0 127.0.0.1:5433          0.0.0.0:*               LISTEN      8378/pgpool
tcp6       0      0 :::22                   :::*                    LISTEN      1069/sshd
ポート番号内容
5432postgres
5433pgpool
9898pgpool communication manager

なるほど


面白機能は pgpool-II 2.1からだった…

pgpool-IIには、1.x系と2.x系が存在していた。
しかも、使いたくなるような機能は2.1から実装されている事が判明。

pgpool-IIによるレプリケーションとオンラインリカバリの「pgpoolの歴史」より

プロダクトバージョンリリース時期主な追加機能
pgpoolver12004.4コネクションプール機能、(2台による)同期レプリケーション機能
pgpoolver22004.6負荷分散機能
pgpool-IIver12006.9パラレルクエリー、2台以上の同期レプリケーション機能
pgpool-IIver22007.11オンラインリカバリ

ノードを新規追加するにはオンラインリカバリが重宝するはずだ。
オンラインリカバリの検証もまた必要となる。


Debianパッケージが古い

Debianパッケージだと、pgpool-IIの1.3が最新となっている。

$ dpkg -l pgpool2
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Cfg-files/Unpacked/Failed-cfg/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name           Version        Description
+++-==============-==============-============================================
ii  pgpool2        1.3-2          connection pool server and replication proxy

2007.11にリリースされたのに、Debianにしてはパッケージが古いね。
sidにしてみたらどうなるのか気になったので調べてみても、やはり1.3だ。
http://packages.debian.org/sid/pgpool2

よって、ソースパッケージからインストールするしかない…訳だ。


今後の予定

  1. pgpool-II 2.1のインストール
  2. オンラインリカバリ検証
  3. 作ったスクリプトがあればそのスクリプト

ゴールはWakameに乗せる事。
ワクワクして来たぞ。



PostgreSQL徹底入門 第2版
浅羽 義之 石田 朗雄 稲葉 香理 永安 悟史
翔泳社
売り上げランキング: 71946



2009年05月16日

祝LDR購読者数卯100人超え

このエントリーをはてなブックマークに追加

愛用しているfeedリーダー「livedoo Reader

購読者数を確認する事が出来る。

確認方法はこれだけ。

http://reader.livedoor.com/about/あなたのblogのURI

半袖blogの場合は、

http://reader.livedoor.com/about/http://blog.hansode.org/

こうなる。


1つの目標を達成

遂にlivedoor Readerの半袖blog購読者数が100人超えた。

ldr-subscribers

atomや旧URLを合算すると、とっくに100人超えしてたようだ。