sql >> データベース >  >> RDS >> Mysql

MySQLレプリケーションを使用したMoodleの高可用性データベースの構築

    Moodleはオープンソースの学習管理システムであり、世界中の学校や大学で広く使用されています。このプロジェクトは、学習者、教師、教育者に、学習環境のための安全で堅牢なオープンで無料のプラットフォームを提供することを目的として、MartinDougiamasによって2002年に開始されました。

    ソフトウェア自体はPHPで記述されており、Oracle、MySQL、PostgreSQL、MariaDBなどのさまざまなRDBMSをサポートしています。

    このブログでは、高可用性Moodleデプロイメントをサポートするために必要なMySQLレプリケーションを使用してMoodleデータベースを回復力のあるものにする方法について説明します。 ClusterControlを介して、冗長データベースロードバランサーが前面にあるマスター/スレーブMySQLレプリケーションで構成されるデータベースセットアップを展開します。

    アーキテクチャ

    MySQLレプリケーションは、データベースの冗長性を実現するための一般的な方法です。すべての書き込みがマスターに送信され、読み取りはスレーブ間で負荷分散できるようにすることが重要です。そのために、書き込みトラフィックの分割とマスターへの送信を処理するデータベース対応のロードバランサーであるProxySQLを使用します。マスターの役割は別のサーバーに移動できるため、たとえばデータベースがクラッシュした場合、ProxySQLは新しいマスターを追跡し、それに応じて書き込みトラフィックがルーティングされるようにすることができます。 VirtualIPはKeepalivedによって管理され、すべてのMoodleアプリケーションサーバーに対して1つの復元力のあるデータベースエンドポイントを確保します。

    監視とフェイルオーバーの管理

    上の図では、2つのレプリカがマスターデータベースからスレーブ化されていることを示しています。マスターがクラッシュした場合、レプリカの1つが新しいマスターにプロモートされます。読み取り、バックアップ、レポートなどを処理するためのレプリカがまだ残っています。

    アプリケーション接続はデータベース接続文字列でVIP(仮想IPアドレス)を使用するため、データベース側で何かが発生した場合、アプリケーションからの影響を最小限に抑え、再構成する必要はありません。なんでも。 ClusterControlは、データベースを監視し、フェイルオーバーを自動化するコンポーネントです。たとえば、レプリカの1つを新しいマスターに昇格させ、障害が発生したデータベースサーバーを回復します。

    データベースのセットアップ

    ClusterControlを使用して、データベース設定を展開します。

    まず、ClusterControlセットアップ専用のサーバーが必要です。インストールは非常に簡単です。いくつかのリポジトリからinstall-ccをダウンロードし、ファイルの実行権限を付与して実行するだけです。以下に示すように:

    $ wget http://www.severalnines.com/downloads/cmon/install-cc
    
    $ chmod +x install-cc
    
    $ sudo ./install-cc   # omit sudo if you run as root

    上記のスクリプトは、あらゆる種類のLinuxバリアントで実行できます。 ClusterControlに必要なものはすべてデプロイされます。

    ClusterControlを起動して実行したら、ClusterControlダッシュボードから[デプロイ]ボタンを選択します。

    いくつかのオプションを示す新しいページが表示されます。 MySQLレプリケーションセットアップの最初のデプロイオプションを選択します。

    SSHを介してターゲットデータベースサーバーにアクセスする必要があります。パスワードなしのSSHを有効にし、ユーザーにsudoアクセスを許可することを忘れないでください。以下に示すように、クラスター名を定義して[続行]をクリックします。

    次のページで、データベースのベンダーを選択する必要があります。インストールするデータベースのバージョン、ルートパスワード、カスタムポートまたは特定のポートが必要な場合はサーバーポート、およびMySQLデータディレクトリ。

    すべての情報を入力したら、次の手順に進むことができます。これは、[トポロジの定義]ページです。 MyQLレプリケーションを1つのマスターと2つのレプリカでセットアップするため、データベースサーバーのIPアドレスを入力してください。

    デプロイすると、「クラスターの作成」を行うジョブがトリガーされます。ジョブが終了するまで待つ必要があります。

    ProxySQLのセットアップ

    データベースがデプロイされたら、クラスターメニューからロードバランサーを実行できます。 [管理]->[ロードバランサー]に移動してください。以下のように表示されます:

    ProxySQLを導入するには、IPアドレスなどの情報を入力する必要があります。 ProxySQL、管理および監視ユーザーのパスワードをインストールし、インスタンスの負荷分散を有効にします。その後、[デプロイ]をクリックするだけです。高可用性を実現するには、データベースの前に少なくとも2つのロードバランサーをインストールする必要があります。

    キープアライブセットアップ

    キープアライブサービスは、ロードバランサーの可用性を高めるために使用されます。セットアップは非常に簡単ですが、ロードバランサーページには、以下に示すようにキープアライブのタブがあります。

    ロードバランサーのデプロイのタイプを選択します。この場合、ProxySQLを使用します。 keepalivedのProxySQLサービスを選択します。仮想IPアドレスとネットワークインターフェイスを入力します。その後、[キープアライブのデプロイ]をクリックするだけで、サービスをセットアップするための新しいジョブが自動的にトリガーされます。

    アプリケーションのセットアップ

    moodleアプリケーションをセットアップする前に、ユーザー資格情報とデータベース自体を準備する必要があります。資格情報については、[管理]->[スキーマとユーザー]に移動できます。

    ユーザー名、パスワード、ホスト名、特権。その後、[ユーザーの作成]をクリックするだけです。これにより、moodleアプリケーションのユーザーを作成できます:

    データベースを作成するには、同じデータベースの[データベースの作成]タブを選択できます。ユーザーとしてのページ。

    次のステップは、ProxySQL側で資格情報を構成することです。インポートできます。 ProxySQLで作成した資格情報。 ProxySQLノードに移動し、[ユーザー]タブを選択すると、右側に[ユーザーのインポート]ボタンがあります。

    moodle_applicationユーザーを検索し、ユーザーを選択します。次のページで、ユーザーのデフォルトのホストグループを定義してから、ユーザーをインポートする必要があります。

    手順を繰り返して、他のProxySQLノードにユーザーをインポートするか、 ProxySQLメニューでインスタンスの同期を使用できます。

    moodleアプリケーションをmoodle公式ウェブサイトからダウンロードする必要があります(再.https ://download.moodle.org/)、このブログが書かれているときの最新バージョンは3.9.1です。これらは、圧縮されたzipとtarzipの2種類の圧縮ファイルを提供します。 zipファイルをダウンロードして、アプリケーションサーバーに配置します。 moodleソフトウェアの要件を確認してください。例:Webサーバー、PHPライブラリ。

    zipファイルをtempディレクトリに抽出し、/ var / www / html / moodleディレクトリを作成し、抽出したディレクトリをフォルダにコピーします。ディレクトリに許可0755を与えることを忘れないでください。その後、次のセットアップのためにWebブラウザにアクセスできます。以下に示すように言語を選択してください:

    MySQLセットアップ用のデータベースドライバーを以下のように選択します。

    以前に作成したデータベースクレデンシャル情報を入力する必要があります。例:ユーザー名、パスワード、ホスト、データベース、ポート。ホスト名は仮想IPアドレスで、ポートはProxySQLポート(6032)である必要があります。

    データベースホストは仮想IPアドレスになります。フィールドに入力したら、[次へ]をクリックして完了です。

    ClusterControlを使用してMoodleの高可用性データベースを構築することは非常に簡単で簡単です。99,99%のサービス稼働時間をサポートする独自のデータベースを構築できます。


    1. リストPostgresENUMタイプ

    2. MariaDBでのTIMESTAMP()のしくみ

    3. postgresqlでローカル変数を宣言する方法は?

    4. SQLFiddleは壊れていますか? Oracle、SQL Server、...のエラー