HA(high availability)

HA refers to high availability, and to minimize the frequency and time that functions and services provided by the system are stopped or interrupted. Also, a system (HA) or a system configuration(HA configuration) in which such measures are taken may be simply referred to as HA.
In a narrow sense, multiple computers are bundled and operated in an integrated manner, and clustering technology that makes them behave as if they are one computer prevents the whole from stopping even if one stops. It refers to the state(HA cluster).

In a broad sense, it includes all techniques such as redundancy and multiplexing (duplexing) of equipment and systems, data replication and automatic switching, and a hot standby configuration and cold standby configuration in which two systems of the same system are prepared in some cases, HA may be promoted using database replication and the like (and their combination).

RDSのエラーログ

cliでRDSのログを確認するには、describe-db-log-files

aws rds describe-db-log-files --db-instance-identifier rds001

jsonから、ログのみに変更することも可

aws rds describe-db-log-files --db-instance-identifier rds001 --filename-contains error --output text

エラーログはmysql-error-running.logという名前で1時間ごとに出力される。
エラーログの中身は download-db-log-file-portionというコマンドを使う。

aws rds download-db-log-file-portion --db-instance-identifier rds001 --log-file-name error/mysql-error-running.log.6

– Error logs are written to the mysql-error.log file.
– mysql-error.log is flushed every 5minutes.
– The flushed content is added to mysql-error-running.log
– mysql-error-running.log is rotated hourly.
– Rotaed logs are kept for 24 hours.
– Each log file has UTC time appended to the file name(% H of rotated UTC time)
– Writing to the error log is only performed at startup, at shutdown, and at error detection.

なんだこりゃ、超重要やんけ。

binlogの保存期間

– RDSのbinlogの保存期間はデフォルト値では、NULLになっている。

binlogの保存期間を変更する際は、call mysql.rds_set_configurationで変更する。ふむふむ。

mysql> call mysql.rds_set_configuration('binlog retention hours', 24);

slow_query and general_log

– general_log: all queries log
– slow_query_log: slow query, long-running queries logs
– long_query_time: slow query time, second

うーん、全部見れれば盤石のような気もするが、ケースバイケースのようにも見えますね。。

RDSのbinlog

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_LogAccess.Concepts.MySQL.html

MySQL エラーログ、スロークエリログ、一般ログをモニタリングできます。MySQL エラーログはデフォルトで生成されます。DB パラメータグループのパラメーターを設定することで、スロークエリと一般ログを生成できます。Amazon RDS では、すべての MySQL ログファイルはローテーションされます。次に、ログファイルのタイプごとのローテーション間隔を示します。

うむ、わかった。

MySQL バイナリログ形式を設定するには
https://console.aws.amazon.com/rds/ にある Amazon RDS コンソールを開きます。
ナビゲーションペインで、[パラメータグループ] を選択します。
変更する DB インスタンスで使用するパラメータグループを選択します。
デフォルトのパラメータグループを変更することはできません。DB インスタンスがデフォルトのパラメータグループを使用している場合、新しいパラメータグループを作成し DB インスタンスと関連付けます。
DB パラメーターグループの詳細については、「DB パラメータグループを使用する」を参照してください。
[Parameter group actions (パラメータグループのアクション)] で、[Edit (編集)] を選択します。
binlog_format パラメータを、選択したバイナリログ記録形式 (ROW、STATEMENT、または MIXED) に設定します。
[変更の保存] を選択して、更新を DB パラメータグループに保存します。
重要
default.mysql5.6、default.mysql5.7、または default.mysql8.0 DB パラメータグループを変更すると、そのパラメータグループを使用するすべての MySQL バージョン DB インスタンスに影響を与えます。AWS リージョン内の特定の MySQL 5.6、5.7 または 8.0 DB インスタンスに別のバイナリログ形式を指定する場合は、独自の DB パラメータグループを作成します。このパラメータグループで、別のログ形式を指定し、その独自の DB パラメータグループを目的の DB インスタンスに割り当てます。

Amazon RDS では、通常、バイナリログはできる限り早く消去されますが、mysqlbinlog によってアクセスされるバイナリログはインスタンスで保持される必要があります。RDS でバイナリログを保持する時間数を指定するには、mysql.rds_set_configuration ストアドプロシージャを使用して、ログのダウンロードするのに十分な期間を指定します。保持期間を設定したら、DB インスタンスのストレージ使用状況をモニタリングして、保持されたバイナリログに必要以上の容量が使用されないようにします。

binlog retention hours の最大値はMySQLの場合は168時間(7日)
https://qiita.com/kooohei/items/90a1ad7d3e83b1e941ec

MySQL 5.6
MySQL 5.7
MySQL 8.0
バイナリログの保持時間-> デフォルト値はNULL(保持しない)、5分程度で削除されてしまう
binlog retention hours の最大値はMySQLの場合は168時間(7日) 以下のコマンドで実行できる
call mysql.rds_set_configuration(‘binlog retention hours’, 24);
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/mysql_rds_set_configuration.html

LinuxのCPU使用率100%と下げ方

CPU使用率とは、プログラムがどの程度CPUを使っているかとうこと。
CPU使用率が100%でないということは、CPUに遊びがあるという状態。

CPU使用率とは: 一定の時間に対して、どれだけCPUが稼働したか。
1000ミリ秒中550ミリ秒、稼働すれば、CPU使用率は55%になる。当たり前か。

CPU使用率が高いと、アプリケーションのパフォーマンスが落ちるイメージがあるが、つまり、CPU使用率は高い方がいいのか?

CPU周波数とは
1秒間で送信できる0か1のデジタル信号の数
3.2GHzのCPUの場合、Coreで1秒間に32億回0か1の信号を送って処理ができる。つまり、クロック周波数 = 最大通信回数
3.2GHzのCoreに対して、22億4千万回の信号を送って処理すると、Core使用率は70%になる。

で、AWSのCPU周波数は?
M3.Midium Maximum Capacity:3840 MB

DBインスタンスクラスの仕様
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/Concepts.DBInstanceClass.html
ECU: Intel XeonまたはAMD Opteronの1.0G~1.2GHz相当(クロック周波数)=最大10~12億通信回数
M3.midiumが3ECU = 3.0G~3.6GHz相当のクロック周波数 = 30~36億通信回数
M3.large(6.5ECU)に上げる?

RDS マルチ AZ 配置

Multi-AZ DB インスタンスをプロビジョニングすると、Amazon RDS はプライマリ DB インスタンスを自動的に作成するのと同時に、異なるアベイラビリティーゾーン (AZ) にあるスタンバイインスタンスにデータを複製

インフラストラクチャ障害の場合、Amazon RDS はスタンバイ (Amazon Aurora の場合はリードレプリカ) に自動的にフェイルオーバーするので、フェイルオーバーが完了するとすぐにデータベースの動作を再開できる

なるほど、そういう意味か。

同一リージョン内の独立したロケーション
障害発生時は自動でフェイルオーバーが行われ、1,2分で完了します。つまり、サービスが止まる時間はこのフェイルオーバーが行われている間だけなのでとても短い時間で済む。

RDS リードレプリカを追加する

リードレプリカの作成を押下すると、
– 送信先リージョン
– サブネットグループ
– アベイラビリティーゾーン
– 暗号化
– インスタンスの仕様

インスタンスのクラスも設定できる

レプリケーションロールがマスタとレプリカとなる。

CPU クレジット残高は、CPU 利用率がベースラインを上回り、前の 5 分間に消費したクレジットが獲得したクレジットよりも多かった場合に減少します。

AWSメンテナンス

-フェイルオーバーとは、稼働中のシステムで問題が生じてシステムやサーバーが停止してしまった際に、自動的に待機システムに切り替える仕組み

-HA機能ともいわれ、システムの可用性を高めるための冗長化.

Requiredなイベントについて、事前に知る必要がある。

RDSの詳細設計をしていこう

なるほど、ここでサブネットとavailability zoneをchoiceするのね。

メンテナンスウィンドウの設定

なるほど♪

おおおおお、すげー

やけに時間かかるじゃねーか

ステータス バックアップ中 ってどういうことだ??
とりあえずこれ、vagrantから接続できるんだろうか。。。

vagrantからはつながらないようです。
[vagrant@localhost aws]$ mysql -u root -p -h rds-mysql-server.hoge.ap-northeast-1.rds.amazonaws.com
Enter password:
ERROR 2003 (HY000): Can’t connect to MySQL server on ‘rds-mysql-server.c7fqvxerfcrm.ap-northeast-1.rds.amazonaws.com’ (110)

>EC2インスタンスのセキュリティグループには、Amazon RDS for MySQLインスタンスのセキュリティグループ[example-rds-mysql-server]に対するMySQL接続許可を追加した[example-server]セキュリティグループを割り当てます。
これか!

インバウンドルール
そのセキュリティグループに関連付けられたインスタンスにアクセスできるトラフィックを規制するルール

[ec2-user@ip-hoge ~]$ mysql -u root -p -h rds-mysql-server.hoge.ap-northeast-1.rds.amazonaws.com
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 5.7.22-log Source distribution

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql>

おおおおおおおおおおおおおおおおおおお、きたきたきたーーーーーーーーーー
セキュリティグループで若干手間取りましたがwww