[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 メーリングリストの案内