長らく止まってましたが、 ここにまた技術メモでも書いていきたいところ。 まとめないとどんどん抜け落ちていってしまう。
しかし、RD をずっと書いていなかったら、書き方忘れている! RD は emacs の rd-mode じゃないと書きにくいね。
と言うわけで設定メモを書いていこう。
某所で MySQL のレプリケーションを ssh のトンネル経由でやっていたのだけど、 これをようやく自動化してみたのでその記録。
まず、ssh 接続の監視と張り直しをしてくれる autossh を使う。これは、基本的に子プロセスとして ssh を上げ続けてくれる。 内部的には -L と -R を組み合わせたループを作って、定期的(標準10分) おきにネットワークの疎通をチェックし、子プロセスの ssh が死んだり ネットワークが切れたりした場合は ssh を再起動する。
これだけで十分に見えるかもしれないけど、autossh は以下の条件で親の autossh 自体が終了してしまう。
基本的には、こういう事が起きても意図的に止め無い限り再試行して欲しいので、 autossh をさらに daemontools から起動させる。以下のような run スクリプトを書いておく。
#!/bin/sh set -e AUTOSSH_POLL=60 export AUTOSSH_POLL exec 2>&1 exec > /dev/null exec setuidgid repl \ autossh target.host.name.jp \ -l sugi -i /etc/autossh-tunnel/path_to_ssh_key_without_pass \ -N -T -x -a -L 13306:localhost:3306 \ -o BatchMode=yes -o TCPKeepAlive=yes sleep 30
-c blowfish オプションを追加。この方が早いので。
……というのは ssh1 時代の古い話だった。 ssh2 なら勝手に選んでくれる(おまけに blowfish じゃない方がいい)ので -c は削除。