読者です 読者をやめる 読者になる 読者になる

CentOS5.3: Slony-I 2.0を使ってみた (3)

前回slony-2.0 で $ slon_start 1; $ slon_start 2; の両方をマスターノードで実施したと書いたが、slon_start 2; をスレーブノードで実施しても問題なく動作した。また、スレーブ側でも slonik_subscribe_set, slonik_unsubscribe_set を実施して見たところ、こちらも問題なく動作した。slonik を実施するノードについては、マスター側や、スレーブ側はあまり関係無いようである。。

さて、当初の目的であるテイクオーバーのため、slonik_move_set を試してみた。 方法は、

$ slonik_move_set 1 1 2 | slonik

で1から2に動かし、

$ slonik_move_set 1 2 1 | slonik

で元に戻すだけである。 move_set を実施した後には、元のマスターノードへの書き込みは出来なくなった。 また、slonik_move_set 自体は元のマスター、元のスレーブのどちらからでも実施できた。

今回、 slony1-2.0.0-4.rhel5 でslonik_move_set を試していたのだが、地味なバグ?? らしきものにぶつかったので、一応書いておく。事象としては、 コマンドを実施した際、エラーがでて、move_set に失敗するというものである。

$ slonik_move_set 1 1 2 | slonik
:7: Error: No admin conninfo provided for node -1

stdin:7 は、wait for event に対応しており、

 wait for event (origin = 1, confirmed = 2);

これが失敗しているようである。同様の事象は他のところでも見つかったようだ。
http://www.nabble.com/-Newbie----Problem-running-Slonik_move_set-td21723058.html

かなり無理やりなのだが、

$ slonik_move_set 1 1 2 | grep -v "wait for"| slonik

とすることで、一応正常にテイクオーバーが行えた。ただし、おそらく元のマスターノードのロック待ちを無視することになるので、あまり行いたくない方法だ。 そのうちフィックスがでることを期待したい 。。