SourceFundを選択して寄付を受け取りました。序章クラスタリングは、変更をさまざまなサーバーに分散することにより、データベースに高可用性を追加します。インスタンスの1つに障害が発生した場合、他のインスタンスはすぐにサービスを継続できます。クラスターには、アクティブ-パッシブとアクティブ-アクティブの2つの一般的な構成があります。アクティブ-パッシブクラスターでは、すべての書き込みは単一のアクティブサーバーで実行され、アクティブサーバーに障害が発生した場合にのみ引き継ぐ準備ができている1つ以上のパッシブサーバーにコピーされます。一部のアクティブ-パッシブクラスターでは、パッシブノードでのSELECT操作も許可されます。アクティブ-アクティブクラスターでは、すべてのノードが読み取り/書き込みであり、1つに加えられた変更がすべてに複製されます。SQLデータベースで人気のあるオープンソースのリレーショナルデータベース管理システムです。同期レプリケーションを使用してマルチマスタークラスターをセットアップできるデータベースクラスタリングソリューションです。Galeraは、クラスター内の任意のノードに読み取りおよび書き込みクエリを送信できるようにしながら、さまざまなノードのデータの同期を自動的に処理します。Galeraの詳細については、公式のドキュメントページをご覧ください。このガイドでは、アクティブ-アクティブMySQLGaleraクラスターを構成します。デモンストレーションの目的で、クラスター内のノードとして機能する3つのUbuntu18.04ドロップレットを構成してテストします。このノード数は、構成可能な最小のクラスターです。前提条件フォローするには、以下に加えて、DigitalOceanアカウントが必要です。プライベートネットワークが有効になっている3つのUbuntu18.04ドロップレット。それぞれ、sudo権限を持つroot以外のユーザーがいます。3つのドロップレットでプライベートネットワークを設定するには、プライベートネットワーククイックスタートガイドに従ってください。sudo権限を持つroot以外のユーザーのセットアップについては、Ubuntu18.04を使用したサーバーの初期セットアップのチュートリアルに従ってください。このチュートリアルの手順は、DigitalOceanドロップレット用に作成され、テストされていますが、それらの多くは、プライベートネットワークが有効になっている非DigitalOceanサーバーにも適用できます。ステップ1—すべてのサーバーにMySQLリポジトリを追加するこのステップでは、関連するMySQLおよびGaleraパッケージリポジトリを3つのサーバーのそれぞれに追加して、このチュートリアルで使用する適切なバージョンのMySQLおよびGaleraをインストールできるようにします。sources.このチュートリアルでは、MySQLバージョン5.7を使用します。Galeraプロジェクトによって維持されている外部Ubuntuリポジトリを3つのサーバーすべてに追加します。3つのサーバーすべてでリポジトリが更新されると、Galeraと一緒にMySQLをインストールする準備が整います。3つのサーバーすべてで、apt-keyコマンドを使用してGaleraリポジトリキーを追加します。これは、APTパッケージマネージャーがパッケージが本物であることを確認するために使用します。BC19DDBA数秒後、次の出力が表示されます。1各サーバーのデータベースに信頼できるキーを取得したら、リポジトリを追加できます。これを行うには、各サーバーの/etc/apt/sources.list.d/ディレクトリ内にgalera.listという名前の新しいファイルを作成します。/etc/apt/sources.list.d/galera.listテキストエディタで、次の行を追加します。これにより、適切なリポジトリがAPTパッケージマネージャーで使用できるようになります。X、Y、ENTERの順に押します)。これで、Codershipリポジトリを3つのサーバーすべてで使用できるようになりました。Galeraクラスターの作成に必要なパッチが適用されたバージョンのソフトウェアが確実にインストールされるように、aptに他のリポジトリよりもCodershipのリポジトリを優先するように指示することが重要です。これを行うには、各サーバーの/etc/apt/preferences.d/ディレクトリ内にgalera.prefという別の新しいファイルを作成します。/etc/apt/preferences.d/galera.pref次の行をテキストエディタに追加します。1001そのファイルを保存して閉じてから、各サーバーで次のコマンドを実行して、新しいリポジトリからのパッケージマニフェストを含めます。update3つのサーバーすべてにパッケージリポジトリが正常に追加されたので、次のセクションでMySQLをインストールする準備が整いました。ステップ2—すべてのサーバーにMySQLをインストールするこのステップでは、MySQLパッケージを3台のサーバーにインストールします。3つのサーバーすべてで次のコマンドを実行して、Galeraで動作するようにパッチが適用されたバージョンのMySQLとGaleraパッケージをインストールします。mysql-wsrep-5.7インストールを続行するかどうかを確認するように求められます。Yと入力して、インストールを続行します。インストール中に、MySQL管理ユーザーのパスワードを設定するように求められます。強力なパスワードを設定し、ENTERを押して続行します。MySQLをインストールしたら、デフォルトのAppArmorプロファイルを無効にして、公式のGaleraドキュメントに従ってGaleraが正しく機能するようにします。セキュリティプロファイルを介してサービスのアクセス制御機能を提供するLinux用のカーネルモジュールです。各サーバーで以下を実行して、AppArmorを無効にします。/etc/apparmor.d/disable/このコマンドは、MySQLプロファイルのシンボリックリンクをdisableディレクトリに追加します。これにより、起動時にプロファイルが無効になります。次に、次のコマンドを実行して、カーネルにすでにロードされているMySQL定義を削除します。/etc/apparmor.d/usr.sbin.mysqldMySQLをインストールし、最初のサーバーでAppArmorプロファイルを無効にしたら、他の2つのサーバーに対してこれらの手順を繰り返します。3つのサーバーのそれぞれにMySQLが正常にインストールされたので、次のセクションの構成手順に進むことができます。ステップ3—最初のノードを構成するこのステップでは、最初のノードを構成します。クラスター内の各ノードは、ほぼ同じ構成である必要があります。このため、最初のマシンですべての構成を行い、それを他のノードにコピーします。デフォルトでは、MySQLは/etc/mysql/conf.dディレクトリをチェックして、.cnfで終わるファイルから追加の構成設定を取得するように構成されています。最初のサーバーで、クラスター固有のすべてのディレクティブを使用して、このディレクトリにファイルを作成します。/etc/mysql/conf.d/galera.cnf次の構成をファイルに追加します。構成では、さまざまなクラスターオプション、クラスター内の現在のサーバーと他のサーバーに関する詳細、およびレプリケーション関連の設定を指定します。構成内のIPアドレスは、それぞれのサーバーのプライベートアドレスであることに注意してください。強調表示された行を適切なIPアドレスに置き換えます。Configurationwsrep_node_address="This_Node_IP"wsrep_node_name="This_Node_Name"最初のセクションは、クラスターが正しく機能できるようにするMySQL設定を変更または再アサートします。GaleraはMyISAMまたは同様の非トランザクションストレージエンジンでは動作しません。mysqldをlocalhostのIPアドレスにバインドしないでください。設定の詳細については、GaleraClusterシステム構成ページを参照してください。「Galeraプロバイダーの構成」セクションは、WriteSetレプリケーションAPIを提供するMySQLコンポーネントを構成します。Replication)プロバイダーであるため、あなたの場合はGaleraを意味します。一般的なパラメーターを指定して、初期レプリケーション環境を構成します。これにはカスタマイズは必要ありませんが、Galera構成オプションの詳細についてはドキュメントを参照してください。「Galeraクラスター構成」セクションはクラスターを定義し、IPアドレスまたは解決可能なドメイン名でクラスターメンバーを識別し、メンバーが正しいグループに参加できるようにクラスターの名前を作成します。wsrep_cluster_nameをtest_clusterよりも意味のあるものに変更するか、そのままにしておくことができますが、wsrep_cluster_addressを3台のサーバーのプライベートIPアドレスで更新する必要があります。Galera同期構成セクションは、クラスターがメンバー間でデータを通信および同期する方法を定義します。これは、ノードがオンラインになったときに発生する状態転送にのみ使用されます。これは、一般的に利用可能であり、今必要なことを実行するためです。ガレラノード構成セクションは、現在のサーバーのIPアドレスと名前を明確にします。これは、ログの問題を診断したり、各サーバーを複数の方法で参照したりする場合に役立ちます。wsrep_node_addressは、使用しているマシンのアドレスと一致する必要がありますが、ログファイルでノードを識別しやすくするために、任意の名前を選択できます。クラスタ構成ファイルに問題がなければ、内容をクリップボードにコピーしてから、ファイルを保存して閉じます。最初のノードを正常に構成したので、次のセクションで残りのノードの構成に進むことができます。ステップ4—残りのノードを構成するこのステップでは、残りの2つのノードを構成します。2番目のノードで、構成ファイルを開きます。Configurationを更新して、設定している特定のノードのIPアドレスまたは解決可能なドメイン名を使用します。最後に、その名前を更新します。これは、ログファイルでノードを識別するのに役立つ名前に設定できます。.ファイルを保存して終了します。これらの手順を完了したら、3番目のノードで繰り返します。クラスタを起動する準備はほぼ整っていますが、起動する前に、ファイアウォールで適切なポートが開いていることを確認してください。ステップ5—すべてのサーバーでファイアウォールを開くこのステップでは、ノード間通信に必要なポートが開くようにファイアウォールを構成します。すべてのサーバーで、次のコマンドを実行してファイアウォールのステータスを確認します。statusこの場合、SSHのみが許可されます。(v6)この場合、SSHトラフィックのみが許可されるため、MySQLおよびGaleraトラフィックのルールを追加する必要があります。クラスタを起動しようとすると、これらのファイアウォールルールが原因で失敗します。Galeraは4つのポートを利用できます。3306mysqldumpメソッドを使用するMySQLクライアント接続および状態スナップショット転送の場合。4567ガレラクラスターレプリケーショントラフィック用。マルチキャストレプリケーションは、このポートでUDPトランスポートとTCPの両方を使用します。4568インクリメンタル状態転送用。4444他のすべての状態スナップショット転送用。この例では、セットアップ中に4つのポートすべてを開きます。レプリケーションが機能していることを確認したら、実際に使用していないポートをすべて閉じて、トラフィックをクラスター内のサーバーのみに制限する必要があります。次のコマンドでポートを開きます。4567/udp注:サーバーで実行されている他の機能によっては、すぐにアクセスを制限したい場合があります。andCommandsガイドがこれに役立ちます。最初のノードでファイアウォールを構成した後、2番目と3番目のノードで同じファイアウォール設定を作成します。ファイアウォールを正常に構成したので、次のステップでクラスターを開始する準備が整いました。ステップ6—クラスターを開始するこのステップでは、MySQLGaleraクラスターを起動します。systemdサービスを有効にして、サーバーが再起動されるたびにMySQLが自動的に起動するようにします。systemdサービスを有効にするには、3つのサーバーすべてで次のコマンドを使用します。mysql次の出力が表示されます。これは、サービスがスタートアップサービスリストに正常にリンクされたことを示しています。/lib/systemd/system/mysql.service.mysqlを有効にしてすべてのサーバーで起動を開始したので、クラスターを起動する準備が整いました。最初のノードを起動します最初のノードを起動するには、特別な起動スクリプトを使用する必要があります。クラスタを構成した方法で、オンラインになる各ノードは、galera.cnfファイルで指定された少なくとも1つの他のノードに接続して、初期状態を取得しようとします。mysqlは失敗します。最初のサーバーで次を実行します。mysqld_bootstrapこのコマンドは、正常に実行されても出力を表示しません。このスクリプトが成功すると、ノードはクラスターの一部として登録され、次のコマンドで確認できます。'wsrep_cluster_size'"パスワードを入力すると、クラスター内に1つのノードがあることを示す次の出力が表示されます。|+--------------------+-------+残りのノードでは、mysqlを通常どおり起動できます。オンラインのクラスターリストのメンバーを検索し、メンバーが見つかるとクラスターに参加します。2番目のノードを起動しますこれで、2番目のノードを起動できます。mysql正常に実行されても出力は表示されません。各ノードがオンラインになると、クラスターサイズが増加します。'wsrep_cluster_size'"次の出力は、2番目のノードがクラスターに参加し、合計で2つのノードがあることを示しています。|+--------------------+-------+3番目のノードを起動します次に、3番目のノードを起動します。mysql次のコマンドを実行して、クラスターサイズを見つけます。'wsrep_cluster_size'"次の出力が表示されます。これは、3番目のノードがクラスターに参加し、クラスター内のノードの総数が3つであることを示しています。|+--------------------+-------+この時点で、クラスター全体がオンラインになり、正常に通信しています。次に、次のセクションでレプリケーションをテストすることにより、動作するセットアップを確認できます。ステップ7—レプリケーションのテストこれまでの手順を実行して、クラスターが任意のノードから他のノードへのレプリケーション(アクティブ-アクティブレプリケーションと呼ばれる)を実行できるようにしました。このステップでは、レプリケーションが期待どおりに機能しているかどうかをテストして確認します。最初のノードに書き込む最初のノードでデータベースを変更することから始めます。次のコマンドは、playgroundというデータベースと、equipmentというこのデータベース内のテーブルを作成します。DATABASEステートメントはplaygroundという名前のデータベースを作成します。CREATEステートメントは、playgroundデータベース内に、idという自動インクリメント識別子列とその他の列を持つequipmentという名前のテーブルを作成します。type列、quant列、およびcolor列は、それぞれ機器のタイプ、数量、および色を格納するために定義されています。INSERTステートメントは、タイプslide、数量2、および色blueのエントリを挿入します。これで、テーブルに1つの値があります。2番目のノードでの読み取りと書き込み次に、2番目のノードを調べて、レプリケーションが機能していることを確認します。playground.equipment;'最初のノードに入力したデータが2番目のノードに表示され、レプリケーションが機能していることが証明されます。|+----+-------+-------+-------+この同じノードから、クラスターにデータを書き込みます。"yellow");'3番目のノードでの読み取りと書き込み3番目のノードから、テーブルを再度クエリすることにより、このすべてのデータを読み取ることができます。playground.equipment;'2つの行を示す次の出力が表示されます。+----+-------+-------+--------+ここでも、このノードから別の値を追加できます。"green");'最初のノードで読む最初のノードに戻ると、データがどこでも利用できることを確認できます。playground.equipment;'次の出力が表示されます。これは、行が最初のノードで使用可能であることを示しています。+----+--------+-------+--------+これで、すべてのノードに書き込むことができ、レプリケーションが適切に実行されていることを正常に確認できました。結論この時点で、動作する3ノードのGaleraテストクラスターが構成されています。実稼働環境でGaleraクラスターを使用することを計画している場合は、5つ以上のノードから始めることをお勧めします。その他の状態スナップショット転送(sst)エージェントを確認することをお勧めします。これにより、新しいノードをすばやく、大規模にセットアップすることができます。アクティブノードへの中断。これは実際のレプリケーションには影響しませんが、ノードが初期化されるときに問題になります。MySQLの他のクラスタリングソリューションにも興味があるかもしれません。Ubuntu18.04でマルチノードMySQLクラスターを作成する方法チュートリアルを確認できます。マネージドデータベースソリューションを試してみたい場合は、DigitalOceanマネージドデータベースのドキュメントを参照してください。Joseモバイルバージョンに。