ISUCON11に参加してきました
会社の同僚2人とISUCON11に参加したので雑記
普段全くインフラを触らず、ubuntu、nginx、mysqlの知識もないけどインフラやるぞ、となった人がどういう所でつまづくのかが書いてあるかも
当日まで
- ISUCON9予選をまっさらなubuntuでbench叩ける状態にした
- appとdbのサーバーを分けられるようにした
- 計測に必要そうなツールを調べておいた
- nginx.confとmysql.confの辺りは少し見ておいた
当日の自分の動き方
- みんなで予選当日マニュアルとアプリケーションマニュアルの読み合わせをしつつAWSにインスタンスを立てる
- trelloにあらかじめ作っておいたTODOリストを確認し誰がどれをやるをざっくり決める
- インスタンスにgitを入れてpush
- mysqlでスロークエリを吐き出してメモ
- シンボリックリンクを
/etc/mysql/mariadb.conf.d/50-server.cnf
につけてgitで見れるようにした - mysql.confの
bind-address
を0.0.0.0
にしてどこからでも接続できるようにした(コメントアウトするだけでいいらしい) - appとdbのインスタンスに分ける
- main.goとsql/init.sh、env.shの
MYSQL_HOST
をinstanceのpublic IPを指定して嵌る - SSH接続のPORT転送を使ってmysqlの接続権限の確認をしたり、↑で設定したものが反映されているか確認するが原因分からず
- AWSのコンソールをぼーっと眺めていたら、ふとセキュリティ的にpublic IPではなくprivate IPじゃないとダメなのではと気付き修正して無事接続できた
- main.goとsql/init.sh、env.shの
- ベンチが「ユーザーは増えませんでした」「評判が悪化してユーザーが増えなくなりました」のような悲しいコメントを吐いていたので対応せねばという気持ちになり調査したが原因分からず
- ベンチ叩きながらhtopでインスタンスの状態を見てappかdbのインスタンスどちらを増やすか悩んでいたがどちらもCPU使用率が同じぐらいだったのでappを2台にしようとnginxの設定をいじる
- nginxの設定をガチャガチャ弄っていたが全然反映されず心が折れる(後で気づくがhttp(80)の設定を弄っていた)
- nginx.confが他にもあって優先順位的に上書きされているのではと思い調べていくとhttps(443)の設定がされているファイルを発見して編集 (17:50くらい)
- locationとserverとupstreamの書く位置が間違っておりハマった
- 最初設定してインスタンス再起動、ベンチ叩くで動作確認していたが
sudo nginx -t
でvalidationチェックできることがわかり↑のミスに気付く - ISUCONの終了時間が45分遅くなりギリギリapp×2とdb×1の編成で23696が出る
- 使用していないprocessが走らない設定を入れたり、謎processを
kill -9 PID
でお掃除
残り時間後5分ちょいで0点を出すと頭が真っ白になりますね…
練習と本番の違いで苦しんだこと
- AWSのサーバのセキュリティグループの設定をガバガバで実装していた為、private IP使わないといけないことに気づくのに時間溶けた
- 起動時にgoを自動で走らせており、どこにログが吐かれているのか分からずデバッグができなかった
- killして手動で実行しようとしようとしたがENVが読み込めず
感想
去年はイスを温める人になっていたので今年は貢献できて嬉しい。
ISUCONは青春ですね。夏を感じました。