Home > 5 月, 2010

2010.05.28

スパム対策への対策

皆さんはYahoo!アカウントにメールを送ったけれど届かなかったり、またはYahoo!アカウントでメールを受信する際にメールがなりすましメールと扱われた経験は無いでしょうか?

これは、Yahoo!メールがSPFと呼ばれるスパム対策技術を導入しているためです。

(more…)

2010.05.26

簿記の基本の「き」

今回は技術的なお話ではなく、簿記の基本の流れをまとめてみました。

簿記に馴染みの無い方を特に意識して書いてみましたので、何となく「簿記」「会計」などの
単語に忌避感を覚えている方に、取っ掛かりとして軽く読んでいただければ、と思います。

EC-CUBEをカスタマイズして基幹系システムを構築、なんて案件もありますし、その場合には
経理や会計に関わる機能を求められる事もあると思います。要件定義や仕様策定フェーズに
携わる立場のSEであれば、知らぬ存ぜぬでは済まないので充分な知識をお持ちだと思いますが
製造や実装を担当されている方でも、簿記の知識があれば、仕様の把握などに役立つのでは
ないでしょうか。

今回は基本という事で、P/L、B/S作成までの流れを追っていきます。

(more…)

2010.05.20

PostgreSQLでレプリケーション -pgpool-

PostgreSQLでDBをレプリケーションなど負荷分散機能を使用したい場合の選択肢の一つとしてpgpoolがあげられます。

現在pgpool-IIとしてLinuxをはじめ、SolarisやFreeBSDなどのほとんどのUNIX環境で動作します。残念ながらWindowsでは動きません。対応するPostgreSQLのバージョンは、PostgreSQLの6.4以降です。ただしパラレルクエリモードを使用するときはPostgreSQL 7.4以降になります。

どこがいいの?何が出来る?

1. アプリケーション側での接続方法は通常のPostgreSQLへの接続方法と同じ

クライアント側からは通常のPostgreSQLサーバとして見えます。ポート番号やホストをpgpoolへ変更するだけで接続できます。

2. 言語を限定しない

PostgreSQLサーバとして接続する為、PostgreSQLに接続できる言語(PHP, Perl, Javaなど)ならどれでも使用できます。

3. フェイルオーバー機能

PostgreSQLサーバを2台指定しておくことにより,マスタがダウンした際に自動的にセカンダリのサーバに切り替えることができます。

4. レプリケーション機能

複数のPostgreSQLサーバを管理することができます。レプリケーションを使用することにより、物理的に2台以上のディスクに リアルタイムでハードディスクのバックアップを取ることができ、万が一どれかのディスクに障害が発生しても運用を継続することができます。

5. 負荷分散機能

レプリケーションモードで動作している場合「負荷分散」を行うことができます。

6. 接続数の制限が可能

PostgreSQLへの接続数をPostgreSQLがもっとも効率良く動作する同時接続数で維持することができます。

7. コネクションプーリング

PostgreSQLへの接続を保存しておき、再利用することによってPostgreSQLへの接続オーバヘッドを低減でき、システム全体のスループット を向上させることができます。

インストール

ここではソースからインストールする方法をご紹介します。

./configure
make
make install

デフォルトのインストール先は, /usr/local以下で以下のようなファイルがインストールされます。

/usr/local/bin/pgpool プログラム本体
/usr/local/etc/pgpool.conf.sample 設定ファイルサンプル

インストール先を変更する場合は,configure –prefix=path… としてください。

pgpool.confを設定

/usr/local/etc/pgpool.conf.sampleファイルを/usr/local/etc/pgpool.confにコピーします。
pgpool.confでは空白行や#で始まる行はコメントと見なされます。以下抜粋します。

1: # pgpool-IIへのアクセスを許可するネットワークやアドレスを指定する
2: listen_addresses = ‘*’ # ‘*’を設定すると、無条件で接続可能
3: port = 9999 # pgpool-IIのアクセスポート
4: pcp_port = 9898 # pgpool-IIの制御用アクセスポート
5:
6: # pgpool-IIをレプリケーションモードで起動
7: replication_mode = true
8:
9: # ノード0 => サーバpostgres0の情報を設定
10: backend_hostname0 = ‘192.168.1.100′ # サーバpostgres0のIPアドレス
11: backend_port0 = 5432 # PostgreSQLのポート番号
12: backend_weight0 = 1
13: backend_data_directory0 = ‘/usr/local/pgsql/data’ # ベースディレクトリ
14:
15: # ノード1 => サーバpostgres1の情報を設定
16: backend_hostname1 = ‘192.168.1.101 # サーバpostgres1のIPアドレス
17: backend_port1 = 5432 # PostgreSQLのポート番号
18: backend_weight1 = 1
19: backend_data_directory1 = ‘/usr/local/pgsql/data’ # ベースディレクトリ

PCP コマンドの設定

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

postgres:e8a48653851e28c69d0506508fb27fc5

pgpool-II をインストールするとサンプルとして pcp.conf.sample ファイルが作成されるので、それを pcp.conf というファイル名にコピーしてから編集するといいでしょう。

cp /usr/local/etc/pcp.conf.sample /usr/local/etc/pcp.conf

また、PCP コマンドはネットワークを通して実行されるので、pgpool-II が PCP コマンドを受け付けるポート番号を pgpool.conf
ファイルの pcp_port パラメータに設定します。ここでは、pcp_port パラメータに最初から設定されているポート番号 9898 をそのまま使用します。

pcp_port = 9898

起動と停止

起動するには以下のように コマンドを実行します。

pgpool -n &

以下のようにすることでログメッセージをファイルに保存できます。(-d オプションはデバッグメッセージの出力を有効にします。)

pgpool -n -d > /tmp/pgpool.log 2>&1 &

停止するには以下のコマンドを実行します。

pgpool stop

通常は停止する際にクライアントが接続している場合、その接続が切断されるまで待ってから停止します。 強制的に停止するには以下のを実行します。

pgpool -m fast stop

使用してみる

後は普通のPostgreSQLと同様の使用方法になります。もちろんpsql使用できます。

ポートやホストを変更している場合は

psql -p xxx -h xxx db_name

として入ってください。状態を確認するには

show pool_status

で確認できます。特に障害などで萎縮運転をしているときに現在マスタとセカンダリどちらが動いているか確認できます。

後はほぼ普通の使用方法と変わりません。気をつけることはnow()を使用してのタイムスタンプカラムなどの更新はDB間で値がずれて不整合が起こる可能性が大きいので控えることでしょうか。(書き込むタイミングがサーバ間で厳密には同時ではない為)

その他

pgpool-IIからはオンラインリカバリを実施できます。(PostgreSQLにライブラリを追加します)←こちらは使用したこと無いので今回はパスします。

以上、簡単にPostgreSQLをレプリケーション運用できますので、一度試してみてはいかがでしょうか?