このようなパンデミックの時代には、従来の教育システムが利用できなくなったときにリモートで学習を継続できるようにするために、学習管理システム(LMS)プラットフォームの重要性がますます高まっています。
高可用性のないLMSプラットフォームを使用すると、障害が発生した場合に問題が発生する可能性があります。データベースを常に利用できるようにしないと、システムを実行し続けるためのすべての努力が意味をなさないためです。
>このブログでは、Canvas LMSと呼ばれる人気のあるLMSアプリケーションと、PostgreSQLとClusterControlを使用して高可用性の方法でそれをデプロイする方法を紹介します。
Canvasとは何ですか?
Canvasは、Webベースの学習管理システム(LMS)です。これは、学習機関、教育者、および学生がオンラインコースの学習資料にアクセスして管理し、スキルの開発と学習の成果について伝達するために使用されます。
Canvasには、カスタマイズ可能なさまざまなコース作成および管理ツール、コースとユーザーの分析と統計、および内部コミュニケーションツールが含まれています。
CanvasLMSPostgreSQLデータベースの導入
まず、CanvasLMSアプリケーションで使用されるPostgreSQLクラスターをデプロイしましょう。このために、ClusterControlを使用して3つのPostgreSQLノード(1つのプライマリノードと2つのスタンバイノード)、およびキープアライブが構成された2つのHAProxyロードバランサーをデプロイします。
HAProxyは、1つの発信元から1つ以上の宛先にトラフィックを分散し、このタスクの特定のルールやプロトコルを定義できるロードバランサーです。いずれかの宛先が応答を停止すると、オフラインとしてマークされ、トラフィックは残りの利用可能な宛先に送信されます。
Keepalivedは、サーバーのアクティブ/パッシブグループ内で仮想IPアドレスを構成できるようにするサービスです。この仮想IPアドレスはアクティブなサーバーに割り当てられます。このサーバーに障害が発生した場合、IPアドレスは自動的に「セカンダリ」パッシブサーバーに移行され、システムに対して透過的な方法で同じIPアドレスを引き続き使用できるようになります。
では、ClusterControlを使用して前述のトポロジを実装する方法を見てみましょう。
ClusterControlから展開を実行するには、[展開]オプションを選択し、表示される指示に従います。
PostgreSQLを選択するときは、ユーザー、キーまたはパスワード、およびポートを指定する必要がありますSSHでサーバーに接続します。新しいクラスターの名前を追加したり、ClusterControlに対応するソフトウェアと構成をインストールさせたい場合もあります。
SSHアクセス情報を設定した後、データベースの資格情報を定義する必要があります、version、およびdatadir(オプション)。使用するリポジトリを指定することもできます。
次のステップでは、IPアドレスまたはホスト名を使用して作成するクラスターにサーバーを追加する必要があります。
最後のステップで、レプリケーションを同期にするか、同期するかを選択できます。非同期で、「デプロイ」を押すだけです
タスクが完了すると、新しいPostgreSQLクラスターがClusterControlのメイン画面。
これでクラスターが作成されたので、クラスターに対していくつかのタスクを実行できます。ロードバランサー(HAProxy)や新しいレプリカを追加するようなものです。
ロードバランサーの展開を実行するには、クラスターアクションで[ロードバランサーの追加]オプションを選択し、要求された情報を入力します。
必要なのは、IPまたはホスト名、ポート、ポリシー、および使用するノード。
キープアライブ展開を実行するには、クラスターアクションで[ロードバランサーの追加]オプションを選択してから、[キープアライブ]タブに移動します。
ここで、HAProxyノードを選択し、仮想IPアドレスを指定します。データベースへのアクセスに使用されます。
現時点では、次のトポロジが必要です。
次に、この環境をCanvasLMSに接続して高可用性を実現しましょう。
CanvasLMSを構成する方法
まず、インストールする必要があります。 Dockerでの自動セットアップを手動で使用するか、QuickStartや本番環境向けのインストールなどのさまざまなアプローチを使用するなど、さまざまな方法があります。公式ドキュメントを確認して、最適な方法を選択できます。
Canvas LMSをインストールしたら、デプロイしたばかりのPostgreSQL高可用性環境を使用するようにdatabase.ymlファイルを構成できます。
$ cat config/database.yml
production:
adapter: postgresql
encoding: utf8
database: canvas_production
host: VIRTUAL_IPADDRESS
username: CANVAS_USER
password: CANVAS_PASSWD
timeout: 5000
ここで、置き換えます:
-
VIRTUAL_IPADDRESS Keepalivedで構成された仮想IPアドレスの場合
-
CANVAS_USER Canvasデータベースユーザーの場合
-
CANVAS_PASSWD Canvasデータベースのパスワード
仮想IPアドレスをホストとして使用してデータベースにアクセスでき、pg_hba.confPostgreSQL構成ファイルで許可されていることを確認してください。アプリケーションサーバーから次のコマンドを実行してテストできます。
$ psql -h VIRTUAL_IPADDRESS -U CANVAS_USER canvas_production
ClusterControl自動回復機能
では、問題は、展開プロセスとは別に、ここでのClusterControlの役割は何ですか?
障害が発生した場合、ClusterControlは最も高度なスタンバイノードをプライマリに昇格させ、問題を通知します。また、スタンバイノードの残りの部分をフェイルオーバーして、新しいプライマリサーバーから複製します。
デフォルトでは、HAProxyは読み取り/書き込みと読み取り専用の2つの異なるポートで構成されています。読み取り/書き込みポートでは、プライマリノードがオンラインで、残りのノードがオフラインであり、読み取り専用ポートでは、プライマリノードとスタンバイノードの両方がオンラインです。
HAProxyは、ノードの1つにアクセスできないことを検出すると、自動的にそのノードをオフラインとしてマークし、トラフィックの送信を考慮しません。検出は、デプロイメント時にClusterControlによって構成されたヘルスチェックスクリプトによって実行されます。これらは、インスタンスが稼働しているかどうか、回復中かどうか、または読み取り専用かどうかを確認します。
ClusterControlがスタンバイノードをプロモートすると、HAProxyは両方のポートで古いプライマリをオフラインとしてマークし、プロモートされたノードを読み取り/書き込みポートでオンラインにします。
システムが接続する仮想IPアドレスが割り当てられているアクティブなHAProxyに障害が発生した場合、KeepalivedはこのIPアドレスをパッシブなHAProxyに自動的に移行します。これは、システムが正常に機能し続けることができることを意味します。
このブログでは、Canvas LMSプラットフォームで使用する高可用性PostgreSQL環境の重要性と、ClusterControlがデプロイメントタスクと自動リカバリタスクの両方でどのように役立つかについて説明しました。また、高可用性を目的としてHAProxyとKeepalivedを追加することにより、この環境を改善する方法についても説明しました。