SRE/Linux Basics

배경지식

게임이 더 좋아 2022. 9. 1. 11:48
반응형
728x170

 

 

wiki

 

운영체제를 윈도우만 썼다면 알기 힘들었던 배경지식들을 알아보자

 


 

 

고가용성, HA, High Availability

정의 : 서버와 네트워크 또는 프로그램 등의 정보 시스템이 오랜 기간동안 장애 없이 운영이 가능한 성질

쿠버네티스에서의 고가용성

-파드의 자동 복구, 컨테이너의 자동 복구, 노드의 자동 복구는 쿠버네티스에서 모니터링을 하면서 진행됨
-마스터 노드 HA 구성으로 etcd를 통한 클러스터 상태 저장 및 분산시스템 구성으로 인한 장애 회복 능력
 

 

가상머신, Virtual Machine

정의 : 소프트웨어 형식으로 물리적 컴퓨터를 실행하는 환경 (게스트라고 부르며 실제 가동하는 시스템을 호스트라고 함)

도입 이유 : 하나의 물리적 시스템 내에서 각각 자체 OS와 App을 가진 다수의 가상 머신을 만들 수 있고 Hyper-V를 통해 각 VM을 격리 실행할 수 있게 한다.

 

특징

-하나의 물리적 컴퓨터를 여러 VM으로 만들 수 있으며 리소스를 효율적으로 사용 가능
-클라우드 컴퓨팅으로 가상머신을 쉽게 얻어서 사용할 수 있음
-이미 제공되는 VM을 다른 물리적 하드웨어로 이식이 자유롭고 복제 또한 자유로움
-하드웨어에서 직접되는 OS보다 다양한 보안 정책을 제공함(VM의 스냅샷을 작성하면 해당 상태로 복원하기 쉽다)

 


가상화, Virtualize

정의 : 리소스의 특징을 [다른 시스템, 응용 프로그램, 사용자]와 [리소스]가 상호 작용하는 방식을 추상화 하는 기술

도입 이유 : 단일 컴퓨터의 하드웨어 요소를 VM 이라고하는 다수의 가상 컴퓨터로 분할 가능

특징

-가상화를 통해 물리적 컴퓨터 하드웨어의 효율적인 활용이 가능
-클라우드 컴퓨팅을 제공하는 근간 기술
-하드웨어만 있다면 관리 소프트웨어를 사용하여 빠르게 프로비저닝하여 사용자가 리소스를 사용할 수 있음
-최근에는 컨테이너화라는 기술이 나옴
 

 

프로비저닝, Provisioning

정의 : 사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포에 두었다가 필요 시, 바로 사용할 수 있는 상태로 준비하는 것

도입 이유 : 필요한 리소스를 생성한 후 가동 상태로 만드는 데에 필요한 모든 작업에 소요가 있기 때문에 준비하는 것이 필요함

 

쿠버네티스에서의 노드 프로비저닝

-클러스터의 구성에서 파드를 스케줄링할 노드가 없어지면 노드를 프로비저닝해서 클러스터에 추가시키는 작업을 해야함(GKE에서 Node Auto Provisioning이 가능함, 클러스터 자동 확장)

 

-가상화와 컨테이너를 이용해 프로비저닝이 비교적 자동화됨
-변해가는 워크로드의 요구사항이 충족시켜야 할 때 노드풀에 대한 관리가 필요함
 
 

 

 

VM vs Container

차이 : 기존의 가상화를 위해서는 Hyper-V를 통해 물리적 하드웨어를 가상화하고 VM 에는 APP, 라이브러리 및  환경 변수들처럼 종속적인 항목과 Guest OS가 존재한다.

VM 처럼 하드웨어를 가상화하는 대신 컨테이너는 운영체제(ex.Linux)를 가상화한다. 각 개별 컨테이너에는 오직 APP과 라이브러리 환경 변수들처럼 종속적인 항목만 포함되어 있다.

오히려 컨테이너 환경에선 Guest OS가 없기 때문에 가볍고 빠르고 이식성이 더 높아진다.

 

특징

-하나의 물리적 컴퓨터를 여러 VM으로 만들 수 있으며 리소스를 효율적으로 사용 가능
-클라우드 컴퓨팅으로 가상머신을 쉽게 얻어서 사용할 수 있음
-이미 제공되는 VM을 다른 물리적 하드웨어로 이식이 자유롭고 복제 또한 자유로움
-하드웨어에서 직접되는 OS보다 다양한 보안 정책을 제공함(VM의 스냅샷을 작성하면 해당 상태로 복원하기 쉽다)
 
 

 

 

마운트, Mount

리눅스 환경에서 하드디스크의 파티션, CD/DVD, USB  메모리 등 사용하기 위해서는 연결시켜주는 작업이 필요하다.

정의 : 물리적인 장치를 특정 위치(directory)에 연결시키는 과정

 

마운트의 장점을 꼽으라면... 언제든지 교체가 가능하고 논리적으로 나누기도 쉽다는 점이다.

또한 여러 개의 하드디스크를 하나처럼 사용도 가능하다. (RAID, LVM) 

 

** /etc/fstab 파일은 리눅스가 부팅될 때 마다 읽는 파일로, 마운트 정보가 들어있다.

{device_name} {target_directory} {file_system} {property} { dump y/n} { file_system check y/n}

로 이루어져있고dump 사용여부를 1로 설정하면 리눅스 dump 명령으로 백업 가능하고파일 시스템 체크 여부를 1이나 2로 설정하면 부팅 시 파티션을 체크하게 된다. (1번 이후 2번 체크)**별로 중요하지 않다면 0으로 체크해서 부팅 속도의 향상을 꾀할수도 있다.

 


링크, Link

파일을 잇는다는 뜻인데

하드링크, Hard Link와 심볼릭 링크, Symbolic Link(Soft Link) 2가지가 있다.

 

링크에 대해서 알기 전에 inode란 것을 먼저 알아보자

inode는 리눅스/유닉스 FileSystem 에서 사용하는 자료구조를 말한다.

 

어떠한 파일이나 디렉터리는 각자 1개씩 inode를 가지고 있는데

inode에서 파일의 소유권, 허가권, 등 정보와 파일의 위치를 가지고 있다.

즉, inode를 통해서 접근해야 한다는 말과 같다.

 

inode들은 모여서 inode 블록이 되며 inode는 실제 데이터 위치를 감싸는 래퍼라고 보면된다.

이렇게 래퍼가 됨으로써 링크를 여러가지 만들 수 있게 된다.

 

객체 값복사, 주소복사 등을 들어봤다면 감을 쉽게 잡을 수 있다.

 

 

위와 같이 링크를 만들수 있다.

소프트 링크는 원본 파일을 가리키는 포인터를 만들게 되는 것과 같은 원리다.

그 원본 파일은 결국 inode 블록의 inode를 조회해야 데이터 위치를 찾을 수 있다.

 

요약하자면 inode로 가는 것은 동일한데 어떻게 갈 것이냐?? 가 문제다.

 

ln (link의 약자) 커맨드를 이용해 만든다.

ln {sourcefile} {linkfile}이 된다.

ln -s {file} {link} 를 하면 소프트링크가 생긴다.

 

한 번 해보면 inode가 달라지는 것을 알 수 있다.

 

그렇다면 원본 source file을 옮겨도 링크는 유효할까??

하드 링크는 원본 파일이 없어져도 직접 가리키니까 유효하다.

다만 소프트링크는 원본 파일이 없어지면 포인터는 엉뚱한 곳을 가리키게 되니까 무효하다.

오히려 링크가 끊어진다.

** 다시 디렉터리를 되돌리면 링크가 복구된다.

 


 

프로세스

 

우리가 운영체제에서 배웠던 프로세스와 같다. 실행중인 프로그램을 바로 프로세스라고 한다.

근데 리눅스에서는 조금 더 세분화해서 이해하자.

 

포그라운드 프로세스

화면에 나타나 사용자와 상호작용하는 프로세스를 말한다.

 

백그라운드 프로세스

화면에 나타나지 않고 뒤에서 실행되는 프로세스를 의미한다.

(서버 데몬이 대표적인 백그라운드 프로세스다.)

 

프로세스 번호

메모리에 적재되어 활성화된 프로세스는 여러가지가 있는데 번호로 구분할 수 있다.

각 프로세스에 할당된 고유 번호를 프로세스 번호라고 한다.

프로세스 번호를 통해 제어가 가능하다.(kill)

 

작업 번호

백그라운드 프로세스의 순차 번호를 의미한다.

 

부모 프로세스와 자식 프로세스

모든 프로세스는 혼자서 독립적으로 실행되는 것은 아니다.

부모 프로세스에 종속된 형태로 실행된다.

 

즉, Firefox 같은 경우 X 윈도 프로세스 밑에서 실행되므로 FIrefox의 부모프로세스는 X 윈도라고 할 수 있다.

반대로 FireFox는 X 윈도의 자식 프로세스다.

 

당연히 부모프로세스가 종료되면 자식프로세스도 종료된다.

 

shell에서 쓰는 커맨드로 

ps : 현재 프로세스의 상태를 확인하는 명령어다. 대부분 ps -ef | grep {name}  이렇게 쓴다.

kill : 프로세스를 강제 종료하는 것이다. -9 옵션과 같이 사용되어 무조건 프로세스를 종료시킨다.

pstree : 프로세스 관계를 트리 형태로 보여주는 것이다.

 


 

 

데몬, Daemon

서비스라고 부르는 서버 프로세스를 말한다.

여기서 서비스는 웹 서버, 네임 서버, DB 서버 등의 프로세스를 말한다.

단순히 서버 프로세스 = 데몬이라고 해도 된다.

더 자세히는 조금 다르지만

서비스는 늘 동작하는 서버 프로세스다.

 


 

서비스, Service

서비스에 대해서 더 알아보자

 

시스템과 독자적으로 구동되어 제공하는 프로세스이며 (웹 서버, DB 서버 FTP 서버 등이 있다)

실행 및 종료는 systemctl start/stop/restart 서비스 이름 명령으로 사용된다.

 

예를 들어 웹 서버는 systemctl start httpd 로 구동된다.

 

**서비스의 실행 스크립트 파일은 /lib/systemd/system/ 디렉터리에 {service_name.service} 라는 이름으로 확인된다.

이 디렉터리 하위 파일들은 거의 systemctl {start/stop/restart} {service_name}으로 제어가 가능하다.

 

또한 서비스가 부팅과 동시에 자동 실행될 지 여부도 정할 수 있다.

systemctl list-unit -files 명령을 실행해서 볼 수 있다.

 


 

소켓, Socket

 

서비스와 비교되는 단어 중 하나다.

 

서비스는 항상 가동되지만 소켓은 외부에서 특정 서비스 요청을 할 경우에만 systemd 가 구동시킨다.

요청이 끝나면 소켓도 종료된다.

 

소켓으로 설정된 서비스를 요청할 때 처음 연결되는 시간은 앞에서 설명한 서비스에 비해 약간 오래 걸릴 수 있다.

systemd 에서 실행시키고 작동 준비까지의 시간이 걸리기 때문이다.

소켓의 대표적인 예로 텔넷이 많이 언급된다.

 

소켓과 관련된 스크립트 파일은 /lib/systemd/system/ 디렉터리에 있다. {socket_name.socket}으로 이루어져있다.

 


 

또한 시스템이 부팅되지 않을 때가 종종 있는데

"응급 복구"를 통해 해결할 수 있다.

 

리눅스 설치 후 root 비밀번호가 기억나지 않을 때가 있을 것이다.(있으면 안되지만)

중요한 자료가 들어있다면 다시 설치하는 것도 안된다.

비밀번호를 알아낼 수는 없지만 새로운 비밀번호로 변경할 수는 있다.

grub을 이용하면 된다.

 


 

RAID

Redundant Array of Inexpensive/Independent Disks

 

해석하자면 강인한 디스크의 배열이랄까..? 

그 말은 적당한 가격과 적당한 성능의 여러 개의 디스크를 통해서 대용량 하나를 만들어내며 장애에도 강하다는 말이다.

 

종류는 HW, SW 2개로 나누어진다.

 

HW RAID

하드웨어 RAID는 처음부터 제조업체에서 여러 개의 하드디스크를 연결한 장비 자체를 만드는 것이다.

목적이 처음부터 여러 개를 합치는 것이기 때문에 조금 더 안정적이라는 장점이 있다.

다만 여러 개이기 때문에 여전히 만만치 않은 가격이라는 것이 고려 요소 중 하나다.

 

SW RAID

사실 RAID 라면 이것을 먼저 떠올린다.

그냥 하드디스크만 여러 개 있다면 OS에서 지원하는 방식으로 RAID를 구성하는 것이다.

안정성은 비교적 떨어지지만 저렴하게 이용가능하다는 점이다.

 

 

RAID는 기본적으로 여러가지 레벨이 있고 주로 Linear RAID, RAID 0,1,5,6,1+0이 많이 쓰인다고만 알아두자

 

 


 

LVM, Logical Volume Manager

 

해석하자면 논리 하드디스크 관리자라는 의미다.

LVM와 앞에 Linear RAID와 기본 기능은 비슷해 보이지만 더 많은 기능을 가진다.

 

LVM의 주요 용도는 여러 개의 하드디스크를 합쳐서 한 개의 파티션으로 구성된 후, 다시 필요에 따라 나눌 수 있다.

 

다시 말해서 한 개의 디스크로도 LVM으로 구성하면 다시 파티션으로 구분할 수 있다.

 

물리적 볼륨(Physical Volume) : /dev/sda1, /dev/sdb1

볼륨 그룹(Volume Group) :  물리 볼륨을 합쳐서 1개의 물리 그룹으로 만든 것

논리 볼륨(Logical Volume) : 볼륨 그룹을 1개 이상으로 나눈 것으로 논리적 그룹

 

 

 


 


Linux에서 사용자별로 리소스 나누기, Quota

 

리눅스는 여러 명의 사용자가 동시에 접속할 수 있다.

만약 A라는 사용자가 시스템을 사용할 때, 고의든 실수든 루트 (/) 파일 시스템에 파일을 복사한다고 하면...

전체 시스템에 치명적인 문제를 가져올 수 있다.

즉, 사용자에게 리소스를 제한해야 하는 경우가 있다.

리눅스에서는 Quota를 통해 조절한다.

 

Quota : 파일 시스템마다 사용자나 그룹이 생성할 수 있는 파일의 용량과 개수를 제한하는 것

쿠버네티스에서도 Resource Quota라고 쓰기도 한다.

 

일반 사용자들이 사용하는 파일 시스템을 루트 ( / ) 로 지정하는 것보다 별도의 파일 시스템을 지정해서 지정한 부분만 사용하도록 하는 것이다. 

우선 실수로 루트( / ) 파일 시스템을 사용할 일이 없으니까 시스템과 관련된 문제를 발생시킬 소지가 적어진다.

 

Quota 를 적용하기 위해서는 Quota DB를 생성해야 한다.

이러한 식으로 만든다.

cd  /userHome  => 쿼터용 파일 시스템이 마운트된 디렉터리로 이동

quotaoff -avug  => 쿼터를 우선 끈다.(초기화 작업)

quotacheck -augmn => 파일 시스템의 쿼터 관련 체크

rm -f aquota.*  => 생성된 쿼터 관련 파일 삭제

quotacheck -augmn  => 다시 체크

touch aquota.user aquota.group  => 쿼터 관련 파일 생성

chmod 600 aquota.*  => 보안을 위해 소유자만 접근가능

quotacheck -augmn   => 쿼터 체크

quotaon -avug  => 쿼터 시작

 

여기서 자꾸하는 quotacheck은 하드디스크를 스캔해서 여러가지 부분을 체크하는 것이다.

quotaon/quotaoff 는 설정된 쿼터를 키고 끄는 것이다.

DB를 생성했다면 이제 공간을 할당할 수 있다.

그건.. man quota를 통해 알아보도록 하자.

 

 

 

 

 

 

 

 

728x90
반응형
그리드형