本番サイトでTraefikをセットアップしようとしていますが、高可用性の問題に悩んでいます。 Traefikクラスターの前にリバースプロキシがまだ必要だと思います。私が検討した潜在的なセットアップと、リバースプロキシが必要と思われる理由は次のとおりです。
負荷分散とフェイルオーバーのために、各Traefikノードを指すようにDNS Aレコードをセットアップします。
this SO question および this SF question を含む複数のサイトによると、この方法は推奨されません。
DNSMadeEasyのようなサービスを使用する場合でも、DNSキャッシュとTTL問題があるため、推奨されません。
1つのDNSレコードがTraefikを実行しているノードの1つを指すようにします。
そのノードはSPOFになります。私のノードはCoreOSで実行されており、更新のたびに再起動するため、毎週数分のダウンタイムが発生することが保証されます。
ダウンタイムが予想されるときはいつでも、DNSレコードを代替ノードに移動できます。これは手動で管理するのは面倒です。これを自動的に処理するlocksmithdと組み合わせたソリューションを想像できますが、実際には構築したくなく、予期しないダウンタイムを処理しません。
Docker Swarm(またはKubernetes)を使用する根拠の一部は、ノードを交換可能にすることです。
ロードバランサー/リバースプロキシをTraefikクラスターの前に置きます。リバースプロキシは、すべてのTraefikノード間にフェイルオーバーを提供でき、DNSはリバースプロキシをポイントします。
私は何かを逃したり、これを考えすぎていますか?
ソリューションにはさまざまな種類があります。
1)Swarm/Kubernetesクラスターの前に独自のHAロードバランサーを構築して、トラフィックを分散し、フェイルオーバーを実行します。
さまざまなアプライアンスがたくさんあります。
このアプローチはHAですが、通常は安くはありません。
これのより安価な代替案は、Nginx/Haproxy + Keepalivedセットアップです。
ただし、もちろんフローティングIPが必要であり、arpキャッシュを処理する必要があります。
2)「Cloud Loadbalancer」を利用します。 Digital Ocean、AWS、GKE、Openstackはすべてこのような機能を提供します。 (ほとんどの場合)セットアップは簡単ですが、安価な場合は計算する必要があります。
DigitalOceanでは、LBはわずか20ドルであり、Kubernetesクラスターを管理するベータ版があります。調べてみてください。すべてのコンポーネントがしっかりと接続されているhttps://www.digitalocean.com/products/kubernetes/
3)アプリが100%重要ではない場合、これまでに使用した特別なソリューションを提案できます。
Cloudflare +低TTL + https://github.com/Berndinox/cloudflare-ddns
簡単に動作します: https://github.com/Berndinox/compose-v3-collection/blob/master/wordpress/www.yml 方法:スピンアップWordPressとDNSコンテナを含むすべての要件。 DNSコンテナがCloudflareのドメインのDNSレコードを更新しています(コンテナが起動するホストによって異なります。IPは異なります)。 1つのホストが再起動された場合、またはコンテナーのヘルスチェックが失敗した場合、コンテナーは再スケジュールされます。再スケジュールされ、最初に取得されたホストがオフラインの場合、コンテナは別のホストで開始され、新しいIPをCloudflareにプッシュします。それはすべて、何もせずに自動的に行われます。 :)
Cloudflare TTLは非常に低いため、数秒のダウンタイムが発生する可能性があります。