6週目.データベースサービス


[実習目標]
  • EC 2を使用してWebサーバとDBサーバ
  • を配備する.
  • RDS配備データベース
  • の開発/テストバージョンのRDSを使用して、2つの実践を行います.
  • マルチAZフォールト
  • Read Replicaを使用した分散型サービス

  • クラウドコンピューティング導入環境の使用

  • クラウドFormationスタックの作成-リンクをクリックして、デフォルト環境をテンプレートファイルに自動的に配置します.
  • 4つのSubnet は、
  • 1の仮想マシンにあります.

    📌 WebSRVからDBSSVへのアクセス


    構成:1つのWebサーバインスタンス+1つのDBサーバインスタンス
  • WebSrvインスタンスの接続

  • # IP확인 및 DBSrv ping 테스트
    ip a
    ping 10.1.2.10
    # DBSrv 로 MySQL 접속 (계정 정보: root/qwe123)
    mysql -h 10.1.2.10 -uroot -pqwe123
  • DBSSVインスタンスの接続

  • # IP확인
    ip a
    # MySQL 접속 (계정 정보: root/qwe123)
    mysql -uroot -pqwe123

    🔎 HTMLとPHP、MySQLの関係


    1. 사용자는 DB에 접근하기 위해 HTML을 이용하게 된다. HTML파일에 태그 사용하여 입력한 정보가 서버의 PHP 파일에 전달된다.
    2. 사용자가 입력한 값은 웹 서버(PHP)로 전달이 된다. MySQL과 다른 으용프로그램과 연계
    3. PHP 스크립트는 MySQL에 데이터로 입력된다. 
  • MariaDB MonitorでのデフォルトSQL文の使用(WebSrvインスタンス)

  • # DB 서버의 상태 정보
    MariaDB [(none)]> status;
    
    # 데이터베이스(=스키마) 확인
    SHOW DATABASES;
    
    # employees 데이터베이스 선택 하기
    USE employees;
    MariaDB [(none)]> **USE employees;**
    MariaDB [**employees**]>
    
    # 테이블 확인
    SHOW TABLES;
    
    # 테이블 필드와 타입 등 정보 확인
    DESC employees;
    
    # employees 테이블 조회 하기
    SELECT * FROM employees;
    SELECT * FROM employees LIMIT 10;
    SELECT * FROM employees LIMIT 100;
    
    # 특정 열(컬럼=필드) 기준 오름/내림차순으로 정렬 조회 하기
    # -- 공백이 있는 개체의 이름 사용 시는 백틱(backtick) `` 으로 묶어줘야 하나의 이름으로 인식함
    SELECT * FROM employees ORDER BY `emp_no` DESC LIMIT 100;
    SELECT * FROM employees ORDER BY `birth_date` ASC LIMIT 100;
    
    # 특정 열(컬럼) 만 출력
    SELECT first_name, last_name, gender FROM employees LIMIT 50;
    
    # 특정 행(=로우=레코드)만 출력 - Mary 이름(first_name) , Baba 성(last_name)
    SELECT * FROM employees WHERE first_name = 'Mary';
    SELECT * FROM employees WHERE last_name = 'Baba';

    📌 配備MySQL(RDS)


    RDSの検索>データベースの作成

    [最初のRDS]

    1. 데이터베이스 생성방식 선택 - 표준생성
    2. 엔진유형 - MySQL
    3. 템플릿 - 프리티어
    4. 설정
    DB 인스턴스 식별자 - hyun-test1
    마스터사용자 이름 - root
    마스터 암호(암호확인) : qwe12345
    5. DB 인스턴스 클래스 : 버스터블 클래스(t 클래스 포함) db.t2.micro
    6. 스토리지 - 디폴트
    7. 다중 AZ 배포 X(프리티어 버전이라 선택이 안됨)
    8. 연결
    VPC : DB-VPC1
    퍼블릭액세스 - 아니요
    VPC 보안 그룹 : ##-VPC1SG3-## 포함된것 선택 , 기본 default 는 제거
    Database 접근을 위해 만든 DB port(3306) 전용의 정책이 들어가있음
    가용 영역 : ap-northeast-2a
    추가 구성 : 클릭
    9. 추가구성
    초기 데이터베이스 이름 : sample
    DB 파라미터 그룹 : ##-mydbparametergroup-## 포함된것 선택
    백업 보존 기간 : 0일(백업을 하지 않겠다라는 의미)
    모니터링 - 활성화 X
    유지 관리 기간 : 선택 기간 → 일요일 , 01 :00 , 0.5시간
    지정하지 않으면 업무 중에 aws RDS가 재부팅이 되거나 혹은 업데이트를 받게될 수도 있음

    [2番目のRDS]

    1. 데이터베이스 생성방식 선택 - 표준생성
    2. 엔진유형 - MySQL
    3. 템플릿 - 개발/테스트
    4. 설정
    DB 인스턴스 식별자 - hyun
    마스터사용자 이름 - root
    마스터 암호(암호확인) : qwe12345
    5. DB 인스턴스 클래스 : 버스터블 클래스(t 클래스 포함) db.t2.micro (이전 세대 클래스 포함 체크)
    6. 스토리지 - 디폴트
    7. 다중 AZ 배포 - 스토리지 - 디폴트다중 AZ 배포(DB를 복제해 사용하기 위해 사용함)
    8. 연결
    VPC : DB-VPC1
    퍼블릭액세스 - 아니요
    VPC 보안 그룹 : ##-VPC1SG3-## 포함된것 선택 , 기본 default 는 제거
    Database 접근을 위해 만든 DB port(3306) 전용의 정책이 들어가있음
    가용 영역 : ap-northeast-2a
    추가 구성 : 클릭
    9. 추가구성
    초기 데이터베이스 이름 : sample
    DB 파라미터 그룹 : ##-mydbparametergroup-## 포함된것 선택
    백업 보존 기간 : 35일(백업을 하지 않겠다라는 의미)
    모니터링 - 활성화 X
    유지 관리 기간 : 선택 기간 → 일요일 , 01 :00 , 0.5시간
    지정하지 않으면 업무 중에 aws RDS가 재부팅이 되거나 혹은 업데이트를 받게될 수도 있음


    [WebSrvとRDSの接続]

    # 변수 지정
    RDS1=프리티어rds 엔드포인트
    RDS2=개발/테스트버전RDS 엔드포인트
    
    # 변수 지정 확인
    echo $RDS1
    echo $RDS2
    
    # dig 질의 - 도메인 조회(subnet 주소 확인)
    dig +short $RDS1
    dig +short $RDS2
    
    # mysql 접속 - exit로 나갈 수 있음
    mysql -h $RDS1 -uroot -pqwe12345
    mysql -h $RDS2 -uroot -pqwe12345
    
    # 상태정보 및 데이터베이스 확인
    status;
    show databases;
    WebSrv 의 index.php 수정 후 WebSrv 에서 AWS RDS1 DB 사용
    원래는 EC2로 배포한 DBsrv를 참조하고 있었지만, RDS로 바꾸는 것
    WebSrv 의 Public IP로 접근하면 사용 DB가 rds로 바뀜
    # 상태정보 및 데이터베이스 확인 - 다 바꾼 후 ctrl+x > Y > enter
    sudo su - 
    nano /var/www/html/index.php
    
    ## 아래 DB 주소와 암호를 변경
    <?php
    define('DB_SERVER', '자신의RDS1 엔드포인트 주소');
    define('DB_USERNAME', 'root');
    define('DB_PASSWORD', 'qwe12345');
    define('DB_DATABASE', 'sample');
    ?>

    📌 RDS Multi-AZ


    デフォルトでは、Pretty RDSはマルチAZを提供しません.そのためには、DBを「マルチAZ配信」に変更する必要があります.

    [開発/テストRDSに適用]

  • Websrvでindex.phpを変更してWebsrvでAWS RDS 2 DB
  • を使用する
    # RDS 확인하기
    [root@WebSrv ~]# RDS2=swh-test2.ckm3nprg4gom.ap-northeast-2.rds.amazonaws.com
    [root@WebSrv ~]# echo $RDS2
    swh-test2.ckm3nprg4gom.ap-northeast-2.rds.amazonaws.com
    [root@WebSrv ~]# dig +short $RDS2
    10.1.4.233
    
    # 상태정보 및 데이터베이스 확인 - 다 바꾼 후 ctrl+x > Y > enter
    sudo su - 
    nano /var/www/html/index.php
    
    ## 아래 DB 주소와 암호를 변경
    <?php
    define('DB_SERVER', '자신의RDS1 엔드포인트 주소');
    define('DB_USERNAME', 'root');
    define('DB_PASSWORD', 'qwe12345');
    define('DB_DATABASE', 'sample');
    ?>
    변경 조회를 위해 다른 콘솔창에 반복조회 돌려두기
    # mysql 접속 후 데이터 확인 반복 → 아래 재부팅 시 동작 확인을 위함 (ctrl+c 로 탈출가능)
    while true; do mysql -h $RDS2 -uroot -pqwe12345 -e "USE sample;SELECT * FROM EMPLOYEES;"; date; sleep 1; done
    
    # (옵션) dig 조회 → IP 변경 확인을 위함
    while true; do dig +short $RDS2; date; sleep 1; done
    別のコンソールウィンドウに繰り返しクエリーを配置し、
  • クエリー
  • を変更します.
    # mysql 접속 후 데이터 확인 반복 → 아래 재부팅 시 동작 확인을 위함 (ctrl+c 로 탈출가능)
    while true; do mysql -h $RDS2 -uroot -pqwe12345 -e "USE sample;SELECT * FROM EMPLOYEES;"; date; sleep 1; done
    
    # (옵션) dig 조회 → IP 변경 확인을 위함
    while true; do dig +short $RDS2; date; sleep 1; done
    再起動
  • RDS 2→操作→再起動→「フェイルオーバ再起動」→検証
  • バックアップサーバを使用するかどうかを確認します:
  • 約2分20秒で障害が発生し、アクセスできなくなり、再アクセス
  • は、他のAZのバックアップ
  • を自動的に置き換えます.
  • の繰り返しクエリでは、IPが
  • に変更されたことがわかります.

    📌 RDS Read Replica

  • RDS 2ジョブの作成→レプリカの読み取りに約10分かかる
  • DBインスタンス識別子:swh-test 2-readonly
  • AWSバージョン:アジア太平洋
  • マルチAZ配備:代替インスタンス
  • を作成しないでください.
  • ReadReplia Endpoint検証とMySQL接続後検証
  • RDS2=gasidards2.cb79jlim4dyq.ap-northeast-2.rds.amazonaws.com
    RDS2Read=gasidards2-readonly.cb79jlim4dyq.ap-northeast-2.rds.amazonaws.com
    
    # mysql 접속 후 데이터 확인
    while true; do mysql -h $RDS2 -uroot -pqwe12345 -e "USE sample;SELECT * FROM EMPLOYEES;"; date; sleep 1; done
    while true; do mysql -h $RDS2Read -uroot -pqwe12345 -e "USE sample;SELECT * FROM EMPLOYEES;"; date; sleep 1; done
    
    # 마스터 DB에서 정보 확인 : 마스터 DB에 바이너리 로그를 이용하여 복제를 구현
    mysql -h $RDS2 -uroot -pqwe12345 -e "show master status;"
    +----------------------------+----------+--------------+------------------+-------------------+
    | File                       | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +----------------------------+----------+--------------+------------------+-------------------+
    | mysql-bin-changelog.000010 |      156 |              |                  |                   |
    +----------------------------+----------+--------------+------------------+-------------------+
    
    # 읽기 복제본 DB에서 정보 확인
    mysql -h $RDS2Read -uroot -pqwe12345 -e "show slave status\G"
                      Master_Host: 172.23.1.176
                      Master_User: rdsrepladmin
                  Master_Log_File: mysql-bin-changelog.000010 ⇒ 마스터 DB의 바이너리 로그
              Read_Master_Log_Pos: 156
                   Relay_Log_File: relaylog.000009
                    Relay_Log_Pos: 277
            Relay_Master_Log_File: mysql-bin-changelog.000010 ⇒ 복제 동기화를 실행하는 바이너리 로그
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
    					Exec_Master_Log_Pos: 156