Hatena::ブログ(Diary)

(ひ)メモ このページをアンテナに追加 RSSフィード

2006-08-31 (Thu)

YAMLに~/とか~USER/とか書けるようにするパッチ

YAMLのassets_pathとかplugin_pathとかincludeにはパスを書くわけなんですが、~とか~USERの展開をしてくれないみたい。

展開してくれないと何が不便か?

ひとつの環境で使ってるぶんにはいいんだけど、こんなとき

  • 環境間でユーザ名が違う(自宅のマシンと会社のマシンとか)
  • 環境間でホームディレクトリのパスが違う(LinuxMac OS Xとか)

に、YAMLを使い回すのがめんどい。パスを書き換えないといけないので。

あと、

  • 例示用のYAMLに自分のホームディレクトリのパスを書くのはなんとなく気持ちが悪い

というのもあるかも。

というわけで、「~/etc」や「~hirose31/etc」を「/home/hirose31/etc」に展開してくれる(かなり強引な)パッチをこさえてみた。


--- Plagger/ConfigLoader.pm.orig        2006-08-22 12:55:49.000000000 +0900
+++ Plagger/ConfigLoader.pm     2006-08-31 01:30:42.000000000 +0900
@@ -2,6 +2,8 @@
 use strict;
 use Carp;
 use Plagger::Walker;
+use File::HomeDir;
+use Data::Dumper;

 sub new {
     my $class = shift;
@@ -27,6 +29,10 @@
         Plagger::Walker->decode_utf8($config);
     }

+    my $config_dumped = Data::Dumper->new([$config],[qw(config)])->Indent(0)->Quotekeys(1)->Dump;
+    $config_dumped =~ s{'~([^/]+)?}{"'".File::HomeDir->home($1||())}ge;
+    eval $config_dumped;
+
     return $config;
 }

2006-08-29 (Tue)

2006-08-28 (Mon)

2006-08-25 (Fri)

WEB+DB PRESS MySQL開拓団の過去記事公開

Vol.34が出たので、Vol.33の記事、

を公開しましたー Vol.34, 33共にご賞味ください。m(_ _)m

WEB+DB PRESS Vol.34

WEB+DB PRESS Vol.34

2006-08-24 (Thu)

Notify::Ejectをちといじった

そういや、手元のマシンにはCD-ROMとCD-RWドライブがついていたので、ガコンガコンいわせてみたす。

package Plagger::Plugin::Notify::Eject::linux;
use base qw( Plagger::Plugin::Notify::Eject );

use strict;

sub eject {
    my($self, $context, $args) = @_;

    my $device = $self->conf->{device} || [undef];
    my $repeat = $self->conf->{repeat} || 1;

    while ($repeat-- > 0) {
        foreach my $o (undef, '-t') {
            foreach my $d (@{$device}) {
                system grep {$_} 'eject', $o, $d;
            }
            last if (not $o and $repeat <= 0);
        }
    }
}

1;
  - module: Notify::Eject
    config:
      device:
        - /dev/hdc
        - /dev/hdd
      repeat: 3

ガコンガコンするようすはNotify::Eject two drivesで。

携帯で撮ったので、時間切れで1セットしかガコンしてませんが、ほんとは合計3セットツードライブでガコンガコンします。

(はてなでGoogle Videoをembedできるのかな?)

IRCのメッセージ装飾

某所ではずかしい言葉を連呼してしまったのでそのお詫びにw

rieceだと色設定の初期値がちょっとアレなので、~/.riece/init.elあたりで補正。

(custom-set-variables
 '(riece-ctlseq-hide-controls t)
 '(riece-ctlseq-colors
      '("white" "black" "DarkBlue" "DarkGreen"
        "red" "maroon" "purple" "orange"
        "yellow" "green" "DarkCyan" "cyan"
        "blue" "magenta" "gray" "DimGray"
        )))

コントロールコードも表示したい場合は、riece-ctlseq-hide-controlsをnilにする。

んが、なんでかrieceは最後のコントロールコードしかface適用してくれないみたい。むぅ。あんまり深追いしてないのでとりあえずここまで。

他のクライアントはこんな感じ。

  • IRcat: 色出ず。
  • Colloquy:色出た。フォントのせいか、太字はみため効果出ず。
  • LimeChat:色も太字も下線も出た。

2006-08-23 (Wed)

C-c C-cでスクリプトを実行もしくはsyntax check

(add-hook 'cperl-mode-hook
          '(lambda ()
             (make-local-variable 'compile-command)
             (setq compile-command
                   (concat "perl " (buffer-file-name)))
             (cperl-define-key "\C-c\C-c" 'compile)))

文法エラーがある場合、use strictしていれば*compilation*バッファが開くのでエラーメッセージんところでRETでスクリプトの当該行にジャンプ。

2006-08-22 (Tue)

2006-08-21 (Mon)

Notify::XMPP 0.04

そか。オーバーライドしちゃえばいいんだ。これでXML::StreamをいじらんでもGoogle Talkにつなげられる。

2006-09-03追記

オーバーライドはlocalすべきかも。ref subtechグループ - otsune's SnakeOil - _で始まる内部メソッドをオーバーライドするのはそうやるのか

続きを読む

HDD雑学 No.2 オントラックナウ : データ復旧のオントラック

Unrecoverable Read Error Rate(修復不能リードエラー発生率)

  • ATA   1014ビット(1万GB)のアクセスに付き1回
  • SCSI  1015ビット(10万GB)のアクセスに付き1回

HDD雑学 No.2 オントラックナウ : データ復旧のオントラック

2006-08-20 (Sun)

2006-08-18 (Fri)

とあるメソッドを実装しているクラスを知りたい

で。

$ pmwhich() {
  echo -n "$1#$2 = "
  perl -MUNIVERSAL::which -M$1 \
    -e "print join('#',UNIVERSAL::which('$1','$2')).qq{\n}"
}

$ pmwhich 'Net::XMPP::Client' 'Connect'
Net::XMPP::Client#Connect = Net::XMPP::Connection#Connect

おを。

参考:

VoIPできるJabberクライアント

サーバ側はそのままなんもいじらんで、Google TalkみたいにVoIPができるjabberクライアント。

音声データってどやってやりとりしてるんだろ。れっつぱけっとだんぷ。

エンコードしてXMLで送ってたりしたら、Notify::XMPPで「ktkr!」いわせられるかも。ってでもきっとpeer to peerだよね。

↓のへんらしい>仕様

2006-08-17 (Thu)

Notify::XMPP 0.03

変更点

  • コネクション張るのを1回だけにした。(0.02までは、entryごとに接続/切断を繰り返してたのでした)
  • Google Talkに接続できるようにした。ただし、XML::Streamをちと変更する必要あり(後述)
  • pod書いた。

続きを読む

SASL

Google TalkSASL PLAINのみ対応、ただしstarttls必須だそうな。

Linuxでiptablesを使ってDSRする

1. リアルサーバ側にもグローバルIPを振る必要がある(IPが少ないところは結構きついかも).

最速配信研究会 - ロードバランサの運用.DSRって知ってますか?

リアルサーバでは、VIPをループバックインターフェースにIP aliasすればいいので、リアルサーバの数だけグローバルIPアドレスを消費するってことはないような。(誤読してるかも

ただ、この方式だと、VIPの数だけいちいちリアルサーバにIP aliasして回らないといけないので、わりと大規模(VIPがたくさんある or リアルサーバがたくさんある)だとめんどくさいことこの上ない。

で、リアルサーバでこんなiptablesのルールを設定すれば、IP aliasしないでDSRできそうというのが主題。

VIP=10.1.1.0/24
iptables -t nat -A PREROUTING -d $VIP -j REDIRECT

多分、これでいけると思うんですけどちと自信なし。検証 and 詳しい説明はまた後日(するかもしれないししないかもしれない)。

(8/25追記)

こんなに簡単! Linuxでロードバランサ (1)の構成で、HTTPアクセスするクライアントがVIPと同じセグメントにいるとすると、

[lv1]
iptables -t mangle -A PREROUTING -d 10.10.31.100 -j MARK --set-mark 1
ip rule add prio 100 fwmark 1 table 100
ip route add local 0/0 dev lo table 100
echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter

[w101,w102]
iptables -t nat -A PREROUTING -d 10.10.31.100 -j REDIRECT

[クライアントPC]
ip route add to 10.10.31.0/24 via 10.10.31.11

なん感じでDSRできたす。

詳しくはきっと後日DSASの中の人が教えてくれるんではないかと・・・

(/8/25追記)


iptablesの状態遷移の図示したものでは、

がわかりやすいす。

iptablesそのものについてはここがおすすめ。

iptablesは悪魔的にいろんなことができるす。たとえば、負荷分散とは関係ないけど、ssh の brute force アタックパケットの制限 -- DOS 的パケットをフィルタリングするとか。

最後に負荷分散とか冗長構成関係の書籍を。

サーバ負荷分散技術

サーバ負荷分散技術

CDNプロトコル入門

CDNプロトコル入門

FD/CDブートなロードバランサ(など多数の機能)を提供するLinuxディストロ

IPnuts は ネットワークアプライアンス用OSとして開発された、リナックスのディストリビューションです。IPnutsはパソコンを利用して、ファイアーウォール、VPN装置、ロードバランサーを構築します。

いっかい、デモを見せてもらったことがあるんですが、WebベースのUIだけでなく中身もかなり作り込まれていてよさげな雰囲気がプンプンでした。

安価なロードバランサが欲しいけど、lvsだのkeepalivedだの自分で組み上げるのはちと自信がない or ちびっと評価してみたい、という向きにはよいかも。

評価目的なら、FD版か開発ベータ版のISOイメージは無料で、リリース版のISOイメージは数千円でダウンロードできるみたい。

my.cnfで外部ファイルをinclude

某Sさんに教えてもらいました。m(_ _)m

Beginning with MySQL 5.0.4, it is possible to use !include directives in option files to include other option files and !includedir to search specific directories for option files. For example, to include the /home/mydir/myopt.cnf file, you can use the following directive:

!include /home/me/myopt.cnf

To search the /home/mydir directory and read option files found there, you would use this directive:

!includedir /home/mydir

Using Option Files

DBサーバがいっぱいあって、ちこっと違うmy.cnfがたくさんあるときとかいいかも。

Mac OS X付属の「計算機」が無駄に高機能な件

f:id:hirose31:20060817014912p:image

  • 8進、10進、16進の変換
  • 0、1のバイナリ表現
  • 入力した数値をUCS2とした場合のグリフ
  • その他、ようわからんちんなボタンたち

スゴ。

ちなみに、10進→16進数変換はこんなsh関数でもできるすね。

d2h () {
  for i in $(echo $*|tr 'a-z' 'A-Z'); do
    echo -e "obase=16 \n ibase=10 \n $i" | bc -l;
  done
}

バイナリ表記はこんなんで。

$ perl -e 'print unpack("B*",pack("n", 0x3072)).qq{\n}'
0011000001110010

PlotKit - Javascript Chart Plotting | liquidx

PlotKit is a Chart and Graph Plotting Library for Javascript. It has support for HTML Canvas and also SVG via Adobe SVG Viewer and native browser support.

MochiKit

MochiKit is a highly documented and well tested, suite of JavaScript libraries that will help you get shit done, fast. We took all the good ideas we could find from our Python, Objective-C, etc. experience and adapted it to the crazy world of JavaScript.

2006-08-16 (Wed)

【PHPウォッチ】第29回 深刻なセキュリティ関連の問題を修正したPHP 4.4.3リリース:ITpro

4.4.4ももうすぐ出るっぽい。

最後の修正点は,PHP 4.4.3のリリースノートには記されていないが,最も深刻な問題と考えられるため,以下にその内容を紹介する。

前から思ってたんですが、どうしてPHPチームはセキュリティfixをつまびらかにしないんでしょうねぇ。

2006-08-15 (Tue)

Notify::XMPP 0.02


  • なんとなく日本語も送れるようにした。
  • 送信先を複数指定できるようにした。
  • それっぽくエラー処理をするようにした。

というわけで $P::P::Notify::XMPP::VERSION = 0.02 です。

package Plagger::Plugin::Notify::XMPP;
our $VERSION = '0.02';
use strict;
use warnings;
use base qw( Plagger::Plugin );

use Data::Dumper;
use Encode;
use Net::XMPP;

sub register {
    my($self, $context) = @_;
    $context->register_hook(
                            $self,
                            'publish.entry' => \&notify,
                           );
}

sub notify {
    my ($self, $context, $args) = @_;

    my $xmpp = Net::XMPP::Client->new(debuglevel=>0);
    my $server_host = $self->conf->{server_host} || 'localhost';
    my $server_port = $self->conf->{server_port} || '5222';
    my $tls         = $self->conf->{tls} || 0;
    my $username    = $self->conf->{username} || do {
        $context->log(error => "missing: username");
        return;
    };
    my $password    = $self->conf->{password} || do {
        $context->log(error => "missing: password");
        return;
    };
    my $to          = $self->conf->{to}       || do {
        $context->log(error => "missing: to");
        return;
    };

    my $body = $self->templatize('xmpp_notify.tt', $args);
    utf8::decode($body) if utf8::is_utf8($body);

    my $on_auth = sub {
        foreach my $a_to (@{$to}) {
            $context->log(info => "Notifying <" . $args->{entry}->title . "> to $a_to");
            $xmpp->MessageSend(
                               to   => $a_to,
                               body => $body,
                              );
            $self->xmpp_error($context, $xmpp, 'MessageSend');
        }
        $xmpp->Disconnect();
        $self->xmpp_error($context, $xmpp, 'Disconnect');
    };
    my $on_authfail = sub {
        $context->log(error => "authentication failure");
    };
    $xmpp->SetCallBacks(
                        onauth     => $on_auth,
                        onauthfail => $on_authfail,
                       );
    $self->xmpp_error($context, $xmpp, 'SetCallBacks');
    $xmpp->Execute(
                   hostname => $server_host,
                   port     => $server_port,
                   tls      => $tls,
                   username => $username,
                   password => $password,
                   connectattempts => 3,
                   connectsleep    => 1,
                   resource => 'Plagger',
                  );
    $self->xmpp_error($context, $xmpp, 'Execute');
}

sub xmpp_error {
    my ($self, $context, $xmpp, $what) = @_;
    if (my $e = $xmpp->GetErrorCode()) {
        $context->log(error => "$what: ".(ref $e ? Data::Dumper->Dump([$e],['error']) : $e));
    }
}

1;

__END__

# for Emacsen
# Local Variables:
# mode: cperl
# cperl-indent-level: 4
# indent-tabs-mode: nil
# coding: euc-jp
# End:

# vi: set ts=4 sw=4 sts=0 :

Notify用のアカウント(たとえばplag_you:plahplahplah)をとってこんなYAMLで。

あらかじめNotify用のアカウントを受信者のコンタクトリストに登録しておかないとダメかも。(よーわからんすけど設定による?)

  - module: Notify::XMPP
    config:
      server_host: jabber.org
      username: plag_you
      password: plahplahplah
      to:
        - 送りたい人の@jabber.org
        - IDを書いてね@jabber.jp
        - はぁと@gmail.com

あ、あとテンプレート(assets/plugins/Notify-XMPP/xmpp_notify.tt)はこんなんで。

[%- SET title = feed.title || '(no-title)' -%]
[% feed.title_text %]: [% entry.title_text %] - [% entry.link %][% IF entry.author %] by [% entry.author %][% END %]

本家に差し出すにはどうすればいいんだろ。MLかIRCすかね? 調べてみよ。

plagger-ircbotにinclude, recipesを読ませるためのものすごぉく適当なパッチ

8/16追記

http://plagger.org/trac/changeset/1327 でステキな修正が入った模様。シゴトはえー(ウットリ


あんな情報やこんな情報をPlaggerでNotify::IRCしたい。んでもyamlにいちいちチャンネルのconfig書くのはめんどい。

そこでdefine_recipes/include/recipesですよ。plaggerくんは解せるのでいいんですが、plagger-ircbotくんは「れしぺす?なんすかそれ?」なので、

include:
  - /home/hirose31/etc/plagger/include/common.yaml

recipes:
  - irc-channel-foo

なんつーファイルを-cしても「Can't find Notify::IRC config」なんてつれないこと言います。

plagger-ircbotくんのためにチャンネルのconfigをベタっと書いたyaml用意してもいいんですが、同じ情報が(plaggerくん用のyamlが)includeしているファイルにも書かれているわけでちびっついやなの。

というわけでテラテキトゥなパッチを。これはひどいのでよい子はまねしないでね。

--- plagger-ircbot.orig Tue Aug 15 12:34:17 2006
+++ plagger-ircbot      Tue Aug 15 12:55:45 2006
@@ -5,6 +5,7 @@
 use warnings;
 use strict;

+use Plagger;
 use FindBin;
 use Getopt::Long;
 use List::Util qw(first);
@@ -27,6 +28,10 @@
 msg "loading configuration $path";

 my $config_yaml = YAML::LoadFile($path);
+
+# ugly...
+Plagger::load_include(undef, $config_yaml);
+Plagger::load_recipes(undef, $config_yaml);
 my $plugin = first { $_->{module} eq 'Notify::IRC' } @{ $config_yaml->{plugins} }
     or die "Can't find Notify::IRC config in $path";

2006-08-14 (Mon)

なんどもクライアント証明書を選択させられるのがうざいときは

8/16追記

これ、ウソでした・・・ m(_ _)m

KeepAliveが効いてただけでした・・・ FirefoxもIEみたいに1回手動選択にならないかなぁ。


FirefoxSSL/TLSのクライアント証明書の提示を求められたときの動作はこの2択。

  • 自動的に選択する
  • 毎回自分で選択する

自動選択にすると、(多分issuerが同じクライアント証明書を複数もっているときに)期待しているクライアント証明書が選ばれないことがある。

かといって毎回選択にするとでろんでろんダイアログが出てきてうざい。

昔のバージョンはabout:configの隠し設定で、IEみたいに一回手動選択したらあとはそれを使い続けるように設定できたんだけど、最近のFirefoxはそれができなくなった。(どのバージョンだったか覚えてないけど試してダメだった)

んが、少なくともWindowsの1.5.0.6では↓で、一回手動選択がまたできるようになってた。やほーい!

security.default_personal_cert="Ask One Time"

Notify::XMPP


プロトタイプ以前のシロモノ。

だけど、jabber.jp経由でjabber.jpとかgmail.comに送れたので晒してみる。

package Plagger::Plugin::Notify::XMPP;
our $VERSION = '0.01';
use strict;
use warnings;
use base qw( Plagger::Plugin );

use Net::XMPP;

sub register {
    my($self, $context) = @_;
    $context->register_hook(
                            $self,
                            'publish.entry' => \&notify,
                           );
}

sub notify {
    my($self, $context, $args) = @_;

    my $xmpp = Net::XMPP::Client->new(debuglevel=>0);
    my $server_host = $self->conf->{server_host} || 'localhost';
    my $server_port = $self->conf->{server_port} || '5222';
    my $tls         = $self->conf->{tls} || 0;
    my $username    = $self->conf->{username} || die "fixme";
    my $password    = $self->conf->{password} || die "fixme";
    my $to          = $self->conf->{to} || die "fixme";

    my $on_auth = sub {
        $xmpp->MessageSend(
                        to => $to,
                        subject => $args->{entry}->title_text,
                        body    => $args->{entry}->title_text."\n".$args->{entry}->body_text,
                       );
        $xmpp->Disconnect();
    };
    $xmpp->Connect(
                   hostname => $server_host,
                   port     => $server_port,
                   tls      => $tls,
                  );
    $xmpp->SetCallBacks(onauth => $on_auth);
    $xmpp->Execute(
                   hostname => $server_host,
                   port     => $server_port,
                   tls      => $tls,
                   username => $username,
                   password => $password,
                  );
}

1;

2006-08-12 (Sat)

そんなわきゃない>DNS RRはロードバランサの座を奪い返せるか


つっこみどころが満載スギなのは脇においておいて、金をかけないなら、DNSラウンドロビンじゃなくて、せめて、件の記事でも紹介されている

か、Apache 2.2じゃなくても使えるreverse proxy系の実装たち、

を使うべきでしょう。

んで、「L7ロードバランサ(要はreverse proxy)なんていらねっす。セッション? んなのmemcachedでシェアすりゃいいんじゃん。その方がスケールアウトしやすいしー」という向きには、LinuxでL4のロードバランサするのをオススメでします。まともなL4ロードバランサが手に入るのに、金銭的コストはゼロですってよ、オクサン!

kernel 2.6系ならパッチなしで、ロードバランサのできあがり。

All in Oneちっくなのをお望みなら、Ultra Monkeyあたりをどうぞ。

「おら、ブラックボックスなのはやんだぁ」という向きには、Keepalivedをどうぞ! keepalivedは、LVSの設定や実サーバへのヘルスチェックのほかに、VRRPによるfailoverもやってくれるので、LVSなLinux box 2台でロードバランサ自身の冗長化もバッチリです。

というわけでペタオススメっす>LVS DSRもiptablesを使えばできちゃいますし、L4なんで、HTTPだけじゃなくて、SMTPでもDNSでも負荷分散+冗長構成できます。

「でも安定性がぁ」とか「ASICには勝てないよね」といかいうやつは、まずは試してみてみー きっとびっくりするから。


あ、あと、「どーしてもL7バランスしてぇっす」なら、UltraMonkey-L7というのもありますが、こっちは使ったことないんで、さらっと紹介にとどめます。

8/12 12:50追記

トラバしたんだけどなんか消えてるっぽいのでもっかいTB!

8/12 14:24追記

あれ、またTBが消えた。っつーかもしかして消されてるのかしらん・・・ めげずにもっかい。

しかも「このエントリーへのコメントは終了しました。」だって。へぇ・・・

2006-08-11 (Fri)

LAN Switch技術 〜冗長化手法と最新技術〜

STP (Spanning Tree Protocol)からはじまり、RSTP、MSTPやらの解説もあるす。

2006-08-10 (Thu)

2006-08-08 (Tue)

Linux kernelの更新情報をIRCでお知らせ

kernel.orgのRSSに、kernel-2.6.16.x系の情報が載らなくなったのでPlaggerでお知らせ。

こんな~hirose31/etc/plagger/kernel.yamlをこさえて、

global:
  assets_path: /home/hirose31/etc/plagger/assets
  plugin_path:
    - /home/hirose31/etc/plagger/assets/plugins
  timezone: Asia/Tokyo
  log:
    level: debug

plugins:
  - module: Subscription::Config
    config:
      feed:
        - url: http://www.kernel.org/pub/linux/kernel/v2.6/
          meta:
            follow_link: ChangeLog-2.6.

  - module: CustomFeed::Simple

  - module: Filter::Rule
    rule:
      - module: Deduped
        path: /home/hirose31/var/plagger/kernel.db

  - module: Notify::IRC
    config:
      daemon_port: 6251
      nickname: plagger
      server_host: irc.example.jp
      server_port: 6667
      server_channels:
        - #plagger
      charset: iso-2022-jp
      announce: action

daemontoolsのrunで

#!/bin/sh
exec 2>&1
exec setuidgid hirose31 \
  env - PATH="/usr/local/bin:$PATH" \
  plagger-ircbot -c ~hirose31/etc/plagger/kernel.yaml

botを立ち上げて、あとはcronでplagger -c ~hirose31/etc/plagger/kernel.yamlでOK。

2006-08-07 (Mon)

2006-08-04 (Fri)

kernel 2.6.17のXFSは危ない

  • 2.6.16.xは大丈夫
  • 2.6.17.xがヤバイ
  • 2.6.17.7、2.6.18-rc1で修正された
  • 2.6.17.xでぶっ壊れた場合は、2.6.17.7にしても壊れたママ
  • ぶっ壊れたら、xfsprogs-2.8.10以上に含まれるxfs_repairで直る

ってことみたい。コワイヨォ…

以下、情報源。

2006-08-03 (Thu)

MySQL Performance Blog » MySQL Crash Recovery

Binary log corruption - Binary log may become corrupted and out of sync with database content. This will sometimes break replication but if you’re just planning on using binary log for point in time recovery it can go unnoticed. sync_binlog Is helping by syncing binary log, but at performance penalty. If using Innodb you also might with to use innodb-safe-binlog option in MySQL 4.1 so your Innodb log and binary log are synchronized. In MySQL 5.0 XA is taking care of this synchronization.

  • sync_binlog=1にしないと、クラッシュ時にbinlogが失われるかもしれない。(ディスクにflushしてないので)
  • MySQL 5.0なら、innodb_support_xa = ONにすれば、クラッシュリカバリ時にInnoDBのログとbinlogの整合性を保つことができる。
  • でも、sync_binlog=1にすると、パフォーマンスに影響あるよ。

MySQL Performance Blog » Returning to InnoDB scalability

  • マルチCPUなマシンで、同時実行スレッドが増えるとパフォーマンスががた落ちする。
  • 理由は、スレッド間でグローバルなmutex(buffer_pool_mutex)のロック獲得の取り合いになってるからっぽい。
  • とりあえずの対応は、innodb_thread_concurrencyを2とか4にする。
  • んでもそーすると、マルチCPUを使い切ってないっつーことになる。
  • みんながんばってるみたいなんで、そのうち直りそうな気配。

2006-08-02 (Wed)

ReiserFSのパーティションにReiserFSのディスクイメージを置くのは危険?

Nevertheless it is recommended not to store ReiserFS v3 images on a ReiserFS v3 partition (e.g. backups or disk images for emulators) without transforming them to a form that avoids misleading the filesystem, e.g., by compressing or encrypting. Reformatting an existing ReiserFS v3 partition can also leave data behind that could confuse the rebuild operation, resulting e.g. in files from the old filesystem reappearing after a tree rebuild. Note that this also opens an opportunity for malicious users to intentionally store files that will confuse the rebuilder. As the metadata is always in a consistent state after a filesystem check, corruption here means contents of files being merged in unexpected ways with the contained filesystem's metadata. The ReiserFS successor, Reiser4, fixes this problem.

ReiserFS - Wikipedia

ReiserFS v3なパーティションに、ReiserFS v3なディスクイメージなんかを置いてたりすると、クラッシュリカバリ時などのリビルド処理で、ディスクイメージ中のReiserFSなデータが予期せずパーティションの方のメタデータにマージされちゃっていやぁんなことになる、ってことですか。

検証はしてないすけど、ReiserFS v3なパーティションに、

なんかのディスクイメージを置いてるとちとアレかもしれないすね。むぅ。

2006-08-01 (Tue)

pdflush

Linux kernel 2.6系のkernel空間のプロセス。

遅延書き込み - バッファキャッシュをディスクに書き込むのがpdflushのお仕事。定期的に実行され、ある条件を満たす場合にディスクに書き込む。

pdflushの挙動の制御をするには、/proc/sys/vm/* あたりでやる。

procファイルは、

に詳しい。

特に関係ありそげなのはこのあたりすかね。

  • dirty_background_ratio
  • dirty_expire_centisecs
  • dirty_ratio
  • dirty_writeback_centisecs

pgpool-II

昨日のGREEさん主催の第5回 オープンソーステクノロジー勉強会で紹介されてたもの。

pgpool-IIの主な機能

  • 複数のDBノードを使って検索問い合わせを並列に実行することができ,単体のPostgreSQLよりも高い性能を得ることができます.
  • 管理を容易に行えるように,WebベースのpgpoolAdminという管理ツールが付属しています(右の画像参照).
  • 128台までのDBノードを扱うことができます(再コンパイルで更に増やせます).
  • 管理ポートを使ってネットワーク越しに管理を行うことができます.今のところ管理クライアントはpgpoolAdminだけですが,プロトコルとC言語ライブラリが公開されているので,新しい管理ツールを作ることもできます.

パラレルクエリはすんごいうれしいかも。

実装は9月にお目見えするそうなんですが、疑問点をいくつか。

  • pgpoolプロセスの冗長化
  • パラレルクエリ時のsequenceの整合性
  • パラレルクエリ時のトランザクション
2003 | 11 | 12 |
2004 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 05 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 12 |
2012 | 01 | 02 | 03 | 06 | 08 | 10 | 11 | 12 |
2013 | 01 | 02 | 03 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2014 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 |
2015 | 01 | 02 | 07 | 10 |
2016 | 01 | 05 | 10 | 12 |
2017 | 07 |
2018 | 05 |