データベースの自動化は、複雑で時間のかかるタスクをシンプルかつ高速にするのに役立ちます。自動化のために最も一般的かつ簡単に特定されるタスクは、時間がかかるが反復的なタスクです。これらはしばしば生産性を消費し、これらのタスクに取り組む人々に支払う必要があるため、会社の財務に影響を与える可能性があります。ただし、時間と労力が不必要に消費されるプロセスを仮想自動化に変換できるため、退屈で疲れ果てた作業を回避できます。
データベースの自動化は、データベース管理者とサーバー管理者の一般的な慣習であり、これらを合わせて現在DevOpsとして知られています。 DevOpsは、DBAとサーバー管理タスクの組み合わせも指します。昔ながらの方法では、従来の一般的な自動化タスクは一連のSQLステートメントまたは.sqlファイルとして記述され、スクリプトを介してサーバーを展開およびプロビジョニングし、暗号化/復号化を設定し、自動化が想定される環境のセキュリティを活用します。走る。ここで、自動化は人をスクリプトに置き換える会社の例ではありません。物事をスピードアップし、より少ないエラーでより速くタスクを完了するためのアシスタントとして存在します。自動化は、DBAがタスクを実行する方法や、会社全体または組織全体に提供できる価値に取って代わることはできません。
Puppet、Chef、Ansible、SaltStack、TerraformなどのInfrastructure as Code(IaC)向けの高度なツールは、バックアップと復元、フェイルオーバー、展開など、簡単に複製できるタスクをDBAが完了するのに役立ちます。新しいクラスター、セキュリティ設定の調整、OSカーネルとデータベースのパフォーマンスの調整など。自動化の助けを借りて、多くのDBAは、従来のアプローチを使用するよりも簡単にするこれらのIaCツールを利用するために、データドメイン固有のタスクに焦点を当てることから、コーディング方法もカバーするようにスキルを向上またはシフトしました。現在、会社のユーザーアカウント、ログの管理、インスタンスのデプロイ、サーバーの管理など、クラウド内のアセットの管理を容易にするツールもあります。ビッグ3のクラウドプロバイダーのクラウド向けツールには、AWS CloudFormation、Azure Resource Manager、Google Cloud Deployment Managerが含まれ、DBAまたはDevOpsが自動化の力を活用して処理を高速化できるようにします。これは、組織や会社の幹部だけでなく、あなたのサービスに依存している顧客にも感銘を与えます。
何を自動化する必要がありますか?
前述のように、データベースの自動化はDBA、サーバー管理者、さらにはDevOpsにとって目新しいものではありません。自動化するかどうかを躊躇したり疑問視したりする理由はありません。先に述べたように、自動化のために簡単に特定できる一般的なケースは、本質的に反復的なタスクです。
以下では、DBAの観点から公理的なものを列挙します。
-
サーバーのプロビジョニング(例:vagrantの使用、dockerの開始、Kubernetesの開始などのVMインスタンスの開始プラットフォーム)およびSSHアクセスのセットアップまたはVPNアクセスのセットアップ
-
新しいデータベースクラスターの導入
-
データベースプロバイダーの種類、セットアップの種類(プライマリ/スタンバイ、マスターマスターレプリケーション、同期)を特定しますレプリケーション)
-
-
既存のデータベースクラスターをインポートする
-
既存のデータベースを現在のデータベースクラスターにデプロイ/インポートする
-
自動フェイルオーバーまたはスイッチオーバー
-
ノードまたはクラスターの自動回復
-
レプリカ/スレーブの昇格またはマスターの降格
-
ロードバランサー(ProxySQL、HaProxy、pgpool、pgbouncer、MaxScale、Keepalivedなど)の導入
-
バックアップと復元
-
データベース監視環境をセットアップします(たとえば、Prometheusなどのエージェントベースの監視を展開します)
-
セキュリティ調整を有効にする
-
環境のタイプに応じて自動最適化と調整を実行します
-
他のサードパーティ統合へのアラートシステムを有効にする
-
アラートまたはアラームと通知を生成する
-
グラフなどのレポートを生成する
-
クエリ分析のためにクエリログ(遅いログ)を処理する
-
クエリ分析を生成
-
データベースのアーカイブまたはクリーンアップ
もちろん、自動化できるケースはたくさんありますが、これには最も一般的なタスクがリストされており、それらを自動化することは間違いありません。これらは本質的に反復的なタイプのタスクであり、特に時間の制約のために迅速に実行する必要がある場合、大部分はエラーが発生しやすくなります。
自動化してはいけないことは何ですか?
これらの領域は、DBAまたはSysAdminsがほとんどの作業を行う場所です。自動化できないものに関しては、自動化はDBAのスキルセットとインテリジェンスに取って代わることはできません。
DBAは、次のことを深く理解している必要があることを理解しています。使用しているデータベースと展開されるデータベース。処理および保存されているデータ。そして、それらが処理されている方法が安全であるかどうか、またはそれが会社のセキュリティ基準に準拠しているかどうか。 DBAもレビューし、ほとんどの場合、自動化アーキテクトと同様にDevOpsと見なされます。彼らは何をしなければならないか、何をしないかを指示します。自動化してはならない一般的なものは次のとおりです。
-
スケジュールされたバックアップの設定。スケジュールされたバックアップはもちろん自動化されており、それに応じて実行する必要がありますが、必要なスケジュールされた日付または期間は、サーバーが実行する低ピーク時間に基づいている必要があります。たとえば、クラスターが日中にビジー状態の場合、バックアップを取ることはできません。提供しているアプリケーションの種類や地理的な場所によっては、サーバーが夜間にまだビジー状態である場合もよくあります。
-
自動フェイルオーバーは、新しいマスターの昇格に失敗しました。これは最も重要なケースの1つであり、よく理解する必要があります。フェイルオーバー用に設計された自動スクリプトがある場合は、フェイルオーバーが失敗した場合に強制的にフェイルオーバーを実行するように設計しないでください。主な問題が何であるかわからない場合があります。障害が発生した場合は、次のようなトランザクションが発生する可能性があります。何よりも先に回復する必要があります。たとえば、失敗したマスターに保存された金融トランザクションであり、強制的にスレーブを昇格させたいが、候補スレーブが最新のトランザクションを複製できなかった可能性があります。その場合、データが破損する可能性があります。
-
データリカバリ。もちろん、データの破損が発生した場合、またはクラスターがノード/サーバーの自動回復から回復できない場合は、主な原因を調査する必要があります。将来それを回避するために、RCA(根本原因分析)のためにこれを文書化する必要があります。ただし、障害が使用しているデータベースソフトウェアのバグである場合や、VMが破損している可能性がある場合があります。
-
データのドリフトまたはデータの不整合。これは、自動化にとって理想的な状況ではありません。オートマトンがデータを一般化またはステレオタイプ化して、「データが破損している場合は自動的に修正しましょう」という概念を適用する方法にしたくない場合。それは間違いなく良い習慣ではありません。決定する前に、最初に理解して調査しなければならないケースがたくさんあります。たとえば、MySQLには、pt-table-checksumと呼ばれるPerconaツールがあり、次にpt-table-syncがあります。これらのツールは、データの不整合を修正する際に相互に相関関係があります。データをよく知っているか、データが広範でないか、データを再生成できない限り、これを自動化することは絶対に避けたいでしょう。
-
カーネルチューニングとデータベースチューニング。もちろん、これは私たちが上で述べたことと矛盾していると見ることができます。ただし、メモリ、バッファプール、HugePages、仮想メモリパラメータなど、特定の種類の環境で知られている自動調整可能な変数があります。ただし、変更を適用するかどうかを決定する前に、理解、調査、テスト、ベンチマークが必要なパラメータは間違いなくたくさんあります。
確かに、自動化してはいけないことがたくさんありますが、ここでは触れませんでした。データベースの世界では、提供しているデータとアプリケーションのタイプに応じて、さまざまな状況が発生します。そのことを念頭に置き、自動化できることに注意してください。そうしないと、自動化によって破壊が発生する可能性があります。
ここから、自動化スクリプトを開始できます。自動化の最も重要な要素はスピードです!速度に関しては、ツールがタスクを完了する速度ではなく、スクリプトまたはIaCの開発者または保守者がツールにどれだけ慣れているかによって測定されます。確かに、これらの自動化ツールには長所と短所があります。さらに重要なのは、これらの自動化ツールの仕様を決定することです。これは、単なる自動化以外にも提供できるものがたくさんあるためです。より一般的には、構成管理と展開のメカニズムを提供します。
自動化とは、速度、つまり、従来のアプローチを使用したり、独自の言語スクリプトを使用したりする場合とは対照的に、速度が重要です。もちろん、独自のスクリプトを使用することもできますが、組織や会社が技術を進歩させる場合は、Ansible、Puppet、Chef、SaltStack、Terraformなどのサードパーティツールを使用するのが理想的です。なぜそれがより理想的ですか?これらのサードパーティツールは、実行するための長くて長いタスクを打ち負かすように設計されており、数行のコードで実行できます。
たとえば、Terraformは移植性の利点で知られています。想像してみてください。Terraformを使用すると、Google Cloud、AWS、OpenStack、その他のクラウドのインフラストラクチャを記述するための1つのツールと1つの言語があります。別のプロバイダーに切り替える場合は、スクリプトを変更またはやり直す必要はありません。また、フルスタックデプロイが可能になります。これには、Kubernetesコンテナの管理も含まれます。 1つのツールから、多くのことができると想像してみてください。
データベースの自動化を開始するときは、自動化の目標は速度であるため、最初から始めないでください。繰り返しになりますが、速度はここではジョブを完了する速度ではなく、従来のアプローチや手動タスクと比較して測定されます。もちろん、ジョブを完了するまでの速度はすべて異なります。たとえば、スクリプトの一部によって、大量の処理されたデータと長いジョブの実行により、長い遅延が発生する可能性があります。
ツールを選択するときは、誇大広告や、聞いたことがある中で最も人気のあるものに頼らないでください。前述の主流のツールは主にコミュニティに受け入れられていますが、複雑さももたらします。たとえば、Ansibleを使用する場合は、YAMLに精通している必要がありますが、PuppetまたはChefを使用する場合は、Rubyとその基盤となるドメイン固有言語に精通している必要があります。
ClusterControlは、手動によるアプローチの必要性を排除する多くの自動化されたタスクを提供します。 ClusterControlは、組織、企業、DBA、SysAdmins、DevOps、さらには開発者がデータベース操作を簡単に行えるように設計されています。その目標は、実行時間の長い反復的なタスクを自動化することです。 ClusterControlの大きな利点は、成熟したデータベース管理ツールであり、データベースサーバーを管理するための非常に強力な広範な機能を備えていることです。また、データベースを管理するための最新の業界標準のベストプラクティスを適用します。私たちはお客様の要求に耳を傾け、それを実現する機能を実装します。
-
データベースサーバーの導入。プロバイダーを選択し、適切なバージョンを指定し、クラスターのタイプを決定し、ユーザー名、パスワードなどのサーバーのホスト名/IPを指定します。
-
既存のサーバーのClusterControlへのインポート
-
クラウドでの導入
-
データベースの状態の監視とレポート
-
アラートと通知
-
バックアップと復元
-
バックアップ検証
-
自動フェイルオーバー、スイッチオーバー
-
高可用性の設定
-
スレーブを昇格させるか、マスターを降格させます
-
クラスターに新しい/既存のレプリカを追加する
-
別のクラスターを別のクラスターのスレーブとして拡張する(災害復旧のための地理的なセットアップに最適)
> -
ノードとクラスターのリカバリ
-
LDAP統合
-
サードパーティのアラート通知
-
ロードバランサーの広範なリスト(pgbouncer、ProxySQL、MaxScale、HAProxy、Keepalived、garbd)のいずれかの導入)
-
Prometheusエクスポーターを使用したエージェントベースの監視の導入
-
クエリ分析
-
セキュリティ調整
-
OSカーネルとデータベースパラメーターの自動調整
これらすべてに加えて、ClusterControlには、DBAまたはDevOpsが独自のスクリプトを作成してClusterControlPerformanceAdvisorsに統合できるようにする組み込みのアドバイザーもあります。
データベースの自動化は、複雑でありながら反復的なタスクを高速化するのに役立ちます。これは、DBAがさまざまなタスクを迅速に進め、関連する作業の範囲に応じてスキルを向上させるのに役立ちます。データベースの自動化により、DBAはより革新的になり、データベースを快適に管理できるようになります。データベースの自動化は、DBAの役割に取って代わるものではありません。特に災害が発生した場合は、データベースを管理するための熟練した賢い人が常に必要になります。データベースの正常性と寿命を管理するためのDBAスキルを信頼しながら、常にDBAが推奨するツールに依存します。