このエントリーをはてなブックマークに追加

rancherの冗長化について

rancherにコンテナを立ち上げる前に。 今回の環境でのrancherの冗長化戦略について考えてみる。

外部アクセスに対する冗長性

まず、外部からの接続に対してその接続先が健全なノードであることを保証できなければ、サービス提供もままならないので、この問題を考えてみる。 前提として、外部からアクセスが来るということは、DNSで名前を引いて、そのIPアドレスにアクセスしてくるということを指すと思うのでこれを前提に考えると、 大きく2つの方法があると思う。

    1. floating ip(vrrp等)使って、どこかに故障があったとしてもDNSで引けたそのアドレスは大丈夫にする。
    1. そもそも、故障があったノードのIPアドレスはDNSで引けなくする。 (DNSによるfailover)

結論から言ってしまえばどちらも可能。DNSに関してはrancherのヘルスチェックとの連携でいい感じにしてくれるけど、ちょっとした罠がある。

1のパターンを考えてみる。

    1. dockerの管理外にkeepalivedを立ててvrrpする。-> もう何もかもrancherの外。インフラとして事前に設定しておく必要がある。
    1. keepalivedが起動するコンテナをrancherで管理する。 -> コンテナだけはrancher管理。networkingにはhostを指定する必要ある。

2のパターンを考えてみる。

    1. 障害検出機能とDNSを連動させる。-> rancherのヘルスチェック情報をDNSに連携するものがrancherのカタログにある。
    1. awsのroute 53とか使う。 -> もう何もかもrancherの外。お金もかかる。

アドレスがたくさんある人やグローバルが同じサブネットにある人は1ができると思う。 今回の環境だと、さくらVPSでvrrpのような冗長化はサブネットも違うためやりづらい。 2のパターンのほうが無難。2-bはお金がかかるので躊躇。

2-aを考えた場合、ちょっとした罠がある。 rancherのヘルスチェック情報とDNSの連携をさせる機能はrancherのネットワーク内で完結するため、途中の経路のネットワークの健全性をみれていない。 つまり、途中のFWやネットワークが不安定だったりした場合は一切検出できない。また、プロセスが腐ってる場合もちゃんと監視していないと検出できないから注意が必要。

本来は、外から監視て、ちゃんとサービス提供がなされていることを確認すべきだと思う。 というわけで、まだ完成してないけど、外部から監視して、PowerDNSのレコードを更新するものを作ってる。 最終的にrancherカタログにするつもり。

ノードの停止に対する冗長性

ホストが死んだら、そのホストのしごとを別のホストが引き継いでくれる必要がある。 rancherはちゃんと死んだホストにいたコンテを別のホストに動かしてくれる。 ラベル等で特定のホストにバインドしてる場合は無理。

しかし、ここには罠がある。 実は、rancher serverがその管理をしているようで、rancher serverが死んでいた場合。別のホストへの移動が発生しない。 なので、rancher serverは実は結構重要で、冗長化しておくことをお勧めする。

本来、rancher serverが健全性の維持の役目を担うのではなく、健全性の維持は環境内で完結するべきだと思う。 この辺りは、今後のrancherのバージョンアップに期待。

ストレージの冗長化

ストレージに関しては、ホストのディスクをそのまま使うと、ディスクやホストが死んだときに困るので単純に使うのはやめたほうがいい。 sakura vpsであることを考えると、ここは積極的に分散ストレージを使うのがよさそうなのでglusterfsを使うことにした。 glusterfsならnfsをマウントするより、fuseクライアントでマウントして、マウントした先をdockerに見せてあげれば、耐障害性的にいいと想う。

name:
email:
comment: