git merge mergeしたくないファイルを除外する
abコマンドで負荷テスト
「ab」はApache Bench(アパッチ ベンチ)の略で、Apacheで標準に付いているWEBサーバの性能を計測するためのコマンドです。
Apacheをインストールすると、<Apache Install Directory>\bin\に格納されていて、名前はwindowsだとab.exeになります。
使い方
基本的には-nと-cオプションを使うことになります。
(逆に、これさえ覚えれば大体大丈夫!!)
-nには、Totalで発行するリクエスト数を指定。
-cには、同時接続数を指定。
コマンド形式はこちら。
ab.exe -n <Total発行リクエスト数> -c <同時接続数> <URL>
主なオプションは、以下になります。
他にも沢山あるので、詳細は -h オプションで確認してみてください。
オプション名 | 説明 |
---|---|
-n 数値 | リクエストの総数を数値で指定 |
-c 数値 | 同時に発行するリクエストの数を数値で指定 |
-t 数値 | サーバからのレスポンスの待ち時間(秒)を数値で指定 |
-A ユーザー名:パスワード | ベーシック認証が必要なコンテンツにテストする |
-P ユーザー名:パスワード | 認証の必要なプロキシを通じてテストする |
-X プロキシサーバ名:ポート番号 | プロキシ経由でリクエストする場合に指定 |
-V | バージョンを表示 |
-h | ヘルプを表示 |
使ってみる
例えば、100ユーザが同時にhttp://www.example.co.jp/ に1リクエストを発行した場合を想定。
ab -n 100 -c 100 http://www.example.co.jp/
100ユーザが同時に10リクエストを発行した場合を想定。
-nには100 x 1-0 = 1000を指定します。
ab -n 1000 -c 100 http://www.example.co.jp/
接続先にベーシック認証がかかっている場合。
-Aの後にベーシック認証ユーザとパスワードを:(コロン)で区切って指定します。
ab -n 100 -c 100 -A hogeuser:hogepass http://www.example.co.jp/
同時接続数よりTotal発行リクエスト数が少ないとエラーメッセージが表示されます。
同時に100人で合計10リクエストを送るなんて、できないからですね。
ab -n 10 -c 100 -A hogeuser:hogepass http://www.example.co.jp/
ab: Cannot use concurrency level greater than total number of requests
...
見かた
以下のコマンドを実行した時の結果サンプルです。URLはダミーですよ。
ab -n 100 -c 100 http://www.example.co.jp/
Server Software: Apache/2.4.10
Server Hostname: http://www.example.co.jp/
Server Port: 80
Document Path: /
Document Length: 25559 bytes
Concurrency Level: 100
Time taken for tests: 8.374 seconds
Complete requests: 100
Failed requests: 0
Total transferred: 2599100 bytes
HTML transferred: 2555900 bytes
Requests per second: 11.94 #/sec
Time per request: 8374.479 ms
Time per request: 83.745 ms
Transfer rate: 303.09 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 10 16 4.1 15 42
Processing: 1382 4432 1913.3 4653 7255
Waiting: 1371 4334 1912.9 4395 7240
Total: 1398 4448 1913.6 4664 7271
Percentage of the requests served within a certain time (ms)
50% 4664
66% 5844
75% 6273
80% 6607
90% 6891
95% 7105
98% 7269
99% 7271
100% 7271 (longest request)
こんな表示が出ます。。
何が何だかよくわからないと思うので、逆引きで説明します。
・リクエストは全部正常に処理されたの?
Complete requestsが正常に処理したリクエスト数です。
Failed requestsは、処理に失敗したリクエスト数です。
今回は100リクエストを発行して、Complete requestsが100、Failed requestsが0になっているので、
全てのリクエストが正常に処理されたことを表しています。めでたしめでたし。
・何リクエストまで耐えられるの?
ab -n 100 -c 100
の、-n と -cの値をジョジョに増やしていってください。
そのうち、Failed requestsが0ではなくなるので、そこがそのWEBサーバの負荷の限界です。。
・秒間どれくらいのリクエストをさばけるの?
Requests per secondを見てみてください。
11.94とあるので、1秒あたり約12リクエストまでさばけることになります。
WEBサーバではこの数値がとても重要になるので、これだけでも覚えておくと良いでしょう。
・パフォーマンスは?
1リクエストあたりの処理時間を表しているのがTime per request(mean, across all concurrent requests)です。
今回は、83.745msかかったことになります。
あと、紛らわしいのですが、Time per request(mean)というのもあります。
これは、全リクエストの処理時間になります。
さいごに
WEBサーバの性能を計測するツールとしては、以下もあるので状況に応じて使い分けてみてください。
・Apache JMeter
・httperf
・weighttp
Apache Benchは、DOS攻撃にも使えるツールです。使用する際は十分注意してください。
参考リンク
マイグレーション導入メモ(CakePHP)
CakeDC Migration
composerで管理する場合は以下の内容不要
composerの場合:以下を追加する
“require”:{
“cakedc/migrations”: “*"
}
利用できるように、ロードする
/bootstrap.php
下記内容を追加
CakePlugin::load(‘Migrations’);
初期設定
$ Console/cake Migrations.migration run all -p Migrations
確認
$echo “use db_name ; show tables;” | mysql -u db_name
マイグレーション用初期ファイル作成します。Config/Schema/schema.phpがあるとうまく作成されないので、同名の
ファイルがある場合は別名にしておきます
$ Console/cake Migrations.migration generate -f
Config/Schema/schema.phpを作成します。
$ sudo Console/cake schema generate -f
状態を確認する
$ sudo Console/cake Migrations.migration status
マイグレーションの手順
テーブルに変更を加えたら、マイグレーションファイルを生成
|
$ Console/cake Migrations.migration generate -f |
適用する
$ sudo Console/cake Migrations.migration run
参考サイト
MySqlレプリケーション(作業メモ)
レプリケーションの大まかな手順は次の通りです。
- マスター側のバイナリログ情報を書き留めておく
- mysqldumpコマンドを使ってマスター(移行元)のデータベース(または一部のテーブル)をダンプする
- ダンプファイルをスレーブ(移行先RDS)にインポートする
- スレーブでSLAVEを設定(mysql.rds_set_external_master)する
- スレーブでレプリケーションを開始する(mysql.rds_start_replication)
- データ同期を確認する
- スレーブのレプリケーションを停止する(mysql.rds_stop_replication)
流れ:
ダウンプ時データベースの書き込みをロックする
$mysql -u root -p db_name
mysql>FLUSH TABLE WITH READ LOCK; //ロックかける
mysql>exit; //一旦抜き出す
$ mysqldump --databases db_name --master-data=2 --single-transaction --order-by-primary -r backup.sql -u user_name -p //ダウンプ
$ mysql -u root -p db_name
mysql> UNLOCK TABLES; //ロック解除
$ mysql -u user_name -p -h rds(public ip) db_name < backup.sql //rdsにインポートする
$ head -100 backup.sql | grep CHANGE // バイナリログ情報を表示
$ mysql -u user_name -p -h rds(public ip) db_name // rds接続
mysql>CALL mysql.rds_set_external_master(
'49.212.204.73',(masterのipアドレス)
3306,(master port)
'repl', (接続するユーザー)
'repl',(パスワード)
'binlog.000002',(バイナリログのファイル名)
117861696,(同期開始位置)
0(SSL接続を行わない)
);
mysql>CALL mysql.rds_start_replication; //レプリケーション開始
mysql>CALL mysql.rds_stop_replication; // レプリケーション終了
色々
1.masterに「接続するユーザー」を作って、権限を与える必要がある
mysql>CREATE USER 'repl'@'%' IDENTIFIED BY '<password>';
mysql>GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.*TO 'repl'@'%' IDENTIFIED BY '<password>'
2.セキュリティー色々の設定(もしくはiptables)
相互IPアドレスの許可必要がある。VPCセキュリティーグループかiptableか
3.my.cnf(master) 追加
[mysqld]
log-bin=mysql-bin
server-id=1
sudo service mysqld start
4.必要に応じて色々更新もしくはインストール
EC2最新アップデート
sudo yum update -y
sudo yum install mysql-server -y
master ->my.cnf
[mysqld]
binlog-do-db=db_name //指定dbしかバイナリログ出力しない
binlog-ignore-db=db_name //指定dbを除外
slave->my.cnf
[mysqld]
replicate-do-db=db_name
replicate-ignore-db=db_name
RDSをslaveにする場合、どう設定するでしょう??
参考サイト
http://dev.classmethod.jp/etc/migrate-mysql-on-ec2-to-rds/