route53 에서 한글 도메인 사용법. 부제 - 장난으로 리눅서.com 구매한 이야기

흔히들 한글도메인을 많이 사용한다.
처음 한글도메인을 사용하시는분들이 겪게 되는 이야기다.

route53에서 한글 도메인 구입은되는데 hosted zone 생성은 안된다고 한다.

간단하다 모든 네임서버는 한글을 인식할수 없다.

그런데 우리는 한글도메인을 사용한다. 사용할때 필요한것이 퓨니코드다.

퓨니코드(Punycode)는 유니코드 문자열을 호스트 이름에서 허용된 문자만으로 인코딩하는 방법으로, RFC 3492에 기술되어 있다. 퓨니코드는 유니코드가 지원하는 모든 언어로 국제화 도메인을 쓸 수 있게 한 IDNA의 일부로, 변환은 전적으로 웹 브라우저와 같은 클라이언트에서 이루어진다.

뭐그렇단다.

그래서 퓨니코드로 인코딩된 문자열로 hosted zone 을 생성하면 사용할수 있다.

갑자기 든 의문이다. 퓨니코드 서브도메인은 생성이 가능할까?

도전해 본다.

https://후이즈검색.한국/idnconv/index.jsp

에서 변환가능하다.

리눅서.linuxer.name 를 변환하면 xn--pd1b38litg.linuxer.name 가 된다.

퓨니코드로 변환된 서브도메인으로 접속시에 잘된다.

결론. 한글서브도메인 route53에서 사용가능하다. 그럼 혹시 com 도메인도 퓨니코드로 변환해서 등록이 가능하지 않을까?

xn--pd1b38litg.com 으로 검색이 되고 구매까지 이어진다.

크래딧으로는 도메인을 구매할수 없다.

등록대기중 뜨고.

결제도 되구..
엥? 진짜? 리눅스.com 생성되는거야??????????????????????

리얼리? 농담인데;;;;;;;;;;;;

자동으로 hosted zone 도 생성됬고.......돌이킬수 없게 됬다.

나는 장난으로 리눅서.com을 가지게 되었다...

1년시한부로..

당연히 될건 알았는데 사고나니 좀 웃기기도 하고 그렇다.

리눅서.com 출격합니다.

acm도 잘추가되고!

웹사이트도 잘열리고!

감사합니다.

ssh putty로 접근시 로그인창이 늦게 뜨는 증상.

putty로 ssh 접근시에 로그인이 느리다는 의뢰인이 있었다.

보통이경우엔 UseDNS no 나 GSSAPI Authentication 인증으로 인하여 느려지게 된다. GSSAPI 관련 문제의 경우엔 보통 secure 로그에 GSSAPI 에러가 남게된다. 그래서 보통 접근은 DNS -> GSSAPI 순으로 하게되는데 제일먼저 /etc/resolv.conf 에 nameserver 설정을 변경하고 그다음은 sshd_config 에서 UseDNS no 설정을 추가하게 된다.

일단 하나로 UseDNS no 옵션도 GSSAPI도 아니라 일단 하나로 DNS인 210.220.163.82를 알려주었다.

그러던중 이상한걸 발견했다. sesure 로그에서 질문인의 IP가 222.222.222.1인것.

베이징 IP다.

222.222.222.1은 베이징의 공인IP로 퍼블릭으로 연결되는 설정이 있는 VM의 경우 route로인해 첫번째 문제가 발생하고 vm에서 dns 확인하면서 ssh 접속이 느려지는 문제가 발생한다, 그렇기에 우리는 네트워크에 정해진 규약을 사용해야 한다.

10.0.0.0 ~ 10.255.255.255
172.16.0.0 ~ 172.31.255.255
192.168.0.0 ~ 192.168.255.255
사설 IP 대역을 사용하지 않아서 ssh 접속이 느려졌다.

사설 IP사용은 이유가 있다.

오늘 포스팅 주제를 선물해주신 신난 어피치님 매우 감사드린다!

aws free tier 한계까지 써보기.

galera 테스트를 진행하면서 블로그의 max connection을 테스트 할수 있었다.
한계는 명확했다.

50...!

50...!!!!!!!!!!

50!!!!!!!!!!!!!!!!

t2.micro 사이즈 의 rds 의 max_connections는 134 인데 50까지 밖에 안된다는건 역시 web의 문제일 확률이 크다.

php-fpm에서 문제를 확인할수 있었는데 바로 알게된 이유는 apache의 제한은 그보다 크게 설정되어있기 때문이다.

#cat /etc/php-fpm.d/www.conf | grep pm.max_children
pm.max_children = 50 => 150
#systemctl restart php-fpm

php-fpm 에서 사용할수 있는 자식프로세스 개수를 150개로 변경하였다.

이만하면 충분히 web 인스턴스를 죽일수 있을거라 생각된다.
동접자만 확인하면 되는데 쓸데없이 흥분해서 30000번의 테스트를 보냈다.

로드벨런서 요청 갯수다. 그리고 인스턴스 안에서 로그로 리퀘스트 횟수를 확인해보니 약 9000개 정도..

어? 나쁘지 않은데? 싶다. 솔직히 내블로그가 동시접속자 1000명으로 몇번이나 견딜까 싶기도 하고... 하지만 여기서 그칠순 없다. 동접자를 더 늘려보자!

fpm 설정이 무리한 설정이 아니었을까? 사실 20개만 해도 cpu는 100%가까이 근접해 버리는터라 일단 메모리 리미트에 맞춰서 pm.max_spare_servers 설정을 수정하는것이 관건이라 본다. 간당간당하게 버티면서도 인스턴스는 죽지않는. 이과정은 사이트의 다운과 리스타트가 동반되는 아주 귀찮은 과정이다.

그래도 일단 근성을 보여서 테스트를 진행했다.

jmater를 이용하여 부하를 주고 인스턴스가 죽지 않을 만큼 php-fpm 에서 적당히 설정을 조절했다. 이경우 최대 부하시점에서 메모리가 아슬아슬하게 남아있을 경우를 찾아서 최적의 값을 찾아보았고 php-fpm.d/www.conf 를 수정하였다.

top 명령어 로 RES 부분을 보면 하나의 프로세스가 사용하는 메모리 양을 알수있다. 스크린샷에는 52M 정도이므로 프리티어는 1G의 메모리 까지 사용 가능하다. OS 까지 생각하면 대략 750M 정도 사용가능하다 생각하면 되는데 이기준으로 pm.max_spare_servers 를 15로 정했다.

다시 부하를 주었다.

예상 처럼 남은 메모리가 50M 정도밖에 남지않고 잘돌아간다. 물론 이상황에 CPU는 100%다. 이실험을 시작한 이유는 rds에 최대 부하를 주는것이 목적이므로 pm.max_children 를 150 까지 늘렸다. 그리고 테스트를 하였다.

/etc/php-fpm.d/www.conf
pm.max_children = 150
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 15

fpm 을 재시작하여 적용후에 rds의 모니터링을 확인했다.

ec2 도 죽지않고 rds도 죽지 않았다. 아니 rds 는 max 커넥션에 걸리는데 cpu나 메모리는 13%....아마 내블로그에서 끌어낼수 있는 한계가 13%인거겠지...또르륵 그렇다면 이쯤작성하다 오기가 발동했다. 부하테스트를 시작한김에 rds 가 죽을때까지 인스턴스를 늘리기로 했다.

Auto Scaling 걸고 트리거 cpu는 60%로 사실 의미없다. 동시 접속 20개만 걸려도 cpu 100%인거.. 그렇지만 rds 를 죽이기로 했으므로 부하를 걸었다.

Auto Scaling 은 차근차든 인스턴스가 생성됬고 총5개까지 생성되었다.
사실 동접자 초당 120명 이면 인스턴스 모두 CPU가 100%다.... 무조건 부하를 주는건 잘못된 테스트 같아서 방법을 수정하였다. 1초당120번 접속 무한반복으로.

죽이기로 했으니 원래 t2.micro 사이즈의 max_connections 은 {DBInstanceClassMemory/12582880} 134다 이걸 10000으로 수정하였다.

rds의 파라미터그룹은 디폴트 파라미터그룹을 수정할수 없다. 따로 생성하여 수정해야 한다.

Auto Scaling 으로 추가된 인스턴스다.

내블로그로 rds를 죽이는건 실패했다......아마 인스턴스 사이즈를 늘려서 메모리와 cpu를 더많이 사용한다면 죽일수 있었을거라 생각한다.

다음기회엔 꼭죽이리라..

블로그를 더 많은 게시물과 자료로 꽉꽉체워서 죽여야겠다.

일단.........결국 가쉽성의 글이되어 버렸다.
결론을 내지못해 아쉽지만 fpm 최적화가 누군가에겐 도움이 될거라 생각한다.

좋은하루 되시라!

aws에서 MariaDB galega Cluster 사용하기 ver.2

지난 포스팅에 이어서 맺음하는 포스팅이다.
계획은 일주일 이었으나 이주 가까이 galera를 사용하였다.

이주동안 사용량이나 봇들의 동태 이것저것 모니터링을 했지만..
부하가 없었다.. 그래서 부하테스트는 직접하기로 마음을 먹었다!

먼저 비용부터 보자.

Cost Explorer 에서 일별 서비스별로 본 그래프이다.
여기서 중요한건 EC2 비용인데 0.47$ 정도다. t3.nano 3대 하루 비용인데 1달정도 하면 14.1$ 정도 나온다. 정말 얼마 안나온다. 깜짝놀랄정도.

그렇다면 성능을 확인해 볼까?

구성을 나열하자면 NLB-mariaDB-cluster(t3.nano 3ea) 간단한 구성이다.

지금 이 블로그로 테스트를 진행하여 보았다.

부하테스트 툴은 jmate를 사용하였다.

1초동안 100명의 USER가 접속을 시도하고 30초간 유지이다.

총 3000번의 접근을 하게된다.

http://linuxer.name 으로 http request 를 하도록 설정하였다.

web인스턴스의 CPU / memory 지표이다.
실제로는 보이는 지표의 2배정도 된다고 보면된다. 5분 평균이라 실제 부하보다 낮은 값으로 보인다. 실제 cpu 부하는 100%라고 보면 된다. 23:45이 galera 00:15 rds다.

나중에 생각해보니 왜 rds 의 그래프가 더 낮을까 의문이 들었는데 rds max connection 때문에 정상적으로 부하가 제한된것 같다. 이런.. 라고 생각했는데 아니었다..그냥 웹서버 php-fpm 제한이었다 ㅠㅠ

galera 인스턴스다. 그래프의 평균치라 마찬가지다. 두배정도의 부하가 발생했다고 생각하면 된다. 합쳐서 11%정도의 부하가 발생했다. 그래프에서 안보이는데 A/C의 부하가 동일하게 나타났다.

RDS로 옮긴후에 테스트진행하였다. 13%정도의 부하가 발생하였다. 이때

rds max connection은 꽉찬 상태였다. 이결과로만 보면 내 블로그는 max 커넥션을 더늘려도 괜찮은 거로 보인다. 사용자원에 비해 기본값 max connection 이 낮은 편이라는 결론이 난다.

각설하고 일단 단순비교시에 galera와 rds 의 성능차는 거의 없어 보인다.

비용차이는 NLB 비용이 cost explorer에서 추가되지 않아서 확인할수 없었다.
그런데 free tire 에서는 NLB가 포함되지 않는데 이상하게 청구되지 않고 있다...땀삐질 너무 쓰는게 없어서 그런가..

현재 galera에서 RDS로 전환한 상태이고 마지막 테스트 까지 진행하였다.

추가테스트를 한다면 web서버의 처리량을 늘리고 최대사용자를 테스트하는 방식으로 가야 할것으로 보인다.

이 테스트는 다른것보다 galera가 어느정도 사용가능한 수준이라는 것을 알게 된 과정이었다.

다음에 기회가 된다면 좀더 딥한 성능테스트를 진행해보겠다.

좋은하루되시라!

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의 경우엔 어떤것이 좋다 나쁘다는 아직 결정할수 있느 근거가 부족하였다.

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

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

file swap 만들기

더미파일 생성

#dd if=/dev/zero of=/root/swapfile bs=1024 count=2000000
1580109+0 records in
1580109+0 records out
1618031616 bytes (1.6 GB) copied, 23.3556 s, 69.3 MB/s

생성된 파일 확인

#ll /root/swapfile
total 1580112
-rw-r--r-- 1 root root 1618031616 Sep 7 20:24 swapfile

swapfile 에 권한 생성

#chmod 600 /root/swapfile

swap 생성

#mkswap /root/swapfile
Setting up swapspace version 1, size = 1.5 GiB (1618026496 bytes)
no label, UUID=89d2f092-7fee-4fa2-854a-77a914e79367

swap 마운트

#swapon /root/swapfile
#free -m
total used free shared buff/cache available
Mem: 983 136 75 18 771 669
Swap: 1543 0 1543

swap 자동 마운트 rc.local 하단에 추가

#vi /etc/rc.local
swapon /root/swapfile

ubuntu 16.04 pam 패스워드 유효성 제한 libpam-pwquality 설정 포함

패스워드 유효성 검증

로그인 실패 5 계정 잠금 5분
#vi /etc/pam.d/common-auth
16번째줄 삽입
auth required pam_tally2.so file=/var/log/tallylog deny=5 even_deny_root unlock_time=300

#vi /etc/pam.d/common-account
16 줄에 삽입
account required pam_tally2.so

패스워드 만료 모듈 설치
#apt-get -y install libpam-pwquality

패스워드 만료 모듈의 경우에는 사용자를 새로 만들때만 영향을 줍니다.
따라서 기존유저에 적용시에는 명령어로 지정해주어야 합니다.

패스워드 사용가능 최대 기간
#chage -m (days) (user)

PASS_MAX_DAYS 180

패스워드 사용가능 최소 기간
#chage -m (days) (user)

PASS_MIN_DAYS 2

패스워드 만료전 경고 일수
#chage -W (days) (user)

PASS_WARN_AGE 7

패스워드 사용시간 제한

#vi /etc/login.defs
PASS_MAX_DAYS 180

#vi /etc/pam.d/common-password
password requisite pam_pwquality.so retry=3 minlen=10 minclass=3
password [success=1 default=ignore] pam_unix.so obscure use_authtok try_first_pass sha512 remember=2

remember=2 2회 동안 동일한 비밀번호 생성 금지
minlen=10 비밀번호 길이 생성 제한 10자 이상으로
minclass=3 새비밀번호에 필요한 문자 클래스 수 제한 (종류 ⇒ 대문자 / 소문자 / 숫자 / 기타)

참조 URL
https://www.server-world.info/en/note?os=Ubuntu_16.04&p=password

isms 기준에 맞춘 ubuntu 16.04 ssh 패스워드 유효성 설정입니다.

apache http1.1 aws alb http2 enable error

safari 계열의 브라우저에서 내 블로그가 정상적으로 열리지 않았다.
여러번 시도해야 열렸고, 한번에 열리지 않았다.

이원인을 찾기위해서 로그분석부터 부단한 노력을했으나, 한동안 해결할수 없었다.

그런데 어제 오픈카톡방의 박주혁 님께서 safari에서 정상적으로 열리지 않는다는 스크린샷을 올려주셨다.

인증문제가 아닐까 생각했지만 인증문제는 아니었고 이문제를 해결하기 위해선 내 웹서버의 설정을 설명해야 한다.

amazon linux에서는 httpd-2.4.39-1.amzn2.0.1.x86_64이 기본으로 설치되는 apache 이다. 그리고 php는 여러가지 버전을 repo로 지원하고 있는데
amazon-linux-extras 명령어로 사용가능한 repo를 확인할수 있다.

일단 이부분에서 내가 old한 엔지니어라는 사실을 알았다.
나는 apache-php 연동은 반드시 module로 연동을 한다.
그런데 amazon linux는 amazon-linux-extras install php7.3 명령어를 사용하면 module로 설치하는 것이 아닌 php-fpm 방식으로 php가 설치된다.

그렇기에 나는 몇가지 old한 설정을 추가하였다.

apache 는 온프레미스에서 의례 사용하던 방식인 prefrok 방식으로 설정하였고, php는 fpm이 아닌 module로 셋팅하였다.

여기서 문제가 발생한것이다.
아래 URL에서 발췌한 내용이다.
HTTP/2 is supported in all multi-processing modules that come with httpd. However, if you use the prefork mpm, there will be severe restrictions.

https://httpd.apache.org/docs/trunk/howto/http2.html

http2 를 사용하려면 prefork를 사용하기 어렵다.
그런데 필자는 prefork 를 사용하였기 때문에 정상적으로 호환이 되지 않은 것이다.

aws alb(http2) - apache (prefork)강제로 http2사용

aws의 ALB는 http2를 기본으로 enable하게 되어있기때문에 정상적인 커넥션이 불가능했던것이다.

일단 급하게 ALB에서 http2를 껏다.

그리고 오늘 mpm을 event로 돌리고 http2를 강제로 사용하게 했던 설정을 빼고 php-fpm으로 웹사이트를 사용할수 있게 변경하였다.
이후엔 정상적으로 사이트가 동작했으며, 간헐적으로 열리지 않는 증상은 사라졌다.

이글을 빌어 다시한번 박주혁님께 감사를 드린다.

앓던 이가 빠진기분이다.

유레카!

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

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

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

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

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

좋은하루 되시라!

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