[pgcluster: 262] Re: レプリケーションがうまく動作しません( 自己レス:解決)
miyazawa makoto
miyazawa_pgcluster_mailling @ yahoo.co.jp
2004年 4月 26日 (月) 11:59:11 JST
宮澤です。
レプリケーションが動作しない件ですが、
自己解決いたしましたのでご報告いたします。
解決方法
/etc/system にパラメータを追加
set shmsys:shminfo_shmmax = 0x4000000
set shmsys:shminfo_shmmin = 1
set shmsys:shminfo_shmmni = 256
set shmsys:shminfo_shmseg = 256
set semsys:seminfo_semmap = 256
set semsys:seminfo_semmni = 256
set semsys:seminfo_semmns = 4096
set semsys:seminfo_semmsl = 256
set semsys:seminfo_semopm = 100 ← 追加
set semsys:seminfo_semaem = 4096 ← 追加
set semsys:seminfo_semmnu = 512 ← 追加
set semsys:seminfo_semume = 256 ← 追加
set msgsys:msginfo_msgmap = 1026 ← 追加
set msgsys:msginfo_msgmax = 4096 ← 追加
原因
理由はよくわかりませんが
追加したパラメータが十分に大きくないと
replicate.c の
PGRsem_lock()、PGRsem_unlock()で
semop()を使ってセマフォ操作をする箇所で
ループになっている箇所がありました。
こういったPostgreSQLのチューニングのノウハウや経験不足、
ソースレベルでの解析の不慣れで
教えて君になっていたことをお詫び致します。
以上
--- miyazawa makoto
<miyazawa_pgcluster_mailling @ yahoo.co.jp>
からのメッセージ:
> 現在、Solaris8(OS5.8)2台でPGClusterの検証を行っており
ま
> す、宮澤と申します。
>
> さて、ご相談させていただきたい現象なのですが
> レプリケーションサーバとクラスタDBの連動がうまくできて
い
> ません。
> いろいろ試してみたのですが、どうにもわからず皆様のお知
恵
> をお借りできたらと
> 思って投稿させていただております。
> 長文で申し訳ありませんが、よろしくお願いいたします。
>
> 以下に環境等の情報を挙げます。
> ------------------------------------------------------
> 実機環境:Solaris8(sparc、OS5.8) 2台
> サーバ構成:
> PGClusterバージョン:PGReplicate version [1.0.6cv9]
> 0系…レプリケーションサーバ+クラスタサーバ(マスタ)
> 1系…クラスタサーバ(スレーブ)
> ロードバランサは未インストール、未設定
>
> (1)インストール方法
> PGClusterの設定方法、rsyncの設定は
>
http://www.csra.co.jp/~mitani/jpug/pgcluster/stable/index.html
>
> の設定方法を参照。
> お互いのサーバでrsyncを実行し、ファイルが転送されるこ
と
> を確認。
>
> (2)設定ファイル
> 設定ファイルは以下のように記述
> 0系
> pgreplicate.conf
>
> クラスタサーバ名を追記(/etc/hostsで解決できるホス
> ト名、0系をマスタ、1系をスレーブとした)
> それ以外はdefault
>
> <Cluster_Server_Info>
> <Host_Name> test1 </Host_Name>
> <Port> 5432 </Port>
> <Recovery_Port> 7779
> </Recovery_Port>
> </Cluster_Server_Info>
> <Cluster_Server_Info>
> <Host_Name> test2 </Host_Name>
> <Port> 5432 </Port>
> <Recovery_Port> 7779
> </Recovery_Port>
> </Cluster_Server_Info>
>
> cluster.conf
>
> レプリケーションサーバを追記(/etc/hostsで解決でき
> るホスト名。0系のホスト名を指定)
> それ以外はdefault
>
> <Replicate_Server_Info>
> <Host_Name> test1 </Host_Name>
> <Port> 8777 </Port>
> <Recovery_Port> 7778 </Recovery_Port>
> </Replicate_Server_Info>
> 〜
> <Recovery_Port> 7779 </Recovery_Port>
> <Rsync_Path> /usr/local/bin/rsync </Rsync_Path>
> <Rsync_Option> ssh -1 </Rsync_Option>
> <When_Stand_Alone> read_write
> </When_Stand_Alone>
>
> pg_hba.conf
>
> ネットワークアドレス指定で同一セグメント内からのア
> クセスを許可
>
> # TYPE DATABASE USER IP-ADDRESS
>
> IP-MASK METHOD
> local all all
>
> trust
> host all all 127.0.0.1
>
> 255.255.255.255 trust
> host all all xx.xx.xx.0
>
> 255.255.255.0 trust
>
> 1系
> cluster.conf
>
> レプリケーションサーバを追記(/etc/hostsで解決でき
> るホスト名。0系のホスト名を指定)
> それ以外はdefault
>
> <Replicate_Server_Info>
> <Host_Name> test1 </Host_Name>
> <Port> 8777 </Port>
> <Recovery_Port> 7778 </Recovery_Port>
> </Replicate_Server_Info>
> 〜
> <Recovery_Port> 7779 </Recovery_Port>
> <Rsync_Path> /usr/local/bin/rsync </Rsync_Path>
> <Rsync_Option> ssh -1 </Rsync_Option>
> <When_Stand_Alone> read_write
> </When_Stand_Alone>
>
> pg_hba.conf
>
> ネットワークアドレス指定で同一セグメント内からのア
> クセスを許可
>
> # TYPE DATABASE USER IP-ADDRESS
>
> IP-MASK METHOD
> local all all
>
> trust
> host all all 127.0.0.1
>
> 255.255.255.255 trust
> host all all xx.xx.xx.0
>
> 255.255.255.0 trust
>
> (3)動作確認手順
> (1) 1系のクラスタDBを以下のコマンドで起動した。
> /usr/local/pgsql/bin/pg_ctl start -D
> /usr/local/pgsql/data -o "-i"
>
> (2)
> 0系のレプリケーションサーバを以下のコマンドで起動
> した。
> /usr/local/pgsql/bin/pgreplicate -D
> /usr/local/pgsql/etc -nv
>
>
> この時点での、レプリケーションのログは以下の通り。
> $ /usr/local/pgsql/bin/pgreplicate -D
> /usr/local/pgsql/etc -nv
> DEBUG(init_server_tbl):
> /usr/local/pgsql/etc/pgreplicate.log open ok
> DEBUG(init_server_tbl): PGR_Get_Conf_Data ok
> DEBUG(init_server_tbl): LoadBalanceTbl allocate
> ok
> DEBUG(init_server_tbl): Conf data read ok
> DEBUG(init_server_tbl): HostTbl shmget ok
> DEBUG(init_server_tbl): HostTbl shmat ok
> DEBUG(pgr_set_log): LockWaitTbl shmget ok
> DEBUG(pgr_set_log): LockWaitTbl shmat ok
> DEBUG(PGRrecovery_main): PGRrecovery_main bind
> port
> 7778
> DEBUG(PGRrecovery_main): wait recovery
> DEBUG(replicate_main): replicate main 8777 port
> bind
> OK
> DEBUG(replicate_packet_send): cmdSts=N
> DEBUG(replicate_packet_send): cmdType=
> DEBUG(replicate_packet_send): port=0
> DEBUG(replicate_packet_send): pid=0
> DEBUG(replicate_packet_send): except_host=
> DEBUG(replicate_packet_send): from_host=test1
> DEBUG(replicate_packet_send): dbName=template1
> DEBUG(replicate_packet_send): userName=postgres
> DEBUG(replicate_packet_send): recieve sec=0
> DEBUG(replicate_packet_send): recieve usec=0
> DEBUG(replicate_packet_send): query_size=54
> DEBUG(replicate_packet_send): query=SELECT
> PGR_SYSTEM_COMMAND_FUNCTION(1,test1,8777,7778)
> DEBUG(replicate_packet_send): useFlag[2]
> DEBUG(PGRis_same_host): not same host:
> DEBUG(is_need_response): same_host[0] mode[1]
> current[0]
> DEBUG(is_need_response): sem_lock[1]
> DEBUG(replicate_packet_send_each_server):
> except:0@
> host:5432 @ test1
> DEBUG(replicate_packet_send_each_server): send
> replicate to:test1
> DEBUG(PGRsend_replicate_packet_to_server):
> host(test1)
> : port(5432)
> DEBUG(getDBServerTbl): search host is (test1)
> DEBUG(get_ip_by_name): not found
> DEBUG(setDBServerTbl): host:test1
> dbName:template1
> DEBUG(getDBServerTbl): search host is (test1)
> DEBUG(get_ip_by_name): not found
> ERROR(pgr_createConn): PQsetdbLogin failed.
> close
> socket!!
> ERROR(pgr_createConn): PQsetdbLogin failed.
> close
> socket!!
> ERROR(pgr_createConn): PQsetdbLogin failed.
> close
> socket!!
> ERROR(pgr_createConn): PQsetdbLogin failed.
> close
> socket!!
> ERROR(pgr_createConn): PQsetdbLogin failed.
> close
>
=== message truncated ===
__________________________________________________
Do You Yahoo!?
http://bb.yahoo.co.jp/
pgcluster メーリングリストの案内