「Perl」と一致するもの

DRBD9で分散ストレージを作る

Ubuntu 18.04LTSでDRBD9の分散ストレージを作るメモです。

DRBD(Distributed Replicated Block Device)とは、Linux上でネットワークを介したストレージをリアルタイムにミラーリングするためのソフトウェアです。
何が出来るかと言えば、2台〜4台のコンピュータ間のストレージで完全に同期を取ることが出来ます。
Active/Standbyで動作しているActive側でストレージに書き込みが行われると、ネットワークを介してSlave側のストレージにも書き込みが行われることで、データが同期されるという仕組みです。
また、同期はブロック単位でおこなわれるので、スライス(パーティション)がそっくり同期されます。その為、ファイルシステムに依存しない事も特徴です。(ファイル単位での同期ならrsync使うとか、他にも方法は色々あるけれど)

通常クラスタ構成のシステムでは共有ストレージなど「高価なハードウェア」を使うか、レプリケーションソフトで定期的に同期を行う方式が一般的だと思います。レプリケーションソフトの同期では同期のタイミングによって時間差が生まれてしまうため、同期が取れていないタイミングが発生しますが、DRBDではブロック単位の書き込みをそのままネットワークを介して行いますのでほぼリアルタイムの同期が行えます。
(市販のクラスタソフトウェアでも似たような仕組みを備えている製品があるようだ・・・)

Linuxではクラスタ自体はPacemaker(旧 Heartbeat)で行えますので、複数のコントローラ、複数のパスを備えた高価なストレージを使わずにクラスタのシステムが作れる事になります。とはいえネットワークを介して同期するってことは、ネットワークに相当負荷が掛かるということですので、高パフォーマンスを要求されると厳しい気がします。
仕組み自体は昔からあった(カーネル2.6の頃・・・2009年位?・・・に生まれたらしい)のですが、これまで触ってこなかったので、今更ながらちょっと触ってみましょうという感じです。

postfixでSPF判定

Ubuntu 16.04 LTSのpostfixに「SPF判定」を組み込んでみるテスト

Postfix-policyd-spf-perlをインストール
#apt-get install postfix-policyd-spf-perl libmail-spf-perl
master.cfにspf判定を追加
#vi /etc/postfix/master.cf
policy-spf unix - n n 0 0 spawn
user=nobody argv=/usr/sbin/postfix-policyd-spf-perl
main.cfのsmtpd_recipient_restrictionsにpolicy-spfを追加
#vi /etc/postfix/main.cf
smtpd_recipient_restrictions = <元々書かれていたポリシー> check_policy_service unix:private/policy-spf
Postfixで設定ファイルをリロード
# postfix reload

と手順的には難しくないです。

実際テスト環境でメールヘッダがどうなるかというと

Received-SPF: none (lab3.local: No applicable sender policy available) receiver=ns.lab.local; identity=mailfrom; envelope-from="root@lab3.local"; helo=mail.lab3.local; client-ip=10.3.1.1
という具合にReceivedヘッダの途中にReceived-SPFというヘッダが記録されてきます。
かつ、この場合SPFレコードがないホストからメールが来たため、判定がnoneとなっています。

やっと動いた

やっと動きました。。。
MovableTypeが動かなくて、かなり手こずりました。

事の発端はUbuntu Serverを12.04LTSから14.04LTSにアップグレードしたことですが。

Apacheが2.4に上がってたり、
Perlが5.18に上がってたり、
PHPが5.5に上がってたりして、
MovableType5が動かなくなってしまいました。

はい。

仕方無いのでMovableTypeを6に上げて、

Apache直して、MovableTypeのphp/extlib/smarty/libs/Smarty_Compiler.class.phpも

/* replace special blocks by "{php}" */ /* 修正後 */ $source_content = preg_replace_callback($search, create_function ('$matches', "return '" . $this->_quote_replace($this->left_delimiter) . 'php' . "' . str_repeat(\"\n\", substr_count('\$matches[1]', \"\n\")) .'" . $this->_quote_replace($this->right_delimiter) . "';") , $source_content);

/* 修正前
$source_content = preg_replace($search.'e', "'"
. $this->_quote_replace($this->left_delimiter) . 'php'
. "' . str_repeat(\"\n\", substr_count('\\0', \"\n\")) .'"
. $this->_quote_replace($this->right_delimiter)
. "'"
, $source_content);
*/

という感じで直して、、、やっと動いたところです。

MovableTypeはバージョンアップする度に全てのテンプレートを一度リセットしないと、どこかに綻びが出てしまうのが悩ましいところですね。いっそのこと全部データベースに持ってくれて、アップデートしても影響無いようになっていると嬉しいのですが。

# まだまだ、あっちこっち死んでる気がするけど。

ブログサーバお引っ越し

ずっとですが、Coreserverの負荷が高くて使いにくかったので、サーバを引っ越ししてしまいました。 引っ越しそのものもかなり面倒だったし、引っ越し先のサーバくんもかなり非力ですが、固定IP、サーバ証明書付き、ユーザー数1という環境に移ることが出来ました。引っ越し先は自分のサーバです。

細かい設定は先日のMovableTypeのバージョンアップでかなり省略していましたのでMovable Typeとしてはほぼ新規の環境を構築して、それに記事のデータベースや、画像などのデータをコピーして完了・・・という。

まずハマリどころだったのが、Ubuntu ServerのPerlです。
いつものようにCPANに行ってImage::Magickをインストールしようと

# perl -MCPAN -e shell
cpan[1]> install Image::Magick
などとやってみたんですが、makeでこけて入りません(T_T
色々やってみたんですがどうにも入らなくて最終的にはパッケージから入れました。

# apt-get install perlmagick

何となく気持ち悪いのですが。仕方無いですね。