aws 에서 MariaDB galera cluster 설치하기!

오늘은 실험적인 포스팅을 하려고 한다.
mariadb galera다.

사실 aws에 galera를 셋팅하는것은…RDS때문에 아이러니한 선택일수 있으나,
온프레미스에서 쉽사리 셋팅하기 어려운 구성인 galera를 테스트 해보기로 하였다.

사실 이글을 쓰는 지금은 이미..블로그가 galera 위에서 돌고있다.

준비물을 챙겨보자.

galera의 구성에는 multi-AZ를 위한 여러개의 서브넷이 필요하다.

한국리전의 A/B/C zone 을 모두 사용한다.

그리고 인스턴스를 생성한다.

인스턴스는 t3.nano를 활용하였다. 사용자가 많지 않아서 nano로 버틸수 있을거라 생각했다.

이과정에서 인스턴스만 5번이상을 만들었다 지웠다를 반복했는데 그이유는 B영역 때문이었다. 처음엔 t2.nano를 사용하려했으나 B영역에서 not support 발생으로 평소 사용해보고 싶었던 t3a 계열을 사용해 보려고 했으나, 마찬가지로 not support상태.. 결국 돌아서 t3.nano를 사용하게 되었다.

사용한 ami는 amazon linux 2 다.

인스턴스 생성후 보안 그룹은 따로 galera-sg를 생성하여 galera 인스턴스 끼리는 통신이 되도록 설정하고 웹서버 내부 IP로 3306만 열어 주었다.

인스턴스 셋팅할때는 EIP를 붙이고 작업하였다.

galera 셋팅은 아래와 같다.

#vi /etc/yum.repos.d/mariadb.repo

아래내용 삽입
설치할 mariadb 는 10.4 버전이다.

#MariaDB 10.4 CentOS repository list – created 2019-09-10 11:12 UTC
#http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

:wq 후에 정상적으로 repo를 생성했다면 아래 설치명령어가 정상적으로 작동한다.

#yum install MariaDB-server MariaDB-client

정상적으로 설치가 되면 아래 패키지가 설치된다. yum.log에서 확인했다.

Sep 10 11:37:04 Installed: perl-Data-Dumper-2.145-3.amzn2.0.2.x86_64
Sep 10 11:37:04 Installed: MariaDB-common-10.4.7-1.el7.centos.x86_64
Sep 10 11:37:05 Installed: MariaDB-compat-10.4.7-1.el7.centos.x86_64
Sep 10 11:37:05 Installed: boost-program-options-1.53.0-27.amzn2.0.3.x86_64
Sep 10 11:37:06 Installed: galera-4-26.4.2-1.rhel7.el7.centos.x86_64
Sep 10 11:37:06 Installed: perl-Compress-Raw-Bzip2-2.061-3.amzn2.0.2.x86_64
Sep 10 11:37:06 Installed: ncurses-compat-libs-6.0-8.20170212.amzn2.1.2.x86_64
Sep 10 11:37:08 Installed: MariaDB-client-10.4.7-1.el7.centos.x86_64
Sep 10 11:37:08 Installed: perl-Net-Daemon-0.48-5.amzn2.noarch
Sep 10 11:37:08 Installed: 1:perl-Compress-Raw-Zlib-2.061-4.amzn2.0.2.x86_64
Sep 10 11:37:08 Installed: perl-IO-Compress-2.061-2.amzn2.noarch
Sep 10 11:37:08 Installed: perl-PlRPC-0.2020-14.amzn2.noarch
Sep 10 11:37:08 Installed: perl-DBI-1.627-4.amzn2.0.2.x86_64
Sep 10 11:37:25 Installed: MariaDB-server-10.4.7-1.el7.centos.x86_64

설치가 완료되면 클러스터 설정을 한다.

#vi /etc/my.cnf.d/server.cnf

간단하게 테스트하기 위해 아래내용을 붙여 넣어도 좋다.

[mysql]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
bind-address=0.0.0.0
user=mysql
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
innodb_flush_log_at_trx_commit=0
innodb_buffer_pool_size=128M
binlog_format=ROW
log-error=/var/log/mysqld.logdatadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
bind-address=0.0.0.0
user=mysql
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
innodb_flush_log_at_trx_commit=0
innodb_buffer_pool_size=128M
binlog_format=ROW
log-error=/var/log/mysqld.log

같은파일 하단에 [galera] 탭에 아래 내용을 설정한다.

[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so
wsrep_node_name=’galera1′
wsrep_node_address=”10.0.4.27″
wsrep_cluster_name=’linuxer-galera’
wsrep_cluster_address=”gcomm://10.0.4.9,10.0.4.27,10.0.4.43″
wsrep_provider_options=”gcache.size=300M; gcache.page_size=300M”
wsrep_slave_threads=4
wsrep_sst_method=rsync

여기서 수정할 내용은
wsrep_node_name=’galera1′
wsrep_node_address=”10.0.4.27″
wsrep_cluster_address=”gcomm://10.0.4.9,10.0.4.27,10.0.4.43″
이 세부분이다. node name 은 노드를 분류할 이름으로 나는 galera1/2/3으로 넣었다.
address 는 IP 인스턴스 각각 내부 IP를 넣어주고 클러스터 address는 클러스터 node address 를 나열한다.

여기까지 완료됬다면 galera 기본설정은 완료이다.

새로 만드는 클러스터일경우

#galera_new_cluster

명령어를 쳐주자. 이미 사용중이던 db를 클러스터로 만든다면 각각 mysql data를 클론뜨거나 dump 하여 데이터의 무결성을 검증할수 있도록 만들어준다음 클러스터로 엮어야한다.

이후 NLB를 추가하여

사용한 A/B/C 영역을 넣어주었고, 대상그룹에 galera cluster 를 넣어주었다.

상태가 healthy로 정상적으로 상태검사를 통과하는것을 확인할수 있었다.

이부분에서 확인할수 있었는데 상태검사를 통과하기 위해선 galera 보안그룹에 NLB가 위치한 subnet의 포트에 대해서 인바운드를 허용해 주어야지만 상태검사가 정상적으로 이루어 지는것을 확인하였다.

나는 이후에 NLB end point 로 rds 에서 db를 dump 하여 부어넣었다.

#mysqldump -h linuxer-blog-rds.com -u user -p DB > /home/linuxer-blog-db.sql

덤프후에 galrera cluster 로 접근하여 grant 권한을 웹서버에 맞춰서 설정해 주었다.

mysql>GRANT ALL PRIVILEGES ON db.* TO user@webserver_internal_ip IDENTIFIED BY ‘password’;

이후에 웹서버에서 밀어 넣었다.

mysql -h linuxer-galera-nlb.com -u user -p < /home/linuxer-blog-db.sql
Enter password:

정상적으로 데이터를 복구하였고 이후에 디비커넥션을 수정하여 rds 에서 galera로 접속되도록 설정하였다.

rds t2.micro

mariadb galera

평균 0.20s 정도 불러오는 속도 차이가 난다.

일주일간 galera cluster를 유지할 생각이다.

galera cost

rds cost

9$정도의 차이이며 아직 file over 테스트는 진행하지 않았다.
multi-AZ활성화 시에 rds 비용이 추가되는것을 생각하면 큰비용은 아니라 생각되지만..기본적으로 multi-AZ로 구성되는 galera의 경우엔 어떤것이 좋다 나쁘다는 아직 결정할수 있느 근거가 부족하였다.

일주일간의 시험테스트와 트러블슈팅 튜닝을 진행하면서 추가 포스팅을 진행하겠다. 읽어 주셔서 감사하다!

포스팅이 슬슬 마르기 시작한 이 시험에 흥미로운 주제를 만들어 주신 바다진주님께 감사를 드린다!

AWS Certified Solutions Architect – Professional Level Sample Exam Questions 풀이 02

문제는 아래 URL 에서 발췌하였다.

https://d1.awsstatic.com/Train%20%26%20Cert/docs/AWS_certified_solutions_architect_professional_examsample.pdf

영문
You are building a website that will retrieve and display highly sensitive information to users.
The amount of traffic the site will receive is known and not expected to fluctuate.
The site will leverage SSL to protect the communication between the clients and the web servers.
Due to the nature of the site you are very concerned about the security of your SSL private key and want to ensure that the key cannot be accidentally or intentionally moved outside your environment.
Additionally, while the data the site will display is stored on an encrypted EBS volume, you are also concerned that the web servers’ logs might contain some sensitive information; therefore, the logs must be stored so that they can only be decrypted by employees of your company.
Which of these architectures meets all of the requirements?

A) Use Elastic Load Balancing to distribute traffic to a set of web servers. To protect the SSL private key, upload the key to the load balancer and configure the load balancer to offload the SSL traffic. Write your web server logs to an ephemeral volume that has been encrypted using a randomly generated AES key.
B) Use Elastic Load Balancing to distribute traffic to a set of web servers. Use TCP load balancing on the load balancer and configure your web servers to retrieve the private key from a private Amazon S3 bucket on boot. Write your web server logs to a private Amazon S3 bucket using Amazon S3 server-side encryption.
C) Use Elastic Load Balancing to distribute traffic to a set of web servers, configure the load balancer to perform TCP load balancing, use an AWS CloudHSM to perform the SSL transactions, and write your web server logs to a private Amazon S3 bucket using Amazon S3 server-side encryption.
D) Use Elastic Load Balancing to distribute traffic to a set of web servers. Configure the load balancer to perform TCP load balancing, use an AWS CloudHSM to perform the SSL transactions, and write your web server logs to an ephemeral volume that has been encrypted using a randomly generated AES key.

이문제는 정말 의견이 분분한 문제이다.

댓글 전쟁에 참전 하고 싶다면 아래 URL을 추천한다.

https://acloud.guru/forums/aws-certified-solutions-architect-professional/discussion/-KVj_o43efIRONfHwq_q/sample_question_4

댓글에 일본판 문제는 답안을 포함하고 있다는 정보를 얻어 일본판을 찾아보았다.

일본어 문제이다.

ユーザーにとって機密性の高い情報を取得して表示するウェブサイトを構築しています。サイトが受信するトラフィックの量 はわかっていて、上下しないと予想されます。このサイトでは、SSL を活用してクライアントとウェブサーバー間の通信を 保護します。サイトの性質のゆえに、SSL プライベートキーのセキュリティについて非常に懸念しており、キーが誤って、または意図的に環境外に移動されることがないようにしたいと思っています。また、サイトで表示されるデータは暗号化され た EBS ボリュームに保存されますが、ウェブサーバーのログに機密情報が含まれることも懸念しているため、自社の従業 員以外には復号化できないようにログを保存する必要があります。すべての要件を満たすのは次のうちどのアーキテクチャです か?
A) Elastic Load Balancing を使用して、トラフィックを一連のウェブサーバーに分散する。SSL プライベートキーを保護 するため、キーをロードバランサーにアップロードして、SSL トラフィックの負荷を軽減するようにロードバランサーを 設定する。ウェブサーバーのログを、ランダムに生成された AES キーを使用して暗号化されているエフェメラルボリュ ームに書き込む。
B) Elastic Load Balancing を使用して、トラフィックを一連のウェブサーバーに分散する。ロードバランサーで TCP ロードバランシング を使用して、起動時にプライベート Amazon S3 バケットからプライベートキーを取得するよ うにウェブサーバーを設定する。Amazon S3 サーバー側の暗号化を使用して、ウェブサーバーのログをプライベー ト Amazon S3 バケットに書き込む。
C) Elastic Load Balancing を使用して、トラフィックを一連のウェブサーバーに分散する。TCP ロードバランシング を実行するようにロードバランサーを設定する。AWS CloudHSM を使用してウェブサー ー上で SSL トランザクションを処理し、Amazon S3 サーバー側の暗号化を使用して、ウェブサーバーのログをプライベート Amazon S3 バ ケットに書き込む。
D) Elastic Load Balancing を使用して、トラフィックを一連のウェブサーバーに分散する。 TCP ロードバランシングを 実行するためにロードバランサーを設定しする。AWS CloudHSM を使用してウェブサーバー上で SSL トランザクションを処理し、ウェブサーバーのログを、ランダムに生成された AES キーを使用して暗号化されているエフェメラルボ リュームに書き込む。

http://media.amazonwebservices.com/jp/certification/AWS_certified_solutions_architect_professional_examsample0701_08_final.pdf

실제로 정답이 하단에 표기되어 있으며, 일본어 판의 답은 D 이다.

구글 번역기
매우 민감한 정보를 검색하여 사용자에게 표시하는 웹 사이트를 구축 중입니다.
사이트에서 수신 할 트래픽의 양은 알려져 있으며 변동하지 않을 것으로 예상됩니다.
이 사이트는 SSL을 활용하여 클라이언트와 웹 서버 간의 통신을 보호합니다.
사이트의 특성상 SSL 개인 키의 보안에 대해 매우 우려하고 있으며 실수로 또는 의도적으로 키를 환경 외부로 이동할 수 없도록합니다.
또한 사이트에 표시 할 데이터는 암호화 된 EBS 볼륨에 저장되지만 웹 서버 로그에는 중요한 정보가 포함될 수 있습니다.
따라서 로그는 회사 직원 만 해독 할 수 있도록 저장해야합니다.
이 중 어느 아키텍처가 모든 요구 사항을 충족합니까?

A) Elastic Load Balancing을 사용하여 트래픽을 일련의 웹 서버에 분산시킵니다. SSL 개인 키를 보호하려면 키를로드 밸런서에 업로드하고 SSL 트래픽을 오프로드하도록로드 밸런서를 구성하십시오. 무작위로 생성 된 AES 키를 사용하여 암호화 된 임시 볼륨에 웹 서버 로그를 작성하십시오.
B) Elastic Load Balancing을 사용하여 트래픽을 일련의 웹 서버에 배포합니다. 로드 밸런서에서 TCP로드 밸런싱을 사용하고 부팅시 프라이빗 Amazon S3 버킷에서 프라이빗 키를 검색하도록 웹 서버를 구성하십시오. Amazon S3 서버 측 암호화를 사용하여 웹 서버 로그를 프라이빗 Amazon S3 버킷에 씁니다.
C) Elastic Load Balancing을 사용하여 트래픽을 웹 서버 세트에 분배하고,로드 밸런서가 TCP로드 밸런싱을 수행하도록 구성하고, AWS CloudHSM을 사용하여 SSL 트랜잭션을 수행하고, Amazon을 사용하여 웹 서버 로그를 프라이빗 Amazon S3 버킷에 쓰고 S3 서버 측 암호화를 사용합니다.
D) Elastic Load Balancing을 사용하여 트래픽을 일련의 웹 서버에 분산시킵니다. TCP로드 밸런싱을 수행하고 AWS CloudHSM을 사용하여 SSL 트랜잭션을 수행하고 임의로 생성 된 AES 키를 사용하여 암호화 된 임시 볼륨에 웹 서버 로그를 쓰도록로드 밸런서를 구성하십시오.

먼저 이문제의 요점을 정리하자면 로그를 암호화 해야되며 어떤 구성이 로그의 암호화를 충족하는지를 물어보는 문제이다.
일단 소거법으로 보자.
A는 키를 로드벨런서에 업로드 하였으므로 오답. 또한 ssl offloading은 서버와 클라이언트간 암호화는 아니다.
B는 가능한 방법이나 일반적인 방법은 아님.
C 는 cloudHSM 이뭔지 부터 알아야 한다. cloudHSM은 문제에서 요구하는 ssl 통신 구성이 가능하다.

https://docs.aws.amazon.com/ko_kr/cloudhsm/latest/userguide/ssl-offload.html

이미지를 참고하기 바란다.
따라서 C는 현재 아키텍처의 요구사항에 충족한다.
D또한 요구사항에 충족하는데 cloudHSM을 사용하고 임시볼륨에 웹서버 로그를 저장한다.
인스턴스가 재부팅될 경우 데이터가 사라지게 되는데 문제에는 로그의 보관기일이 정해져있거나 로그를 남겨야하는 내용은 없다.
따라서 C/D가 갈리게 된다. 개인적으론 답을 C라고 생각하는데 다른 생각이 있으신 분은 답글을 달아주시기 바란다.

일본판에선 D가 정답이므로 시험에 나오면 D를 선택하는게 좋을것 같다.

영문
You are designing network connectivity for your fat client application. The application is designed for business travelers who must be able to connect to it from their hotel rooms, cafes, public Wi-Fi hotspots, and elsewhere on the Internet. You do not want to publish the application on the Internet. Which network design meets the above requirements while minimizing deployment and operational costs?
A) Implement AWS Direct Connect, and create a private interface to your VPC. Create a public subnet and place your application servers in it.
B) Implement Elastic Load Balancing with an SSL listener that terminates the back-end connection to the application.
C) Configure an IPsec VPN connection, and provide the users with the configuration details. Create a public subnet in your VPC, and place your application servers in it.
D) Configure an SSL VPN solution in a public subnet of your VPC, then install and configure SSL VPN client software on all user computers. Create a private subnet in your VPC and place your application servers in it.

구글 번역기
팻 클라이언트 애플리케이션을위한 네트워크 연결을 설계하고 있습니다. 이 응용 프로그램은 호텔 객실, 카페, 공공 Wi-Fi 핫스팟 및 기타 인터넷에서 연결할 수 있어야하는 비즈니스 여행객을 위해 설계되었습니다. 인터넷에 응용 프로그램을 게시하고 싶지 않습니다. 배포 및 운영 비용을 최소화하면서 위의 요구 사항을 충족하는 네트워크 설계는 무엇입니까?
A) AWS Direct Connect를 구현하고 VPC에 대한 개인 인터페이스를 생성하십시오. 퍼블릭 서브넷을 생성하고 애플리케이션 서버를 그 안에 배치하십시오.
B) 애플리케이션에 대한 백엔드 연결을 종료하는 SSL 리스너를 사용하여 Elastic Load Balancing을 구현합니다.
C) IPsec VPN 연결을 구성하고 사용자에게 구성 세부 정보를 제공하십시오. VPC에 퍼블릭 서브넷을 생성하고 애플리케이션 서버를 퍼블릭 서브넷에 배치하십시오.
D) VPC의 퍼블릭 서브넷에서 SSL VPN 솔루션을 구성한 다음 모든 사용자 컴퓨터에서 SSL VPN 클라이언트 소프트웨어를 설치 및 구성하십시오. VPC에 프라이빗 서브넷을 생성하고 애플리케이션 서버를 배치하십시오.

팻 클라이언트
https://ko.wikipedia.org/wiki/팻_클라이언트

많은 기능을 제공하는 어플리케이션을 인터넷에 게시하지 않고 배포하고 싶다.
이건 vpn이다. 그리고 배포및 운영비용 최소화. 그럼 vpn 을 사용하여 비용 최적화를 해보자

A는 DC를 사용한다 비용최적화에서 오답.
B는 인터넷에 연결되어야 한다. 오답.
C는 IPSec VPN을 사용한다. aws IPSec VPN은
http:// https://docs.aws.amazon.com/ko_kr/vpn/latest/s2svpn/VPC_VPN.html
ipsec vpn으로 vpn 장비가 필요하다. 비용도 든다. 그래서 오답
D는 비용 효율적이며, 문제의 조건에 충족한다. 정답이다.

따라서 D가 정답이다.

영문
Your company hosts an on-premises legacy engineering application with 900GB of data shared via a central file server. The engineering data consists of thousands of individual files ranging in size from megabytes to multiple gigabytes. Engineers typically modify 5-10 percent of the files a day. Your CTO would like to migrate this application to AWS, but only if the application can be migrated over the weekend to minimize user downtime. You calculate that it will take a minimum of 48 hours to transfer 900GB of data using your company’s existing 45-Mbps Internet connection. After replicating the application’s environment in AWS, which option will allow you to move the application’s data to AWS without losing any data and within the given timeframe?
A) Copy the data to Amazon S3 using multiple threads and multi-part upload for large files over the weekend, and work in parallel with your developers to reconfigure the replicated application environment to leverage Amazon S3 to serve the engineering files.
B) Sync the application data to Amazon S3 starting a week before the migration, on Friday morning perform a final sync, and copy the entire data set to your AWS file server after the sync completes.
C) Copy the application data to a 1-TB USB drive on Friday and immediately send overnight, with Saturday delivery, the USB drive to AWS Import/Export to be imported as an EBS volume, mount the resulting EBS volume to your AWS file server on Sunday.
D) Leverage the AWS Storage Gateway to create a Gateway-Stored volume. On Friday copy the application data to the Storage Gateway volume. After the data has been copied, perform a snapshot of the volume and restore the volume as an EBS volume to be attached to your AWS file server on Sunday.

구글 번역본
회사는 중앙 파일 서버를 통해 900GB의 데이터를 공유하는 온-프레미스 레거시 엔지니어링 응용 프로그램을 호스팅합니다. 엔지니어링 데이터는 메가 바이트에서 수기가 바이트에 이르는 수천 개의 개별 파일로 구성됩니다. 엔지니어는 일반적으로 하루에 5-10 %의 파일을 수정합니다. CTO는이 애플리케이션을 AWS로 마이그레이션하려고하지만 주말 동안 애플리케이션을 마이그레이션하여 사용자 중단 시간을 최소화 할 수있는 경우에만 해당합니다. 회사의 기존 45Mbps 인터넷 연결을 사용하여 900GB의 데이터를 전송하는 데 최소 48 시간이 소요될 것으로 계산합니다. AWS에서 애플리케이션 환경을 복제 한 후 데이터 손실없이 주어진 기간 내에 애플리케이션 데이터를 AWS로 이동할 수있는 옵션은 무엇입니까?
A) 주말 동안 대용량 파일에 대해 다중 스레드 및 다중 부분 업로드를 사용하여 데이터를 Amazon S3에 복사하고 개발자와 병행하여 Amazon S3를 활용하여 엔지니어링 파일을 제공하도록 복제 된 애플리케이션 환경을 재구성합니다.
B) 마이그레이션 1 주일 전부터 금요일 아침에 최종 동기화를 수행하고 동기화가 완료된 후 전체 데이터 세트를 AWS 파일 서버에 복사하여 애플리케이션 데이터를 Amazon S3에 동기화합니다.
C) 금요일에 애플리케이션 데이터를 1TB USB 드라이브에 복사하고 토요일 배달을 통해 USB 드라이브를 AWS Import / Export로 전송하여 EBS 볼륨으로 가져 오면 결과 EBS 볼륨을 AWS 파일 서버에 마운트합니다. 일요일에.
D) AWS Storage Gateway를 활용하여 게이트웨이 저장 볼륨을 생성합니다. 금요일에 애플리케이션 데이터를 Storage Gateway 볼륨에 복사하십시오. 데이터를 복사 한 후 볼륨의 스냅 샷을 수행하고 일요일에 AWS 파일 서버에 연결할 EBS 볼륨으로 볼륨을 복원하십시오.

이문제는 굉장히 기분이 나쁜 유형의 문제이다. 하지만 마이그레이션 문제로 단골문제인거 같다.

먼저 900G를 aws로 마이그레이션 하는것이다. 45mbps로 이동시간은 2일이다.

A 회선이 느리므로 병목이 발생한다. 멀티파트 업로드가 소용이 없다. 오답이다.
B 파일의 변경이 많이 발생하지 않으므로 가능한 방법이다.
C의 경우 굉장히 긴가민가 했다. AWS Import/Export Disk는 일부리전에서 사용가능하긴 하나 인터넷을 사용하지 않음으로 병목도 없고
도착시부터 업로드가 시작되어 정상적으로 작업이 진행될것이라 생각했지만 usb 메모리의 속도는 그보다 떨어진다. 그래서 정해진 시간에 마이그레이션이 불가능하다는 결론에 도달했다.
그 결론에 도달한 이유는 ‘데이터 로드 시간은 기본적으로 디바이스 속도에 의해 좌우’ 아래 URL을 참고하기 바란다.
https://aws.amazon.com/ko/snowball/disk/faqs/
D AWS Storage Gateway는 네트워크를 이용하므로 동일하게 병목이 발생한다 따라서 오답이다.

그래서 위 문제의 정답은 B다.

AWS Certified Solutions Architect – Professional Level Sample Exam Questions 풀이 01

문제는 아래 URL 에서 발췌하였다.

https://d1.awsstatic.com/Train%20%26%20Cert/docs/AWS_certified_solutions_architect_professional_examsample.pdf

번역은 google 번역기이며 알아보기 어려운 부분을 조금 수정하였다.
실제 수정한것은 3번문제 조금이며 대부분 구글번역기를 의지하였다.

이번 글에선 3번문제 까지 풀이하였으니 참고바란다.

오역은..구글신님께 확인하시길 바란다.

틀린문제나 오역 오타 테클 환영하오니 이상한부분이 있다면 언제든 댓글달아 주시라!

1번 문제다.

원문
Your company’s on-premises content management system has the following architecture:
– Application Tier – Java code on a JBoss application server
– Database Tier – Oracle database regularly backed up to Amazon Simple Storage Service (S3) using the Oracle RMAN backup utility
– Static Content – stored on a 512GB gateway stored Storage Gateway volume attached to the application server via the iSCSI interface
Which AWS based disaster recovery strategy will give you the best RTO?
Deploy the Oracle database and the JBoss app server on EC2. Restore the RMAN Oracle backups from Amazon S3. Generate an EBS volume of static content from the Storage Gateway and attach it to the JBoss EC2 server.
Deploy the Oracle database on RDS. Deploy the JBoss app server on EC2. Restore the RMAN Oracle backups from Amazon Glacier. Generate an EBS volume of static content from the Storage Gateway and attach it to the JBoss EC2 server. (Glacier does help to give best RTO)
Deploy the Oracle database and the JBoss app server on EC2. Restore the RMAN Oracle backups from Amazon S3. Restore the static content by attaching an AWS Storage Gateway running on Amazon EC2 as an iSCSI volume to the JBoss EC2 server. (No need to attach the Storage Gateway as an iSCSI volume can just create a EBS volume)
Deploy the Oracle database and the JBoss app server on EC2. Restore the RMAN Oracle backups from Amazon S3. Restore the static content from an AWS Storage Gateway-VTL running on Amazon EC2 (VTL is Virtual Tape library and doesn’t fit the RTO)

번역본
회사의 온-프레미스 콘텐츠 관리 시스템에는 다음과 같은 아키텍처가 있습니다.
– 응용 프로그램 계층 – JBoss 응용 프로그램 서버의 Java 코드
– 데이터베이스 계층 – Oracle RMAN 백업 유틸리티를 사용하여 정기적으로 Amazon Simple Storage Service (S3)에 백업 된 Oracle 데이터베이스
– 정적 컨텐츠 – iSCSI 인터페이스를 통해 애플리케이션 서버에 연결된 스토리지 게이트웨이 볼륨이 512GB 게이트웨이에 저장
최고의 RTO를 제공하는 AWS 기반 재해 복구 전략은 무엇입니까?
A) EC2에 Oracle 데이터베이스 및 JBoss 앱 서버를 배포하십시오. Amazon S3에서 RMAN Oracle 백업을 복원하십시오. 스토리지 게이트웨이에서 정적 컨텐츠의 EBS 볼륨을 생성하여 JBoss EC2 서버에 연결하십시오.
B) RDS에 Oracle 데이터베이스를 배포하십시오. EC2에 JBoss 앱 서버를 배포하십시오. Amazon Glacier에서 RMAN Oracle 백업을 복원하십시오. 스토리지 게이트웨이에서 정적 컨텐츠의 EBS 볼륨을 생성하여 JBoss EC2 서버에 연결하십시오.
C) EC2에 Oracle 데이터베이스 및 JBoss 앱 서버를 배포하십시오. Amazon S3에서 RMAN Oracle 백업을 복원하십시오. Amazon EC2에서 실행중인 AWS Storage Gateway를 iSCSI 볼륨으로 JBoss EC2 서버에 연결하여 정적 컨텐츠를 복원하십시오. iSCSI 볼륨이 EBS 볼륨을 생성 할 수 있으므로 스토리지 게이트웨이를 연결할 필요가 없습니다.
D) EC2에 Oracle 데이터베이스 및 JBoss 앱 서버를 배포하십시오. Amazon S3에서 RMAN Oracle 백업을 복원하십시오. Amazon EC2에서 실행되는 AWS Storage Gateway-VTL에서 정적 컨텐츠를 복원합니다.

이 문제를 알기 위해선 먼저 알아야할것들이 있다. 이 문제의 주제가 무엇인지 문제를 읽으면 바로 알아야한다. 주제는 재해복구이다.
그럼 두번째로 알아야할것은 문제에서 요구하는 기준이 무엇인가 이다. ‘최고의 RTO(recovery time objective)’이다.

https://zetawiki.com/wiki/%EB%B3%B5%EA%B5%AC%EC%8B%9C%EC%A0%90%EB%AA%A9%ED%91%9C_RPO,_%EB%B3%B5%EA%B5%AC%EC%8B%9C%EA%B0%84%EB%AA%A9%ED%91%9C_RTO

그럼 보기에서 제일빨리 aws로 복구할수 있는 방법을 찾으면 된다.

참 쉽죠?

방법을 찾기전에 구성을 먼저 뜯어보자.

jboss를 aws에 구축한다면 역시 ec2외엔 답이없다.
데이터 베이스는 Oracle RMAN으로 s3로 백업을 한다고 하는데 이건 볼륨 백업이 아니라 데이터베이스 파일 단위의 백업이다.

정적 컨텐츠는 iSCSI로 연결된 스토리지 게이트웨이 512GB다 이것은 스토리지게이트웨이에서 볼륨게이트웨이 그리고 용량 언급이 있었으므로 저장볼륨 방식이다.
저장볼륨 방식으로 사용중이면 스냅샷을 생성해서 EBS볼륨을 생성하여 ec2에 연결하는 작업이 가능하다.

https://docs.aws.amazon.com/ko_kr/storagegateway/latest/userguide/StorageGatewayConcepts.html

정리하자면, aws 로 재해복구시에 최적의 RTO를 가지게 하려면 JBoss를 ec2로 만들고 oracle의 백업본이 있는 s3에서 백업을 복구하고 스토리지 게이트웨이 스냅샷에서 EBS 볼륨을 생성하여 EC2에 연결하면 된다.

정리한 내용에 최대한 부합하는 답변을 골라보자.

A) EC2에 Oracle 데이터베이스 및 JBoss 앱 서버를 배포하십시오. Amazon S3에서 RMAN Oracle 백업을 복원하십시오. 스토리지 게이트웨이에서 정적 컨텐츠의 EBS 볼륨을 생성하여 JBoss EC2 서버에 연결하십시오.

위 에서 서술한 내용과 흡사하다 지연될 만한 부분은 없다.

B) RDS에 Oracle 데이터베이스를 배포하십시오. EC2에 JBoss 앱 서버를 배포하십시오. Amazon Glacier에서 RMAN Oracle 백업을 복원하십시오. 스토리지 게이트웨이에서 정적 컨텐츠의 EBS 볼륨을 생성하여 JBoss EC2 서버에 연결하십시오.

Glacier에서 백업을 복원하므로 최고의 RTO는 어렵다. 그래서 B는 틀렸다.

C) EC2에 Oracle 데이터베이스 및 JBoss 앱 서버를 배포하십시오. Amazon S3에서 RMAN Oracle 백업을 복원하십시오. Amazon EC2에서 실행중인 AWS Storage Gateway를 iSCSI 볼륨으로 JBoss EC2 서버에 연결하여 정적 컨텐츠를 복원하십시오.

ISCSI 볼륨을 ec2에 연결해야 하므로 틀렸다 EBS볼륨을 생성하여 연결하는것이 훨씬 빠르다. 그래서 C 도 틀렸다.

D) EC2에 Oracle 데이터베이스 및 JBoss 앱 서버를 배포하십시오. Amazon S3에서 RMAN Oracle 백업을 복원하십시오. Amazon EC2에서 실행되는 AWS Storage Gateway-VTL에서 정적 컨텐츠를 복원합니다.

AWS Storage Gateway-VTL은 가상 테이프 라이브러리다.
VTL은 테이프 드라이브 단위로 제공되기때문에 문제에서 제공한 512GB 볼륨이 제공되지 않는다. 그래서 D도 틀렸다.

그래서 A가 정답이다.

A) EC2에 Oracle 데이터베이스 및 JBoss 앱 서버를 배포하십시오. Amazon S3에서 RMAN Oracle 백업을 복원하십시오. 스토리지 게이트웨이에서 정적 컨텐츠의 EBS 볼륨을 생성하여 JBoss EC2 서버에 연결하십시오.

2번 문제다.

원문
An ERP application is deployed across multiple AZs in a single region. In the event of failure, the Recovery Time Objective (RTO) must be less than 3 hours, and the Recovery Point Objective (RPO) must be 15 minutes. The customer realizes that data corruption occurred roughly 1.5 hours ago. What DR strategy could be used to achieve this RTO and RPO in the event of this kind of failure?

A) Take 15-minute DB backups stored in Amazon Glacier, with transaction logs stored in Amazon S3 every 5 minutes.
B) Use synchronous database master-slave replication between two Availability Zones.
C) Take hourly DB backups to Amazon S3, with transaction logs stored in S3 every 5 minutes.
D) Take hourly DB backups to an Amazon EC2 instance store volume, with transaction logs stored in Amazon S3 every 5 minutes.

번역본
ERP 애플리케이션은 단일 지역의 여러 AZ에 배포됩니다. 장애가 발생한 경우 RTO (Recovery Time Objective)는 3 시간 미만이어야하고 RPO (Recovery Point Objective)는 15 분이어야합니다. 고객은 약 1.5 시간 전에 데이터 손상이 발생했음을 알고 있습니다. 이러한 종류의 장애 발생시이 RTO 및 RPO를 달성하기 위해 어떤 재해복구 전략을 사용할 수 있습니까?

A) Amazon Glacier에 저장된 15 분 DB 백업을 5 분마다 Amazon S3에 저장된 트랜잭션 로그와 함께 수행하십시오.
B) 두 가용 영역간에 동기식 데이터베이스 마스터-슬레이브 복제를 사용하십시오.
C) 5 분마다 S3에 트랜잭션 로그가 저장된 Amazon S3에 시간별 DB 백업을 수행합니다.
D) Amazon S3에 5 분마다 저장된 트랜잭션 로그를 사용하여 Amazon EC2 인스턴스 스토어 볼륨에 매시간 DB 백업을 수행합니다.

1번 문제와 동일하게 재해복구관련 주제이다. 여기서 주목이야할 단어는 RTO / RPO 다
장애 발생 시점 부터 복구 완료 시점까지 걸리는 시간을 RTO 라고하며 RPO는 데이터를 손실했을떄 감내할수 있는 시간을 RPO라고 한다.

https://zetawiki.com/wiki/%EB%B3%B5%EA%B5%AC%EC%8B%9C%EC%A0%90%EB%AA%A9%ED%91%9C_RPO,_%EB%B3%B5%EA%B5%AC%EC%8B%9C%EA%B0%84%EB%AA%A9%ED%91%9C_RTO

그럼 문제에선 장애 발생시 3시간안에 복구 유실되는 데이터는 15분. 풀어서 쓰자면 서비스는 3시간내에 다시 정상화 되어야 하며, 데이터의 백업로테이션은 최대 15분이다.

문항을 살펴 보자

A) Amazon Glacier에 저장된 15 분 DB 백업을 5 분마다 Amazon S3에 저장된 트랜잭션 로그와 함께 수행하십시오.

Glacier 는 RTO 충족할수 없다. 그래서 틀렸다.
https://aws.amazon.com/ko/glacier/

B) B) 두 가용 영역간에 동기식 데이터베이스 마스터-슬레이브 복제를 사용하십시오.

동기식 복제는 백업이 아니며 장애또한 동기되므로 틀렸다.

C) 5 분마다 S3에 트랜잭션 로그가 저장된 Amazon S3에 시간별 DB 백업을 수행합니다.

5분마다 트랜잭션로그는 RPO에 충족하며 시간마다 DB백업은 RTO를 충족한다.

D) Amazon S3에 5 분마다 저장된 트랜잭션 로그를 사용하여 Amazon EC2 인스턴스 스토어 볼륨에 매시간 DB 백업을 수행합니다.

인스턴스 스토어는 인스턴스가 종료될시에 데이터를 유실하므로 백업의 좋은 방법이 아니다.

따라서 정답은 C다.

3번 문제다.

원문
The Marketing Director in your company asked you to create a mobile app that lets users post sightings of good deeds known as random acts of kindness in 80-character summaries. You decided to write the application in JavaScript so that it would run on the broadest range of phones, browsers, and tablets. Your application should provide access to Amazon DynamoDB to store the good deed summaries. Initial testing of a prototype shows that there aren’t large spikes in usage. Which option provides the most costeffective and scalable architecture for this application?

A) Provide the JavaScript client with temporary credentials from the Security Token Service using a Token Vending Machine (TVM) on an EC2 instance to provide signed credentials mapped to an Amazon Identity and Access Management (IAM) user allowing DynamoDB puts and S3 gets. You serve your mobile application out of an S3 bucket enabled as a web site. Your client updates DynamoDB.
B) Register the application with a Web Identity Provider like Amazon, Google, or Facebook, create an IAM role for that provider, and set up permissions for the IAM role to allow S3 gets and DynamoDB puts. You serve your mobile application out of an S3 bucket enabled as a web site. Your client updates DynamoDB.
C) Provide the JavaScript client with temporary credentials from the Security Token Service using a Token Vending Machine (TVM) to provide signed credentials mapped to an IAM user allowing DynamoDB puts. You serve your mobile application out of Apache EC2 instances that are load-balanced and autoscaled. Your EC2 instances are configured with an IAM role that allows DynamoDB puts. Your server updates DynamoDB.
D) Register the JavaScript application with a Web Identity Provider like Amazon, Google, or Facebook, create an IAM role for that provider, and set up permissions for the IAM role to allow DynamoDB puts. You serve your mobile application out of Apache EC2 instances that are load-balanced and autoscaled. Your EC2 instances are configured with an IAM role that allows DynamoDB puts. Your server updates DynamoDB.

번역본
회사의 마케팅 디렉터는 사용자가 임의의 친절한 행동으로 알려진 선의의 목격을 80자 요약을 게시 할 수있는 모바일 앱을 만들도록 요청했습니다. 광범위한 전화, 브라우저 및 태블릿에서 실행될 수 있도록 JavaScript로 응용 프로그램을 작성하기로 결정했습니다. 애플리케이션은 ’80자 요약’을 저장하기 위해 Amazon DynamoDB에 대한 액세스를 제공해야합니다. 프로토 타입을 처음 테스트 한 결과 사용량이 크게 증가하지 않은 것으로 나타났습니다. 이 응용 프로그램에 가장 비용 효율적이고 확장 가능한 아키텍처를 제공하는 옵션은 무엇입니까?

A) EC2 인스턴스에서 TVM (Token Vending Machine)을 사용하여 Security Token Service의 임시 자격 증명을 JavaScript 클라이언트에 제공하여 DynamoDB 넣기 및 S3 가져 오기를 허용하는 IAM (Amazon Identity and Access Management) 사용자에 매핑 된 서명 된 자격 증명을 제공합니다. 웹 사이트로 활성화 된 S3 버킷에서 모바일 애플리케이션을 제공합니다. 클라이언트가 DynamoDB를 업데이트합니다.
B) Amazon, Google 또는 Facebook과 같은 Web Identity Provider에 애플리케이션을 등록하고 해당 제공자에 대한 IAM 역할을 생성하고 S3 가져 오기 및 DynamoDB 넣기를 허용하는 IAM 역할에 대한 권한을 설정하십시오. 웹 사이트로 활성화 된 S3 버킷에서 모바일 애플리케이션을 제공합니다. 클라이언트가 DynamoDB를 업데이트합니다.
C) TVM (Token Vending Machine)을 사용하여 Security Token Service의 임시 자격 증명을 JavaScript 클라이언트에 제공하여 DynamoDB가 넣을 수있는 IAM 사용자에게 매핑 된 서명 된 자격 증명을 제공합니다. 로드 밸런싱되고 자동 확장되는 Apache EC2 인스턴스에서 모바일 애플리케이션을 제공합니다. EC2 인스턴스는 DynamoDB 풋을 허용하는 IAM 역할로 구성됩니다. 서버가 DynamoDB를 업데이트합니다.
D) Amazon, Google 또는 Facebook과 같은 Web Identity Provider에 JavaScript 애플리케이션을 등록하고 해당 제공자에 대한 IAM 역할을 생성하고 DynamoDB Put을 허용하는 IAM 역할에 대한 권한을 설정하십시오. 로드 밸런싱되고 자동 확장되는 Apache EC2 인스턴스에서 모바일 애플리케이션을 제공합니다. EC2 인스턴스는 DynamoDB 풋을 허용하는 IAM 역할로 구성됩니다. 서버가 DynamoDB를 업데이트합니다.

트위터 처럼 문자 제한이 있는 앱이고, JavaScript로 만들어져 있으며 여러 플랫폼에서 사용 가능하고 DynamoDB에 액세스 해야하며 확장성을 지녀야하며 비용 효율적인 아키텍쳐를 선택하면 된다.
사실 주목할점은 확장성과 비용효율이다.

A) EC2 인스턴스에서 TVM (Token Vending Machine)을 사용하여 Security Token Service의 임시 자격 증명을 JavaScript 클라이언트에 제공하여 DynamoDB 넣기 및 S3 가져 오기를 허용하는 IAM (Amazon Identity and Access Management) 사용자에 매핑 된 서명 된 자격 증명을 제공합니다. 웹 사이트로 활성화 된 S3 버킷에서 모바일 애플리케이션을 제공합니다. 클라이언트가 DynamoDB를 업데이트합니다.

EC2 를 사용하므로 확장성을 가지기 어렵다. 확장성에 대한 다른언급이 없으므로 단일인스턴스로 간주한다.

B) Amazon, Google 또는 Facebook과 같은 Web Identity Provider에 애플리케이션을 등록하고 해당 제공자에 대한 IAM 역할을 생성하고 S3 가져 오기 및 DynamoDB 넣기를 허용하는 IAM 역할에 대한 권한을 설정하십시오. 웹 사이트로 활성화 된 S3 버킷에서 모바일 애플리케이션을 제공합니다. 클라이언트가 DynamoDB를 업데이트합니다.

s3 정적 호스팅으로 웹을 호스팅하기에 확장성을 지니는 구성이며, 따로 ec2를 사용거나 하지않기에 비용 효율적이다.

C) TVM (Token Vending Machine)을 사용하여 Security Token Service의 임시 자격 증명을 JavaScript 클라이언트에 제공하여 DynamoDB가 넣을 수있는 IAM 사용자에게 매핑 된 서명 된 자격 증명을 제공합니다. 로드 밸런싱되고 자동 확장되는 Apache EC2 인스턴스에서 모바일 애플리케이션을 제공합니다. EC2 인스턴스는 DynamoDB 풋을 허용하는 IAM 역할로 구성됩니다. 서버가 DynamoDB를 업데이트합니다.
로드벨런싱을 사용하여 확장성을 지니나 비용효율적이지 못하다.

D) Amazon, Google 또는 Facebook과 같은 Web Identity Provider에 JavaScript 애플리케이션을 등록하고 해당 제공자에 대한 IAM 역할을 생성하고 DynamoDB Put을 허용하는 IAM 역할에 대한 권한을 설정하십시오. 로드 밸런싱되고 자동 확장되는 Apache EC2 인스턴스에서 모바일 애플리케이션을 제공합니다. EC2 인스턴스는 DynamoDB 풋을 허용하는 IAM 역할로 구성됩니다. 서버가 DynamoDB를 업데이트합니다.
C와 같은 이유이다. 로드벨런싱을 사용하여 확장성을 지니나 비용효율적이지 못하다.

따라서 정답은 B이다.

aws 홍콩/바레인 리전 활성화

홍콩 / 바레인 리전이 리전 리스트엔 있으나 들어가면 활성화 하라고 뜬다.
이전에는 리전 선택버튼이 비활성화로 되어있었다.

여기에서 홍콩이나 바레인 을 선택하면 아래와 같은 페이지가 뜬다.

계속을 눌러서 활성화로 가는것도 가능하다. 그게 아니라면 내계정으로 이동후에

저기 빨간부분에서 활성화 누르면 된다.

…..

원랜 선택이 비활성화 였는데 메뉴가 좀바뀌었다..

뻘쭈미..태그안쓰고 포스팅해야징…

ssm 과 user 디렉토리 퍼미션의 상관 관계

고객사에서 ubuntu user 에 777 퍼미션을 부여해 버렸다.

chmod -R 777 /home

home 디렉토리 하단으로 모든 퍼미션이 777이 부여되었고 ubuntu계정까지 777 권한이라 KEY를 사용하여 로그인을 할수 없는 상태가 되어버렸다.

이경우에 할수있는 방법은 SSM session manager로 접속할수 있다면 간단하게 해결되었을 문제이나 신규로 생성된 인스턴스인터라 SSM을 사용하고 있지 않았다.

이경우엔 다른인스턴스에 /home 파티션만 떼서 붙여서 권한을 복구한다음에 정상화 할수 있었다.

session manager 는 권한과 상관없이 동작하는지 확인하고 싶었다.

세션 매니저로 접속

root 15229 1.0 1.5 543752 15912 ? Sl 10:30 0:00 _ /usr/bin/ssm-session-worker root-0f7a9e1a4bbc90b i-052ebb4feade551
ssm-user 15242 0.0 0.3 124264 3280 pts/0 Ss 10:30 0:00 _ sh

쉘에서 확인시에 세션을 연결하면 위와같이 확인이된다.

유저 접속 확인

root@ip-10-0-0-12 home]# w
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT

root@ip-10-0-0-12 home]# last
reboot system boot 4.14.133-113.112 Wed Aug 28 12:43 – 10:34 (21:50)

session manager 는 w나 last에서 확인할수 없다. 로그인 내역은 aws console 에서 확인해야 하고 실제로 인스턴스 내에서 확인하려면 messages 로그에서 확인해야 한다.

Aug 29 11:33:49 ip-10-0-0-12 amazon-ssm-agent: 2019-08-29 11:33:49 INFO [MessageGatewayService] [EngineProcessor] [OutOfProcExecuter] [root-0aa231b76382aca8c] channel: root-0aa231b76382aca8c not found, creatinga new file channel…

Aug 29 11:33:49 ip-10-0-0-12 amazon-ssm-agent: 2019-08-29 11:33:49 INFO [MessageGatewayService] [EngineProcessor] [OutOfProcExecuter] [root-0aa231b76382aca8c] inter process communication started

ssm 세션 생성시에 발생하는 로그다.

이제 ssm user 에 777 부여후에 정상적으로 로그인 되는지 확인해 보겠다.

root@ip-10-0-0-12 home]# chmod 777 -R ssm-user

root@ip-10-0-0-12 home]# ls -al
drwxrwxrwx 2 ssm-user ssm-user 83 Aug 20 22:27 ssm-user

root@ip-10-0-0-12 ssm-user]# ls -al
-rwxrwxrwx 1 ssm-user ssm-user 265 Aug 28 13:26 .bash_history
-rwxrwxrwx 1 ssm-user ssm-user 18 Jul 28 2018 .bash_logout
-rwxrwxrwx 1 ssm-user ssm-user 193 Jul 28 2018 .bash_profile
-rwxrwxrwx 1 ssm-user ssm-user 231 Jul 28 2018 .bashrc

정상적으로 연결되는것을 확인할 수 있었다.

key로 연결되는 계정은 권한으로 인해 접속불가 상태에 빠질수 있지만
session manager 는 인스턴스가 클라이언트가 되어 동작하는 방식이라 user 디렉토리 권한과는 상관없이 정상적으로 접근이 가능한것을 알수있다.

사실 조금 쓸데없는 테스트이긴 하나 도움이 되면 좋겠다!

아디오스!

aws ec2 instance 상태이상 확인

갑자기 블로그가 안열렸다. 따로 모니터링을 설정한건 아니라서 다운된지 몰랐다. 먼저 aws console 에서 인스턴스의 상태를 확인해 보기로 했다.

상태검사를 통과 하지못한 인스턴스가 확인된다. 이럴땐 ec2 상태검사 탭을 확인한다.

서버가 죽은지 벌써10시간째. 모니터링을 설정해 놨어야 했는데 불찰이 느껴진다. 일 단 트러블 슈팅을 시작한다.

첫번째로 로그인을 진행해 본다. ssm 세션매니저를 통해서 접속해본다.

응. 안돼. 돌아가
접속할수 없다.

그럼 차선책으로 인스턴스의 스크린샷을 확인해 본다.

인스턴스 설정에서 시스템로그 가져오기는 dmesg 를 보여준다 그래서 이경우에 필요가 없다. 인스턴스가 행이 아니라 리부팅중 멈추거나 인스턴스 부팅 장애의 경우에는 시스템 로그가져오기로 봐야한다.

메모리…메ㅗㅁㅣㄹ…………!!!!!!!!!!!!!!

프리티어라 죽었다.

재시작은 안되고 인스턴스를 중지한다. 재시작이 안될경우 중지/시작을 해야한다.

EIP 가 연결되지 않은 인스턴스의 경우엔 IP가 변경된다 EIP를 붙여서 사용하자

중지중이다.
중지중에 모니터링 그래프를 확인해 본다.

며칠전 포스팅했던 cloudwatch 를 이용한 메모리와 하드디스크 체크이다.
메모리가 훅 날라간게 보인다.

리부팅 완료하고 인스턴스의 상태가 정상으로 변경되었다. 그렇다면 정확한 이유를 알아야한다.

messages 로그에서 확인한 내용이다 스왑도 없고 메모리도 없어서 죽었다.
사실 프리티어라 swap 이 없다. 이후에 파일스왑으로 2G정도 만들어줄계획이다.

Aug 27 21:19:51 ip-10-0-0-12 kernel: active_anon:214310 inactive_anon:7454 isolated_anon:0#012 active_file:326 inactive_file:360 isolated_file:0#012 unevictable:0 dirty:0 writeback:0 unstable:0#012 slab_reclaimable:3331 slab_unreclaimable:5159#012 mapped:7669 shmem:7487 pagetables:3235 bounce:0#012 free:12190 free_pcp:180 free_cma:0
Aug 27 21:19:51 ip-10-0-0-12 kernel: Node 0 active_anon:857240kB inactive_anon:29816kB active_file:1304kB inactive_file:1440kB unevictable:0kB isolated(anon):0kB isolated(file):0kB mapped:30676kB dirty:0kB writeback:0kB shmem:29948kB shmem_thp: 0kB shmem_pmdmapped: 0kB anon_thp: 0kB writeback_tmp:0kB unstable:0kB all_unreclaimable? no
Aug 27 21:19:51 ip-10-0-0-12 kernel: Node 0 DMA free:4464kB min:736kB low:920kB high:1104kB active_anon:11168kB inactive_anon:44kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:15988kB managed:15904kB mlocked:0kB kernel_stack:0kB pagetables:32kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kBAug 27 21:19:51 ip-10-0-0-12 kernel: lowmem_reserve[]: 0 932 932 932
Aug 27 21:19:51 ip-10-0-0-12 kernel: Node 0 DMA32 free:44296kB min:44316kB low:55392kB high:66468kB active_anon:846072kB inactive_anon:29772kB active_file:1304kB inactive_file:1440kB unevictable:0kB writepending:0kB present:1032192kB managed:991428kB mlocked:0kB kernel_stack:6352kB pagetables:12908kB bounce:0kB free_pcp:720kB local_pcp:720kB free_cma:0kB
Aug 27 21:19:51 ip-10-0-0-12 kernel: lowmem_reserve[]: 0 0 0 0
Aug 27 21:19:51 ip-10-0-0-12 kernel: Node 0 DMA: 84kB (UME) 88kB (UME) 1116kB (UE) 932kB (UE) 964kB (UME) 4128kB (UE) 5256kB (UME) 1512kB (E) 11024kB (E) 02048kB 04096kB = 4464kBAug 27 21:19:51 ip-10-0-0-12 kernel: Node 0 DMA32: 10224kB (UE) 4008kB (UE) 24116kB (UME) 13832kB (UME) 14364kB (UME) 61128kB (UE) 12256kB (ME) 13512kB (UE) 21024kB (UM) 02048kB 04096kB = 44296kB
Aug 27 21:19:51 ip-10-0-0-12 kernel: Node 0 hugepages_total=0 hugepages_free=0 hugepages_surp=0 hugepages_size=2048kB

그럼 왜 스왑도 메모리도 없었을까? 웹서버 이므로 웹로그를 확인해 보았다.

어제 급하게 포스팅하느라 업로드한 파일들을 재대로 처리못하고 죽은거다.

아놔~~~~~~~~~~~~

이후로 모니터링 체크하나 만들어서 알럿하도록 설정하는 포스팅을 작성하겠다.

좋은하루 되시라!

사이트는 잘열리는것을 확인할수 있었다!

aws cloud watch 여러대의 인스턴스에 대한 하나의 경보 생성.ver2

cloudwatch 경보생성 입니다.

여러대의 인스턴스를 하나로 묶어서 경보생성할때 사용하는 방법입니다.

경보 생성을 누릅니다.

지표 선택을 눌러서 지표를 확인합니다.이번에 경보를 생성할 지표는 “CPUUtilization”입니다.

검색하여 체크 후에 ‘그래프로 표시된 지표’ 를 누릅니다.
표시된 지표는 9개 까지 체크하여 추가할수 있습니다.

제한사항으로

 수학표현식을 추가합니다.
수학 표현식은 상황에 따라 잘 사용하기로 바랍니다.https://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/monitoring/using-metric-math.html
이번에는 CPU사용량이 1대라도 70% 를 넘을 경우 경보를 생성할 것이므로 사용한 표현식은 MAX(METRICS()) 입니다.

전체를 체크할 경우 아래와 같이 지표선택 버튼이 활성화 되지 않습니다.

사용할 수학 표현식 하나만 체크해야 생성이 가능합니다.

위와같이 지표를 생성후에 경보생성은 SNS 를 사용해야 하므로 SNS 사용법은 각자 확인해보시기 바랍니다. 

즐거운 하루되세요~

cloud watch monitering script

WEB console
iam 추가와 watch 지표가 생성 되는 확인만 하면 된다.

필요한 권한
cloudwatch:PutMetricData
cloudwatch:GetMetricStatistics
cloudwatch:ListMetrics
ec2:DescribeTags

policy 생성

{
“Version”: “2012-10-17”,
“Statement”: [
{
“Sid”: “VisualEditor0”,
“Effect”: “Allow”,
“Action”: [
“cloudwatch:PutMetricData”,
“ec2:DescribeTags”,
“cloudwatch:GetMetricStatistics”,
“cloudwatch:ListMetrics”
],
“Resource”: “*”
}
]
}

생성한 정책을 user를 생성하여 부여

Shell 작업

로그인

스크립트를 실행하고 설치하는데 필요한 패키지를 설치한다.

sudo yum install -y perl-Switch perl-DateTime perl-Sys-Syslog perl-LWP-Protocol-https perl-Digest-SHA.x86_64 unzip
cd ~

cloud watch monitering script download

curl https://aws-cloudwatch.s3.amazonaws.com/downloads/CloudWatchMonitoringScripts-1.2.2.zip -O

압축해제 및 스크립트 테스트할 경로로 이동

unzip CloudWatchMonitoringScripts-1.2.2.zip && \
rm CloudWatchMonitoringScripts-1.2.2.zip && \
cd aws-scripts-mon

awscreds.conf 생성 및 입력

cp awscreds.template awscreds.conf

vi awscreds.conf
AWSAccessKeyId=
AWSSecretKey=

테스트 명령어 watch 로 전송하지 않음

./mon-put-instance-data.pl –mem-util –verify –verbose

MemoryUtilization: 20.5104909003152 (Percent)
Using AWS credentials file <./awscreds.conf>
Endpoint: https://monitoring.ap-northeast-2.amazonaws.com
Payload: {“MetricData”:[{“Timestamp”:156646131,”Dimensions”:[{“Value”:”i-0baaeb0265″,”Name”:”InstanceId”}],”Value”:20.5104909003152,”Unit”:”Percent”,”MetricName”:”MemoryUtilization”}],”Namespace”:”System/Linux”,”__type”:”com.amazonaws.cloudwatch.v2010_08_01#PutMetricDataInput”}

정상 응답확인

crontab 등록
vi /etc/crontab
#disk metric
*/5 * * * * root /root/aws-scripts-mon/mon-put-instance-data.pl –mem-used-incl-cache-buff –mem-util –disk-space-util –disk-path=/ -disk-path=/home –from-cron

disk-path 는 여러개가 들어가도 상관없다.

systemctl restart crond

설치과정이 정상이라면 아래와같이 linux 시스템으로 지표가 생긴다.

이로서 모니터링 지표 생성까지 포스팅을 마쳤다.

경보생성은 다른 포스팅이 많으니 생략한다.

aws solution architect professional C01 후기

후기는 적어보고 싶었다.

7월 4일 1차시험 7월 31일 2차시험을 봤다.

2차시험에 합격했으며 점수는 아슬아슬하게 761점이었다.

aws solution architect associate 자격증은 17년 11월에 취득했다. 이후로 aws 관련 실무를 했지만 대부분 SE 관련 서버 업무였고 SA 업무를 보게된건 19년 초 부터 이다.

SA pro 자격증은 계속 따고 싶었으나, 결심이 부족했다. 그러다 하루에 한시간씩 공부를 했다. 5월 초부터 1시간씩 매일 공부를 했으니 거의 두달가량을 매일 공부했다고 보면된다.

본격적인 공부는 6월 말경부터 시작했다 그 동안의 공부를 기반으로 제일먼저 풀이한건 예제문제 였다.

https://d1.awsstatic.com/Train%20%26%20Cert/docs/AWS_certified_solutions_architect_professional_examsample.pdf

예제 문제에 나오는 유형을 보고 나온서비스의 FnQ를 모두 보았다,

그리고 모의고사를 두번 봤다. 4만5천원 가량..내10만원..
이건 굉장히 도움이 많이됬다.

그리고 1차시험을 보기전엔 udemy 에서 나온 sap 2019 C01이라고 나온 문제들 3과목정도 봤고 비용은 10-15만원 정도 들었다. 도움이 전혀안된건 아니지만 그렇다고 해서 많은 도움이 된건 아니었다. 이유는 C01 유형이 아니라 C00유형 문제들이었다.

그래서 덤프나 유사유형 문제들이 없는것을 알고는 전략을 수정해서 https://www.aws.training/LearningLibrary
트레이닝을 먼저 다보고 aws 관련 영상을 봤다.

aws korea youtube 에서 거의 대부분의 세션을 봤다.
이것도 어느정도 도움이 됬다.

여기까지 공부하고
https://aws.amazon.com/ko/architecture/?awsf.quickstart-architecture-page-filter=highlight%23new
아키텍처 센터를 한번봤다.

그리고 자격증 백서도 좀봤다
https://github.com/serithemage/AWSCertifiedSolutionsArchitectUnofficialStudyGuide

시험을 앞두고서는 하루에 12시간 정도 공부를해서 4일정도 준비를 했다.
끊임없이 읽고 이해하려는 과정을 거쳤다.

중점적으로 본건 마이그레이션과 장애복구 부분이었다.
코스트 쪽은 주로하는 업무에 기반해서 일반구성도 마찬가지.

시나리오로 시작하는 질문이 대다수 이며 단순기능을 물어보는 질문은 없으니 참고하도록 하자.

sap 자격증을 따고난 소감을 한마디로


” 엄청좋다.”

궁금한 것은 언제든 댓글로 남겨 놓으며 답변해 드리겠다.

즐거운 공부되시라!