おっさん社内SEエンジニアの勉強ブログ

勉強記録のブログとなります。

SAA学習-信頼性設計-RDSによるマスタースレーブ構成

今回のテーマ:RDSによるマスタースレーブ構成のハンズオン実施

構成

f:id:In-houseSE:20210617162944p:plain

事前準備(今回は概略と関連リンクを記載しておきます。)

  • NATGWの作成およびElasticIPの払い出し
  • ルートテーブルの関連づけ

before f:id:In-houseSE:20210617160335p:plain

after f:id:In-houseSE:20210617160426p:plain

  • ELBの作成

in-housese.hatenablog.com

  • イメージの作成

in-housese.hatenablog.com

  • 起動設定およびAuto-ScalingGroupの作成(希望、最小を0台にしておくとよいかと思います。)

in-housese.hatenablog.com

実施する項目が分かれば、ここまで20分程度で実装は可能だと思います。

実際の手順(RDB作成まで)

  • マネージメントコンソール-RDSと検索しクリック

f:id:In-houseSE:20210617162309p:plain

  • サブネットグループよりDBサブネットグループを作成をクリック

f:id:In-houseSE:20210617162507p:plain

  • 名前、説明は任意で記入し、VPCは指定しているVPCを選択します。

f:id:In-houseSE:20210617163037p:plain

  • サブネットは構成図に合わせてプライベートサブネットを指定し、作成をクリック

f:id:In-houseSE:20210617163142p:plain

  • データベースよりデータベースの作成をクリック

f:id:In-houseSE:20210617163542p:plain

  • MySQLを選択とエンジンバージョンを指定します。

f:id:In-houseSE:20210617163633p:plain

  • マルチAZ構成にしたいため、学習用ですが開発/テストを選択します。

f:id:In-houseSE:20210617164335p:plain

  • DB識別子を指定し、マスターユーザーのアカウント情報を登録します。

f:id:In-houseSE:20210617163952p:plain

  • インスタンスサイズを指定します。(デフォルトたとm系のファミリアーとなるため要注意)

f:id:In-houseSE:20210617164407p:plain

  • ストレージサイズタイプやサイズなどを指定します。(ストレージタイプを汎用にしておけば安価にすみます)
    また、自動スケーリングは有効としておき最初はスモールスタートにしてスケーリングをさせる方が実務ではよく使用されます。

f:id:In-houseSE:20210617164056p:plain

  • マルチAZ配置でスタンバイインスタンスを作成するを指定します。

f:id:In-houseSE:20210617164615p:plain

  • 接続するVPC、サブネットグループを指定し、RDB用のSGを新規で作成します。

f:id:In-houseSE:20210617164911p:plain

  • 認証方式を指定します。

f:id:In-houseSE:20210617164945p:plain

  • 追加設定でRDB名を任意で記載し、パラメータグループを指定します。(実務だと先にパラメータグループを使用する方が望ましいです)

f:id:In-houseSE:20210617165144p:plain

  • バックアップの取得方式などを確認します。(サイクルなど指定があれば変更します)

f:id:In-houseSE:20210617165234p:plain

  • モニタリング(監視の指定)およびログの出力に関して確認します。(すべて有効化しておくことが望ましいですが割愛します)

f:id:In-houseSE:20210617165420p:plain

  • 定期メンテナンスの指定を行います。(パッケージソフトとかのバージョンアップ対応を考慮するとマイナーバージョンの自動アップグレードの有効化は外す方がよいです)

f:id:In-houseSE:20210617165644p:plain

  • 利用コストを確認し、データベースの作成をクリック

f:id:In-houseSE:20210617165717p:plain

cf)RDBへ日本時間に合わせるなどのオプションを指定する場合、オプショングループを新規に作成し作成したRDBへ適用します。(今回は割愛)

f:id:In-houseSE:20210617170431p:plain

cf)実運用上ですと定期的にAmazon RDS SSL/TSL証明書を更新する作業があります。

f:id:In-houseSE:20210617170243p:plain

  • 作成したRDBが利用可能な状態になっていることを確認します。

f:id:In-houseSE:20210617171456p:plain

  • 新規でSGを作成すると「/32」の固定IPのみの指定となるため、VPC内のサブネットを許可する設定に変更するため、
    適用しているセキュリティグループを選択し、インバンドルールの編集をクリック

f:id:In-houseSE:20210617172001p:plain

  • MySQLRDBを指定するため、ポートは使用ポートの3306を指定後、サブネットをVPC内のサブネット指定し、ルールを保存をクリック

f:id:In-houseSE:20210617172242p:plain

実際の手順(RDBの接続確認・設定・リストア試験)

  • EC2インスタンスSSHログインをします。(この時AutoScalingの希望と最小を1台としておくとサーバーが作成されます。)

f:id:In-houseSE:20210617172729p:plain

  • mysqlコマンドを使用できるようにするため以下コマンドを実行

コマンド

 yum install mysql -y

実行結果

Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Resolving Dependencies
--> Running transaction check
---> Package mariadb.x86_64 1:5.5.68-1.amzn2 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package        Arch          Version                   Repository         Size
================================================================================
Installing:
 mariadb        x86_64        1:5.5.68-1.amzn2          amzn2-core        8.8 M

Transaction Summary
================================================================================
Install  1 Package

Total download size: 8.8 M
Installed size: 49 M
Downloading packages:
mariadb-5.5.68-1.amzn2.x86_64.rpm                          | 8.8 MB   00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : 1:mariadb-5.5.68-1.amzn2.x86_64                              1/1
  Verifying  : 1:mariadb-5.5.68-1.amzn2.x86_64                              1/1

Installed:
  mariadb.x86_64 1:5.5.68-1.amzn2

Complete!
  • 作成したRDBへ接続します

コマンドひな形

mysql -h RDBのエンドポイント名 -u ユーザー名 -p

コマンド例

mysql -h mysql.cupngjp8wkyf.ap-northeast-1.rds.amazonaws.com -u admin -p
  • パスワードが聞かれれるため応答し、RDBへ接続します。

f:id:In-houseSE:20210617172729p:plain

  • DBを作成します。

コマンド

create database testdb;
  • DBへ接続します。

コマンド

use testdb;
  • 試験用のテーブルを作成します。

コマンド

create table testdb.account(id int,name varchar(20));
  • 作成したテーブルを確認します。

コマンド

show tables;
  • 作成したテーブルに対しデータを入れます。

コマンド

insert into account values(1001,"testuser1");
insert into account values(1002,"testuser2");
  • テーブルへインポートしたデータを確認します。

コマンド

select * from account;

結果のまとめ

f:id:In-houseSE:20210617175219p:plain

実際の手順(RDBの復元確認)

  • マネージメントコンソール-RDB-データベース-該当するRDBを指定し、アクション-スナップショットの取得をクリック

f:id:In-houseSE:20210617175542p:plain

  • スナップショット名は任意で記入し、スナップショットの取得をクリック

f:id:In-houseSE:20210617175631p:plain

  • 利用可能であることを確認します。

f:id:In-houseSE:20210617180223p:plain

  • ターミナルに戻り追加のデータをインポートします。
insert into account values(1003,"testuser3");

結果

f:id:In-houseSE:20210617180705p:plain

  • RDBをいったん削除するため、DBからの接続を切ります。

コマンド

quit

f:id:In-houseSE:20210617181245p:plain

業務の場合、RDBインスタンス識別子を合わせるリストア対応が必要となります。
対応する方法は稼働しているインスタンスを削除し、スナップショットから復元します。

  • マネージメントコンソールへ戻り、稼働しているRDBを選択しアクションから削除を選択します。

f:id:In-houseSE:20210617181516p:plain

  • 削除確認画面で、最終スナップショットの取得とフレーズ入力を記入後、削除をクリック

f:id:In-houseSE:20210617181659p:plain

  • 削除されたことを確認します。

f:id:In-houseSE:20210617183304p:plain

  • マネージメントコンソールへ戻り、取得したスナップショットを選択し、アクション-スナップショットを復元をクリック

f:id:In-houseSE:20210617180945p:plain

f:id:In-houseSE:20210617181858p:plain

  • SGとサブネットは先程と同じものを指定します。

f:id:In-houseSE:20210617181958p:plain

f:id:In-houseSE:20210617182100p:plain

  • 後の設定も同様に指定します。

f:id:In-houseSE:20210617182146p:plain

  • 追加設定の値も同様に設定指定したら、DBインスタンスの復元をクリック

f:id:In-houseSE:20210617182203p:plain

  • リストアされていることを確認します。(この状態までいけば接続確認はできたはずです)

f:id:In-houseSE:20210617184517p:plain

  • ターミナルに戻りRDBへ接続します

コマンド例

mysql -h mysql.cupngjp8wkyf.ap-northeast-1.rds.amazonaws.com -u admin -p
  • DBへ接続し、先程のテーブルを確認します。

確認までの経緯ログ

MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test_rdb           |
| testdb             |
+--------------------+
5 rows in set (0.00 sec)

MySQL [(none)]> use testdb
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MySQL [testdb]> show tables;
+------------------+
| Tables_in_testdb |
+------------------+
| account          |
+------------------+
1 row in set (0.00 sec)

MySQL [testdb]>
  • testuser3が存在していないことを確認し問題ないことを確認します。
MySQL [testdb]> select * from account;
+------+-----------+
| id   | name      |
+------+-----------+
| 1001 | testuser1 |
| 1002 | testuser2 |
+------+-----------+
2 rows in set (0.00 sec)

MySQL [testdb]>

cf) スナップショットから復元したい場合、特定地点からの復元は稼働指定できなかったため、
リストア手法を要注意となります。(少し確認をしておきます。)

実際の手順(RDBの自動F/Oとリードレプリカの作成)

リードレプリカを作成するため、自動バックアップが有効である必要があります。
動作確認をするため1回再作成を実施しておきます。

dev.classmethod.jp

リードレプリカの作成

  • マネージメントコンソールよりデータベース-対象のRDBを指定し、アクションからリードレプリカの作成をクリック

f:id:In-houseSE:20210617192330p:plain

  • インスタンスタイプとマルチAZ配置の指定をします。(今回はそのまま)

f:id:In-houseSE:20210617192414p:plain

  • リージョン、サブネット、AZ、SGを指定します。(AZのみ指定しておきます。)

f:id:In-houseSE:20210617192526p:plain

  • DB識別子を指定します。(レプリカなどわかる名称の方がよいかも)

f:id:In-houseSE:20210617192659p:plain

  • その他の設定は変更せず、リードレプリカの作成をクリック

f:id:In-houseSE:20210617192815p:plain

  • リードレプリカが作成されたことを確認します。(画面ではレプリカ側が作成中ですがここまでいけば大丈夫です)

f:id:In-houseSE:20210617193305p:plain

自動F/Oの動作確認

  • マネージメントコンソールよりデータベース-対象のRDBを指定し、アクション-再起動をクリック

f:id:In-houseSE:20210617193737p:plain

  • フェイルオーバーで再起動にチェックを入れて、確認をクリック

f:id:In-houseSE:20210617193820p:plain

  • リージョンとAZがF/O先に変更されていることを確認します。

今回のテーマは以上です。

cf)検証用で使用したリソースをすべて削除しておかないと結構いい金額が発生するので、
失念しないようにしてください。