ProxySQLは、データベース環境で非常に重要なインフラストラクチャになりました。ロードバランサーとして機能し、トラフィックの流れを形成し、ダウンタイムを削減するのに役立ちます。大きな力には大きな責任が伴います。 ProxySQL構成にアクセスしているユーザーをどのように最新の状態に保つことができますか? ProxySQLを介してデータベースに接続しているのは誰ですか?これらの質問には、ProxySQL2.0.5以降で利用可能なProxySQL監査ログを使用して回答できます。このブログ投稿では、この機能を有効にする方法と、ログの内容がどのように表示されるかを調べます。
最初のステップは、ProxySQLをデプロイすることです。 ClusterControlを使用してこれを簡単に行うことができます-MySQLレプリケーションとGaleraクラスタータイプの両方がProxySQLデプロイメントをサポートします。
クラスターが稼働していると仮定すると、[管理]-> [LoadBalancers]からProxySQLをデプロイできます:
ProxySQLをインストールするノードとそのバージョンを決定する必要があります(デフォルトの2.x)を維持し、ProxySQLの管理ユーザーと監視ユーザーの資格情報を定義します。
以下では、データベースから既存のアプリケーションユーザーをインポートするか、新しいアプリケーションユーザーを作成できます。 1つは、名前、パスワード、スキーマ、およびMySQL特権を割り当てることです。次に、ProxySQLに含めるノードを構成し、暗黙的なトランザクションを使用するかどうかを決定できます。すべてが完了したら、ProxySQLをデプロイできます。高可用性を実現するには、2つ目のProxySQLを追加して、その上にキープアライブすることをお勧めします。 Keepalivedは、ClusterControlから簡単にデプロイすることもできます:
ここで、ProxySQLがデプロイされているノードを選択し、仮想を渡す必要がありますIPおよびネットワークインターフェイスVIPを割り当てる必要があります。これが完了すると、ClusterControlはKeepalivedをデプロイできます。
では、監査ログを見てみましょう。すべての構成は、両方のProxySQLノードで実行する必要があります。または、オプションを使用してノードを同期することもできます:
監査ログの動作を管理する設定は、次の2つです。
最初のファイルはデータを保存するファイルを定義し、2番目のファイルは回転する前のログファイルの大きさ。 ProxySQLデータディレクトリでログを設定しましょう:
これで、監査で確認したデータを確認できます。ログファイル。まず、データが保存される形式はJSONです。イベントには2つのタイプがあります。1つはMySQL接続に関連し、もう1つはProxySQL管理インターフェース接続に関連します。
"client_addr": "10.0.0.100:40578",
"event": "MySQL_Client_Connect_OK",
"proxy_addr": "0.0.0.0:6033",
"schemaname": "sbtest",
"ssl": false,
"thread_id": 810,
"time": "2020-01-23 14:24:17.595",
"timestamp": 1579789457595,
"username": "sbtest"
}
{
"client_addr": "10.0.0.100:40572",
"event": "MySQL_Client_Quit",
"proxy_addr": "0.0.0.0:6033",
"schemaname": "sbtest",
"ssl": false,
"thread_id": 807,
"time": "2020-01-23 14:24:17.657",
"timestamp": 1579789457657,
"username": "sbtest"
}
{
"client_addr": "10.0.0.100:40572",
"creation_time": "2020-01-23 14:24:17.357",
"duration": "299.653ms",
"event": "MySQL_Client_Close",
"extra_info": "MySQL_Thread.cpp:4307:process_all_sessions()",
"proxy_addr": "0.0.0.0:6033",
"schemaname": "sbtest",
"ssl": false,
"thread_id": 807,
"time": "2020-01-23 14:24:17.657",
"timestamp": 1579789457657,
"username": "sbtest"
}
ご覧のとおり、ほとんどのデータが繰り返されます。クライアントアドレス、ProxySQLアドレス、スキーマ名、接続でSSLが使用されている場合、MySQLの関連スレッド番号、接続を作成したユーザー。 「MySQL_Client_Close」イベントには、接続が作成された時刻と接続の期間に関する情報も含まれています。また、ProxySQLコードのどの部分が接続を閉じる原因となったかを確認できます。
管理者の接続は非常に似ています:
{
"client_addr": "10.0.0.100:52056",
"event": "Admin_Connect_OK",
"schemaname": "information_schema",
"ssl": false,
"thread_id": 815,
"time": "2020-01-23 14:24:19.490",
"timestamp": 1579789459490,
"username": "proxysql-admin"
}
{
"client_addr": "10.0.0.100:52056",
"event": "Admin_Quit",
"schemaname": "information_schema",
"ssl": false,
"thread_id": 815,
"time": "2020-01-23 14:24:19.494",
"timestamp": 1579789459494,
"username": "proxysql-admin"
}
{
"client_addr": "10.0.0.100:52056",
"creation_time": "2020-01-23 14:24:19.482",
"duration": "11.795ms",
"event": "Admin_Close",
"extra_info": "MySQL_Thread.cpp:3123:~MySQL_Thread()",
"schemaname": "information_schema",
"ssl": false,
"thread_id": 815,
"time": "2020-01-23 14:24:19.494",
"timestamp": 1579789459494,
"username": "proxysql-admin"
}
収集されるデータは非常に似ていますが、主な違いは、ProxySQL管理インターフェースへの接続に関連していることです。
ご覧のとおり、非常に簡単な方法で、ProxySQLへのアクセスの監査を有効にできます。これ、特に管理アクセスは、セキュリティの観点から監視する必要があります。監査プラグインを使用すると、非常に簡単に実行できます。