[pgsql-jp: 31753] Re: クラスタサーバが起動出来ない (pgcluster-1.0.5)

八田 s-hatta @ exl.ne.jp
2003年 12月 10日 (水) 18:40:49 JST


八田です。

先に謝ります。
このメール長いです。


 クラスラサーバー     2台 Redhat9.0
 レプリケーションサーバー 1台 Redhat9.0 DNSサーバ
 ロードバランサー     無し
で構成した環境での動作した1例です。
rsyncは全サーバで動かしてます。(標準インストールしたもの)

ハードスペックは3台とも
CPU P2 266Mhz
メモリ 64M
HD  4G(1台)
NIC 100Mhz(1枚)
と今となっては超非力マシンですが、、、、
HUBは10の馬鹿HUB使ってます!


OSやシェルの違いで構築方法は違ってくると思いますが、
1動作事例として参考にしてください。

1.コンパイルの準備
1.1 ユーザの追加
postgres ユーザを追加します。
 *webminを使用すると楽にユーザ管理ができます。
  http://jp.webmin.com/
1.2ホスト名の設定
 レプリケーションサーバにDNSサーバを起動させ、
 ホスト名を登録する。
 注)各サーバ起動前にDNSサーバが起動していないと
   うまく動きません。
 *hostsファイルにホスト名を記述する方が障害に
  強いと思われる。

1.2ユーザ環境整備

*シェルが/bin/bashの場合「.bash_profile」に

#POSTGRES
POSTGRES_HOME=/usr/local/pgsql
export POSTGRES_HOME
PGDATA=/usr/local/pgsql/data
export PGDATA
LD_LIBRARY_PATH=/usr/local/pgsql/lib
export LD_LIBRARY_PATH
MANPATH="$MANPATH":$POSTGRES_HOME/man
export MANPATH
PATH=$PATH:$POSTGRES_HOME/bin

を追加する
レプリケーションサーバの場合
PGDATA=/usr/local/pgsql/etc
や
PGDATA=/usr/local
に変更する。
*注意:OSやシェルの違いでset PGDATA=/usr/local
 とかにしないといけない場合がある。


2.クラスターサーバのコンパイル
バージョン1.0.5で作業場所を/usr/local/srcとした場合。

# cd /usr/local/src
# tar -zxvf pgcluster-1.0.5.tar.gz > t.log
# chown -R postgres.postgres pgcluster-1.0.5

# su -l postgres
$ cd /usr/local/src/pgcluster-1.0.5
$ ./configure --enable-syslog
$ make
$ make install

3.レプリケーションサーバのコンパイル
# su -l postgres
$ cd /usr/local/src/pgcluster-1.0.5/src/pgcluster/pgrp
$ ./configure
$ ./configure --enable-syslog
$ make
$ su
# make install

4.ロードバランサのコンパイル
#su -l postgres
$cd /usr/local/src/pgcluster-1.0.5/src/pgcluster/pglb
$./configure
$make
$su
#make install
*動作させてないので、、、、


5.rsyncの設定
5.1opensshの設定
マスタースレーブ共に公開キーを作成する。
(postgresユーザで!)
# su -l postgres
$ ssh-keygen -t rsa1
$ cd ./.ssh        <--Redhat 9.0では.sshはエラーになった!
$ cp identity.pub authorized_keys

公開キーの取得
ftp等で相手側のauthorized_keysを取得してくる。
(a_authorized_keysと名前を変えた仮定します。)
$ cat a_authorized_keys >> authorized_keys

*注意:オリジナルのidentity.pubは壊さないように
    しましょう!

6.データベースの初期化
マスター、スレーブ両方で作成します。
# su -l postgres
$ /usr/local/pgsql/bin/initdb --encoding=EUC_JP --no-locale -D /usr/local/pgsql/data

7.環境ファイルの編集
7.1 レプリケーションサーバ

 「pgreplicate.conf」の編集
 /usr/local/pgsql/etc/pgreplicate.conf.sampleを
 動作環境に応じpgreplicate.confとコピーする。
 # cp /usr/local/pgsql/etc/pgreplicate.conf.sample /usr/local/pgreplicate.conf

クラスタサーバを登録する。
<Cluster_Server_Info>
    <Host_Name>   Asv.***.jp  </Host_Name>
    <Port>        5432                </Port>
    <Recovery_Port>       7779        </Recovery_Port>
</Cluster_Server_Info>
<Cluster_Server_Info>
    <Host_Name>   Bsv.***.jp  </Host_Name>
    <Port>        5432                </Port>
    <Recovery_Port>       7779        </Recovery_Port>
</Cluster_Server_Info>

Asv.***.jpやBsv.***.jpは動作環境に合わせてください。
注1)ホスト名にIPアドレスは指定しない。
注2)ホスト名A,Bなどの1文字で使用しない。
  *rsyncが失敗しているような現象が発生。
注3)初めに記述したクラスタサーバがマスタDBとなる。

7.2 クラスターサーバーの設定

  「pg_hba.conf」の編集

host all 192.168.3.0 255.255.255.0 trust #アクセス対象を指定

  「cluster.conf」の編集

<Replicate_Server_Info>
        <Host_Name> Csv.***.jp </Host_Name>
        <Port> 8777 </Port>
        <Recovery_Port> 7778 </Recovery_Port>
</Replicate_Server_Info>

Asv.***.jpやBsv.***.jpは動作環境に合わせてください。
注1)ホスト名にIPアドレスは指定しない。

  「postgresql.conf」の編集

tcpip_socket = on
ssl = on

を追加!

8.起動と停止
8.1クラスタサーバ
 起動
 # /usr/local/pgsql/bin/pgreplicate -D /usr/local
 停止
 # /usr/local/pgsql/bin/pgreplicate stop -D /usr/local

 テストで動かす場合ログが見えるのでこちらが良いかと!
 起動
 # /usr/local/pgsql/bin/pgreplicate -D /usr/local -nv
 停止
 # /usr/local/pgsql/bin/pgreplicate stop -D /usr/local -nv


8.2レプリケーションサーバ
 起動
  $ /usr/local/pgsql/bin/pg_ctl start -D /usr/local/pgsql/data -o "-i"
 停止
  $ /usr/local/pgsql/bin/pg_ctl stop -D /usr/local/pgsql/data -o "-i"

以上で正常にレプリケーションしてくれます。
テーブル作成やレコードの更新を行うと間髪入れずに
レプリケートしてくれるのは感動物です。

お詫び:既に動作されていて必要のない方、PGClusterを使用しない方
    長くなりまして申し訳ありません。
追伸 :PGCluster非常に良いと推薦します、使用されていない方は
    使用されることをお勧めします。

-- 
hatta <s-hatta @ exl.ne.jp>





pgsql-jp メーリングリストの案内