ISUCON10予選の過去問練習-2 App-DBを別インスタンスに
2021-07-30
まずは過去問の講評に書いてあることを出来るようにならねばということで別インスタンスのDBが動作するよう変更してみる。去年挑んだのと同じ問題だが力になれなかった悔しさを胸に。。
今回の目標はISUCON10予選の講評に書かれているこいつができるようになること。
estate と chair で DB を別サーバに分ける
AWSインスタンス2つ目起動
前回同様 m3.medium のインスタンスを起動。同一VPC内に起動しているようなので繋がるはず。 MySQLのクライアントが接続できるように、ポート3306を公開。
Dataの用意
前回 でやった手順で同様に、initial-data は別のインスタンスで用意する必要があった。同じように make で初期データをDBに登録する。本番は初期データも入っている状態だと思うのでこの手順は不要だと思われる。
pingが通らない
調べた結果、EC2インスタンスにpingを通したければICMPをセキュリティグループに設定する必要があるらしい。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/security-group-rules-reference.html#sg-rules-ping
接続先変更
DBインスタンス
- sudo systemctl stop isuumo.go.service
Appインスタンス
- env.sh を編集してMYSQL_HOSTをインスタンス2のプライベートIPに変更
- sudo systemctl stop mysql.service
- sudo systemctl restart isuumo.go.service
WebAppをブラウザから確認。API動いてない。。。benchも失敗する。。。
MySQLの外部公開
参考にした。
https://qiita.com/2019Shun/items/34d44d63b00d086db51a
/etc/mysql/mysql.conf.d/mysqld.cnf を編集
bind-address = 0.0.0.0
MySQLのユーザを外から接続できるよう変更
一緒にISUCON参加予定のメンバーから教えてもらった。これでISUCONユーザがlocalhost以外からでも接続できるようになる。
GRANT ALL PRIVILEGES ON *.* TO 'isucon'@'%' WITH GRANT OPTION;
select user, host from mysql.user;
これで再起動して動くようになった。
benchちょっと改善
{"pass":true,"score":191,"messages":[],"reason":"OK","language":"nodejs"}
↓
{"pass":true,"score":232,"messages":[],"reason":"OK","language":"nodejs"}
とりあえず App と DB のインスタンスを分離できた。chair, estateを分離するまではできなかったが、同様の手順でやって、App に複数 MySQL を接続できるように変更すればできるだろう。
