Linux

NCP-SSD-Server-IOPS

오늘 [7월] 네이버클라우드플랫폼 공인교육 - Professional을 다녀왔습니다.
교육을 받다보니 좀 흥미로운 내용이 있더군요.

NCP의 SSD VM은 최소 IOPS가 4000입니다.

블로깅을 하던때가 아니라서 포스팅이나 결과를 깔끔하게 정리한게 아니라 공개하긴 어렵지만 AWS에서도 비슷한 테스트를 한적이 있습니다.

EBS- GP2를 20개를 하나의 인스턴스에 붙여서 100 IOPS 인볼륨을 20개를 붙여서 2000 IOPS로 늘려서 디스크 자체의 퍼포먼스를 올리는 테스트를요.

이 테스트는 많은 엔지니어들이 장난식으로 테스트를 진행했고 유효한 결과를 얻은적이 있는 테스트 입니다. 물론 라이브 서버에 도입하기엔 부담이 따르고 리스크에 비해 얻을수 있는 장점이 크지 않다보니 테스트로만 끝낸적이 있습니다.

그런데 제앞에 10G의 기본 IOPS가 4000짜리가 나타난 것입니다.

NCP의 VM이 가진 제한이 볼륨 16개 까지 붙일수 있는데, OS 볼륨을 제외하면 15개 까지.

150G의 용량으로 60000 IOPS라는 계산이 나옵니다. 그럼 NCP 의 최대 IOPS는 얼마인지 볼까요?

NCP의 IOPS 계산은 1GB당 40IOPS가 증가합니다. 500GB 일때 20000 IOPS 그러니까 볼륨의 가성비는 10G일때 제일 높은셈입니다.

가성비가 제일 높은 볼륨 15개를 추가할 비용을 계산해보면 월 17280원이 추가되는군요.

그럼 월 17280 원으로 낼수있는 최대 성능을 테스트 해볼겁니다.

사실 객관성은 이쯤해선 망각해도 됩니다.
아무래도 서비스에선 사용하기 어려운 구성이니까요.

먼저 볼륨 15개를 인스턴스에 붙입니다.

그리고 아래 스크립트를 돌려서

#!/bin/sh
for VAR in `fdisk -l | grep "Disk /dev/" | grep -v xvda | awk -F: '{print $1}' | awk '{print $2}`';
do
(echo n; echo p; echo 1; echo 2048; echo; echo t; echo 8e; echo w) | fdisk $VAR
done
a=`fdisk -l | grep '/dev/xvd.1' | grep -v '/dev/xvda' | awk '{print $1}'`
pvcreate $a
vgcreate linuxer-lvm $a
lvcreate -l 38385 -n volume linuxer-lvm
mkdir /lvm
mkfs.xfs -f /dev/linuxer-lvm/volume
mount -t xfs /dev/linxer-lvm/volume /lvm

마운트 까지 완료했습니다.

[root@s1734ba4660a ~]# vgdisplay
--- Volume group ---
VG Name linuxer-lvm
System ID
Format lvm2
Metadata Areas 15
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 15
Act PV 15
VG Size 149.94 GiB
PE Size 4.00 MiB
Total PE 38385
Alloc PE / Size 38385 / 149.94 GiB
Free PE / Size 0 / 0
VG UUID YEEHFI-FpvU-fTmE-YnHx-9itm-mhH6-QUsz8j

vg도 잘만들어져서 마운트까지 정상적으로 됩니다.

속도 테스트하려니까 너무 귀찮아서..........................

으앙주금...

여러분 이포스팅은 언젠간 마무리 할테지만...

오늘은 아닌가 봅니다.

굿밤!

linux-유용한 명령어

7/6일 오픈카톡 대화에서 발췌

glances - top / htop 대용

yum install python-pip python-devel
pip install glances

lsof list open files

lsof 는 열려있는 파일리스트를 보여준다. 예를들어 pid 3222를 확인하려 한다고 하면 아래와 같이 쓰면 된다.

lsof -p 3222
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 3222 apache cwd DIR 202,1 278 96 /
httpd 3222 apache rtd DIR 202,1 278 96 /
httpd 3222 apache txt REG 202,1 553600 61998 /usr/sbin/httpd
httpd 3222 apache mem REG 202,1 26976 1392 /usr/lib64/libnss_dns-2.26.so
httpd 3222 apache mem REG 202,1 57296 1394 /usr/lib64/libnss_files-2.26.so
httpd 3222 apache mem REG 202,1 37032 35796 /usr/lib64/libnss_sss.so.2
httpd 3222 apache mem REG 202,1 62432 8533557 /usr/lib64/httpd/modules/mod_proxy_http2.so
httpd 3222 apache mem REG 202,1 2462992 86241 /usr/lib64/libcrypto.so.1.0.2k
httpd 3222 apache mem REG 202,1 158280 485506 /usr/lib64/libnghttp2.so.14.18.0
httpd 3222 apache mem REG 202,1 248888 8533556 /usr/lib64/httpd/modules/mod_http2.so
httpd 3222 apache mem REG 202,1 40152 8676027 /usr/lib64/httpd/modules/mod_cgid.so

awk 는 주로 sort 와 같이 사용된다.

220.122.174.19, 70.132.53.181 - - [06/Jul/2020:21:30:11 +0900] "GET /category/aws/ HTTP/1.1" 200 105327
220.122.174.19, 70.132.53.107 - - [06/Jul/2020:21:30:11 +0900] "GET /2020/06/aws-ec2-root-volume-resize-extending-linux/embed/ HTTP/1.1" 200 19832

위의 로그에서 IP 만 확인하고 싶다면

cat linuxer.name_access_log | awk '{print $1}'

같은명령어로 배열로 잘라서 출력할수 있다.

/ sed

ps -elf

ps afxuwww

ps afxuwww - 명령어는 전체를 다보여주면서 자식 프로세스까지 다보여준다...짱좋아

ps -ef -L

ss
tcp FIN-WAIT-1 0 1281 10.0.0.12:ssh 61.177.172.13:46933
tcp ESTAB 0 1280 10.0.0.12:ssh 61.177.172.13:40872
tcp ESTAB 0 0 10.0.0.12:ssh 61.177.172.13:48407
tcp ESTAB 0 0 10.0.0.12:57592 52.95.194.65:https
tcp ESTAB 0 1280 10.0.0.12:ssh 61.177.172.13:41761
tcp ESTAB 0 0 10.0.0.12:50144 52.95.195.99:https
tcp ESTAB 0 0 10.0.0.12:ssh 222.186.173.238:43018
tcp FIN-WAIT-1 0 1281 10.0.0.12:ssh 61.177.172.13:20460
tcp ESTAB 0 0 10.0.0.12:50104 52.95.195.99:https
tcp ESTAB 0 1280 10.0.0.12:ssh 61.177.172.13:19907
tcp FIN-WAIT-1 0 1 10.0.0.12:ssh 218.92.0.249:45695
tcp ESTAB 0 0 10.0.0.12:41014 52.95.195.109:https

tcpdump

ngrep - bpf filter가 되어서 L7 grep 가능

sar

iostate

strace / ftrace

Chapter 20. I/O Redirection

일반적으로 sort 해서 저장하려면 쓰는명령어는

cat filename | sort > filename

이었다면 <> Redirection 을 이용한다면 이래와 같이 설정가능!

sort <filename> filename

NCP-CentOS7-to-CentOS8

NCP 에선 centos8을 지원하지 않는다. 그런데 yum update 를 해서 커널이 변경되면 정상적으로 부팅되지 않는다.

이런 내용들이 인스턴스를 생성할때 안내된다.

그런데, 어제 퇴근후 Meetup과정에서 KR-2 zone은 yum update 가 가능하다는 내용을 전달 받았다. 어쩐지 가끔 yum update 해도 정상적으로 부팅되는 인스턴스가 있더라니..

퇴근길 Meetup - 퇴근길 Tech Meetup 서버 관리 자동화 자료이다.

여기에서 이상함을 느끼고 여쭤봤더니 KR-2에서 하라고 하셨다..그래서 오늘작업의 힌트를 얻었다...

최신의 OS 를 사용하고 싶은건 엔지니어의 본능이 아닌가? 그래서 테스트를 시작했다.

준비물은 다음과 같다.

서버이미지 centos 7.3으로 생성된 인스턴스 한대다.

ACG-포트포워딩-root password 확인 이런 부분은 서버생성 가이드를 참고하자.

https://docs.ncloud.com/ko/compute/compute-1-1-v2.html

인스턴스를 생성하고 인스턴스에 접속하자 마자 할일은 yum update 이다.

yum update -y

업데이트를 마무리하면 epel repo를 설치해 사용할 수 있다.

yum install epel-release -y

epel을 설치하는 이유는 dnf 를 사용하기 위함이다. yum->dnf 로 패키지 설치 방법을 변경할거다.

yum install -y yum-utils rpmconf
rpmconf -a

rpmconf -a 를 입력하면 패키지의 conf를 업데이트 할지를 물어본다.

/etc/sysctl.conf
/etc/profile
/etc/shells
/etc/login.defs
/etc/nsswitch.conf
다섯개의 파일에 대해서 물어보는데 나는 모두 새로 인스톨하는것을 택했다. centos8 로 갈꺼니까.

package-cleanup --leaves
package-cleanup --orphans

다음은 패키지를 cleanup 하고, epel 을 설치한 이유인 dnf 를 설치한다.

yum install dnf -y

dnf 는 centos8 부터 기본적용된 rpm 패키지 관리 패키지인데 yum 에서 dnf로 변경됬다.
dnf 를 설치했다면 yum 을 지우자.

dnf -y remove yum yum-metadata-parser
rm -Rf /etc/yum

yum 을 지우고,

dnf install -y http://mirror.centos.org/centos/8/BaseOS/x86_64/os/Packages/centos-repos-8.2-2.2004.0.1.el8.x86_64.rpm http://mirror.centos.org/centos/8/BaseOS/x86_64/os/Packages/centos-release-8.2-2.2004.0.1.el8.x86_64.rpm http://mirror.centos.org/centos/8/BaseOS/x86_64/os/Packages/centos-gpg-keys-8.2-2.2004.0.1.el8.noarch.rpm

이제 centos8의 repo를 설치한다.

dnf -y upgrade https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

epel7 을 epel8로 업데이트 한다. 이제 centos8 패키지를 다운받을 수 있다.

dnf clean all

dnf 캐시를 clean 한다.

rpm -e `rpm -q kernel`
rpm -e --nodeps sysvinit-tools

rpm 명령어로 커널을 지운다. 여기서 모든 패키지가 삭제되지 않기때문에 후처리가 좀 필요하다.

dnf remove kernel-devel-3.10.0-1127.13.1.el7.x86_64 kernel-devel-3.10.0-327.22.2.el7.x86_64 kernel-devel-3.10.0-514.2.2.el7.x86_64 redhat-rpm-config iprutils-2.4.17.1-3.el7_7.x86_64 sysvinit-tools-2.88-14.dsf.el7.x86_64 sysvinit-tools-2.88-14.dsf.el7.x86_64 python36-rpmconf-1.0.22-1.el7.noarch

후에 의존성이 걸릴 패키지를 미리 삭제한다. 이 경우 NCP centos7.3 인스턴스에 맞춰서 의존성 패키지를 삭제한것이다. 의존성 문제가 발생하면 더삭제 해줘야 한다. 부담감 느끼지 말고 막 날리자. 안되면 처음부터 다시하면 된다.

dnf -y --releasever=8 --allowerasing --setopt=deltarpm=false distro-sync

명령어로 centos8 패키지를 설치한다. 새로 설치되는 패키지들을 유심히 보면 el8.x86_64 로 끝난다 centos8 사용하는 패키지 명으로 RHEL8 이라는 뜻이다. centos8 패키지가 잘설치된다는 소리다.

Complete!

이 단어가 보이면 거의 다된거다.

dnf -y install kernel-core
dnf -y groupupdate "Core" "Minimal Install"

dnf groupupdate 로 Core 와 Minimal Install 까지 업데이트 해주면 이제 된거다.

[root@s17308f26023 ~]# uname -a
Linux s17308f26023 3.10.0-514.2.2.el7.x86_64 #1 SMP Tue Dec 6 23:06:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
[root@s17308f26023 ~]# cat /etc/redhat-release
CentOS Linux release 8.2.2004 (Core)

리부팅을 아직 안해서 릴리즈는 올라갔으나, 커널버전은 centos7 이다. 이제 리부팅 해주자.

[root@s17308f26023 ~]# date
Wed Jul 1 15:50:15 KST 2020
[root@s17308f26023 ~]# cat /etc/redhat-release
CentOS Linux release 8.2.2004 (Core)
[root@s17308f26023 ~]# uname -a
Linux s17308f26023 4.18.0-193.6.3.el8_2.x86_64 #1 SMP Wed Jun 10 11:09:32 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

이제 NCP에서 Centos8을 올렸다!

차후 커널지원이나 업데이트에 따라서 OS가 정상작동하지 않을수 있다. 모니터링이 문제가 될거라 생각했는데 잘돈다...

Centos8을 NCP에서 사용하고 싶다면 한번 진행해 보시기 바란다.

읽어 주셔서 감사하다!

AWS-userdata-glusterFS-install

#!/bin/bash
(echo n; echo p; echo 1; echo 2048; echo; echo t; echo 83; echo w) | fdisk /dev/xvdf
mkfs.xfs -i size=512 /dev/xvdf1
mkdir -p /bricks/brick1
echo "/dev/xvdf1 /bricks/brick1 xfs defaults 1 2" >> /etc/fstab
mount -a && mount
yum install -y centos-release-gluster
yum install -y xfsprogs glusterfs-server
systemctl enable glusterd
systemctl start glusterd
Setenforce 0
sed -i 's/^SELINUX=./SELINUX=disabled/g' /etc/sysconfig/selinux && cat /etc/sysconfig/selinux echo " soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf
chmod 744 /etc/rc.d/rc.local

ec2 userdata glusterfs install 스크립트 입니다.

https://wiki.centos.org/SpecialInterestGroup/Storage/gluster-Quickstart