monolog

monora log #=> ものろーぐ

Infrastructure カテゴリのアーカイブ

ISUCON12 予選に参加しました (最終スコア15532点)

Infrastructure Programming

2022年7月23日 (土) に開催された ISUCON12 の予選に「DJ起床失敗とMC布団 w/o MC布団」として id:h-otter と参加しました。

言語は Go、最終スコアは15532点参考スコアを上から数えると45位だったようです。悔しい。
具体的な取り組みは下の方で述べますが、MySQL移行はバグなく完遂し、さてここからチューニングしていくぞ!という感じのところで終わりました。エンジンが掛かるまでの速度が足りなかった。

毎回、運営の皆様にはいくら感謝しても足りませんが、今回も取り組みがいのある問題で楽しかったです。ベンチマーカーも最後まで待ち時間がほぼなく、スコアも安定していたのでとてもストレスフリーでした。ありがとうございました。

マルチテナントで大量の SQLite3 データベースがあることが分かったとき、ISUCON本を読んだだけの人間には解かせないってことね!と思いながらニコニコしました。

ところで知り合いがたくさん著者に名を連ねているISUCON本ですが、予選の2週間前に購入し、予選開始1時間前に部屋から発掘されました。
30分ぐらいで流し読みしたのですが、大変実利的な内容に溢れているなあと感じました。nginx の upstream で keep-alive を有効にする方法は知らなかった……

read more »

そろそろ Kubernetes 入門する (1)

Cloud Native

いい加減クラウドネイティブっぽいことをやりたいと言い出して早数年、世の中の流れには完全に乗り遅れた感がありますが、今更入門することにしました。

この記事を書いている時点で、すでにこのブログが構築したクラスタ上で動いているところまでは来ていますが、ゆっくり備忘録がてらまとめていくことにします。

ただkubeadmでシングルノードで立てても面白くないよね、ということで、色々と試してみることにしました。

  1. 実験のしやすさを考慮してVMの上に建てる
    1. VM基盤は n0stack を使う
  2. 可能な範囲でちゃんと冗長化する
  3. ちゃんとアプリケーションを乗っける
  4. 完全なお遊び用のクラスタは別に作る

あたりを基本方針にしました。

ホストについて

さて、まずサーバはどうするかという問題がありました。現代なので冗長化するなら3台欲しいので、お手軽かつ高速なマシンが3台必要でした。

また、過去にも同じことをやろうとして、秋葉原で安く売っていたサーバ(通称赤鯖)を3台買ってはいましたが、CPUもRAMも足りない && ファンの音がうるさいということで放置されて早3年が経過したので、次は静かなマシンが良かったわけです。

というわけで安くて速くて静かでRAMが積めるマシンを検討した結果、 Lenovo の M75q Tiny Gen2 を購入しました。定番ですね。Ryzen 7はコアが多くて速い。
ただ、予算の都合でまだ2台しか買えてません。

購入後の感想ですが、静かで小さいので自室の足元に置いても気にならずかなり満足しています。CPU使うと流石にファン回って気になりますけどね。

一方で、色々構築をすすめるにつれ、ストレージが256GBだと足りないか? と思うことがあり、SATAのSSDを追加することを検討しています。
ストレージ足すなら別に小さい必要はなかったのでは……という気持ちがあり、 V55t Mini-Tower とかでも良かったのでは……という気持ちに。計画性がない。

ストレージをどうするか問題は常に付きまといますね。後述するかもしれませんが、現在は、このクラスタとは別に以前から運用していた FreeBSDサーバに刺さっている雑なディスクをミラーリングしてNFS共有しています。RDBMSとかやろうとするとiSCSIの方が良いかもしれない……

OSは雑に Ubuntu 20.04 Server を選択。

n0stack

今回のVM基盤です。別にlibvirtでもOpenStackでもなんでも良いのですが、構築が楽 & 動作が軽くて、コードはなんとなく分かるので気になったら自分で直せるし、ぐらいの気持ちで選択しました。

n0tsack は 友人の @h-otter が主となって開発していて、過去には ICTトラブルシューティングという大会で数百VM規模で動いた実績があります。紹介記事は本人が書いてるので読んでください。

n0stackの紹介 – h-otterの備忘録

https://h-otter.hatenablog.jp/entry/2019/09/22/164251

https://github.com//n0stack/n0stack を眺めて、 n0core と n0cli があれば動くことが分かったので適当にやります。

VMを起動する/管理する本体である n0core は、全体の管理をする api とQEMU等を制御する agent からなります。
データストアは api にいて、デフォルトでは設定不要の LevelDB を使用します。LevelDB は特にデーモン等が不要のDBで、api が動くホストの /var/lib/n0core あたりに勝手に保存されます。
冗長化したければ etcd も使えます、が構築時点では
etcd or LevelDB を使っていて、デフォルトだと LevelDB を使うので、特にDBの設定は不要です。雑に GitHub の README を見てデプロイします。

VMのセットアップはあまり考えずにドキュメントを参照すれば良い、と思いきやハマりました。QEMUの仕様が変わったらしい? https://github.com/n0stack/n0stack/pull/239 で解決。そのうちマージします。

適当な Ubuntu が起動することを確認したところで一旦ここまで。(ホスト名は k8s-0X だが別に Kubernetes は動いていない)


Cisco IOS で tftp を使ったアップロードが Permission denied で怒られる件

Infrastructure

家の回線をv6プラスにしたところ、外側から特定のポートへアクセスさせたいような用途、つまりこのブログを自宅サーバーから提供することができないことに変更してから気が付いた。
しばらくは FreeBSD で PPPoE を終端して遊んでいたが、うっかりご家庭用のルータであるところの Cisco C891FJを買ってしまった。

とりあえずIOSのバックアップをすべく copy コマンドで自宅のサーバへ IOS をアップロードしようとした。しかし、Permission denied と怒られてアップロードに成功しなかった。

tftp (具体的には tftpd-hpa) サーバでの tftp 127.0.0.1 によるアップロード/ダウンロードはできる。何かがおかしい……

read more »

ISUCON9 予選の参加ログ (チーム: 再起動非対応)

Infrastructure Programming

こんばんは、kyontanです。

前回再起動試験で落ちたのでチーム「再起動非対応」で参加しました。ベストスコアは4410点でした。再起動試験までたどり着けなかった……悔しい……

チーム「再起動非対応」は同期3人 (自分 @kyontan, @hogashi, @h-otter) での参加でした。学生は2人いたはずですがエントリーをミスったので学生は1人ということになっています。

read more »

YubiKey 5C を買ったので ECDSA鍵で ssh した

Infrastructure Software

こんにちは。唐突に YubiKey が欲しくなったので買いました。こんなことをやっている場合ではない……

正確には、Amazon.co.jp を見たら異常に高くてそりゃ転売したら儲かるな、という気持ちになったので、適当に人を募って Amazon.com (US) で共同購入しました。
関税や送料を足した結果、YubiKey 5 NFC が5500円, YubiKey 5C が6100円ぐらいで買えました。良かったですね。

YubiKey といえばそもそも OTP が出てくるキーボードとして認識されるデバイスですが、最近だと WebAuthn で使えたりしますね。あとは PKCS#11 の署名用や適当な鍵を登録できたりします。

雑に手元の macOS でssh するぞ、と思ったら地味にハマってしまったのでいろいろやった結果動くようになったのでメモ

手順だけ分かればおっけー!という方は Gist にパッチ等まとめたので、そちらを参照してください: https://gist.github.com/kyontan/763952e7be68a2e96d5c3f0ad0d3bce8

read more »