前回のブログ投稿では、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内の別のサービスに送信します。 |
| |
| |
| トランザクションごとにグループ化された、フィルターを通過するすべてのSQLステートメントを監視して、トランザクションのパフォーマンス分析を行います。 |
フィルターを作成する
すべての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チームに称賛を送ります。