[실습목표]
실습 1번 목표(AllinOne)
실습 2번 목표
워드프레스에 대한 설정정보는 내부에 두게 되면 인스턴스 증가나 감소시에 다른 DB를 사용하여 내용이 불일치 되는 것을 방지하기 위해 EFS를 이용해 정보를 보관하여 통일성을 유지할 수 있도록 하기
서버의 부하도를 줄이기 위해 필요한 자료의 업로드는 S3 bucket을 이용
RDS를 이중화 하여 장애에 대비
실습3
# 업로드 폴더로 이동
cd /var/www/html/wp-content/uploads
# 업로드 폴더 정보 확인
[root@AllInOne uploads]# tree
.
└── 2021
└── 08
# 업로드 폴더 정보 확인
[ec2-user@AllInOne uploads]$ tree
.
└── 2021
└── 08
├── 2-1024x738.png
├── 2-150x150.png
├── 2-300x216.png
├── 2-768x554.png
└── 2.png
2 directories, 5 files
# 업로드 폴더 정보 확인
[ec2-user@AllInOne uploads]$ tree
.
└── 2021
└── 08
├── 2-1024x738.png
├── 2-150x150.png
├── 2-300x216.png
├── 2-768x554.png
└── 2.png
2 directories, 5 files
# aws s3 내용 확인하기
[ec2-user@AllInOne uploads]$ aws s3 ls s3://zandi123 --recursive
2021-08-22 12:44:35 60389 wp-content/uploads/2021/08/22214434/js-1024x576.jpg
2021-08-22 12:44:35 11344 wp-content/uploads/2021/08/22214434/js-150x150.jpg
2021-08-22 12:44:36 100432 wp-content/uploads/2021/08/22214434/js-1536x864.jpg
2021-08-22 12:44:36 104002 wp-content/uploads/2021/08/22214434/js-1568x882.jpg
2021-08-22 12:44:35 13452 wp-content/uploads/2021/08/22214434/js-300x169.jpg
2021-08-22 12:44:35 41375 wp-content/uploads/2021/08/22214434/js-768x432.jpg
2021-08-22 12:44:35 375210 wp-content/uploads/2021/08/22214434/js.jpg
사용자들이 해당 파일을 다운로드 할 수 있게 설정
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::자신의버킷이름/*"
]
}
]
}
실습목표
워드프레스에 대한 설정정보는 내부에 두게 되면 인스턴스 증가나 감소시에 다른 DB를 사용하여 내용이 불일치 되는 것을 방지하기 위해 EFS를 이용해 정보를 보관하여 통일성을 유지할 수 있도록 하기
서버의 부하도를 줄이기 위해 필요한 자료의 업로드는 S3 bucket을 이용
RDS를 이중화 하여 장애에 대비
# 관리자 권한으로 변경
sudo su -
# EFS 파일시스템 마운트 확인
[ec2-user@WebSrv-Leader ~]$ df -hT |egrep '(File|nfs)'
Filesystem Type Size Used Avail Use% Mounted on
fs-467ff326.efs.ap-northeast-2.amazonaws.com:/ nfs4 8.0E 66M 8.0E 1% /var/www/wordpress
# EFS 접근되는지 확인-wordpress 파일을 출력하기
[root@WebSrv-Leader ~]# tree -L 1 /var/www/wordpress/
/var/www/wordpress/
├── index.php
├── license.txt
├── load.php
├── readme.html
├── wp-activate.php
├── wp-admin
├── wp-blog-header.php
├── wp-comments-post.php
├── wp-config.php
├── wp-config-sample.php
├── wp-content
├── wp-cron.php
├── wp-includes
├── wp-links-opml.php
├── wp-load.php
├── wp-login.php
├── wp-mail.php
├── wp-settings.php
├── wp-signup.php
├── wp-trackback.php
├── xff.php
└── xmlrpc.php
# RDS 엔드포인트를 변수에 지정
RDS=wpdb.ckm3nprg4gom.ap-northeast-2.rds.amazonaws.com
# 현재 위치 확인
grep -n DB_HOST /var/www/wordpress/wp-config.php
# wp-config.php 파일에 DB 주소를 RDS 엔드포인트로 설정
sed -i "s/localhost/$RDS/g" /var/www/wordpress/wp-config.php
# DB 접속 테스트
mysql -h $RDS -uroot -pqwe12345 -e 'show databases;'
mysql -h $RDS -uroot -pqwe12345
exit
# dig 조회 > RDS의 주소
dig +short $RDS
CloudFront 주소로 접근 후 WordPress 설치하기
WordPress 설정 > 워드프레스 주소, 사이트 주소를 CloudFront 주소로 바꾸기(http로)
#!/bin/bash
amazon-linux-extras install lamp-mariadb10.2-php7.2 php7.2 -y
yum install httpd htop amazon-efs-utils tree -y
systemctl start httpd && systemctl enable httpd
yum install gcc php-xml php-mbstring php-sodium php-devel php-pear ImageMagick-devel ghostscript -y
cat <<EOT> /etc/php.d/40-imagick.ini
extension = imagick.so
EOT
printf "\n" | pecl install imagick
sed -i 's/^upload_max_filesize = 2M/upload_max_filesize = 64M/g' /etc/php.ini
sed -i 's/^post_max_size = 8M/post_max_size = 64M/g' /etc/php.ini
sed -i 's/^max_execution_time = 30/max_execution_time = 300/g' /etc/php.ini
sed -i 's/^memory_limit = 128M/memory_limit = -1/g' /etc/php.ini
mkdir -p /var/www/wordpress/
mount -t efs 자신의EFS파일시스템ID:/ /var/www/wordpress
chown -R apache:apache /var/www
chmod 2775 /var/www
find /var/www -type d -exec chmod 2775 {} \;
find /var/www -type f -exec chmod 0664 {} \;
chmod u+wrx /var/www/wordpress/wp-content/*
echo 'ServerName 127.0.0.1:80' >> /etc/httpd/conf.d/MyBlog.conf
echo 'DocumentRoot /var/www/wordpress' >> /etc/httpd/conf.d/MyBlog.conf
echo '<Directory /var/www/wordpress>' >> /etc/httpd/conf.d/MyBlog.conf
echo ' Options Indexes FollowSymLinks' >> /etc/httpd/conf.d/MyBlog.conf
echo ' AllowOverride All' >> /etc/httpd/conf.d/MyBlog.conf
echo ' Require all granted' >> /etc/httpd/conf.d/MyBlog.conf
echo '</Directory>' >> /etc/httpd/conf.d/MyBlog.conf
systemctl restart php-fpm
systemctl restart httpd
Auto Scaling 그룹생성 설정
시작 템플릿 또는 구성 선택
설정구성
고급 옵션 구성
그룹 크기 및 조정 정책 구성
태그 추가
# 웹 접속 테스트 (리전, 인스턴스ID, Private IP)
WPDNS=dh5zcqsgbwk63.cloudfront.net # cloudFront 주소
Web1=13.125.26.196 # 퍼블릭주소
Web2=52.79.236.122 # 퍼블릭주소
# 변수 제대로 들어갔는지 확인 - private IP 확인 > 여러번 반복하면 부하 분산으로 인해 private IP 가 번갈아 바뀌는 것을 확인할 수 있음
curl $WPDNS/xff.php;echo
# 터미널1 - 1개 요청(풀)로 총합 500번 요청 진행
ab -n 500 -c 1 http://$Web1/load.php
# 터미널2 - 20개 요청(풀)로 총합 1000번 요청 진행
ab -n 1000 -c 20 http://$WPDNS/load.php
ab -n 1000 -c 20 http://$Web2/load.php
# 접속 되는 EC2 마다 현재 CPU 부하 출력
while true; do curl $WPDNS/xff.php --silent --connect-timeout 1; date; echo "---[AutoScaling]---"; sleep 1; done
# EC2 증가 이후 증감 확인
for i in {1..100}; do curl $WPDNS/xff.php --silent;echo ; done | sort | uniq -c | sort -nr
# RDS 엔드포인트를 변수에 지정
RDS=wpdb.ckm3nprg4gom.ap-northeast-2.rds.amazonaws.com
# dig 조회 > RDS의 주소
dig +short $RDS # 10.1.4.147
장애 조치로 재부팅하시겠습니까?
체크 -> 확인
클릭# dig 조회 > RDS의 주소
dig +short $RDS # 10.1.3.11
# 웹 접속 테스트 (리전, 인스턴스ID, Private IP)
WPDNS=dh5zcqsgbwk63.cloudfront.net # cloudFront 주소
# 변수 제대로 들어갔는지 확인 - private IP 확인 > 여러번 해봐도 ap-northeast-2c 의 인스턴스의 ip만 나오는 것을 확인할 수 있음
curl $WPDNS/xff.php;echo
CloudNet@ 팀의 가시다입니다. 10주간 수고많으셨습니다 :)