クラスターDBの設定

対象となるシステムの設定項目

クラスタDBは,システム内で以下の図のような設定項目を持っています.クラスタDBの設定項目について,サンプルに基づいて説明します.


設定ファイルの作成

まず,データベースを初期化します.

"$PGDATA"の環境変数を設定しておけば,そのディレクトリにデータディレクトリが作成され,設定ファイルがコピーされます.

データベースの初期化
-------------------------------------------------
# su -l postgres
$ cd /usr/local/pgsql
$ bin/initdb -D /usr/local/pgsql/data -E EUC_JP --no-locale

この例ではデータディレクトリをパラメータで"/usr/local/pgsql/data"に指定しています.ここで重要なことは,このコマンドを実行するユーザがデータベースの管理者ユーザになることです."root"でデータベースを初期化してはいけません.また,"/usr/local/pgsql/"のディレクトリも,管理者ユーザの持ち物にしておく必要があります.また,データベースで日本語を扱う場合,"-E EUC_JP --no-locale"を付けてください.
各サーバの設定方法は以下の通りです.

$PGDATA/pg_hba.confの設定

レプリケーションサーバとクラスタサーバはネットワークで接続されますので,ネットワークによる接続を許可しておきます.
pg_hba.confでのネットワーク接続許可の設定
------------------------------------------------------------
# TYPE DATABASE IP_ADDRESS MASK AUTH_TYPE AUTH_ARGUMENT

local  all  all  trust
host  all  all  127.0.0.    255.255.255.255  trust
host all  all 192.168.0.0  255.255.255.0  trust #<--ここを追加


$PGDATA/postgresql.confの設定

接続を受け付けるポートや最大接続数等を設定します.マシン環境やデータベースの規模に応じて設定内容を調整してください.

# - Connection Settings -

tcpip_socket = true
max_connections = 100

# note: increasing max_connections costs about 500 bytes of shared
# memory per connection slot, in addition to costs from shared_buffers
# and max_locks_per_transaction.
#superuser_reserved_connections = 2
port = 5432

$PGDATA/cluster.confの設定

この設定ファイルはpgreplicate固有の設定ファイルです.クラスタサーバの設定用に使います.

#=============================================
# cluster.conf
#---------------------------------------------
# このファイルはテーブル状に複数の値を設定する書き方と,
# 設定値を1つずつ設定する書き方の2種類の書き方ができます.
#
# <Table_Name_Tag>
#  <Data_Name_Tag1> value1 </Data_Name_Tag1>
#   <Data_Name_Tag2> value2 </Data_Name_Tag2>
#  <Data_Name_Tag3> value3 </Data_Name_Tag3>
# </Table_Name_Tag>
# or
# <Data_Name_Tag> value </Data_Name_Tag>
#
# "#"以降はコメントとして解釈されます.
#=============================================
#--------------------------------------------------------------------
# レプリケーションサーバの設定を記述します
#--------------------------------------------------------------------
<Replicate_Server_Info>
#------------ ホスト名
  <Host_Name> replicate_upper   </Host_Name>
#------------ レプリケーション要求の接続ポート番号
  <Port>        8001          </Port>
#------------ リカバリ要求の接続ポート番号
  <Recovery_Port>  8101          </Recovery_Port>
#------------ ライフチェックの接続ポート番号
  <LifeCheck_Port> 8201         </LifeCheck_Port>
</Replicate_Server_Info>
#
# レプリケーションサーバの設定は複数記述できます.
#
<Replicate_Server_Info>
#------------ ホスト名
  <Host_Name> replicate_lower   </Host_Name>
#------------ レプリケーション要求の接続ポート番号
  <Port>        8001          </Port>
#------------ リカバリ要求の接続ポート番号
  <Recovery_Port>  8101          </Recovery_Port>
#------------ ライフチェックの接続ポート番号
  <LifeCheck_Port> 8201         </LifeCheck_Port>
</Replicate_Server_Info>
#
#--------------------------------------------------------------------
# クラスタサーバ固有の設定を記述します.
#--------------------------------------------------------------------
#--- リカバリ時にマスタDBになった場合,受け付けるポート番号
<Recovery_Port>   7101 </Recovery_Port>
#------------ ライフチェックの接続ポート番号
<LifeCheck_Port>  7201         </LifeCheck_Port>
#--- リカバリ時に使用するrsyncのパス
<Rsync_Path>    /usr/bin/rsync </Rsync_Path>
#--- リカバリ時に使用するrsyncのsshオプション
<Rsync_Option>    ssh -1 </Rsync_Option>
#--- レプリケーションサーバが全て停止し,スタンドアロンになってしまった場合の
#--- 動作モードの指定
#--- read_only : 検索のみ許可(デフォルト)
#--- read_write : データ更新も許可
<When_Stand_Alone>  read_only       </When_Stand_Alone>
#--- 接続先のレプリケーションサーバの状態を記録するログファイルのパス
<Status_Log_File>   /tmp/1/cluster.sts </Status_Log_File>
#--- クラスタDBのデバッグ文などを記録するログファイルのパス
<Error_Log_File>    /tmp/1/cluster.log </Error_Log_File>

#--------------------------------------------------------------------
# レプリケーションしないDB+テーブルを指定します.(部分レプリケーション機能)
#--------------------------------------------------------------------
<Not_Replicate_Info>
#------------ DB名
  <DB_Name>   Local_DB    </DB_Name>
#------------ テーブル名
  <Table_Name> Log_Table </Table_Name>
</Not_Replicate_Info>


この設定ファイルでは以下のタグによって値を設定します.

(1)レプリケーションサーバに関する設定
・<Replicate_Server_Info>〜</Replicate_Server_Info>
 レプリケーションサーバの設定を宣言します.設定終了タグまでの間にレプリケーションサーバの設定値(ホスト名,レプリケーション用のポート番号,リカバリ用のポート番号)を記述します.レプリケーションサーバの情報は複数設定しておくことができます.
・<Host_Name>〜</Host_Name>
 レプリケーションサーバのホスト名の設定します.DNSまたは"/etc/hosts"で名前解決が可能なホスト名を設定します.IPアドレスを記述しないでください.
・<Port>〜</Port>
 レプリケーション要求を送信時に接続するレプリケーションサーバのポート番号を設定します.
・<Recovery_Port>〜</Recovery_Port>
 リカバリ要求を送信時に接続するレプリケーションサーバのポート番号を設定します.
・<LifeCheck_Port>〜</LifeCheck_Port>
 他サーバからのライフチェックを受信するポート番号を設定します.

(2)クラスタサーバ固有のデータ設定
・<Recovery_Port>〜</Recovery_Port>
 クラスタサーバがマスタDBになった場合,データ復旧の要求をレプリケーションサーバから受け付けるポート番号を設定します. ・<LifeCheck_Port>〜</LifeCheck_Port>
 他サーバからのライフチェックを受信するポート番号を設定します.
・<Rsync_Path>〜</Rsync_Path>
 データ復旧の際使用するrsyncコマンドのパスを設定します.rsyncの設定方法についてはこちらを参照してください
・<Rsync_Option>〜</Rsync_Option>
 データ復旧の際使用するrsyncコマンドのオプションを設定します.rsyncの設定方法についてはこちらを参照してください
・<When_Stand_Alone> 〜 </When_Stand_Alone>
レプリケーションサーバが全て停止してクラスタDBサーバがスタンドアロン状態になった場合の動作モードを指定します. 検索系のクエリーのみを受け付ける場合は,"read_only",更新系のクエリーも受け付ける場合は"read_write"と設定します.
・<Status_Log_File> 〜 </Status_Log_File>
接続先のレプリケーションサーバの状態等を記録するログファイル名を設定します.
・<Error_Log_File> 〜 </Error_Log_File>
デバッグ文やエラー文を記録するログファイル名を設定します.

(3)部分レプリケーションの設定
レプリケーションをしないDBとテーブルの組み合わせを設定します.
<Not_Replicate_Info> 〜 </Not_Replicate_Info>
部分レプリケーションの設定を宣言します.設定終了タグまでの間にレプリケーションしないクエリーの設定値(DB名,テーブル名)を記述します. 部分レプリケーションの情報は複数設定しておくことができます.
・<DB_Name>〜</DB_Name>
 レプリケーションをしないDB名の設定します.
・<Table_Name>〜</Table_Name>
 レプリケーションをしないテーブル名の設定します.