オープンソースデータベースのユーザーは、多くの場合、本番データベース環境を管理するためにツールと自社開発のスクリプトを組み合わせて使用する必要があります。ただし、ソリューションに独自の独自のスクリプトがある場合でも、それを維持し、新しいデータベース機能、セキュリティ要件、またはアップグレードに対応することは困難です。 MySQL 8.0を含むデータベースの新しいメジャーバージョンでは、このタスクはさらに困難になる可能性があります。
ClusterControlの中心となるのは、新しいデータベースの展開、新しいノードの追加とスケーリング、バックアップの管理、高可用性とフェイルオーバー、トポロジの変更、アップグレードなど、定期的に実行する必要のあるデータベースタスクを自動化できる自動化機能です。自動化された手順は正確で一貫性があり、再現性があるため、本番環境での変更のリスクを最小限に抑えることができます。
さらに、ClusterControlを使用すると、MySQLユーザーはベンダーロックインの対象ではなくなります。最近多くの人から質問されたもの。さまざまなMySQLバージョンとベンダーを単一のコンソールから無料でデプロイおよびインポートできます。
この記事では、バトルテスト済みの構成でMySQL 8.0をデプロイし、自動化された方法で管理する方法を紹介します。方法は次のとおりです:
- ClusterControlのインストール
- MySQLデプロイメントプロセス
- 新しいクラスターを展開する
- 既存のクラスターをインポートする
- MySQLのスケーリング
- MySQLの保護
- 監視と傾向分析
- バックアップとリカバリ
- ノードとクラスターの自動リカバリ(自動フェイルオーバー)
ClusterControlのインストール
ClusterControlを開始するには、専用の仮想マシンまたはホストが必要です。ここでは、VMとサポートされているシステムの要件について説明します。ベースVMは、オンプレミスまたはクラウドのいずれかで、2 GB、2コア、ディスクスペース20GBのストレージスペースから開始できます。
インストールについてはドキュメントで詳しく説明されていますが、基本的には、手順を説明するインストールスクリプトをダウンロードします。ウィザードスクリプトは、内部データベースをセットアップし、必要なパッケージ、リポジトリ、およびその他の必要な調整をインストールします。インターネットにアクセスできない環境では、オフラインインストールプロセスを使用できます。
ClusterControlには、データベースホストへのSSHアクセスが必要であり、監視はエージェントベースまたはエージェントレスにすることができます。管理はエージェントレスです。
すべてのターゲットノード(ClusterControlおよびすべてのデータベースホスト)にパスワードなしのSSHを設定するには、ClusterControlサーバーで次のコマンドを実行します。
$ ssh-keygen -t rsa # press enter on all prompts
$ ssh-copy-id -i ~/.ssh/id_rsa [ClusterControl IP address]
$ ssh-copy-id -i ~/.ssh/id_rsa [Database nodes IP address] # repeat this to all target database nodes
クラスタ制御を試す最も便利な方法の1つは、Dockerコンテナで実行するオプションかもしれません。
docker run -d --name clustercontrol \
--network db-cluster \
--ip 192.168.10.10 \
-h clustercontrol \
-p 5000:80 \
-p 5001:443 \
-v /storage/clustercontrol/cmon.d:/etc/cmon.d \
-v /storage/clustercontrol/datadir:/var/lib/mysql \
-v /storage/clustercontrol/sshkey:/root/.ssh \
-v /storage/clustercontrol/cmonlib:/var/lib/cmon \
-v /storage/clustercontrol/backups:/root/backups \
severalnines/clustercontrol
デプロイが成功すると、{ホストのIPアドレス}:{ホストのポート}でClusterControl Web UIにアクセスできるようになります。例:
HTTP: http://192.168.10.100:5000/clustercontrol
HTTPS: https://192.168.10.100:5001/clustercontrol
導入とスケーリング
MySQL8.0をデプロイする
ClusterControlインターフェースに入ったら、最初に行うことは、新しいデータベースをデプロイするか、既存のデータベースをインポートすることです。新しいバージョン1.7.2では、バージョン8.0のOracleCommunityEditionおよびPerconaServerのサポートが導入されています。このブログを書いている時点で、現在のバージョンはOracle MySQLServer8.0.15およびPerconaServerforMySQL8.0-15です。 [データベースクラスターのデプロイ]オプションを選択します 」と表示される指示に従います。
ClusterControl:データベースクラスターのデプロイMySQLを選択するときは、SSHでサーバーに接続するために、ユーザー、キー、またはパスワードとポートを指定する必要があります。また、新しいクラスターの名前と、ClusterControlに対応するソフトウェアと構成をインストールさせる場合も必要です。
SSHアクセス情報を設定した後、データベースにアクセスするためのデータを入力する必要があります。使用するリポジトリを指定することもできます。リポジトリの構成は、データベースサーバーとクラスターにとって重要な側面です。 ClusterControlを使用してデータベースサーバー/クラスターをデプロイする場合、3種類のリポジトリを使用できます。
- ベンダーリポジトリを使用する
データベースベンダーの優先ソフトウェアリポジトリを設定して使用することにより、ソフトウェアをプロビジョニングします。 ClusterControlは、データベースベンダーリポジトリによって提供されるものの最新バージョンをインストールします。 - ベンダーリポジトリを設定しないでください
ノードにすでに設定されている既存のソフトウェアリポジトリを使用して、ソフトウェアをプロビジョニングします。ユーザーは各データベースノードでソフトウェアリポジトリを手動で設定する必要があり、ClusterControlはこのリポジトリを使用してデプロイします。これは、データベースノードがインターネットに接続せずに実行されている場合に適しています。 - ミラーリポジトリを使用する(新しいリポジトリを作成する)
現在のデータベースベンダーのリポジトリを作成してミラーリングしてから、ローカルのミラーリングされたリポジトリを使用してデプロイします。これにより、ソフトウェアパッケージの現在のバージョンを「フリーズ」することができます。
次のステップでは、作成するクラスターにサーバーを追加する必要があります。サーバーを追加するときは、IPまたはホスト名を入力してから、ネットワークインターフェイスを選択できます。後者の場合、DNSサーバーが必要であるか、MySQLサーバーをClusterControlのローカル解決ファイル(/ etc / hosts)に追加して、追加する対応する名前を解決できるようにする必要があります。
画面には、1台のマスターサーバーと2台のスレーブサーバーを使用した展開例が表示されます。サーバーリストは動的であり、初期インストール後に拡張できる高度なトポロジを作成できます。
ClusterControl:トポロジを定義するすべてが設定されたら、デプロイボタンを押します。 ClusterControlアクティビティモニターから、新しいレプリケーションセットアップの作成ステータスを監視できます。デプロイプロセスでは、perconatoolkitやpercona-xtradb-backupなどの一般的なmysqlツールのインストールも処理されます。
ClusterControl:クラスターの詳細をデプロイするタスクが完了すると、ClusterControlのメイン画面とトポロジビューにクラスターが表示されます。データベースインスタンスの前にロードバランサー(ProxySQL)も追加したことに注意してください。
ClusterControl:トポロジ画像でわかるように、クラスターを作成したら、トポロジーセクションから直接クラスターに対していくつかのタスクを実行できます。
ClusterControl:トポロジ管理新しいクラスターをインポートする
ClusterControlにインポートすることにより、既存のセットアップを管理するオプションもあります。このような環境は、ClusterControlまたは他のメソッド(puppet、chef、ansible、docker…)によって作成できます。プロセスは単純で、専門知識は必要ありません。
ClusterControl:既存のクラスターをインポートしますまず、サーバーへのSSHアクセスクレデンシャルを入力する必要があります。次に、データベース、サーバーデータディレクトリ、およびバージョンへのアクセス資格情報を入力します。デプロイするときと同じように、IPまたはホスト名でノードを追加し、[インポート]を押します。タスクが完了すると、ClusterControlからクラスターを管理する準備が整います。この時点で、ノードまたはクラスターの自動回復のオプションを定義することもできます。
MySQLのスケーリング
ClusterControlを使用すると、サーバーにサーバーを追加するのは簡単な手順です。 GUIまたはCLIからそれを行うことができます。上級ユーザーの場合は、ClusterControl Developer Studioを使用し、リソースベースの条件を記述してクラスターを自動的に拡張できます。
セットアップに新しいノードを追加する場合、既存のバックアップを使用するオプションがあるため、追加の作業で本番マスターノードを圧倒する必要はありません。
ClusterControl Scaling MySQLロードバランサー(ProxySQL、Maxscale、HAProxy)の組み込みサポートを使用すると、MySQLノードを動的に追加および削除できます。 MySQLレプリケーションとクラスタリングを管理するための最良の方法についてさらに詳しく知りたい場合は、MySQLレプリケーションforHAレプリケーションのホワイトペーパーをお読みください。
MySQLの保護
MySQLには、箱から出してすぐに使用できるセキュリティはほとんどありません。これは最近のバージョンで改善されていますが、製品グレードのシステムでは、デフォルトのmy.cnf構成でまだtweeksが必要です。
ClusterControlは人為的エラーを取り除き、一連のセキュリティ機能へのアクセスを提供して、データベースをハッキングやその他の脅威から自動的に保護します。
ClusterControlは、MySQL接続のSSLサポートを有効にします。 SSLを有効にすると、アプリケーション(ClusterControlを含む)とデータベース間の通信に別のレベルのセキュリティが追加されます。 MySQLクライアントは、データベースサーバーへの暗号化された接続を開き、機密情報を転送する前にそれらのサーバーのIDを確認します。
ClusterControlは、すべてのデータベースノードでの証明書の作成を含む、必要なすべての手順を実行します。このような証明書は、後で[キー管理]タブで管理できます。
ClusterControl:マネージャーSSLキーPerconaサーバーのインストールには、監査プラグインの追加サポートが付属しています。継続的監査は、データベース環境を監視するための必須のタスクです。データベースを監査することにより、実行されたアクションまたはアクセスされたコンテンツに対する説明責任を達成できます。さらに、監査には、SOXなどの一連の正確な規制やEU GDPR規制をサポートするための財務データに関連するコンポーネントなど、いくつかの重要なシステムコンポーネントが含まれる場合があります。ガイド付きプロセスでは、監査対象と監査ログファイルの保守方法を選択できます。
ClusterControl:PerconaServer8.0の監査ログを有効にする監視
データベースシステムを使用する場合は、それらを監視できる必要があります。これにより、傾向を特定したり、アップグレードや改善を計画したり、発生する可能性のある問題やエラーに効果的に対応したりできます。
新しいClusterControl1.7.2には、MySQL8.0の更新された高解像度モニタリングが付属しています。 PromQLクエリ言語のデータストアとしてPrometheusを使用しています。ダッシュボードのリストには、MySQLサーバー一般、MySQLサーバーキャッシュ、MySQL InnoDBメトリック、MySQLレプリケーションマスター、MySQLレプリケーションスレーブ、システム概要、およびクラスター概要ダッシュボードが含まれます。
ClusterControlは、Prometheusエージェントをインストールし、メトリックを構成し、GUIを介してPrometheusエクスポーター構成へのアクセスを維持するため、エクスポーター(Prometheus)のコレクターフラグなどのパラメーター構成をより適切に管理できます。最近監視できるものについては、PrometheusとClusterControlを使用してMySQLを監視する方法の記事で詳しく説明しました。
ClusterControl:ダッシュボード警告
データベースオペレーターとして、データベースで重大な問題が発生した場合は常に通知を受ける必要があります。アラートを取得するためのClusterControlの3つの主な方法は次のとおりです。
- メール通知
- 統合
- アドバイザー
メール通知はユーザーレベルで設定できます。 [設定]>[メール通知]に移動します 。重要度と送信するアラートの種類のどちらかを選択できる場所。
ClusterControl:通知次の方法は、統合サービスを使用することです。これは、特定のカテゴリのイベントをServiceNowチケット、Slack、PagerDutyなどの他のサービスに渡して、組織内で高度な通知方法と統合を作成できるようにするためのものです。
ClusterControl:統合最後の1つは、インテリジェントなチェックとトリガーを作成できるAdvisorセクションに高度なメトリック分析を含めることです。
ClusterControl:自動アドバイザバックアップとリカバリ
MySQLが稼働し、監視が行われたので、次のステップであるデータのバックアップがあることを確認します。
ClusterControl:バックアップの作成ClusterControlは、スケジューリングとクリエイティブレポートをサポートするMySQLバックアップ管理のインターフェイスを提供します。バックアップ方法には2つのオプションがあります。
- 論理:mysqldump
- バイナリ:xtrabackup / mariabackup
優れたバックアップ戦略は、データベース管理システムの重要な部分です。 ClusterControlは、バックアップとリカバリ/復元のための多くのオプションを提供します。
ClusterControl:バックアップスケジュールとバックアップリポジトリClusterControlのバックアップ保持は構成可能です。バックアップを任意の期間保持するか、バックアップを削除しないかを選択できます。 AES256暗号化は、不正な要素からバックアップを保護するために採用されています。迅速な復旧のために、バックアップを新しいクラスターに直接復元できます。ClusterControlは、新しいデータベースセットアップの起動からデータの復旧までの完全な復元プロセスを処理し、エラーが発生しやすい手動の手順をプロセスから削除します。
バックアップは完了時に自動的に検証され、クラウドストレージサービス(AWS、Azure、Google)にアップロードされます。データセンターのローカルバックアップとクラウドにアップロードされたバックアップに対して、さまざまな保持ポリシーを定義できます。
ノードとクラスターの自動回復
ClusterControlは、障害の検出と処理の高度なサポートを提供します。また、さまざまなプロキシをデプロイしてHAスタックと統合できるため、アプリケーションを新しいマスターノードにリダイレクトするためにアプリケーション接続文字列やDNSエントリを調整する必要がありません。
マスターサーバーがダウンすると、ClusterControlは自動フェイルオーバーを実行するジョブを作成します。 ClusterControlは、すべてのバックグラウンド作業を実行して、新しいマスターを選択し、フェイルオーバースレーブサーバーを展開し、ロードバランサーを構成します。
ClusterControl:ノードの自動回復ClusterControlの自動フェイルオーバーは、次の原則に基づいて設計されました。
- フェイルオーバーする前に、マスターが本当に死んでいることを確認してください
- フェイルオーバーは1回のみ
- 一貫性のないスレーブにフェイルオーバーしないでください
- マスターにのみ書き込む
- 障害が発生したマスターを自動的に回復しないでください
組み込みのアルゴリズムを使用すると、多くの場合、フェイルオーバーを非常に迅速に実行できるため、データベース環境で最高のSLAを保証できます。
プロセスは高度に構成可能です。これには、環境の詳細にリカバリを採用するために使用できる複数のパラメータが付属しています。さまざまなオプションの中には、replication_stop_on_error、replication_auto_rebuild_slave、replication_failover_blacklist、replication_failover_whitelist、replication_skip_apply_missing_txs、replication_onfail_failover_scriptなどがあります。