git merge mergeしたくないファイルを除外する

 

  •  Gitの設定

    リポジトリの.git/config設定ファイルに

        [merge "ours"]

          name = "Keep ours merge"

          driver = true

  • .gitattributesファイルの設定

  リポジトリのルートディレクトリに.gitattributesファイル作成し、以下の内容を書く

  hoge.txt merge=ours           (merge=ours必須)

記載内容は.gitignoreと同様、ワイルドカードも使用可能

参考サイト

Gitで内容が異なるファイルをマージ対象から除外(無視)する設定 | サボり屋の技術メモ

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攻撃にも使えるツールです。使用する際は十分注意してください。

参考リンク

Apache Benchでサクッと性能テスト - Qiita

AMIのEBS容量変更時の注意点

 

 *したこと

AMIsからEBSボリュームを変更し、スペックをあげて、新しいEC2インスタンスを作成した。

*はまったこと

EBSボリュームの変更が認識されない。AMIごとに指定されている容量しか認識できない。$df -h で確認

*解決 

resize2fsコマンドを実行、サイズの変更を認識させる

#resize2fs <デバイス>→Amazon Linuxの場合デバイスは「/dev/xvda1」

注意点

EBSブーとのAMIのEBS容量変更時resize2fsを実行しておく。

マイグレーション導入メモ(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

 参考サイト

CakePHP2でDBマイグレーションができるCakeDC migrationsプラグイン | hiro345

MySqlレプリケーション(作業メモ)

AWSのRDSにデータ移行時、レプリケーションの作り方

レプリケーションの大まかな手順は次の通りです。

  1. マスター側のバイナリログ情報を書き留めておく
  2. mysqldumpコマンドを使ってマスター(移行元)のデータベース(または一部のテーブル)をダンプする
  3. ダンプファイルをスレーブ(移行先RDS)にインポートする
  4. スレーブでSLAVEを設定(mysql.rds_set_external_master)する
  5. スレーブでレプリケーションを開始する(mysql.rds_start_replication)
  6. データ同期を確認する
  7. スレーブのレプリケーションを停止する(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

5.指定スキーマレプリケーション

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/