DBパラメータグループ編集 と 再起動

ここからは、各種クエリを実行し、ログやメトリクスを確認してみましょう。

  • なお、ここからは WordPress が登場することはありません。

負荷が高いクエリを実行

  • クエリを実行するために、WordPress用 EC2インスタンスのいずれかに Session Manager で接続して下さい(既に接続済みであればそのウィンドウを利用して下さい)。
  • 以下のように mysqlコマンドで Aurora MySQL に接続します(接続先はAuroraの書き込みエンドポイントを指定します)。
    • 認証情報は環境にあわせて変更してください。
mysql -h ${DB_HOST} -p${DB_PASS} -uadmin ${DB_DATABASE}

その後、次のクエリを実行します。

select value, count(*) from data group by value;

おおよそ5秒ほどで結果が返されます。

(略)
9534 rows in set (5.87 sec)
  • 5秒、というのはエンドユーザー向けサイトのDBクエリとしては、一般に非常に遅いクエリといえます。(5秒も待たされたら、ユーザーは離脱してしまうことでしょう!)
  • (なお、2回目以降は DBキャッシュ の効果により、すぐに結果が返ってきます)

スロークエリの出力

  • このような場面に、ユーザーが明確にクレームを通知しないことも多々あります。
  • また、アプリケーション側でクエリの秒数を計測するのも難しい場面があります。
  • 可能なら、DB側で遅いクエリを検出したい場面が多々あります。

MySQLでは遅いクエリ = スロークエリのログが設定が可能です。Aurora MySQL でもそれを有効にします。 そのためには、DBのパラメータを設定する必要があります。

パラメータグループの作成

  • RDSコンソール の左メニューから「パラメータグループ」をクリックします
  • 「パラメータグループの作成」をクリックします

以下の内容でパラメータグループを作成します。

  1. パラメータグループファミリー: aurora-mysql5.7であることを確認
  2. タイプ: DB Parameter Group (DB パラメータグループ) であることを確認
  3. グループ名: aurora-mysql57-slow-log を入力
  4. 説明: aurora-mysql57-slow-log を入力
  • 作成後、そのパラメータグループを選択して詳細画面を表示します
  • 多くのパラメータが確認できますが、検索を利用して 次の設定 を変更します

それぞれ値を編集し、「変更の保存」をクリックして下さい。

  1. slow_query_log: 値 1 を設定
  2. long_query_time: 値 1 を設定
    • スロークエリとみなす秒数
  3. log_output: FILE

パラメータグループの適用

  • パラメータグループの変更反映には、DBの再起動が必要です。
  • パラメータ自体の変更は再起動が不要なものもあるため、クラスタ作成時には独自のパラメータグループを作成し指定することが望ましいですが、今回は既に作成・適用済みのため、新たに変更する必要があります。

  • 本来の運用場面であれば、メンテナンス時間に実施することになりますが、この作業では意図的に稼働中に再起動を行ってみましょう。

  • アプリケーションから見た DBインスタンス の挙動を確認するため、EC2インスタンスへ接続し、それぞれ下記のコマンドを実行します。

DB_WRITER_ENDPOINT='<your-writer-aurora-host.com>'
DB_READER_ENDPOINT='<your-reader-aurora-host.com>'
DB_PASS='wordpress'
DB_DATABASE='wordpress'

上記の通り、4つのシェル変数を設定します。Auroraクラスターの 「書き込みエンドポイント」と「読み込みエンドポイント」の2つのホスト名を適切に変数の値として設定して実行して下さい。

while true; do
echo '---- writer ----'
mysql -h ${DB_WRITER_ENDPOINT} -p${DB_PASS} -uadmin ${DB_DATABASE} -e 'select * from data where id = 1;'
mysql -h ${DB_WRITER_ENDPOINT} -p${DB_PASS} -uadmin ${DB_DATABASE} -e "update data set ts = '$(date +'%Y-%m-%d %H:%M:%S')' where id = 1;"
echo '---- reader ----'
mysql -h ${DB_READER_ENDPOINT} -p${DB_PASS} -uadmin ${DB_DATABASE} -e 'select * from data where id = 1;'
sleep 1
done
  • 上記スクリプトでは、「1秒ごとに書き込みエンドポイントに向けて読み書きを実行」、「読み込みエンドポイントには読み込みだけを実行」します。

これにより、アプリケーション側からみたDB接続に関するエラー・異常があれば認識することができます。

ではパラメータグループの変更を行ってみましょう。

  1. RDSコンソールから「ロール」が「書き込み」となっているDBを選択して上部の「変更」をクリックします。
  2. 「DB パラメータグループ」のドロップダウンから、先ほど作成したパラメータグループを選びます。
    • 他の項目は、全てそのままで変更しないで下さい
  3. 「続行」をクリックします
  4. 「変更を適用するタイミング」を「すぐに適用」を選択し、「DBインスタンスを変更」をクリックします。

この時点では、まだDBの再起動は行われません。

  • 変更を適用するには、手動での再起動が必要です。
  • 書き込み用DBを選択し、「設定」タブを見ても、パラメータグループの変更は「再起動の保留中」と書かれています。

  • ロールが「書き込み」のデータベースの状態の「変更中」が「利用可能」に変わるまで待機します(数分待機します)
  • そのDBを選択して「アクション」から「再起動」を選択し、表示される確認画面で「実行」をクリックします
  • 再起動中 の状態になったことを確認し、続けて 先ほどEC2インスタンスでループ実行しているDBアクセス状況の表示内容を確認して下さい

……………。

確認できたでしょうか?

一瞬の出来事でしたが、再起動する様子が見えたかと思います。

下記はその一例です。

---- writer ----
+----+---------------------+-------+
| id | ts                  | value |
+----+---------------------+-------+
|  1 | 2020-xx-yy 12:03:39 | 97930 |
+----+---------------------+-------+
---- reader ----
+----+---------------------+-------+
| id | ts                  | value |
+----+---------------------+-------+
|  1 | 2020-xx-yy 12:03:40 | 97930 |
+----+---------------------+-------+
---- writer ----
ERROR 2003 (HY000): Can't connect to MySQL server on 'aurora-user1-cluster.cluster-hogehoge.ap-northeast-1.rds.amazonaws.com' (111)
ERROR 2003 (HY000): Can't connect to MySQL server on 'aurora-user1-cluster.cluster-hogehoge.ap-northeast-1.rds.amazonaws.com' (111)
---- reader ----
+----+---------------------+-------+
| id | ts                  | value |
+----+---------------------+-------+
|  1 | 2020-xx-yy 12:03:40 | 97930 |
+----+---------------------+-------+
---- writer ----
ERROR 2003 (HY000): Can't connect to MySQL server on 'aurora-user1-cluster.cluster-hogehoge.ap-northeast-1.rds.amazonaws.com' (111)
ERROR 2003 (HY000): Can't connect to MySQL server on 'aurora-user1-cluster.cluster-hogehoge.ap-northeast-1.rds.amazonaws.com' (111)
---- reader ----
+----+---------------------+-------+
| id | ts                  | value |
+----+---------------------+-------+
|  1 | 2020-xx-yy 12:03:40 | 97930 |
+----+---------------------+-------+
---- writer ----
ERROR 2003 (HY000): Can't connect to MySQL server on 'aurora-user1-cluster.cluster-hogehoge.ap-northeast-1.rds.amazonaws.com' (111)
ERROR 2003 (HY000): Can't connect to MySQL server on 'aurora-user1-cluster.cluster-hogehoge.ap-northeast-1.rds.amazonaws.com' (111)
---- reader ----
+----+---------------------+-------+
| id | ts                  | value |
+----+---------------------+-------+
|  1 | 2020-xx-yy 12:03:40 | 97930 |
+----+---------------------+-------+
---- writer ----
+----+---------------------+-------+
| id | ts                  | value |
+----+---------------------+-------+
|  1 | 2020-xx-yy 12:03:40 | 97930 |
+----+---------------------+-------+
---- reader ----
+----+---------------------+-------+
| id | ts                  | value |
+----+---------------------+-------+
|  1 | 2020-xx-yy 12:03:40 | 97930 |
+----+---------------------+-------+
---- writer ----
+----+---------------------+-------+
| id | ts                  | value |
+----+---------------------+-------+
|  1 | 2020-xx-yy 12:03:44 | 97930 |
+----+---------------------+-------+
---- reader ----
ERROR 2003 (HY000): Can't connect to MySQL server on 'aurora-user1-cluster.cluster-ro-hogehoge.ap-northeast-1.rds.amazonaws.com' (111)
---- writer ----
+----+---------------------+-------+
| id | ts                  | value |
+----+---------------------+-------+
|  1 | 2020-xx-yy 12:03:45 | 97930 |
+----+---------------------+-------+
---- reader ----
ERROR 2003 (HY000): Can't connect to MySQL server on 'aurora-user1-cluster.cluster-ro-hogehoge.ap-northeast-1.rds.amazonaws.com' (111)
---- writer ----
+----+---------------------+-------+
| id | ts                  | value |
+----+---------------------+-------+
|  1 | 2020-xx-yy 12:03:47 | 97930 |
+----+---------------------+-------+
---- reader ----
ERROR 2003 (HY000): Can't connect to MySQL server on 'aurora-user1-cluster.cluster-ro-hogehoge.ap-northeast-1.rds.amazonaws.com' (111)
---- writer ----
+----+---------------------+-------+
| id | ts                  | value |
+----+---------------------+-------+
|  1 | 2020-xx-yy 12:03:48 | 97930 |
+----+---------------------+-------+
---- reader ----
ERROR 2003 (HY000): Can't connect to MySQL server on 'aurora-user1-cluster.cluster-ro-hogehoge.ap-northeast-1.rds.amazonaws.com' (111)
---- writer ----
+----+---------------------+-------+
| id | ts                  | value |

(以降は正常に動作)
  • RDSコンソールには左メニューに「イベント」という項目があります。
  • こちらを併せて見ると、再起動が行われたタイミングと、Read replica has been disconnected from master. Restarting Mysql.というエラーメッセージが確認できます。

これらの情報から、発生した状況を読み解くことができます

  • まず、書き込みエンドポイント(writer)への接続が途絶し、2つの接続エラーが出ています。
  • これはselectupdateクエリです。
  • その状態が4秒ほど続き、その間は値が更新されていません。
  • その後writerの再起動が完了しましたが、read replicaがmasterとの通信断により、こちらも再起動されています。
  • また4秒ほど経ち、両方の再起動が終わった時点で正常に戻りました。

次に、該当DBの「設定」タブからパラメータグループが変更されているかを確認してください。

Auroraクラスター は 通常60秒以内 には再起動が完了し、データベースキャッシュも保持することができます。