AS2500の最果てで

AS2500のどっかのNOCのまとまらないまとめ

解決 - IO cacheがやたらとdropさ(ry

前回、
RHEL6 + XFS + PERC6/Eな環境でIO cacheがやたらとdropされてしまって困っている - AS2500の最果てで
って書いたあといろいろ調べたら解決しました

MegaRAIDとかXFSが悪い気がしてそこら辺しか書かなかったのですが、そこは関係なかったようでした
80G搭載してるノードで40Gぐらいでdropするところから、察した人もいるかもしれないですが、NUMAが原因でした

openSUSE 13.1: 第15章 メモリ管理サブシステムのチューニング

このページの日本語なんか違和感多いんですが、結局のところ

/proc/sys/vm/zone_reclaim_mode

を0にしろってことですね

ってことで0にすると、こんな感じになりました

f:id:Flast:20140212110955p:plain
f:id:Flast:20140212110958p:plain

0:00付近にIO utilが上がってるのはスケジュールしてたXFSのデフラグが走ったからなので問題ないです
あとは通常のrsyncが走ったりとかです

flushとかdropするタイミングでLA上がったりIO util上がったりしてるのが明らかに見て取れますが、前後でLAが1強ぐらい変わってる気がします

よいよい

RHEL6 + XFS + PERC6/Eな環境でIO cacheがやたらとdropされてしまって困っている

言いたいことはタイトルの通りなんだけど、とあるサーバでメインメモリを80GBも積んでいるのに、30GB以上freeであってもIO cacheがdropされてしまって困っている。
プロセスとかはどんなに合わせても7,8GB程度しか使わず、残りの70GBぐらいは全部IO cacheにしたいんだけど、dropされてしまってあんまり嬉しくない。swapしてるわけでもない。

何か情報を持っている方がいれば何でもいいのでお教えいただきたい。PERC6/Eのドライバであるmegaraid_sasとXFSはLinux Kernelのものなので、最悪自前ビルドも考えている。

cactiで見るとこんな感じ。
f:id:Flast:20140207234528p:plain
もうちょっと長いスパンでもこんな感じ。
f:id:Flast:20140207234531p:plain

Cacti 0.8.8bでGraph Exportしたグラフのサムネイルが表示されない

という問題があって、でもグラフ自体はちゃんとある。

探してみたら該当するissueがあって、適用すると表示された
0002379: rra.php error making some thumnails not show up - Mantis

曰く、サムネイルが表示されないのはGraph Templateに空のCOMMENTがあるグラフ。つまり中間の計算を行う何かを挿入した時に使うあれ。

パッチの充て方は

# cd /path/to/cacti-0.8.8b
# curl -L "http://bugs.cacti.net/file_download.php?file_id=1087&type=bug" \
  | patch -p 0

特にcacti関連の再起動は要らず、次のGraph Exportのタイミングで修正される。

ucd/netなメモリのグラフで10G以上表示されない

発生したことは以下のと全く同じ状況。
メモリをたくさん積んだサーバの Memory Usage が Cacti で正しく描画されない問題と解決策 - ..たれろぐ..

で、さっきのリンクにあるのでは、結論として一回.rrdを削除すると書いてあったけど、調べると消さなくても良さそう。

以下のフォーラムへの返信がそれ。
Cacti • View topic - Graph not showing correctly. 16GB 4CPU 64bit.

具体的には上限が決まってしまっている.rrdに対して

# rrdtool tune /path/to/host_mem_free_000.rrd --maximum mem_free:U
# rrdtool tune /path/to/host_mem_cache_000.rrd --maximum mem_cache:U
# rrdtool tune /path/to/host_mem_buffers_000.rrd --maximum mem_buffers:U

とすると、上限値をUに上書きできる。

CactiのData template上で0を指定出来たからと言ってここで0を指定すると、どうやらほんとに上限値が0になるらしい。グラフが一切でなかった。
Cactiは0の場合にUを書き込むようにとかしているんだろうか。ちょっとそこまでは確認できていない。

あとは適当に待って次の更新から正しいグラフになるのを確認する。

しかしこんなものに上限値を設定している理由は何だ?今の御時世10Gとかノーパでも到達するというのに。

以上。

fluentd + mongodb でmongodbのauthが通らない

MongoDBでreplica setを組んで、keyFileを使ってauthを有効にしている環境で、fluentd使ってログ投げ込もうとしたらauthが通らなかった。

もちろん db.system.users には roles が 'readWrite' なユーザのエントリあるし、そのユーザのuser/passをtd-agent.confにも書いた。

環境はこれ

MongoDB 2.4.3
fluentd 1.1.13
ruby 1.9.3p194 fluentdに付いてくる(?)やつ
MongoDB ruby driver 1.8.4 同上
fluentd-plugin-mongo 0.7.0 同上

で、td-agent.logとか眺めると

2013-06-10 23:03:15 +0900 [warn]: temporarily failed to flush the buffer, next retry will be at 2013-06-10 23:03:21 +0900. error="can't convert Symbol into Hash" instance=70012152580060
  2013-06-10 23:03:15 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/mongo-1.8.4/lib/mongo/util/read_preference.rb:47:in `merge'
  2013-06-10 23:03:15 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/mongo-1.8.4/lib/mongo/util/read_preference.rb:47:in `read_pool'
  2013-06-10 23:03:15 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/mongo-1.8.4/lib/mongo/mongo_replica_set_client.rb:342:in `block in checkout_reader'
  2013-06-10 23:03:15 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/mongo-1.8.4/lib/mongo/mongo_replica_set_client.rb:326:in `checkout'
  2013-06-10 23:03:15 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/mongo-1.8.4/lib/mongo/mongo_replica_set_client.rb:341:in `checkout_reader'
  2013-06-10 23:03:15 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/mongo-1.8.4/lib/mongo/db.rb:126:in `authenticate'
  2013-06-10 23:03:15 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluent-plugin-mongo-0.7.0/lib/fluent/plugin/mongo_util.rb:15:in `authenticate'
  2013-06-10 23:03:15 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluent-plugin-mongo-0.7.0/lib/fluent/plugin/out_mongo_replset.rb:54:in `get_connection'
  2013-06-10 23:03:15 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluent-plugin-mongo-0.7.0/lib/fluent/plugin/out_mongo.rb:171:in `get_or_create_collection'
  2013-06-10 23:03:15 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluent-plugin-mongo-0.7.0/lib/fluent/plugin/out_mongo.rb:107:in `write'
  2013-06-10 23:03:15 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluentd-0.10.33/lib/fluent/buffer.rb:290:in `write_chunk'
  2013-06-10 23:03:15 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluentd-0.10.33/lib/fluent/buffer.rb:274:in `pop'
  2013-06-10 23:03:15 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluentd-0.10.33/lib/fluent/output.rb:294:in `try_flush'
  2013-06-10 23:03:15 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluentd-0.10.33/lib/fluent/output.rb:121:in `run'

とか出てるので、そもそもauthが通らないではなくてfluentdの中で失敗してる感じ。
もっというと場所的にmongo driverっぽい。

ということでmongo driverを更新する。
このrubyはシステムに入っているものではなく、fluentdが引っ張ってくるものなので、更新する場所を間違えないようにする。

# /usr/lib64/fluent/ruby/bin/gem update --system
Updating rubygems-update
Fetching: rubygems-update-2.0.3.gem (100%)
Successfully installed rubygems-update-2.0.3
Installing RubyGems 2.0.3
RubyGems 2.0.3 installed
Installing ri documentation for rubygems-2.0.3



RubyGems system software updated
# /usr/lib64/fluent/ruby/bin/gem update mongo
Updating installed gems
Updating mongo
Fetching: bson-1.8.6.gem (100%)
Successfully installed bson-1.8.6
Fetching: mongo-1.8.6.gem (100%)
Successfully installed mongo-1.8.6
Installing ri documentation for bson-1.8.6
Installing darkfish documentation for bson-1.8.6
Installing ri documentation for mongo-1.8.6
Installing darkfish documentation for mongo-1.8.6
Gems updated: bson mongo

mongo driverが1.8.4から1.8.6に更新された。

で、fluentdを上げてみてログを投げるような何かをする。

ログが投げられる。以上。

VimをダウンロードするときにVim Girlに会いたい!

元ネタ Vim を起動したときに Vim Girl に会いたい! - 永遠に未完成
元々ネタ Vim Girl(イラスト)を描いた | IMAGEDRIVE

AAが登場したということは、文字を扱うことが出来る環境なら、会えるわけで、、、

http://ftp2.jp.vim.org/

半年ぶりのエントリが完全なる職権乱用とは...

続・Redhat High Availability Addonsで割り当ててたVIPが一定間隔で切れる

Redhat High Availability Addonsで割り当ててたVIPが一定間隔で切れる - AS2500の最果てで

色々調べていくと実は普遍的なhttpd.confだと問題ないだろうことが分かった。

というのも rgmanager は httpd.conf の中をパースしている。rgmanager は起動後に /etc/httpd/conf/httpd.conf を /etc/cluster/apache/<apache-name>/httpd.conf に再構築する。
この際 PidFileディレクティブ を書き換えているようでこれによって見る pid が /var/run/httpd.pid から /var/run/cluster/apache/apache:<apache-name>.pid に変わっている。

再構築の手順は

PidFile "/var/run/cluster/apache:<apache-name>.pid"

を最初においてから /etc/httpd/httpd.conf の内容を PidFileディレクティブ を含めずに書き下してる。

ただ、ここで問題なのが Includeディレクティブ の存在だ。

どうやら rgmanager は Includeディレクティブ の先までは追わないようで、Includeディレクティブ 中に PidFileディレクティブ があるとあとに書かれたディレクティブを優先するようだ。
つまり最初に PidFileディレクティブ を置く rgmanager は後の Includeディレクティブ を発見できず、予定していた位置に pid が無いため起動に失敗する。

やっとわかった... PidFile を最後に置くようにコミュニティに提案してみようか...