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

MariaDBクラスターにMaxCtrlを使用したMaxScale基本管理-パート2-

    前回のブログ投稿では、MaxCtrlコマンドラインクライアントを使用した4つの基本的な管理コンポーネントについて説明しました。このブログ投稿では、MariaDBクラスターで一般的に使用されるMaxScaleコンポーネントの残りの部分について説明します。

      フィルター管理
    • MaxScale管理
    • ログ管理

    このブログ投稿のすべてのコマンドは、MaxScale2.5.3に基づいています。

    フィルター管理

    フィルタは、MaxScaleサービスの処理およびルーティングエンジンとして機能するMaxScaleのモジュールです。フィルタリングは、MaxScaleへのクライアント接続とバックエンドデータベースサーバーへのMaxScale接続の間で行われます。このパス(実際のデータベースサーバーへのMaxScaleのクライアント側)はパイプラインと見なすことができ、フィルターをそのパイプラインに配置して、パイプラインを流れるコンテンツを監視、変更、コピー、またはブロックできます。

    次の表に示すように、MaxScaleサービスの処理機能を拡張するために適用できるフィルターは多数あります。

    フィルター名 説明
    ビンログ

    binlogrouterサービスと組み合わせてバイナリログイベントをスレーブサーバーに選択的に複製します。

    キャッシュ

    SELECTの結果をキャッシュできる単純なキャッシュ。これにより、クエリがルーティングされることなく、後続の同一のSELECTがMaxScaleによって直接提供されます。サーバー。

    一貫したクリティカル読み取り

    重要でない読み取りのスケールアウトを許可しながら、MaxScaleを介して一貫した重要な読み取りを実行できるようにします。

    データベースファイアウォール

    一連のルールに一致するクエリをブロックします。このフィルターは、悪意のある攻撃ではなく、偶発的な誤用から保護することを目的としたベストエフォートソリューションと見なす必要があります。

    ヒント

    ルーティングヒントをサービスに追加し、特定のタイプのサーバーにクエリをルーティングするようにルーターに指示します。

    ストリームを挿入

    LOAD DATALOCALINFILEメカニズムを介してバックエンドサーバーによって消費されるCSVデータストリームに一括挿入を変換します

    ルア

    Luaスクリプトで一連の関数を呼び出します。

    マスキング

    特定の列の戻り値をわかりにくくします

    Maxrows

    SELECT、プリペアドステートメント、またはストアドプロシージャがクライアントアプリケーションに返すことができる行数を制限します。

    名前付きサーバー

    正規表現(regex)の一致に基づいてクエリをサーバーにルーティングします。

    すべてのクエリログ

    クエリの内容をCSV形式のファイルに記録します。

    正規表現

    正規表現の一致とテキスト置換を使用して、クエリコンテンツを書き換えます。

    ティー

    クライアントからのリクエストのコピーを作成し、そのコピーをMariaDBMaxScale内の別のサービスに送信します。

    スロットル

    データベースファイアウォールフィルターのlimit_queries機能を置き換えて拡張します

    トップ

    フィルターを通過する選択されたSQLステートメントのクエリパフォーマンスを監視します。

    トランザクションパフォーマンスの監視

    トランザクションごとにグループ化された、フィルターを通過するすべてのSQLステートメントを監視して、トランザクションのパフォーマンス分析を行います。

    すべてのフィルターには、独自の構成方法があります。フィルタは通常、MaxScaleサービスに接続されます。たとえば、binlogフィルターをbinlogrouterサービスに適用して、データのサブセットのみをスレーブサーバーに複製することができます。これにより、巨大なテーブルのディスク容量を大幅に削減できます。対応するフィルターのパラメーターを構成する正しい方法については、MaxScaleフィルターのドキュメントを確認してください。

    フィルターを作成する

    すべてのMaxScaleフィルターには、独自の構成方法があります。この例では、テーブル「credit_cards」の列「card_no」の機密データをマスクするために、マスキングフィルターを作成します。マスキングには、JSON形式で記述されたルールファイルが必要です。まず、ルールファイルをホストするディレクトリを作成します。

    $ mkdir /var/lib/maxscale/rules

    次に、テキストファイルを作成します:

    $ vi /var/lib/maxscale/rules/masking.json

    次のように行を指定します:

    {
        "rules": [
            {
                "obfuscate": {
                    "column": "card_no"
                }
            }
        ]
    }

    上記の単純なルールは、MariaDBクライアントに表示される機密データを保護するために、テーブルの列card_noの出力を単純に難読化します。

    ルールファイルが作成されたら、次のコマンドを使用してフィルターを作成できます。

    maxctrl: create filter Obfuscates-card masking rules=/var/lib/maxscale/rules/masking.json
    OK

    一部のフィルターには異なるパラメーターが必要であることに注意してください。このマスキングフィルターの基本的なパラメーターは「ルール」で、作成したマスキングルールファイルをJSON形式で指定する必要があります。

    サービスにフィルターをアタッチする

    フィルタは、サービスに接続することによってのみアクティブ化できます。 MaxCtrlを使用した既存のサービスの変更は、一部のパラメーターでのみサポートされており、フィルターの追加はその1つではありません。基本的にフィルターをアタッチするには、MaxScaleのサービス構成ファイルの下にフィルターコンポーネントを追加する必要があります。この例では、「Obfuscates-card」フィルターを、rr-serviceと呼ばれる既存のラウンドロビンサービスに適用します。

    /var/lib/maxscale/maxscale.cnf.dディレクトリに移動し、rr-service.cnfを見つけて、テキストエディタで開き、次の行を追加します。

    filters=Obfuscates-card
    

    新しい変更をロードするには、MaxScaleを再起動する必要があります:

    $ systemctl restart maxscale

    フィルタをテストするために、MariaDBクライアントを使用し、2つの異なるサービスに接続して出力を比較します。 rw-serviceは、フィルターを構成せずに、ポート3306でリッスンしているリスナーに接続されています。したがって、MaxScaleからのフィルタリングされていない応答が表示されるはずです:

    $ mysql -ucard_user -p -hmaxscale_host -p3306 -e "SELECT * FROM secure.credit_cards LIMIT 1"
    +----+-----------+-----------------+-------------+-----------+---------+
    | id | card_type | card_no         | card_expiry | card_name | user_id |
    +----+-----------+-----------------+-------------+-----------+---------+
    |  1 | VISA      | 425388910909238 | NULL        | BOB SAGAT |       1 |
    +----+-----------+-----------------+-------------+-----------+---------+

    フィルタを使用して構成されたポート3307でrr-serviceリスナーに接続すると、「card_no」の値がぎこちない出力で難読化されます。

    $ mysql -ucard_user -p -hmaxscale_host -p3307 -e "SELECT * FROM secure.credit_cards LIMIT 1"
    +----+-----------+-----------------+-------------+-----------+---------+
    | id | card_type | card_no         | card_expiry | card_name | user_id |
    +----+-----------+-----------------+-------------+-----------+---------+
    |  1 | VISA      | ~W~p[=&^M~5f~~M | NULL        | BOB SAGAT |       1 |
    +----+-----------+-----------------+-------------+-----------+---------+

    このフィルタリングは、以前に作成したmasking.json内の一致ルールに従って、MaxScaleによって実行されます。

    リストフィルター

    作成されたすべてのフィルターを一覧表示するには、「listfilters」コマンドを使用します。

    maxctrl: list filters
    ┌─────────────────┬────────────┬─────────────┐
    │ Filter          │ Service    │ Module      │
    ├─────────────────┼────────────┼─────────────┤
    │ qla             │            │ qlafilter   │
    ├─────────────────┼────────────┼─────────────┤
    │ Obfuscates-card │ rr-service │ masking     │
    ├─────────────────┼────────────┼─────────────┤
    │ fetch           │            │ regexfilter │
    └─────────────────┴────────────┴─────────────┘

    上記の例では、3つのフィルターを作成しました。ただし、サービスにリンクされているのはObfuscates-cardフィルターのみです。

    すべてのサービスを詳細に表示するには:

    maxctrl: show filters

    または、特定のサービスを表示したい場合:

    maxctrl: show filter Obfuscates-card
    ┌────────────┬──────────────────────────────────────────────────────┐
    │ Filter     │ Obfuscates-card                                      │
    ├────────────┼──────────────────────────────────────────────────────┤
    │ Module     │ masking                                              │
    ├────────────┼──────────────────────────────────────────────────────┤
    │ Services   │ rr-service                                           │
    ├────────────┼──────────────────────────────────────────────────────┤
    │ Parameters │ {                                                    │
    │            │     "check_subqueries": true,                        │
    │            │     "check_unions": true,                            │
    │            │     "check_user_variables": true,                    │
    │            │     "large_payload": "abort",                        │
    │            │     "prevent_function_usage": true,                  │
    │            │     "require_fully_parsed": true,                    │
    │            │     "rules": "/var/lib/maxscale/rules/masking.json", │
    │            │     "treat_string_arg_as_field": true,               │
    │            │     "warn_type_mismatch": "never"                    │
    │            │ }                                                    │
    └────────────┴──────────────────────────────────────────────────────┘

    フィルターを削除する

    フィルタを削除するには、最初に関連するサービスからリンクを解除する必要があります。たとえば、MaxScaleの次のフィルタについて考えてみます。

     maxctrl: list filters
    ┌─────────────────┬────────────┬───────────┐
    │ Filter          │ Service    │ Module    │
    ├─────────────────┼────────────┼───────────┤
    │ qla             │            │ qlafilter │
    ├─────────────────┼────────────┼───────────┤
    │ Obfuscates-card │ rr-service │ masking   │
    └─────────────────┴────────────┴───────────┘

    qlaフィルターの場合、次のコマンドを使用して削除できます。

     maxctrl: destroy filter qla
    OK

    ただし、Obfuscates-cardフィルターの場合は、rr-serviceでリンクを解除する必要があります。残念ながら、これには構成ファイルの変更とMaxScaleの再起動が必要です。 /var/lib/maxscale/maxscale.cnf.dディレクトリに移動し、rr-service.cnfを見つけて、テキストエディタで開き、次の行を削除します。

    filters=Obfuscates-card
    

    上記の行から「Obfuscates-card」文字列を削除して、「filters」行を空の値に等しくすることもできます。次に、ファイルを保存し、MaxScaleサービスを再起動して変更をロードします。

    $ systemctl restart maxscale

    そうして初めて、「フィルターの破棄」コマンドを使用して、MaxScaleからObfuscates-cardフィルターを削除できます。

    maxctrl: destroy filter Obfuscates-card
    OK

    MaxScale管理

    ユーザーの一覧表示

    すべてのMaxScaleユーザーを一覧表示するには、「listusers」コマンドを使用します。

    maxctrl: list users
    ┌───────┬──────┬────────────┐
    │ Name  │ Type │ Privileges │
    ├───────┼──────┼────────────┤
    │ admin │ inet │ admin      │
    └───────┴──────┴────────────┘

    MaxScaleユーザーを作成する

    デフォルトでは、作成されたユーザーは読み取り専用ユーザーです:

     maxctrl: create user dev mySecret
    OK

    管理者ユーザーを作成するには、-type=adminコマンドを指定します。

     maxctrl: create user dba mySecret --type=admin
    OK

    MaxScaleユーザーを削除する

    ユーザーを削除するには、「ユーザーの破棄」コマンドを使用するだけです。

     maxctrl: destroy user dba
    OK

    最後に残っている管理ユーザーは削除できません。最後の管理ユーザーを削除する前に、代替の管理ユーザーを作成してください。

    MaxScaleパラメーターを表示

    MaxScaleインスタンスにロードされたすべてのパラメーターを表示するには、「showmaxscale」コマンドを使用します。

    maxctrl: show maxscale
    ┌──────────────┬──────────────────────────────────────────────────────────────────────┐
    │ Version      │ 2.5.3                                                                │
    ├──────────────┼──────────────────────────────────────────────────────────────────────┤
    │ Commit       │ de3770579523e8115da79b1696e600cce1087664                             │
    ├──────────────┼──────────────────────────────────────────────────────────────────────┤
    │ Started At   │ Mon, 21 Sep 2020 04:44:49 GMT                                        │
    ├──────────────┼──────────────────────────────────────────────────────────────────────┤
    │ Activated At │ Mon, 21 Sep 2020 04:44:49 GMT                                        │
    ├──────────────┼──────────────────────────────────────────────────────────────────────┤
    │ Uptime       │ 1627                                                                 │
    ├──────────────┼──────────────────────────────────────────────────────────────────────┤
    │ Parameters   │ {                                                                    │
    │              │     "admin_auth": true,                                              │
    │              │     "admin_enabled": true,                                           │
    │              │     "admin_gui": true,                                               │
    │              │     "admin_host": "127.0.0.1",                                       │
    │              │     "admin_log_auth_failures": true,                                 │
    │              │     "admin_pam_readonly_service": null,                              │
    │              │     "admin_pam_readwrite_service": null,                             │
    │              │     "admin_port": 8989,                                              │
    │              │     "admin_secure_gui": true,                                        │
    │              │     "admin_ssl_ca_cert": null,                                       │
    │              │     "admin_ssl_cert": null,                                          │
    │              │     "admin_ssl_key": null,                                           │
    │              │     "auth_connect_timeout": 10000,                                   │
    │              │     "auth_read_timeout": 10000,                                      │
    │              │     "auth_write_timeout": 10000,                                     │
    │              │     "cachedir": "/var/cache/maxscale",                               │
    │              │     "connector_plugindir": "/usr/lib/x86_64-linux-gnu/mysql/plugin", │
    │              │     "datadir": "/var/lib/maxscale",                                  │
    │              │     "debug": null,                                                   │
    │              │     "dump_last_statements": "never",                                 │
    │              │     "execdir": "/usr/bin",                                           │
    │              │     "language": "/var/lib/maxscale",                                 │
    │              │     "libdir": "/usr/lib/x86_64-linux-gnu/maxscale",                  │
    │              │     "load_persisted_configs": true,                                  │
    │              │     "local_address": null,                                           │
    │              │     "log_debug": false,                                              │
    │              │     "log_info": false,                                               │
    │              │     "log_notice": false,                                             │
    │              │     "log_throttling": {                                              │
    │              │         "count": 0,                                                  │
    │              │         "suppress": 0,                                               │
    │              │         "window": 0                                                  │
    │              │     },                                                               │
    │              │     "log_warn_super_user": false,                                    │
    │              │     "log_warning": false,                                            │
    │              │     "logdir": "/var/log/maxscale",                                   │
    │              │     "max_auth_errors_until_block": 10,                               │
    │              │     "maxlog": true,                                                  │
    │              │     "module_configdir": "/etc/maxscale.modules.d",                   │
    │              │     "ms_timestamp": true,                                            │
    │              │     "passive": false,                                                │
    │              │     "persistdir": "/var/lib/maxscale/maxscale.cnf.d",                │
    │              │     "piddir": "/var/run/maxscale",                                   │
    │              │     "query_classifier": "qc_sqlite",                                 │
    │              │     "query_classifier_args": null,                                   │
    │              │     "query_classifier_cache_size": 0,                                │
    │              │     "query_retries": 1,                                              │
    │              │     "query_retry_timeout": 5000,                                     │
    │              │     "rebalance_period": 0,                                           │
    │              │     "rebalance_threshold": 20,                                       │
    │              │     "rebalance_window": 10,                                          │
    │              │     "retain_last_statements": 0,                                     │
    │              │     "session_trace": 0,                                              │
    │              │     "skip_permission_checks": false,                                 │
    │              │     "sql_mode": "default",                                           │
    │              │     "syslog": true,                                                  │
    │              │     "threads": 1,                                                    │
    │              │     "users_refresh_interval": 0,                                     │
    │              │     "users_refresh_time": 30000,                                     │
    │              │     "writeq_high_water": 16777216,                                   │
    │              │     "writeq_low_water": 8192                                         │
    │              │ }                                                                    │
    └──────────────┴──────────────────────────────────────────────────────────────────────┘

    MaxScaleパラメータを変更する

    • auth_connect_timeout
    • auth_read_timeout
    • auth_write_timeout
    • admin_auth
    • admin_log_auth_failures
    • パッシブ

    残りのパラメータは/etc/maxscale.conf内で設定する必要があります。これには、新しい変更を適用するためにMaxScaleを再起動する必要があります。

    MaxScale GUI

    MaxGUIは、バージョン2.5で導入された、MaxScaleを構成および管理するための新しいブラウザーベースのツールです。ローカルホストインターフェイス127.0.0.1のMaxScaleホストのポート8989を介してアクセスできます。デフォルトでは、admin_secure_gui =trueを設定し、admin_ssl_keyパラメーターとadmin_ssl_certパラメーターの両方を構成する必要があります。ただし、このブログ投稿では、/ etc / maxscale.cnf内の[maxctrl]ディレクティブの下に次の行を追加することにより、プレーンHTTPを介した接続を許可します。

    admin_secure_gui = false

    MaxScaleサービスを再起動して、変更をロードします。

    $ systemctl restart maxscale

    GUIはローカルホストインターフェイスでリッスンしているため、SSHトンネリングを使用してローカルワークステーションからGUIにアクセスできます。

    $ ssh -L 8989:localhost:8989 [email protected]<Maxscale public IP address>

    次に、Webブラウザーを開き、URLをhttp://127.0.0.1:8989/にポイントしてログインします。MaxGUIはmaxctrlと同じクレデンシャルを使用するため、デフォルトのパスワードは「admin」です。パスワード「mariadb」。セキュリティ上の理由から、この目的のために特別に強力なパスワードを使用して新しい管理者ユーザーを作成する必要があります。ログインすると、MaxGUIダッシュボードが次のように表示されます。

    このブログシリーズで示したMaxCtrl管理コマンドのほとんどは、次のことができます。このGUIから直接実行できます。 [新規作成]ボタンをクリックすると、次のダイアログが表示されます。

    ご覧のとおり、重要なMaxScaleコンポーネントはすべて直接管理できます。 GUIから、見た目がすっきりと直感的になり、管理がはるかに簡単で簡単になります。たとえば、このブログ投稿の「サービスへのフィルターのアタッチ」セクションに示されているように、フィルターの関連付けは、MaxScaleサービスを再起動することなくUIから直接実行できます。

    この新しいGUIの詳細については、このMaxGUIガイドをご覧ください。

    ログ管理

    ログパラメータの表示

    ロギングパラメータを表示するには、「showlogging」コマンドを使用します。

     maxctrl: show logging
    ┌────────────────────┬────────────────────────────────┐
    │ Current Log File   │ /var/log/maxscale/maxscale.log │
    ├────────────────────┼────────────────────────────────┤
    │ Enabled Log Levels │ alert                          │
    │                    │ error                          │
    │                    │ warning                        │
    │                    │ notice                         │
    ├────────────────────┼────────────────────────────────┤
    │ Parameters         │ {                              │
    │                    │     "highprecision": true,     │
    │                    │     "log_debug": false,        │
    │                    │     "log_info": false,         │
    │                    │     "log_notice": true,        │
    │                    │     "log_warning": true,       │
    │                    │     "maxlog": true,            │
    │                    │     "syslog": true,            │
    │                    │     "throttling": {            │
    │                    │         "count": 10,           │
    │                    │         "suppress_ms": 10000,  │
    │                    │         "window_ms": 1000      │
    │                    │     }                          │
    │                    │ }                              │
    └────────────────────┴────────────────────────────────┘

    ロギングパラメータの編集

    上記のすべてのロギングパラメータは、実行時にMaxCtrlコマンドを使用して設定できます。たとえば、「alterlogging」コマンドを使用してlog_infoをオンにできます。

    maxctrl: alter logging log_info true

    ログのローテーション

    デフォルトでは、MaxScaleは/etc/logrotate.d/maxscale_logrotateの下にログローテーション構成ファイルを提供します。ログローテーションの構成に基づいて、ログファイルは毎月ローテーションされ、MaxCtrlの「ログのローテーション」コマンドを使用します。次のコマンドを使用して、ログローテーションをすぐに実行することができます。

    $ logrotate --force /etc/logrotate.d/maxscale_logrotate

    次のコマンドで確認します:

    $ ls -al /var/log/maxscale/
    total 1544
    drwxr-xr-x  2 maxscale maxscale    4096 Sep 21 05:53 ./
    drwxrwxr-x 10 root     syslog      4096 Sep 20 06:25 ../
    -rw-r--r--  1 maxscale maxscale      75 Sep 21 05:53 maxscale.log
    -rw-r--r--  1 maxscale maxscale  253250 Sep 21 05:53 maxscale.log.1
    -rw-r--r--  1 maxscale maxscale 1034364 Sep 18 06:25 maxscale.log.2
    -rw-r--r--  1 maxscale maxscale  262676 Aug  1 06:25 maxscale.log.3
    結論

    MaxCtrlクライアントを使用した一連のMaxScaleの展開と管理が終了しました。このブログシリーズ全体で、いくつかの異なる最新のMaxScaleバージョン(書き込み日と比較して)を使用し、すべてのバージョンで多くの重要な改善が見られました。

    MaxScaleを市場で最高のデータベースロードバランサーツールの1つにするための努力に対して、MariaDBMaxScaleチームに称賛を送ります。


    1. SQLServerの監視でアラートの過負荷を防ぐための4つの方法

    2. OracleのNVL2()関数

    3. IDに基づいて値を連結します

    4. 公式のMicrosoftAccessTechブログがオンラインになりました!