Skip to content

narusejun/isucon9-ansible

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

85 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

isucon9-prep

チーム NaruseJun

開発機にインストールしておくべきリスト

  • go (1.13)
  • ansible (2.7.12)
    • 多分2.8でも大丈夫だと思う!
  • sshpass
    • brew install http://git.io/sshpass.rb

最初にやることリスト

  • レギュレーションと当日マニュアルを読み込む
    • 得点計算周りをよく理解する。例年と大きく異なる場合は、施策のヒントになっているかも。
    • 外部連携APIの仕様も重要。何ができるかをよく把握しておく。
    • インスタンスのサイズ(メモリ、CPU)等も確認して共有。
  • DNSの設定
    • 環境に関するメモ → ドメイン を参照
  • ~/ssh/config の用意(推奨)
    • Host *
      	User (githubのユーザ名)
      	TCPKeepAlive yes
      	ForwardAgent yes
      	ServerAliveInterval 60
      	StrictHostKeyChecking no
      	UserKnownHostsFile /dev/null
      Host isu1
      	HostName isu1.sysad.net
      Host isu2
      	HostName isu2.sysad.net
      Host isu3
      	HostName isu3.sysad.net
      Host hq
      	HostName hq.sysad.net
      
  • Pythonをリモートに入れる(やらなくて良い)
    • Pythonが入ってないとansibleが動かない。python実装が存在するので、入っているはずだけど。
  • ログインユーザを作る
    • ansible-playbook playbooks/all.yml -t common.users-e ansible_ssh_user="isucon" -e ansible_ssh_pass="isucon"
    • その後のAnsibleも-t付きで実行することを推奨。環境がぶっ壊れたときのリカバリを早めるため。
      • 最初は-lもつけるべきかもしれない。
  • ソースコードと静的ファイル類をlocalへ持っていき、appリポジトリに上げる
    • tar zcvf ~/code.tar.gz /home/isucon/(ほげ)
    • upload_slack code.tar.gz (推奨)
      • fallback: rsync isu1:code.tar.gz . or scp isu1:code.tar.gz .
    • ソースコードと、静的ファイル類。例年はisuconユーザのホームディレクトリにおいてあった。
  • appリポジトリをいい感じにする
    • go.modの生成
    • 静的ファイルへの参照リンクを変更
    • 相対パスでスクリプトたたいてるやつがあったら修正
    • 8000/tcpでLISTENするように変更
  • DBをダンプしてlocalに持ってきておく
    • mysqldump -u (だれか) -p (DB名) > dump.sql && gzip dump.sql
    • 最初から初期データのダンプがおいてある場合もある。要確認。
  • 初期実装を止める

最終計測前チェックリスト

上から順に重要。

  • hq.sysad.netのPortForwarding系を止める
    • 🚨🚨🚨忘れると不正行為になる可能性アリ🚨🚨🚨
    • SSHでつないでいるため
  • Deploy Botを止める
    • 🚨🚨🚨忘れると不正行為になる可能性アリ🚨🚨🚨
    • SSHにつなぎにいくため
  • 再起動後、アプリが完動しているかを調べる
    • 再起動時に /etc/hosts が書き換わる場合があるので、要チェック
  • netdataを止める
    • systemctl disable netdata && systemctl stop netdata
  • slow_query_logを止める
    • /etc/mysql/mysql.conf.d/zz-isucon.cnf slow_query_log = OFF
  • nginx logを止める
    • /etc/nginx/nginx.conf access_log off;
  • pprofを止める
    • コードをいじってはがす

環境に関するメモ

ドメイン

IP直打ちでの(SSH|HTTP)アクセスではどれが何台目か混乱しがちなので、以下のドメインでアクセスする。 ただし、SSHについては別途ssh_configも用意することを推奨。

  • isu1.sysad.net
  • isu2.sysad.net
  • isu3.sysad.net

これらは、開始直後に手動で設定する。 各インスタンスの /etc/hosts は、内部接続を利用するように設定されているので、このドメインを使って内部の通信も行って良い。

Linux User

githubアカウントと同名。githubに登録済みの鍵でSSHログインできる。

アプリ

https://github.com/kaz/isucon9-app

リポジトリのトップに実行ファイルappを生成するMakefileをリポジトリトップに置くこと。後述のデプロイスクリプトはこれをキックする。 systemdで起動される。サービス名はapp.serviceである。必ず8000/tcpでLISTENすること。 環境変数を /home/kiritan/env から読み込むので、ココに書いておくと良い。

deploy

/home/kiritan/deploy.sh を使う。 sudo -i -u kiritanして、./deploy.shでビルド+アプリ再起動する。

※ これは下記のbotが叩いてくれるので、直接叩くのはトラブル時のみ。

deploy bot

Slackの#deployにいる。

isucon9-appリポジトリのmasterが更新されると、「デプロイしますか?」的な質問を飛ばす → そこからデプロイできる。 @kiritan deploy [commit-id or branch-name] [targets] で任意のタイミングでのdeployも可。

[commit-id or branch-name]を省略すると、origin/masterがデプロイされる。 [targets]は数字をコンマ区切りで指定する。1,3とするとisu1とisu3にデプロイされる感じ。省略すると全台。

MySQL User

githubアカウントと同名。パスワードはアカウント名と同じ文字列。 localhostからしか接続できない。SSHポートフォワードを使うか、SSHしてからmysqlする。

phpMyAdmin

DBのオペレーションをするやつ。一応負荷状況も見れる。 slowlogはテーブルに書くようになっているので、phpMyAdminでmysql.slow_logを確認すれば良い。

↓競技用インスタンス3台に接続しているphpMyAdmin

http://pma.hq.sysad.net/

myprofiler

DBに飛んできてるクエリを集計するやつ。

localのDBにつなぎに行くaliasが設定されているので、DBパスワードなどは気にしなくてOK。 その他のパラメータ → https://github.com/KLab/myprofiler

オススメ myprofiler | notify_slack

ショートカット集

一般ユーザでも勝手にsudoになるaliasが入れてあるので、一般ユーザでもふつうに叩ける。 ほか、以下のようなショートカットもあり。

ショートカット 展開後 備考
sc systemctl
sce systemctl status Examineのイメージ
scs systemctl start Start
sck systemctl stop Killのイメージ
scr systemctl restart Restart
scl systemctl reload reLoadのイメージ
scon systemctl enable ON
scof systemctl disable OFf
jc jounalctl
jcf jounalctl -f -u jcf nginx とかいう感じで使う
jcn jounalctl -n 100 -u
jcnn jounalctl -n 1000 -u nが長いイメージ
ppf go tool pprof -http :8080
pph go tool pprof -http :8080 http://localhost:8000/debug/pprof/profile

go

1.13 がインストールされている。

  • GOROOT /opt/go
  • PATH /opt/go/bin

kataribe

nginxのログファイルを集計して表示するやつ。

  • config /etc/kataribe.toml
コマンド 結果
kataru 統計を表示する
katarazu logを全削除する

オススメは kataru | slack_notify -snippet でSlackに飛ばしてから見る。

netdata

ホストの負荷状況を確認するやつ(GUI)

各ホストの 19999/tcp でLISTENしている。 以下のURLでもアクセスできる。(推奨)

dstat

ホストの負荷状況を確認するやつ(CUI) netdataがトラブったとき用に入れてある。

notify_slack

テキストをslackに投げるやつ。 #stdoutに上がる。

  • config /etc/notify_slack.toml

Example

uname -a | notify_slack
cat /proc/cpuinfo | notify_slack -snippet

upload_slack

ファイルをslackにアップロードするやつ。 #stdoutに上がる。

Example

upload_slack ./some_file

HTTPフォワード

以下のURLは各ホストの 8080/tcp につながるようになっている。 L7でフォワードしているので、HTTP限定。

python -m SimpleHTTPServer 8080 とか go tool pprof -http 0:8080 で使うことを想定。

About

Ansible playbooks for ISUCON9 quals

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published