黄金週間最終日は、のんびりカフェ飯しながらのblogや読書、しょっさんです。
ひとまず、いつの間にか新しくなった、わがoshiire*BLOGに正しく投稿されたり、設定した機能がちゃんと使えるかを試すために書いている、という理由が95%です。
目次
WordPress が Rancher 上で動いたぞー
ようやく、それなりの性能を提供しながら WordPress が Rancher上で稼働するに至りました。知っている人であれば、「Rancher から WordPress の Stack選べば3秒やんけ」と思われるかもしれませんが、次のことを実現したかったので、手間を少しかけました。
- スケールアウト(+負荷分散)させたい
これが実現できると、付加価値として「 ローリングメンテナンス 」が実現できたり、障害時の対応も余裕になって日々ビクビクしながら生きることがなくなります。素晴らしい。ただ、そのためには各Docker間でストレージが共有できている必要があり、ここが一番のキーポイントというか、それさえなんとかなればそれだけです。後は、わたし自身が Rancherに慣れればよいだけなのです。
実現された構成
先に Rancher で構成された結果をご覧ください。
負荷分散装置がいて、新規に作った WordPress 側と、過去のレガシーな遺産のWebサーバ側とすべてを一つの入口に集約しました。「 old-web 」という External Service が過去のサーバへのアクセスパスの指定です。Rancher の HAProxyからは登録されたコンテナアプリしか分散対象に含められませんから、間に Alias を入れてます。 haproxy.cfg を直接いじれば、 oshiire-lb から直接、外部のWebサーバへと接続できるかもしれませんが、手動の設定を最小限化するために、このようにしてみました。
実際のホストとコンテナの関係は次のようになっています。
背景色がグレーの「 docker00 」「 docker01 」「 docker02 」がdockerホスト(サーバ)です。これらは proxmox 上で稼働しているゲストVMです。したがって、物理的にはまたちがう配置ですが、今回は気にしない。これらすべてのホストは、一つの「 Rancher 」で管理されています。実態としては、もう一つ Rancher Server 用のホストがいますが、稼働とは関係ないのでさっぴいときます。
各ホスト内の白い箱が個々のコンテナです。各ホストのどこにアクセスされても良いように、全てに “load balancer“を配置しています。ほか、実際に “wordpress” の動くコンテナと “maria db” が稼働しているコンテナとあります。これらは、その時の気分次第で、Rancher によってスケジューリングされて、適当なところに配置されて動きます。そして、これらはどこで動いても良いように、共有されているNFSのマウントポイントをマウントします。
昨日、「Rancher/RancherOS を二日間さわりまくって発生した課題 」でも触れたように、Rancher-NFS は使っていません。代わりにnfs-clientをつかって、各dockerホストにマウントし、各コンテナはそのマウントされたディレクトリを volume として間接的にアクセスする方法を取っています。これだけで、Rancher-nfs を経由したときと比較して、最大で100倍早くなるという恐ろしい出来事が発生しています。最低でも10倍は速くなってますね。
特別なことをしたのはその辺だけで、それ以外は、一般的な、dockerhub で公開されている公式の docker imageを使っています。やり方さえわかっていれば、構成するだけなら15分とかからずできるかと。一番の問題は、Wordpress のデータ移行か…。10年近くかけて作り上げたデータベースの所為で、なかなかうまいことデータベースごと移行できなくてひどい目に会いました(´・ω・`)
rancher を使ってみて
ようやく、Rancher を使って、一つの Stackを準備して実際にサービスを提供できるところまでやり遂げられました。黄金週間ヽ(´ー`)ノバンザイ
とは言え、Herokuでも度々起こることですが、より単純化して使いやすくなったサービスは、訓練されたカスタマイズに弱いです。今回も、ただ共有のストレージを使いたいというだけで、ドハマリして、結局 3日くらいを費やしてしまった結果となっています。今は過渡期であって、Rancher-NFSも遅すぎるとか、Longhornはまだですかとか、様々な壁にぶち当たってここにやってきました。
まぁそれでも、まともに一つ一つのサーバを作っていったら、黄金週間など 3つや4つあってもできあがらない可能性もあるので、ホント楽になったなという印象です。あとは、ログまわりを統一化したり、古いサーバで動いているサービスも全部こっちへ寄せたりすることが近々の目標です。
あと、Rancher だけで開発や本番環境などを定義して分離できるので、「今どの環境だっけ」みたいな恐怖からも脱却できるので助かります。ここまで、一つも docker コマンドを使わずに、一つのサービスを実現できたのはインフラ屋さんにとっての未来ですね。Herokuで足りないところを埋めるパーツは、このあたりだと思います。楽しみにしてます。