WebminにSSLで接続する

■モジュールのインストール

以下のコマンドを実行し必要なモジュールをインストールする。

wget http://download.webmin.com/download/Net_SSLeay.pm-1.23.tar.gz
tar xzvf Net_SSLeay.pm-1.23.tar.gz
cd Net_SSLeay.pm-1.23
/usr/bin/perl Makefile.PL && make
make test
make install

■設定

まず、前回の記事を参考にして証明書を生成し、「Webmin > Webmin設定 > SSL暗号化」にアクセスし、以下のように設定する。(証明書ファイルのパスは環境に合わせた値を入力)

可能であればSSLを使用可能にしますか?
はい
プライベート鍵ファイル
/root/ssl/server.key
証明書ファイル
/root/ssl/server.crt

こういうのは早めにやったほうが良いね。c(`・ω´・ c)っ≡つ ババババ

ApacheでSSLを利用する

前回の記事を参考に秘密鍵と証明書を生成する。

■コマンド

以下のファイルを編集する。

vi /etc/httpd/conf/httpd.conf

以下の記述を追記する。

SSLCertificateFile /root/ssl/server.crt
SSLCertificateKeyFile /root/ssl/server.key

バーチャルホストで運用し、特定のサイトのみSSLでも通信を行う場合は以下のようにする。

<VirtualHost *:80>
    SSLEngine On
    SSLCertificateFile /root/ssl/server.crt
    SSLCertificateKeyFile /root/ssl/server.key
    DocumentRoot /var/www/vhosts/domain/httpdocs
    ServerName localhost.localdomain
    ServerAlias www.localhost.localdomain
</VirtualHost>

CentOSにmembaseをインストールする

CentOS 5.3の32bit版にインストールしてみることにした。

■インストール

以下のコマンドでrpmからインストールできる。

wget http://c2978342.ltd.cloudfiles.rackspacecloud.com/membase-server-community_x86_1.6.4.rpm --referer="http://www.membase.org/downloads"
rpm -ivh membase-server-community_x86_1.6.4.rpm

ダウンロードサイトの仕様上、wgetにリファラーをつけた。インストールが完了すると以下のメッセージが表示される。

Starting Membase server[  OK  ]

You have successfully installed Membase Server.
Please browse to http://localhost.localdomain:8091/ to configure your server.
Please refer to http://membase.com and http://membase.org for
additional resources.

Please note that you have to update your firewall configuration to
allow connections to the following ports: 11211, 11210, 4369, 8091
and from 21100 to 21199.

By using this software you agree to the End User License Agreement.
See /opt/membase/LICENSE.txt.

■設定

ブラウザから設定ができるらしいので、以下のコマンドでポート8091番を開ける。ついでに上述のメッセージに従って、11211番、11210番、4369番も同様に対処しておく。

system-config-securitylevel-tui

http://localhost:8091/にアクセスすると悪そうな顔したキャラが表示されるはずだ。後は画面の指示に従えば良い。

■ベンチマーク

上手く書き込みできるかを検証するついでにベンチマークしてみる。

$memcache = new Memcache();
$memcache->connect('localhost', 11211);
$start = microtime(true);
for($i = 0; $i < 1000; $i++){
    $memcache->set("k{$i}", "abcdefghijklmnopqrstuvwxyz");
}
$end = microtime(true);
print($end - $start);// 0.19418982505798

以前にmemcachedのベンチマークで使用したコードをそのまま使うことができるのが素晴らしい。

勝手評価

速度はmemcachedの2~3倍程度かかるようだが、他のKVSよりも数倍高速である。複雑な構造を必要とせずハッシュテーブルとして使用するだけならば、オススメできる気がする。

不具合:保存ができない

管理画面にアクセスし(http://localhost:8091/index.html#sec=monitor_buckets&zoom=zoom_minute)Data Bucket>Item Countを見ると0のままで保存がされていない。

原因

memcachedが既にポートを使っていた。

対策1

以下のコマンドでmemcachedをstopする。普通の人はこれで良いと思う。

/etc/init.d/memcached stop
対策2

以下のコマンドでmemcachedをアンインストールする。membaseがあればmemcachedは要らないってこともあり得る。

yum remove memcached
確認

以下のコマンドで確認すると良いかもしれない。

lsof -i:11211
悪い例

memcachedがポートを使っている。

COMMAND    PID      USER   FD   TYPE DEVICE SIZE NODE NAME
memcached 2500 memcached   26u  IPv6   8072       TCP *:11211 (LISTEN)
memcached 2500 memcached   27u  IPv4   8073       TCP *:11211 (LISTEN)
memcached 2500 memcached   28u  IPv6   8077       UDP *:11211
memcached 2500 memcached   29u  IPv4   8078       UDP *:11211
良い例

membaseがポートを使っている。

COMMAND  PID    USER   FD   TYPE DEVICE SIZE NODE NAME
moxi    6481 membase   40u  IPv6  38065       TCP *:11211 (LISTEN)
moxi    6481 membase   41u  IPv4  38066       TCP *:11211 (LISTEN)

■特性

memcached互換のNoSQLデータベース「Membase」がオープンソースで登場」を参考のこと。デフォルトでGUI管理ってのはなかなか頑張ってるよね。

CentOSにMongoDBをインストールする

■インストール

yumリポジトリの追加

以下のコマンドでリポジトリを追加する。

vi /etc/yum.repos.d/mongo.repo

以下のようにファイルの中身を記述する。

[10gen]
name=10gen Repository
baseurl=http://downloads.mongodb.org/distros/centos/5.4/os/i386/
gpgcheck=0

保存したら以下のコマンドを実行する。

yum install mongo-stable*

起動

以下のコマンドで起動してみる。

/etc/init.d/mongod start

以下のコマンドで起動したか確認する。

lsof -i:27017

以下のコマンドで自動起動を設定する。

chkconfig mongod on
chkconfig mongod --list

参考

CentOS and Fedora Packages

amazon linuxにインストールする

wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.0.2.tgz
tar xvzf mongodb-linux-x86_64-2.0.2.tgz
mv mongodb-linux-x86_64-2.0.2 /var/lib/mongodb
mkdir /mnt/db
/var/lib/mongodb/bin/mongod --fork --logpath ~/mongod.log --dbpath /mnt/db/

■PHPから扱う準備

以下のコマンドでpecl_mongoをインストールする。

pecl clear-cache
pecl install mongo

以下のコマンドで設定ファイルを生成する。

cp /etc/php.d/curl.ini /etc/php.d/mongo.ini
vi /etc/php.d/mongo.ini

設定ファイルは以下のような記述だ。

; Enable mongo extension module
extension=mongo.so

設定が終わったらhttpdをreloadする。

/etc/init.d/httpd reload

参考

PHP & MongoDB Sitting in a Tree: Part 1

英語だが非常に参考になるドキュメントだ。

■ベンチマーク

以下のコードを使用してベンチマークしてみた。

$dbh = new Mongo();
$dbh = $dbh->testdb;
$col = $dbh->bench;
$start = microtime(true);
for($i = 0; $i < 1000; $i++){
    $col->insert(
        array(
            'key'   => "key{$i}",
            'value' => "abcdefghijklmnopqrstuvwxyz"
        ),
        true
    );
}
$end = microtime(true);
print($end - $start);0.66766786575317
$dbh->close();

但し、2回目以降は0.2秒以下になる。

データを取り出す

本当にデータが挿入されているのか不安になったので、以下のコードを使用してデータを覗いてみた。

$res = $col->find();
$s = 0;
foreach($res as $doc){
    print("<pre>{$s}");
    var_dump($doc);
    print('</pre>');
    $s++;
}
$dbh->close();

ベンチマークをしておいて言うのもオカシイが、データストアにおいて全く同じ条件というものは再現できないので単純に比較してはならない。用途に応じた選択が必要である。

amazon Linuxにインストールする

amazon Linuxにインストールする場合は以下のようにする。

curl -O  http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.0.2.tgz
tar xzf mongodb-linux-x86_64-2.0.2.tgz
mv mongodb-linux-x86_64-2.0.2 /var/lib/mongodb
cd /var/lib/mongodb/bin
mkdir /mnt/db
./mongod --fork --logpath /var/log/mongod.log --dbpath /mnt/db/

CentOSにAntをインストールする

以下のコマンドでインストールする。

wget http://ftp.riken.jp/net/apache/ant/binaries/apache-ant-1.8.1-bin.tar.gz
tar zxvf apache-ant-1.8.1-bin.tar.gz
ln -s /usr/lib/apache-ant-1.7.0/bin/ant /etc/alternatives/ant
ln -s /usr/lib/apache-ant-1.7.0/ /etc/alternatives/anthome
ln -s /etc/alternatives/ant /usr/bin/ant

パスを通す。

vi /etc/profile

以下のように最終行に追記する。

export ANT_HOME=/etc/alternatives/anthome

編集が終わったら以下のコマンドを実行して反映させる。

source /etc/profile

CentOSにnginxをインストールする

nginxをインストールする。

■インストール

以下のコマンドでインストールをおこなう。

yum --enablerepo=epel install nginx

epelについて

Fedoraと同等環境を実現するRHEL用レポジトリであるが、初期状態では使えないため以下のコマンドでリポジトリを追加する。

wget http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
rpm -Uvh epel-release-5*.rpm

■設定

以下のコマンドで設定ファイルを編集する。

vi /etc/nginx/nginx.conf

80番ポートをドキュメントルートを「/var/www/vhosts/domain/httpdocs」とする場合、以下のように記述する。

listen       80;
root   /var/www/vhosts/domain/httpdocs;

HTTP PUTメソッドを許可する

location / {
    root         /var/www/vhosts/domain/httpdocs;
    index        index.html index.htm;
    dav_methods  PUT;
    create_full_put_path   on;
    dav_access   group:rw  all:r;
}

IPアドレスで制限する

location / {
    allow        192.168.1.0/32;
    deny         all;
}

以下のコマンドで起動する。

/etc/init.d/nginx start

常に起動しておく場合、以下のコマンドを実行する。

chkconfig nginx on
chkconfig nginx --list

設定ファイルを変更した場合は以下のコマンドでreloadする。

/etc/init.d/nginx reload

memcachedをインストールする

あまり興味がないが仕事で使うので試してみた。♪(´ε` )

■インストール

以下のコマンドを実行してmemcachedをインストールする。

yum install memcached
/etc/init.d/memcached start
chkconfig memcached on

設定ファイルは以下のコマンドで編集できる。編集が必要な場合は書き換えると良い。

vi /etc/sysconfig/memcached

PHPから使いたいので以下のようにpeclコマンドでインストールする。

pecl clear-cache
pecl install memcache
cp /etc/php.d/curl.ini /etc/php.d/memcache.ini
vi /etc/php.d/memcache.ini

以下のようにファイルを記述する。

; Enable memcache extension module
extension=memcache.so

ファイルを上書き保存したらhttpをreloadする。

/etc/init.d/httpd reload

■ベンチマーク

以下のコードを使用し簡単にベンチマークしてみた。

$memcache = new Memcache();
$memcache->connect('localhost', 11211);
$start = microtime(true);
for($i = 0; $i < 1000; $i++){
    $memcache->set("k{$i}", "abcdefghijklmnopqrstuvwxyz");
}
$end = microtime(true);
print($end - $start);// 0.07976508140564

さすがメモリにしかデータがないだけあって爆速だ。