2009年05月
2009年05月28日
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特集が載ってたので読んでみた。
分散管理の「ぶ」をちょっとだけ分かった気がする程度。
兎にも角にも、使い慣れるしかないと感じた。
本格的な戦いはこれからだ。
技術評論社
売り上げランキング: 1014
2009年05月27日
何人かの常連さんと仲良くなった
時間があればボルダリング(フリークライミング)。
今ではすっかり自分の習慣になった。少なくても週2ペース。
ジムへ通っていれば見慣れた顔が出来始め、自然と会話生まれる。
最近、面白い傾向に気付いた。
職業を聞いた常連の男性客の業種は「IT系」
登りたくなる業種なのだろうか?
ゴールした時の小さな達成感の積み重ね。
それがエンジニアを夢中にさせる要因なのかも知れない。
一緒にクライミングやりませんか?
売り上げランキング: 8425
スキージャーナル
売り上げランキング: 125031
2009年05月26日
[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もスケール対象へ (1/n)
- [Wakame] PostgreSQLもスケール対象へ (2/n)
- [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
オンラインリカバリを検証する為の受け皿は整った。
今後の予定
- オンラインリカバリ検証
関連エントリ
翔泳社
売り上げランキング: 34255
2009年05月22日
何気なくスポーツニュースを見ていた
TV: 「スレッジが○○」
自分:「す・・・すれっじ?!」
背中の選手名を見ると…なんと、SLEDGE!!。
調べてみると「ターメル・スレッジ」と言う選手が2008年から「日ハム」に所属している。
去年から居たのに、今頃気づいた。
個人的にSledgeと言うと「Sledge」
何故Sledgeに反応したかと言うと、
その理由は、whois.hansode.orgでSledgeを使っている事。
Sledgeを開発したのは「livedoor」。
livedoorポータルサイトの構築でSledgeが多く使われている。
livedoorが日ハムのスポンサーだったら面白いのに。
頑張れSledge選手!
2009年05月21日
LDR 購読者数を XPath Graph で可視化するより
「刺身さん」に教えて頂いた「XPath Graph」。
刺身さんのアドバイス通りに設定してみた。
▼半袖blog 読者数(LDR)
今はまだ取得期間が少ない。
今後、増減すると面白い状態になるはず。
刺身さん、ありがとう!
2009/05/18(月) ホワイトボードナイト
あくしゅ事務所にて「ホワイトボードナイト vol.1」が開催された。
▼開催までの流れ
- 2009/04/11(土)、あくしゅ事務所が新宿へ移転した
- livedoor時代の元同僚と、新宿移転&ホワイトボード有無の話となる
- ホワイトボードの話題からsasakillさんの「ホワイトボードナイトやりたい」エントリの存在を教えてもらう
- 元同僚に、sasakillさんのblogエントリに「懇親会を兼ね、うちでやりませんか?」とコメント
- sasakillさんからメールで連絡が入る
- →ホワイトボードナイトの開催が決定
▼全てが手探り。まずは自己紹介。
- 横軸に「文系」「理系」
- 縦軸に「営業」「技術」
各自自由に自分のポジションを紹介。
トップバッターが5分以上かかったからか「これは時間がかかる」と思ったのか、途中から「持ち時間1分ルール」が適用される。更に、次の人は指名制が適用された。
- 持ち時間1分
- 次の人を指名
▼「聞きたい事」と「話したい事」
聞きたい事をリクエスト。
とても興味深い会話が交わされた。
結局、ホワイトボードナイトとは…
sasakillさんも書かれている通り、
自分もまた参加メンバーに何度も趣旨を聞かれた。そして「コレ」と言う答えもなく…
今回の参加メンバーにも何度も何度も会の趣旨を聞かれましたが、
やってみてわかりました。どうやら単なる飲み会ですw
そう。単なる飲み会!
しかし、単なる飲み会と違うのは「ホワイトボード」の存在。
- ホワイトボードがあるおかげで、話題が分散しない
- 10人程度(今回の参加者数)なら1つの話題に集中出来る
- 参加者が注目するのは、ホワイトボード
ホワイトボード居酒屋の需要はありそうだと実感した。
壁に貼るタイプのホワイトボードシートが存在するので、それを居酒屋へ持ち込んでみると面白いかも知れない。
まとめ
- 用意した物
- ホワイトボード
- ビール (人数x3本程度)
- ツマミ (ペンを手が汚れにくいと良いのかも)
- 参加者の持ち物
- 名刺
- デジカメ or カメラ付き携帯
- 自己紹介
- 持ち時間は1分
- 次の人を指名
- 「聞きたい事」「話したい事」
- 結局は飲み会なので、基本的に自由
- blogエントリ
- 必須ではないけど書いた方が良い
参加者のみなさん、ありがとうございました。
またやりましょう!
おまけ
「ホワイトボードナイト」は翌朝までが「ホワイトボードナイト」です。
翌朝の片付けは、
いつも早めに出社する取締役2人(1人は自分)で30分…かかったのであった。
参加者エントリ(投稿時間順)
2009年05月20日
[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で管理したい所だ
- オンラインリカバリとの相性がどうなのか分からないので
- →とりあえず保留
今後の予定
- オンラインリカバリ検証
- 作ったスクリプトがあればそのスクリプト
関連エントリ
翔泳社
売り上げランキング: 6803
「Wakame」で「PostgreSQL」を使えるようにしたい
WakameでPostgreSQLを使えるなら使ってみたい
Wakameに興味を持って下さった方々から、
こう言った声を少なからずとも、いや、意外と多く聞く様になった。
だったら、PostgreSQLもどうにかしよう。
個人的には久しぶりにPostgreSQLに触れる機会となった。
PostgreSQLでレプリケーション構成を構築するには「pgpool-II」を使うと良いらしいよ
噂の真相を突き止めるべく、検証してみる事にした。
作業記録
作業環境
| ディストリビューション | Debian GNU/Linux 5.0.1 |
| カーネル | 2.6.18-6-xen-amd64 |
| postgresql | 8.3.7-0lenny1 |
| pgpool2 | 1.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
| ポート番号 | 内容 |
|---|---|
| 5432 | postgres |
| 5433 | pgpool |
| 9898 | pgpool communication manager |
なるほど
面白機能は pgpool-II 2.1からだった…
pgpool-IIには、1.x系と2.x系が存在していた。
しかも、使いたくなるような機能は2.1から実装されている事が判明。
▼pgpool-IIによるレプリケーションとオンラインリカバリの「pgpoolの歴史」より
| プロダクト | バージョン | リリース時期 | 主な追加機能 |
|---|---|---|---|
| pgpool | ver1 | 2004.4 | コネクションプール機能、(2台による)同期レプリケーション機能 |
| pgpool | ver2 | 2004.6 | 負荷分散機能 |
| pgpool-II | ver1 | 2006.9 | パラレルクエリー、2台以上の同期レプリケーション機能 |
| pgpool-II | ver2 | 2007.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
よって、ソースパッケージからインストールするしかない…訳だ。
今後の予定
- pgpool-II 2.1のインストール
- オンラインリカバリ検証
- 作ったスクリプトがあればそのスクリプト
ゴールはWakameに乗せる事。
ワクワクして来たぞ。
翔泳社
売り上げランキング: 71946
2009年05月16日
愛用している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人超えた。

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

![The Cliff(ザ クリフ) 尾川智子 ボルダリングトライアル [DVD]](http://ecx.images-amazon.com/images/I/51RVF9UKoEL._SL160_.jpg)

