MYSQLのインストール

オフィシャルのサイトにしたがって、インストールしました。

インストール

# sudo yum -y update
# sudo yum -y install mysql-server
# sudo /etc/init.d/mysqld start

初期設定

# sudo /usr/bin/mysql_secure_installation

このコマンドを実行すると、対話式に色々と聞かれます。

  • Current Root Passwordを入力してください。
    • A.何も入力せず、Enterを押してください。(デフォルトでrootのパスワードはないから)
  • If the above step worked correctly you should be prompted with a question asking you if you would like to set your root password. Please press Y and press Enter.
    • A.Yを押してmysql用のrootのパスワードを設定してください。
  • You will be prompted to remove the MySQL anonymous users. For security reasons we want to do this.
    • A.セキュリティ的によくないので、Yを入力してEnterを押してください
  • Delete test Databaseを消しますか
    • A.セキュリティ的によくないので、Yを入力してEnterを押してください

サービス登録

#ntsysv

mysqlを選択する

再起動したときに、自動で立ち上がるようにしときましょう。

参考サイト

・オフィシャルwiki(mysqlインストール編)
http://cloudservers.rackspacecloud.com/index.php/CentOS_-_MySQL_Installation

phpのインストール

オフィシャルサイトから。

yum install php php-common php-gd php-mcrypt php-pear php-pecl-memcache php-mhash php-mysql php-xml

必要なモジュールを追加します。

他にも、必要なものがあったらインストールしましょう。


参考サイト

・オフィシャルのwikiapachephpのインストール方法)

http://cloudservers.rackspacecloud.com/index.php/CentOS_-_Apache_and_PHP_install

php高速化 apcのインストール

APCAlternative PHP Cache)は、PHPの中間コードのキャッシュや最適化を行う拡張モジュールです。

つまり、phpが高速化されるということです。どんぐらい速くなるか計測したいけど、入れて問題が発生することはないらしい(影響がでない)ですので、phpインストール後にすぐに入れます。


インストールコマンド

# pecl install APC

エラー①

configure: error: no acceptable C compiler found in $PATH

対処方法

#yum install gcc gcc-c++

エラー②

1. Perl is not installed;
2. Apache was not compiled with DSO support (--enable-module=so);
3. 'apxs' is not in your path. Try to use --with-apxs=/path/to/apxs
The output of /var/tmp/pear-build-root/APC-3.0.19/y follows
/tmp/tmpaw98Nt/APC-3.0.19/configure: line 3232: /var/tmp/pear-build-root/APC-3.0.19/y: No such file or directory
configure: error: Aborting
ERROR: `/tmp/tmpaw98Nt/APC-3.0.19/configure --with-apxs=y' failed

エラーでまくりですよ(涙)


対処方法

# yum install httpd-devel
#yum install apr-devel

方法を間違えていました↓
すいません。。

正解

downloading APC-3.0.19.tgz …
Starting to download APC-3.0.19.tgz (115,735 bytes)
…………………done: 115,735 bytes
47 source files, building
running: phpize
Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20050922
Zend Extension Api No: 220051025
Use apxs to set compile flags (if using APC with Apache)? [yes] : ← 空Enter
building in /var/tmp/pear-build-kentan/APC-3.0.19
running: /tmp/tmpHKQPfO/APC-3.0.19/configure –with-apxs

apcインストール途中で質問を聞かれるが、いつものノリでYを選択してしまったのが、ハマった原因でした。
空白Enterでうまくいきます。

インストール後の設定

You should add "extension=apc.so" to php.ini

インストールが完了したときに、このように言われるので書きくわえましょう。

しかし、php.iniの他のextensionがないので不思議に思い、調査してみると間違っていました。
CentOSの場合は/etc/php.dにiniファイルを追加すれば読み込むようPHPコンパイルされているらしいです。
知りませんでした。


ですので、下記のように書きます。

# vi /etc/php.d/apc.ini
extension=apc.so
apc.ttl = 7200
apc.user_ttl = 7200

時間の設定は、下記を参考にしてください。
http://www.php.net/manual/ja/apc.configuration.php

apache再起動でOK

# /etc/init.d/httpd restart

確認

[root@testMan ~]# php -r 'phpinfo();'|grep apc
additional .ini files parsed => /etc/php.d/apc.ini,

OK入りましたね。

参考サイト

APC(Alternative PHP Cache)をCentOS5にインストール[戯言(表)]★スペシャルサンクスサイト
http://www.kentan.jp/kentan/blog/?p=233


APCpecl で CentOS5 にさくっとインストール(芸人社長)
http://blog.oowarai.com/?p=292


APC インストール時のエラー(php MySQL apache などの設定メモ)
http://web-gijyutu.com/php/apc-error.html

phpの時間を直す

phpのdate関数なので、時間を表示してみると狂ってます。
アメリカ時間を日本時間に変えましょう。

php.ini に以下の設定を追加

[Date]
; Defines the default timezone used by the date functions
;date.timezone =
date.timezone = Asia/Tokyo

参考URL

php.ini に timezone をセット(WEBシステム開発 技術的備忘録(通称 技忘録))
http://sfi.hamazo.tv/e1317196.html

xoopsを導入(CMS)

自分が、phpを学び始めたきっかけになったXOOPSを入れてみます。

手順

xoopsインストールします。

http://xoopscube.jp/

winscpで、アップします。

アップ場所は、下記のパス配下

/var/www/html/rackspace/xoops/

③http.confの設定を変更

バーチャルホストを設定

NameVirtualHost *:80

#####################################################
##
## rackspace (xooops)
##
#####################################################

DocumentRoot /var/www/html/rackspace/xoops/html
ServerName xoops.rackspace-jp.com
ErrorLog logs/xoops.rackspace-jp.com-error_log
CustomLog logs/xoops.rackspace-jp.com-access_log combined

Options None
AllowOverride None
Order deny,allow
Deny from all


Options FollowSymLinks
AllowOverride None

Allow from all


Order deny,allow
Deny from all


ドメインxoops.rackspace-jp.com

(補足)サブドメインDNSに登録する
name content domain name TTL TYPE
xoops.rackspace-jp.com rackspace-jp.com rackspace-jp.com 300 CNAME
④新規データベース(rackspace用)を作成する

その前に、rackspaceデーターベースを扱うユーザを作っておく。

パスワード生成ツール
http://nurucom-archives.hp.infoseek.co.jp/digital/makePassword.html


自分は、コマンドが苦手なので、navicatを使ってデータベース作成とユーザ追加を行いました。

  • navicatのつなぎ方(トンネリング)

teratermで、cloud serverにつないだ状態で、上部メニューの設定-SSHポート転送を選択。
追加を押して、下記のように設定する

ローカルポート 3306
リモート側のホスト 空白
ポート 3306

これで、navicatと接続できます。

xoopsのインストール

※⑥の文字化け対策をした方が絶対いいです。再度インストールする必要がでてきます。


xoopsのインストール方法は、色々なサイトに載っているのでここでは説明しません。
普通に行えば、何も調べずともできます。

xoopsの文字化け対策

xoopsは、果てしなく文字化けします。4年前泣きました。


xoops文字コードは、EUC-JPでした。
デフォルトのアパッチの設定では、UTF-8です。

★アパッチの文字化け対策

httpd.confに
AddDefaultCharset EUC-JPを追加しました。


DocumentRoot /var/www/html/rackspace/xoops/html
ServerName xoops.rackspace-jp.com
ErrorLog logs/xoops.rackspace-jp.com-error_log
CustomLog logs/xoops.rackspace-jp.com-access_log combined

Options None
AllowOverride None
Order deny,allow
Deny from all


Options FollowSymLinks
AllowOverride None
AddDefaultCharset EUC-JP

Allow from all


Order deny,allow
Deny from all


★データベース(mysql)の文字化け対策


また、データベースで扱う文字コードも変更します。


/etc/my.conf

[client]
default-character-set=utf8

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

default-character-set = utf8
skip-character-set-client-handshake
character-set-server = utf8
collation-server = utf8_general_ci
init-connect = SET NAMES utf8

xoopsをもう一度、再度インストールしたら文字化けが直りました。

xoopsインストール完了

http://xoops.rackspace-jp.com


参考サイト

MySQL 文字化けを防ぐ、文字コードの確認と設定(渋谷生活)
http://www.avant-tokyo.com/linux/mysql_character_set.html

xoopsでのResizeの効果測定

一番気になっていたことは、サーバのResizeしていってどのぐらいの負荷をさばけるようになるかということです。

ワクワクしてきますね♪

負荷調査ツール

apache benchを使います。
※自分が所有しているサイト以外には絶対にやらないでください。
訴えられますよ。

コマンド

ex)

ab -c 10 -n 10 http://テストさいと.com

オプション 意味
-n 数値 テストで発行するリクエストの回数を数値で指定
-c 数値 テストで同時に発行するリクエストの数を数値で指定

テスト内容

アクセス元 自分のPC(windowsXP)
ターゲットサービス xoops(LAMP構成)
ターゲットURL http://rackspace-jp.com/userinfo.php?uid=1
同時接続する数 100コネクション
リクエスト回数 100回

1GBまでしか、この条件でテストしませんでした。
ごめんなさい。

テスト実施

■256MBプラン

Requests per second: 4.30 [#/sec] (mean)

  • 備考

リクエスト数:1000回だと、サーバ完全に沈黙

■512MBプラン

Requests per second: 5.97 [#/sec] (mean)

  • 備考

リクエスト数:1000回でも、普通にさばいている
どんなに負荷をかけてもサーバは落ちなくなった。apacheの設定の問題だとは思いますが。

httpd.conf

項目 変更前 変更後
MaxClient 500 20000
KeepAliveTimeout 15 60


こうすれば、サーバのリソースを使いきれるはずです。
しかし、これでも落ちなかった。

■1024MBプラン

Requests per second: 5.95 [#/sec] (mean)

  • 備考

512MBプランと変わりがないです。
このサーバのリソースを限界がわかりません。

原因は、自分のPC上からアクセスしているので、xamppのapache bentchを使っていることでした。
どこかで制限がかかっているようです。

1000コネクションで、1000リクエストだとサーバは落ちました。

Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
apr_socket_recv: Connection reset by peer (104)
Total of 314 requests completed

300リクエストを超えたぐらいで、悲鳴をあげているようです。
そのあと、処理を止めたのでサーバは3分ぐらいしたら落ち着きました。

よし、次行ってみよう!

■2GBプラン

1000コネクションで、1000リクエストだとサーバは落ちました。

Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
apr_socket_recv: Connection reset by peer (104)
Total of 702 requests completed

702リクエストまで、さばけました。先ほどは、300までだったので2倍以上にアップしましたね。

■4GBプラン

apr_socket_recv: Connection reset by peer (104)

このようなエラーが発生してしまって、最後までいきませんでした。

理由はこの説明がぴったり

また、1台のコンピュータが発生させられる同時接続数についても注意したい。例えば、高性能なUNIXサーバに対して測定する場合、相当な数の同時接続を発生させる必要がある。しかし、普通のPCサーバで発生させられる同時接続数には、おのずと限界がある。従って、複数台のコンピュータにabを入れて測定しなければならない。たとえ、1台のコンピュータでこなせる数だとしても、複数台での測定も試してみることを勧める。

つまり、測定する側の限界ということです。


ですので、下記のようなオプションに変更しました。

# /usr/bin/ab -c 1000 -n 1000 -t 10 http://localhost/

測定する時間を、10秒間だけにしました。


すると、、

Requests per second: 35.50 [#/sec] (mean)

驚異的にさばいている。

■8GBプラン

Requests per second: 82.49 [#/sec] (mean)

■16GBプラン(最強)

一応しらべときます。

Requests per second: 75.67 [#/sec] (mean)

不思議と落ちました。

考察

スペックをあげていけば(resize)、かなりのアクセスでも捌けることがわかりました。

rackspaceを使えば、ちょっと作ったサービスに急に人気が出たさえも、ボタン一つでサーバのスペックをあげて対応ができ、かつそれがかなりのレベルのサーバのスペックにまでなる。

これは、素人革命ですね。



ps.
xoopsは、かなり負荷がかかりますねw


resizeについて

今のサーバに容量が少ないからだろうが、カップラーメンが出来上がるぐらいの時間でresizeが完了しました。

また、resizeの初めから中番ぐらいまでは、ホームページは表示されています。
つまり、riseize前のサーバは生きています。teratermも繋がったままです。

しかし、resizeの最後の方ではサーバにアクセスできなくなります。
新しくできたサーバにIPアドレスを入れ替えたりしているのではないでしょうか。


おまけ

フレームワークとか、xoopsのようなCMSなど、DBをカラムものは大量のアクセスが来たらどんなにサーバのスペックを上げようが限度があると思います。

これを見てください。

Requests per second: 5000.00 [#/sec] (mean)

静的ファイルだと、こんなにも捌けます(最上位プラン)。
結局は、負荷対策はキャッシュを使う。これしかありません。

最初に(256MBのプラン)、リクエスト回数1000で、コネクション100でアタックをかけたら完全にサーバが固まりました。

load average: 102.43, 77.03, 36.52

本当に怖いですね。実際に動いているサービスにこれして、サーバ落としたら賠償請求されますよ。。
こういう攻撃に対応していないサイトが悪いと言いたいですが。。

謝罪

ここまで負荷をかけたテストをしたことがなかったので、最初に想定していたテストがまったく通用しませんでした。

負荷のかかるサーバをテストするには、もっと技術力が必要です。
勉強しなおそうと思います。


参考サイト

Apacheパフォーマンス・チューニングのポイント(@IT)
http://www.atmarkit.co.jp/flinux/rensai/apache15/apache15b.html

通信速度 rackspace cloud

クラウドサービスは、サーバが海外ために通信速度が遅いといわれています。実際はどうなのでしょうか。

速度の目安

通信種類 速度
LAN内 10ms以下
光・高速ADSL 数10ms以下
低速通信 300ms以下

測定結果

サイト名 速度
rackspase 160ms
ec2 200ms
yahoo 17ms
google 3ms

考察

普通に触っている分には遅く感じませんが、数字で見るとかなり遅いことがわかります。

ただ、このようにモバツイが言及しています。

webサービスにそこまで速度は求められていない。

0.1秒なら、、

どうなんでしょうね。

参考サイト

・お便利サーバ.com
http://www.obenri.com/_command/ping01.html

・そろそろモバツイがEC2に移転した話でも書くとするか
http://www.milkstand.net/fsgarage/archives/001604.html