ロードバランサにLVSを使ったり、リバースプロキシをNginxで作ったりしたときに、冗長化したい場合は keepalived を利用しますが、keepalived のログはデフォルトで /var/log/messages に出力されます。
これだと、フェイルオーバーが発生したときのログを追いにくいので keepalived のログを個別で出力する方法をメモします。keepalived のログ出力先を変更するので、LVS でも Nginx の場合でも同じ方法で対応できました。
手順
例えば、LVS + keepalived などで冗長している想定ですが、そこら辺の話は省きます。あくまで、keepalived のログを個別で出力する方法です。
環境
CentOS7
Keepalived v1.2.13(yumで入る最新)
ログの設定
/etc/sysconfig/keepalived でログのファシリティの設定をします。
1 2 3 4 5 6 7 8 9 |
# --vrrp -P Only run with VRRP subsystem. # --check -C Only run with Health-checker subsystem. # --dont-release-vrrp -V Dont remove VRRP VIPs & VROUTEs on daemon stop. # --dont-release-ipvs -I Dont remove IPVS topology on daemon stop. # --dump-conf -d Dump the configuration data. # --log-detail -D Detailed log messages. # --log-facility -S 0-7 Set local syslog facility (default=LOG_DAEMON) KEEPALIVED_OPTIONS="-D" |
以下の様に変更します。設定ファイルのコメントにもありますが、0-7 のなかで rsyslog で使用していないものを使えば良いです。
1 |
KEEPALIVED_OPTIONS="-D -S 3" |
次に、rsyslog側の設定でログファイルを指定します。/etc/rsyslog.d/keepalived.conf を用意します。
1 |
# echo "local3.* /var/log/keepalived/keepalived.log" >> /etc/rsyslog.d/keepalived.conf |
次に、ログローテートの設定をします。/etc/logrotate.d/keepalived を用意します。
1 2 3 4 5 6 7 8 9 10 11 12 |
/var/log/keepalived/keepalived.log { daily # 日次 dateext # ローテート後のファイル名に日付をつける missingok rotate 14 # 14日分保持 compress sharedscripts postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true /bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true endscript } |
ログ出力先のディレクトリを作成して、rsyslogd と keepallived を再起動します。
1 2 3 |
# mkdir /var/log/keepalived/ # systemctl restart rsyslog # systemctl restart keepalived |
ログローテートのテストをします。
1 2 3 |
# logrotate -fv keepalived # ls -l /var/log/keepalived/ -rw------- 1 root root 551 7月 3 11:58 keepalived.log-20170703.gz |
上記だとローテーション後にローテートされて圧縮されたファイルしか存在しないが、その前に設定を反映するために keepalived を再起動しているので、Slave に切り替わっていることが原因で、現在の Master側の keepalived を再起動して再度フェイルオーバーさせれば、keepalived.log が生成される。
以上。
↓↓↓ 持っていると便利な一冊。