Home

技術系のメモと日々の雑感

master and slave have equal MySQL server ids

MySQL でレプリケーションを組むときは server-id がユニークになるように十分に注意しているつもりだった。
ところが、この前うっかりマスタと同じ値をスレーブに振ってしまった。
show slave status を実行すると

Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it).

という丁寧なメッセージが出るので一目瞭然だね。
何か問題が発生すると思っていたので絶対にしたくないミスだったんだけど、値を修正すれば何事もなかったように動いた。
そんなにビビる必要はなかったのか・・・。

シェルスクリプトの多重起動を防ぐ簡単な方法

cron で 1 分ごとに実行するスクリプトがあって、処理に時間がかかると同時に走ってしまって変になることがあった。
こういう場合、処理中はフラグ代わりのファイルを作っておいて、終わったら消すのが一般的なのかな。
自分もしばらくこれでやってたんだけど、もうちょっといい方法がないか考えてみた。
で、思いついたのが

pgrep -f `basename $0` | wc -l > /tmp/.script.check
if [ `cat /tmp/.script.check` -ne 1 ]; then
  exit
fi

という処理をシェルスクリプトの先頭に書いておく方法。
バッククオートがネストできればもう少しきれいに書けるんだけどなぁ。
単純に ps の結果を grep すればいいんじゃないかなんて思ってしまうけど、やってみると意外と難しいね。

Domain-U 側で independent_wallclock の設定

Xen の Domain-0 と Domain-U で別々に時刻を設定するためにカーネルパラメータ independent_wallclock に 1 をセットする話の続き。
この前、とある Xen 環境の Domain-0 側で設定してみたら有効にならなくて、Domain-U 側では時刻が変更できなかった。
過去にやったときはこれで何の問題もなかったんだけどな。
特殊なハード構成でもないし、あきらめようかと思いつつ、ひょっとして Domain-U 側で設定したらどうなるのかと思って試してみたら、こっちでもいけることが分かった。
ふ〜ん。
こういうパターンもあるのか〜。
Domain-0 で一括で設定できた方がうれしいんだけど、まぁしょうがないね。

OpenVZ の中の様子

この前触ったレンタルサーバが OpenVZ で組まれていた。
環境の作り方によって変わるところがあると思うけど、ざっくり特徴をメモっておく。
まず驚いたのが /boot が空だったことと dmesg で何も表示されなかったこと。
ファイルシステムが /dev/simfs ってのも初めて見た。
スワップが割り当てられてないのにもびっくりしたけど、これも OpenVZ の特徴のひとつなんだね。
立ち上がっているプロセス、というか見えてるプロセスは異常に少なかった。

# ps ax
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:00 init [3]
 6141 pts/0    R+     0:00 ps ax
22009 ?        S<s    0:00 /sbin/udevd -d
22279 ?        Ss     0:00 syslogd -m 0
23766 ?        Ss     0:00 crond
24056 ?        Ss     0:00 /usr/sbin/sshd
32393 ?        Rs     0:00 sshd: root@pts/0
32638 pts/0    Ss     0:00 -bash

ちなみに chkconfig では

# chkconfig --list | grep :on
auditd          0:off   1:off   2:on    3:off   4:on    5:on    6:off
avahi-daemon    0:off   1:off   2:off   3:off   4:on    5:on    6:off
crond           0:off   1:off   2:on    3:on    4:on    5:on    6:off
gpm             0:off   1:off   2:on    3:off   4:on    5:on    6:off
haldaemon       0:off   1:off   2:off   3:off   4:on    5:on    6:off
iptables        0:off   1:off   2:on    3:off   4:on    5:on    6:off
lm_sensors      0:off   1:off   2:on    3:off   4:on    5:on    6:off
mcstrans        0:off   1:off   2:on    3:off   4:on    5:on    6:off
messagebus      0:off   1:off   2:off   3:off   4:on    5:on    6:off
netfs           0:off   1:off   2:off   3:off   4:on    5:on    6:off
network         0:off   1:off   2:on    3:on    4:on    5:on    6:off
portmap         0:off   1:off   2:off   3:off   4:on    5:on    6:off
rawdevices      0:off   1:off   2:off   3:on    4:on    5:on    6:off
restorecond     0:off   1:off   2:on    3:off   4:on    5:on    6:off
sendmail        0:off   1:off   2:on    3:off   4:on    5:on    6:off
sshd            0:off   1:off   2:on    3:off   4:on    5:on    6:off
syslog          0:off   1:off   2:on    3:on    4:on    5:on    6:off
xfs             0:off   1:off   2:on    3:off   4:on    5:on    6:off
xinetd          0:off   1:off   2:off   3:off   4:on    5:on    6:off
yum-cron        0:off   1:off   2:off   3:on    4:on    5:on    6:off

という具合に、有効になっているサービスが色々とあった。
ifconfig を実行すると

# ifconfig
venet0    Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:127.0.0.1  P-t-P:127.0.0.1  Bcast:0.0.0.0  Mask:255.255.255.255
          UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1
          RX packets:108297 errors:0 dropped:0 overruns:0 frame:0
          TX packets:70786 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:263497592 (251.2 MiB)  TX bytes:5248128 (5.0 MiB)

venet0:0  Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:XXX.XXX.XXX.XXX  P-t-P:XXX.XXX.XXX.XXX  Bcast:XXX.XXX.XXX.XXX  Mask:255.255.255.255
          UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1

なんだか見慣れない表示。
あと、目に付くところといったら /proc の下に vz というディレクトリがあって、veinfo と vestat という仮想ファイルが作られてたぐらいか。
残念ながらこの環境は短期間で使用しなくなってしまったので使い勝手は不明。
もっとじっくり見ておけばよかったなぁ。