keepalivedでreloadしても反映されない問題

Ubuntu 12.04 LTSなサーバでkeepalived.confのweightを変更後、/etc/init.d/keepalived reloadをしてもうまく反映されない問題が発生しました。
症状としては以下のような感じです。

weight 1 → weight 10 とか極端な変更がだめ。
weight 1 → weight 2 とか小刻みには変わる。
weight 0 → weight 1以上 サービスに投入できない。

完全にググレカスで解決したんですが、1.2.2-3のバグのようです。http://comments.gmane.org/gmane.linux.keepalived.devel/3708

フォーラムの中にリンクがありますが、パッチも公開されています。
http://cgit.luffy.cx/keepalived/patch/?id=bc49a46989c98eb6ee72a379b18b77e87ed624fa

apt-get source keepalived でソースを取得して該当箇所を修正した後、dpkg-buildpackage -b でビルドしたパッケージを普通にdpkg -iしたらすんなりインストールできました。
動作としても問題なく非常に快適です。

別の拠点で使ってる同じバージョンのkeepalivedは問題なく使えているし、marvericから古い1.1.2をもってきても同じ問題がでたので、バグとはいえなにか環境固有の問題があるのかもしれません。モヤモヤが加速。

LVSのDSR構成でリアルサーバにFIN_WAIT1 FIN_WAIT2が多発する問題

CentOSからUbuntu Serverへの入れ替えを進めてる最中だったりするのですが、グローバルに露出しているLVSをDSR構成でつかうと、リアルサーバにFIN_WAIT1と、FIN_WAIT2が大量に発生してしまいました。

LVSの方でtimeoutを通常より短めに設定していたため、ただちに大きな影響はありませんでしたが、これは放置できません。

ぐぐったらすぐでてきたのですが、iptablesがstateを評価すると、FINを落とすそうです。http://3.1415.jp/node/226

さて、そんな設定した覚えないのになーと思いつつ、ufwの存在をすっかり忘れているお馬鹿さんでした。
iptables -L でみると見たこともないような設定だらけ!
簡単にポリシーにそって設定できるufwですが、よかれとおもって入っているリッチ()な設定が悪さをしていました。

なのでとりあえず暫定的にstate部分を削除します。

探して、
iptables -L --line-number

チェインと番号を指定して消します。
iptables -D ufw-before-input 3

1リアルサーバあたり30000くらいあったActiveConnが、2500前後まで落ちました。スッキリ。

ufwを使わずに今まで通りに手で書いてrestoreするのか、ufwを使いこなすか悩むところです。

zfs poolにオンラインでストレージの追加

前回から随分たっていますが、2Tx4 RAIDZで構成したpoolにディスクを追加します。内容的には問題なければコマンド一行です。

zpool add -f data raidz /dev/sdf /dev/sdg /dev/sdh /dev/sdi

HDDが初期化されずに、MBRが残ったりしていると怒られるので-fをつけるようにと促されます。

以下のように2TのRAIDZ+RAIDZ構成のpoolができました。

# zpool status
  pool: data
 state: ONLINE
 scan: none requested
config:

    NAME        STATE     READ WRITE CKSUM
    data        ONLINE       0     0     0
      raidz1-0  ONLINE       0     0     0
        sdb     ONLINE       0     0     0
        sdc     ONLINE       0     0     0
        sdd     ONLINE       0     0     0
        sde     ONLINE       0     0     0
      raidz1-1  ONLINE       0     0     0
        sdf     ONLINE       0     0     0
        sdg     ONLINE       0     0     0
        sdh     ONLINE       0     0     0
        sdi     ONLINE       0     0     0

errors: No known data errors

zpool list
NAME   SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
data  14.5T  6.60T  7.90T    45%  1.00x  ONLINE  -

HDDのRAID等のMETAデータを削除する場合

前身の用途が不明なディスクをディスクをzfsをpoolに追加しようとしたところ以下のようなエラーがでました。

root@hoehoge:~# zpool add -f data /dev/sda /dev/sdb /dev/sdc /dev/sdd/dev/sde /dev/sdf
cannot open '/dev/sdc': Device or resource busy

試しに適当にマウントもしてみます。

root@hogehoge:~# mount /dev/sde /mnt
mount: unknown filesystem type 'promise_fasttrack_raid_member'

PromiseのRAIDカードのアレイとして使われていたっぽい?

root@hogehoge:~# blkid
/dev/sdc: TYPE="promise_fasttrack_raid_member"
/dev/sde: TYPE="promise_fasttrack_raid_member"
/dev/sdg1: UUID="d6daab1b-ceb2-4750-bc38-64852a566b0f" TYPE="ext4"
/dev/sdg5: UUID="a5cb3913-0c4b-4de6-b729-3a5fb49f3df8" TYPE="swap"

調べたところディスクのメタデータを操作できるコマンドがあることがわかったので、それを使って削除しました。

root@hogehoge:~# dmraid -r -E /dev/sdc
root@hogehoge:~# dmraid -r -E /dev/sde

削除されたか確認。

/dev/sdg1: UUID="d6daab1b-ceb2-4750-bc38-64852a566b0f" TYPE="ext4"
/dev/sdg5: UUID="a5cb3913-0c4b-4de6-b729-3a5fb49f3df8" TYPE="swap"

この後zpool createでpoolにいれることができました。

root@hogehoge:~# zpool status
  pool: data
 state: ONLINE
 scan: none requested
config:

	NAME        STATE     READ WRITE CKSUM
	data        ONLINE       0     0     0
	  raidz1-0  ONLINE       0     0     0
	    sda     ONLINE       0     0     0
	    sdb     ONLINE       0     0     0
	    sdc     ONLINE       0     0     0
	    sdd     ONLINE       0     0     0
	    sde     ONLINE       0     0     0
	    sdf     ONLINE       0     0     0

Ubuntu 12.04インストール時に ‘grub-install /dev/sda’ failed. This is a fatal error.

unetbootinを利用してUSBストレージに焼いたnetbootのイメージで、Ubuntu12.04をインストールした際に以下のようなエラーがでました。

'grub-install /dev/sda' failed. This is a fatal error.

原因は深く調べていませんが、USBストレージを抜いて再試行することで解決しました。
あとで詳しく調べてみる。