SlideShare a Scribd company logo
Systemd with RHEL 7
주식회사 오픈소스컨설팅
박 현 익
Systemd 소개Ⅰ
Ⅱ
Ⅲ
Systemd 특장점
Systemd 의 부팅
Ⅳ Systemd 유닛 파일의 구조
Ⅴ Systemd 주요 명령어
Systemd 소개I
4
- Internal Use Only -
Systemd 란?
Systemd 는 systemd가 곧 시스템이며, 리눅스를 위한 서비스 매니저입니다
Systemd 는 Sys V init 스크립트와 호환되도록 만들어 졌으며, 다수의 기능을 제공합니다
이전 버전의 리눅스에서 불리우던 Upstart를 그대로 대체합니다
시스템 Snapshot 또는 의존성 기반의 서비스 컨트롤 로직을 지원합니다
Systemd는 유닛이라는 단위로 시스템을 관리합니다
On-Demand 서비스 시작 방법으로 좀 더 나은 트랜젝션과 의존성 컨트롤이 가능합니다
Systemd 의 병렬처리로 인하여 시스템 부팅시간을 비약적으로 줄였습니다
5
- Internal Use Only -
Systemd 의 유닛
Systemd는 시스템을 유닛 단위로 관리하며 각 유닛은 이름만으로도 각 각의 특징을 알 수 있습니다
유닛 타입 파일 확장자 설명
Service unit .service 시스템 서비스
Target unit .target Systemd 유닛의 그룹
Automount unit .automount automount 포인트
Device unit .device 커널에 의해 생성된 디바이스
Mount unit .mount 마운트 포인트
Path unit .path 파일시스템에 존재하는 디렉토리나 파일
Scope unit .scope 외부에서 만들어진 프로세스
Slice unit .slice 시스템 프로세스를 매니지하는 유닛들이 계층적 구성된 그룹
Snapshot unit .snapshot systemd 매니저의 상태를 저장하는 스냅샷
Socket unit .socket 내부 프로세스통신 소켓
Swap unit .swap 스왑 디바이스나 스왑파일이
Timer unit .timer 시스템 타이머
Systemd 유닛의 위치 설명
/usr/lib/systemd/system RPM 설치시 배포되는 유닛의 위치
/run/systemd/system Runtime 시에 생성된 systemd 유닛. 이 디렉토리는 설치시에 배포된 디렉토리와 유
닛보다 우선순위가 높음
/etc/systemd/system 시스템 관리자가 생성되고 관리되는 디렉토리. 이 디렉토리는 Runtime 유닛 디렉토
리 보다 우선순위가 높음
6
- Internal Use Only -
Systemd 의 변경점 (이번 버전 대비)
Systemd 시스템과 서비스 매니저는 SysV init과 upstart에 호환 되도록 디자인 되어있습니다
Systemd는 몇가지의 target을 제공하며, 이 target 들은 호환성을 위해 그전에 불리우던 런레벨과
매핑됩니다. 하지만 모든 target이 runlevel과 매핑되지는 않습니다. 그러므로 되도록 runlevel 커맨드를
사용하지 않으시는 것이 좋습니다
systemctl 커맨드는 start, stop, status 와 같은 표준 커맨드는 SysV init 스크립트에 구현 가능지만 기타
다른 커스텀 커맨드는 지원하지 않습니다 (예시 : systemctl iptables panic)
systemctl 유틸리티는 systemd를 통해서 시작하지 않은 서비스와 커뮤니케이션 하지 않습니다. Systemd가
서비스를 시작시킬때, systemd는 해당 서비스를 tracking 하기 위해 메인 PID를 저장합니다. 결과적으로
systemctl 유틸리티는 서비스를 관리하고 서비스쪽으로 쿼리를 보내기 위해서 PID를 사용하게 됩니다.
따라서 유저가 별도의 데몬을 직접 시작하였다면, systemctl 커맨드를 사용할 수 없습니다
Systemd는 실행중인 서비스만 정지 시킬수 있습니다. 이전버전의 리눅스에서는 shutdown 시퀀스가
시작되었을때, 서비스 상태에 상관 없이 /etc/rc0.d/ 디렉토리에 있는 스크립트를 사용하여 사용 하여 정지가
가능했지만 Systemd는 오직 실행중인 데몬만 정지가 가능합니다
7
- Internal Use Only -
Systemd 의 변경점 (이번 버전 대비)
시스템 서비스는 standard input stream을 읽을 수 없습니다. 시스템이 서비스를 시작할때, 대화형 진행을
막고자 서비스의 스탠다드 input을 /dev/null로 연결합니다
시스템 서비스는 유저나 세션으로 부터 어떤 컨텍스트(Home 또는 환경변수) 도 상속받지 않습니다. 각 각의
서비스는 깨끗한 환경에서 실행됩니다.
Sys V Init을 로딩할때에 Systemd는 LSB (Linux Standard Base)로 인코딩 된 dependency 정보를 읽어
들입니다. 그리고 런타임 상태에서 해석합니다
서비스 유닛의 모든 작동은 시스템 프리징시에 잘못된 작동을 막기 위해서 기본적으로 5분의 timeout 을
가지고 있습니다. 이 값은 initscript에서 서비스를 위해서 하드코딩 된 것이며, 변경할 수 없습니다. 그러나
개인 설정파일은 서비스 별로 더 긴 timeout시간을 가질수 있도록 할 수 있습니다
Systemd 특장점II
9
- Internal Use Only -
Systemd 특장점
기능 설명
서비스 활성화
systemd 기반으로 옮겨지면서 서비스들은 런레벨에 맞춰서 항상 실행되거나 항상 정지되거나 하는 방법으로 활성화 되
지 않습니다. 서비스들은 이제 path / socket / bus / timer 등에 기반하여 활성화 되거나 또는 하드웨어 상태에 따라 활성
화 됩니다. 마찬가지로 systemd가 socket을 세팅할 수 있기 때문에 만약 어떤 프로세스와 커뮤니케이션을 하는 다른 프
로세스가 갑자기 사라질 경우, 그 자리에서 다시 시작할 수 있도록 소켓을 통해 메시지를 받을 수 있습니다. 그러므로 클
라이언트 입장에서는 다른 방해 없이 서비스를 이용하는 것처럼 느낄 수 있습니다
리소스 관리
각 각의 systemd unit는 항상 그들의 Cgroup에서 컨트롤 해준 일정량의 리소스를 사용할수 있도록 되어 있습니다. 예를
들면 관리자는 특정 서비스에게 일정량의 CPU 사용률을 사용하도록 설정할 수 있습니다. 다른 말로 하면 특정서비스가
추가로 더 많은 CPU와 리소스를 사용할 수 없도록 할 수도 있습니다. systemd 이전에는 nice 값으로 프로세스의 cpu 점
유율을 컨트롤 했었지만 systemd는 cgroup을 사용하여 더 정확한 CPU 와 RAM 및 다른 리소스까지도 사용을 제한 할
수 있습니다
Slice
slice라 불리는 기능은 시스템에 있는 다양한 리소스 타입을 나누고 user / service / virtual machine / unit 등에게 할당
할 수 있습니다. 또한 이 리소스들을 계산할수도 있습니다. 이 기능을 통하여 고객들의 리소스 사용량에 따라 요금을 부
여할 수도 있습니다
10
- Internal Use Only -
Systemd 특장점 (2)
기능 설명
로깅
RAM Disk가 마운트 되는 시점부터 시스템이 다운되는 시점까지의 모든 로그가 systemd의 저널에 저장됩니다. systemd
journal이 존재하기전인 부트 초기화 단계의 메시지는 저장되지 않습니다. 이 경우는 직접 콘솔 화면을 스크롤 해서
debug를 해야합니다. 이제는 모든 시스템 메시지가 하나의 스트림으로 들어오고 /run 디렉토리에 저장됩니다. 또한 메
시지는 rsyslog로 변경할 수 있습니다. (전통적인 로그 디렉토리인 /var/log 디렉토리로 보내거나 원격 로그서버로 보내
질 수 있습니다.) 또는 journalctl을 통해서 디스플레이 할 수도 있습니다
의존성
systemd는 부트순서에 따라서가 구동 되는 것이 아닌 각 각의 서비스에 명백한 의존성을 정의하여 실행되며, 이 것은 각
서비스가 의존성만 충족된다면 어떤 시점에서도 실행될 수 있음을 말합니다. 많은 서비스들은 같은 시간에 시작될 수 있
으며, 이것은 부트 프로세스를 더욱 빠르게 만듭니다. 마찬가지로 복잡한 의존성을 설정할 수도 있습니다. 그래서 서비
스 시작전에 정밀한 의존성(스토리지나 파일시스템 등)을 요구하도록 해야합니다
Cgroups
서비스들은 Cgroups에 의해서 식별됩니다. 이 말은 모든 서비스의 컴포넌트들이 관리된다는 말입니다. 예를 들면
System V init scripts의 프로세스는 스스로 자식 프로세스를 시작하거나 다른 프로세스들을 시작시킬 수 있습니다. 또
한 init scripts 프로세스의 부모 프로세스가 죽을때 자식 프로세스도 같이 죽는것이 올바른 로직이라고 볼 수 있습니다.
(init scripts의 그렇지 않는 경우를 설명하는 부분입니다) Cgroups 를 사용한다면 서비스의 모든 컴포넌트들이 시작되었
는지 정지상태인지에 대한 태그를 가지고 있습니다 (서비스에 관련된 모든 컴포넌트가 관리가 된다는 얘기 입니다)
Systemd 의 부팅III
12
- Internal Use Only -
Systemd Boot 의존성
init 과 같은 엄격하게 정해진 프로세스를 없지만 부트 프로세스를 위한 구조가 존재합니다
13
- Internal Use Only -
Systemd Boot Process
local-fs.target : /etc/fstab에 있는 파일시스템을
마운트합니다.
swap.target : Swap 영역을 활성화 합니다
①
14
- Internal Use Only -
Systemd Boot Process
sysinit.target : 시스템 initializing 서비스를 시작합니다
 파일시스템 마운트
 Logging 활성화
 kernel 옵션 세팅
 하드웨어 감지를 위한 udevd 시작
 파일시스템 복호화
 iSCSI / multipath / LVM monitoring / Raid
②
15
- Internal Use Only -
Systemd Boot Process
Basic.target : Basic 서비스를 시작합니다
 firewalld
 microcode
 SELinux 를 위한 서비스 시작
 Kernel 메시지를 위한 서비스 시작
 /usr/lib/systemd/system/basic.target.wants 에서
모듈을 로딩
③
16
- Internal Use Only -
Systemd Boot Process
multi-user.target : /etc/systemd/system/multi-
user.target.wants 에 있는 서비스를 시작합니다
 abrt-ccpp.service
 avahi-daemon.service
 hypervvssd.service
 mdmonitor.service
 rsyslog.service
 abrtd.service
 chronyd.service
 irqbalance.service
 ...
④
17
- Internal Use Only -
Systemd Boot Process
graphical.target : /lib/systemd/system/graphical.target
을 시작합니다
 gnome-display-manager 시작
⑤
18
- Internal Use Only -
Systemd Boot Process
시스템 관리자로 부터 변경될 수 있는 기본 시작 target
파일입니다. 어떤 파일에 링크가 되어 있는지에 따라
해당 target 으로 부팅됩니다
Systemd 유닛 파일의 구조Ⅳ
20
- Internal Use Only -
Systemd 유닛 파일의 구조
Unit 파일은 전통적으로 3가지 섹션으로 구성 되어있습니다.
지시자 설명
[Unit]
Unit의 type에 의존적이지 않는 일반적인 옵션을 포함합니다. 이 옵션은 Unit을 설명하고 Unit의 동작을 정의합니다. 그
리고 다른 유닛과의 Dependency를 설정합니다
[Unit type]
특정 유닛이 type-specific 지시자를 가지고 있다면 해당 옵션에 대한 항목을 참조하여 유닛파일을 작성하거나 파악해야
합니다
[Install] 인스톨 관련 정보를 담고 있습니다. systemctl enable과 systemctl disabled 에 의한 동작이 기술되어 있습니다
21
- Internal Use Only -
[Unit] 섹션
옵션 설명
Description
유닛에 대한 전반적인 설명을 기술합니다. 이 영역은 systemctl status 커맨드를 사용할때 표시됩니다
Documentation
유닛에 대한 문서를 참조할만한 URI 리스트를 기재하는 곳입니다
After
After에 정의된 유닛이 활성화 된 이후에 유닛이 활성화 되어야 합니다. Requires와는 다르게 After는 After에 명시된
유닛을 활성화 시키지는 않습니다. Before는 After와 반대되는 기능의 옵션입니다
Requires
Requires에 정의된 유닛 리스트에 의존성이 있음을 말합니다. Requires 리스트에 있는 유닛은 이 유닛과 같이 활성화
됩니다. 만약 Requires에 있는 유닛이 fail이 된다면, 이 유닛도 활성화 되지 못합니다
Wants
Rqueires 보다는 약한 의존성을 나타냅니다. Wants에 있는 유닛이 fail이 되더라도 이 유닛을 활성화 될 수 있습니다
Conflicts
Requires와 반대로 여기에 명시된 유닛이 활성화 되어 있다면 이 유닛을 활성화 될 수 없습니다
22
- Internal Use Only -
[Unit type] 섹션
옵션 설명
Type
유닛의 시작 타입을 지정합니다. 아래와 같은 타입들이 존재합니다
• simple - 기본적인 형태이며, ExecStart에 있는 것이 메인 프로세스입니다
• forking - 이미 시작된 ExecStart 프로세스에서 child 프로세스를 생성하고 그 child 프로세스가 서비스의 main 프로
세스가 됩니다. 프로세스가 시작되면 부모 프로세스는 사라집니다
• oneshot - simple과 유사합니다. 다음 유닛이 시작되기 전에 사라집니다
• dbus - simple과 유사합니다. 메인 프로세스가 D-Bus 라는 이름을 얻게 될 경우만 다음 유닛이 시작됩니다
• notify - simple과 유사합니다. sd_notify() 펑션을 이용해서 메시지가 전달된 이후에만 다음 유닛이 시작됩니다
• idle - simple과 유사합니다. 모든 job이 끝날때까지 실질적인 실행이 지연됩니다
ExecStart 유닛이 시작되고 난 후 실행될 스크립트 커맨드를 정의 하는 곳입니다
ExecStop 유닛이 정지되고 난 후 실행될 스크립트 커맨드를 정의 하는 곳입니다
Restart 이 옵션이 정의되면 해당 프로세스가 모두 종료된 후 서비스가 재시작됩니다
RemainAfterExit
True 로 설정하게 되면 프로세스가 종료된 후에도 서비스가 활성화 되어 있는 것으로 간주합니다. 기본값은 false 입니
다
23
- Internal Use Only -
[Install] 섹션
옵션 설명
Alias 이 유닛의 별명을 설정할 수 있으며, 각 별명은 space로 구분됩니다
RequiredBy
이 유닛에게 의존성이 있는 유닛 리스트 입니다. 이 유닛이 활성화 되면 RequiredBy 리스트에 있는 유닛들은
Require 를 얻습니다
WantedBy
이 유닛에게 Wants를 갖는 유닛 리스트 입니다. 이 유닛이 활성화 되면 WantedBy 리스트에 있는 유닛들은 Want
를 얻습니다
Also
Also 리스트에 있는 유닛은 이 유닛이 삭제되거나 설치될때 같이 삭제되거나 설치됩니다
DefaultInstance
유닛이 활성화 될 때 인스턴스화 될 유닛을 제합니다
Systemd 주요 명령어Ⅴ
25
- Internal Use Only -
[Unit] 섹션
커맨드 설명
systemctl status <서비스명> 서비스의 상태 체크
systemctl stop <서비스명> 서비스의 정지
systemctl start <서비스명> 서비스의 시작
systemct enable <서비스명> 부트시 서비스 시작 활성화
systemctl disable <서비스명> 부트시 서비스 시작 비활성화
systemctl list-dependencies <서비스명> 서비스의 디펜던시를 출력
systemctl list-units --type <타입> 특정 타입을 출력
systemctl list-unit-files 시스템에 있는 모든 유닛의 리스트와 상태를 출력
systemctl list-unit-files 시스템에 있는 모든 유닛의 리스트와 상태를 출력
systemd-cgtop 각 각의 서비스가 사용하는 리소스를 보는 커맨드
systemd-cgls 각 각의 서비스에 할당되어 있는 프로세스를 출력
journalctl -k 현재 부트에서 kernel 메시지를 출력
journalctl -f 지속적으로 로그를 출력
journalctl -u 특정 unit에 대한 메시지를 출력
26
- Internal Use Only -
요약
OPEN
SHARE
CONTRIBUTE
ADOPT
REUSE

More Related Content

PDF
Red Hat OpenStack 17 저자직강+스터디그룹_3주차
PPTX
CNIふぉーびぎなーず
PDF
[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편
PPTX
Kubernetes Networking 101
PDF
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
PPTX
How Kubernetes scheduler works
PDF
今だからこそ知りたい Docker Compose/Swarm 入門
PPT
Ansible presentation
Red Hat OpenStack 17 저자직강+스터디그룹_3주차
CNIふぉーびぎなーず
[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편
Kubernetes Networking 101
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
How Kubernetes scheduler works
今だからこそ知りたい Docker Compose/Swarm 入門
Ansible presentation

What's hot (20)

PDF
openstack designate
PDF
Open vSwitch Offload: Conntrack and the Upstream Kernel
PDF
Virtualization Architecture & KVM
ODP
ansible why ?
PDF
[오픈소스컨설팅] Red Hat ReaR (relax and-recover) Quick Guide
PDF
Performance Wins with BPF: Getting Started
PDF
systemd
PDF
Using GTP on Linux with libgtpnl
PPTX
GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...
PDF
Ansibleで始めるインフラ構築自動化
PDF
oVirt installation guide_v4.3
PDF
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
PDF
最近のOpenStackを振り返ってみよう
PDF
PDF
Kubernetes on Premise Practical Guide
PDF
BPF / XDP 8월 세미나 KossLab
PDF
痛い目にあってわかる HAクラスタのありがたさ
PPTX
Microsoft Hyper-V
PDF
Ixgbe internals
PDF
How To Install and Configure SNMP on RHEL 7 or CentOS 7
openstack designate
Open vSwitch Offload: Conntrack and the Upstream Kernel
Virtualization Architecture & KVM
ansible why ?
[오픈소스컨설팅] Red Hat ReaR (relax and-recover) Quick Guide
Performance Wins with BPF: Getting Started
systemd
Using GTP on Linux with libgtpnl
GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...
Ansibleで始めるインフラ構築自動化
oVirt installation guide_v4.3
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
最近のOpenStackを振り返ってみよう
Kubernetes on Premise Practical Guide
BPF / XDP 8월 세미나 KossLab
痛い目にあってわかる HAクラスタのありがたさ
Microsoft Hyper-V
Ixgbe internals
How To Install and Configure SNMP on RHEL 7 or CentOS 7
Ad

Viewers also liked (20)

PDF
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0
PDF
[오픈소스컨설팅] RPM 만들기
PDF
클라우드 컴퓨팅 기반 기술과 오픈스택(Kvm) 기반 Provisioning
PDF
[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region
PDF
Docker Setting for Static IP allocation
PDF
[오픈소스컨설팅]Docker on Kubernetes v1
PDF
[오픈소스컨설팅]About RHEL7 systemd
PDF
[오픈소스컨설팅]Scouter 설치 및 사용가이드(JBoss)
PDF
[오픈소스컨설팅]오픈스택에 대하여
PDF
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
PDF
[오픈소스컨설팅]Atlassian JIRA Deep Dive
PDF
[오픈소스컨설팅]Java Performance Tuning
PDF
오픈소스컨설팅 클러스터제안 V1.0
PDF
Enterprise Linux 7 new feature_systemd_booting
PDF
Your first dive into systemd!
PDF
[오픈소스컨설팅]Atlassian JIRA Quick Guide
PDF
[오픈소스컨설팅]파일럿진행예제 on AWS
PDF
Scouter와 influx db – grafana 연동 가이드
PDF
[오픈소스컨설팅]오픈소스메일시스템
PDF
[오픈소스컨설팅] Open stack kilo with DVR_CEPH_v1.1
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0
[오픈소스컨설팅] RPM 만들기
클라우드 컴퓨팅 기반 기술과 오픈스택(Kvm) 기반 Provisioning
[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region
Docker Setting for Static IP allocation
[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]About RHEL7 systemd
[오픈소스컨설팅]Scouter 설치 및 사용가이드(JBoss)
[오픈소스컨설팅]오픈스택에 대하여
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
[오픈소스컨설팅]Atlassian JIRA Deep Dive
[오픈소스컨설팅]Java Performance Tuning
오픈소스컨설팅 클러스터제안 V1.0
Enterprise Linux 7 new feature_systemd_booting
Your first dive into systemd!
[오픈소스컨설팅]Atlassian JIRA Quick Guide
[오픈소스컨설팅]파일럿진행예제 on AWS
Scouter와 influx db – grafana 연동 가이드
[오픈소스컨설팅]오픈소스메일시스템
[오픈소스컨설팅] Open stack kilo with DVR_CEPH_v1.1
Ad

Similar to [오픈소스컨설팅]systemd on RHEL7 (20)

PDF
Systemd explained
PPTX
Systemd
PDF
Init to systemd
PPTX
IoT with Raspberry Pi + Node JS - Chapter 1
PDF
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
PDF
박진호 - 우분투 부팅 과정에 대한 이야기 (2012Y07M28D)
PDF
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
PDF
Linux Performan tuning Part I
PDF
Linux 강의자료 ed10
PDF
시스템 관리자를 위한 리눅스강의 1강 20130203
PDF
2node cluster
PDF
2node cluster
PDF
RHEL8 Kernel Management Manual in Korean
PPTX
이것이 리눅스다 - 김종욱
PDF
Oracle linux8 solaris_new_features-suk kim
PDF
도커없이컨테이너 만들기 8편 - pid namespace
PDF
IBM PowerKVM Install Guide
PDF
[241] 하나의 cpu 에 운영제체 두 개 김성민
PPTX
우분투에 시스템콜 추가하기
PDF
Linux Kernel 101 for Beginner
Systemd explained
Systemd
Init to systemd
IoT with Raspberry Pi + Node JS - Chapter 1
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
박진호 - 우분투 부팅 과정에 대한 이야기 (2012Y07M28D)
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
Linux Performan tuning Part I
Linux 강의자료 ed10
시스템 관리자를 위한 리눅스강의 1강 20130203
2node cluster
2node cluster
RHEL8 Kernel Management Manual in Korean
이것이 리눅스다 - 김종욱
Oracle linux8 solaris_new_features-suk kim
도커없이컨테이너 만들기 8편 - pid namespace
IBM PowerKVM Install Guide
[241] 하나의 cpu 에 운영제체 두 개 김성민
우분투에 시스템콜 추가하기
Linux Kernel 101 for Beginner

More from Ji-Woong Choi (14)

PDF
[오픈소스컨설팅] 오픈소스 기반 솔루션 방향성 잡기
PDF
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
PDF
[오픈소스컨설팅] 프로메테우스 모니터링 살펴보고 구성하기
PDF
[오픈소스컨설팅] Ansible을 활용한 운영 자동화 교육
PDF
[오픈소스컨설팅] 2019년 클라우드 생존전략
PDF
[오픈소스컨설팅] AWS re:Invent 2018 기계학습(ML)부분 후기
PDF
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
PDF
[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3
PDF
[오픈소스컨설팅]ELK기반 장애예방시스템_구성_2016.12
PDF
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트
PDF
[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항
PDF
OpenStack Summit 2017 참석후기
PDF
[오픈소스컨설팅 뉴스레터] 2016년 1분기
PDF
OpenStack 인스턴스 간략 사용자_매뉴얼(liberty)_v1
[오픈소스컨설팅] 오픈소스 기반 솔루션 방향성 잡기
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 프로메테우스 모니터링 살펴보고 구성하기
[오픈소스컨설팅] Ansible을 활용한 운영 자동화 교육
[오픈소스컨설팅] 2019년 클라우드 생존전략
[오픈소스컨설팅] AWS re:Invent 2018 기계학습(ML)부분 후기
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3
[오픈소스컨설팅]ELK기반 장애예방시스템_구성_2016.12
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트
[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항
OpenStack Summit 2017 참석후기
[오픈소스컨설팅 뉴스레터] 2016년 1분기
OpenStack 인스턴스 간략 사용자_매뉴얼(liberty)_v1

[오픈소스컨설팅]systemd on RHEL7

  • 1. Systemd with RHEL 7 주식회사 오픈소스컨설팅 박 현 익
  • 2. Systemd 소개Ⅰ Ⅱ Ⅲ Systemd 특장점 Systemd 의 부팅 Ⅳ Systemd 유닛 파일의 구조 Ⅴ Systemd 주요 명령어
  • 4. 4 - Internal Use Only - Systemd 란? Systemd 는 systemd가 곧 시스템이며, 리눅스를 위한 서비스 매니저입니다 Systemd 는 Sys V init 스크립트와 호환되도록 만들어 졌으며, 다수의 기능을 제공합니다 이전 버전의 리눅스에서 불리우던 Upstart를 그대로 대체합니다 시스템 Snapshot 또는 의존성 기반의 서비스 컨트롤 로직을 지원합니다 Systemd는 유닛이라는 단위로 시스템을 관리합니다 On-Demand 서비스 시작 방법으로 좀 더 나은 트랜젝션과 의존성 컨트롤이 가능합니다 Systemd 의 병렬처리로 인하여 시스템 부팅시간을 비약적으로 줄였습니다
  • 5. 5 - Internal Use Only - Systemd 의 유닛 Systemd는 시스템을 유닛 단위로 관리하며 각 유닛은 이름만으로도 각 각의 특징을 알 수 있습니다 유닛 타입 파일 확장자 설명 Service unit .service 시스템 서비스 Target unit .target Systemd 유닛의 그룹 Automount unit .automount automount 포인트 Device unit .device 커널에 의해 생성된 디바이스 Mount unit .mount 마운트 포인트 Path unit .path 파일시스템에 존재하는 디렉토리나 파일 Scope unit .scope 외부에서 만들어진 프로세스 Slice unit .slice 시스템 프로세스를 매니지하는 유닛들이 계층적 구성된 그룹 Snapshot unit .snapshot systemd 매니저의 상태를 저장하는 스냅샷 Socket unit .socket 내부 프로세스통신 소켓 Swap unit .swap 스왑 디바이스나 스왑파일이 Timer unit .timer 시스템 타이머 Systemd 유닛의 위치 설명 /usr/lib/systemd/system RPM 설치시 배포되는 유닛의 위치 /run/systemd/system Runtime 시에 생성된 systemd 유닛. 이 디렉토리는 설치시에 배포된 디렉토리와 유 닛보다 우선순위가 높음 /etc/systemd/system 시스템 관리자가 생성되고 관리되는 디렉토리. 이 디렉토리는 Runtime 유닛 디렉토 리 보다 우선순위가 높음
  • 6. 6 - Internal Use Only - Systemd 의 변경점 (이번 버전 대비) Systemd 시스템과 서비스 매니저는 SysV init과 upstart에 호환 되도록 디자인 되어있습니다 Systemd는 몇가지의 target을 제공하며, 이 target 들은 호환성을 위해 그전에 불리우던 런레벨과 매핑됩니다. 하지만 모든 target이 runlevel과 매핑되지는 않습니다. 그러므로 되도록 runlevel 커맨드를 사용하지 않으시는 것이 좋습니다 systemctl 커맨드는 start, stop, status 와 같은 표준 커맨드는 SysV init 스크립트에 구현 가능지만 기타 다른 커스텀 커맨드는 지원하지 않습니다 (예시 : systemctl iptables panic) systemctl 유틸리티는 systemd를 통해서 시작하지 않은 서비스와 커뮤니케이션 하지 않습니다. Systemd가 서비스를 시작시킬때, systemd는 해당 서비스를 tracking 하기 위해 메인 PID를 저장합니다. 결과적으로 systemctl 유틸리티는 서비스를 관리하고 서비스쪽으로 쿼리를 보내기 위해서 PID를 사용하게 됩니다. 따라서 유저가 별도의 데몬을 직접 시작하였다면, systemctl 커맨드를 사용할 수 없습니다 Systemd는 실행중인 서비스만 정지 시킬수 있습니다. 이전버전의 리눅스에서는 shutdown 시퀀스가 시작되었을때, 서비스 상태에 상관 없이 /etc/rc0.d/ 디렉토리에 있는 스크립트를 사용하여 사용 하여 정지가 가능했지만 Systemd는 오직 실행중인 데몬만 정지가 가능합니다
  • 7. 7 - Internal Use Only - Systemd 의 변경점 (이번 버전 대비) 시스템 서비스는 standard input stream을 읽을 수 없습니다. 시스템이 서비스를 시작할때, 대화형 진행을 막고자 서비스의 스탠다드 input을 /dev/null로 연결합니다 시스템 서비스는 유저나 세션으로 부터 어떤 컨텍스트(Home 또는 환경변수) 도 상속받지 않습니다. 각 각의 서비스는 깨끗한 환경에서 실행됩니다. Sys V Init을 로딩할때에 Systemd는 LSB (Linux Standard Base)로 인코딩 된 dependency 정보를 읽어 들입니다. 그리고 런타임 상태에서 해석합니다 서비스 유닛의 모든 작동은 시스템 프리징시에 잘못된 작동을 막기 위해서 기본적으로 5분의 timeout 을 가지고 있습니다. 이 값은 initscript에서 서비스를 위해서 하드코딩 된 것이며, 변경할 수 없습니다. 그러나 개인 설정파일은 서비스 별로 더 긴 timeout시간을 가질수 있도록 할 수 있습니다
  • 9. 9 - Internal Use Only - Systemd 특장점 기능 설명 서비스 활성화 systemd 기반으로 옮겨지면서 서비스들은 런레벨에 맞춰서 항상 실행되거나 항상 정지되거나 하는 방법으로 활성화 되 지 않습니다. 서비스들은 이제 path / socket / bus / timer 등에 기반하여 활성화 되거나 또는 하드웨어 상태에 따라 활성 화 됩니다. 마찬가지로 systemd가 socket을 세팅할 수 있기 때문에 만약 어떤 프로세스와 커뮤니케이션을 하는 다른 프 로세스가 갑자기 사라질 경우, 그 자리에서 다시 시작할 수 있도록 소켓을 통해 메시지를 받을 수 있습니다. 그러므로 클 라이언트 입장에서는 다른 방해 없이 서비스를 이용하는 것처럼 느낄 수 있습니다 리소스 관리 각 각의 systemd unit는 항상 그들의 Cgroup에서 컨트롤 해준 일정량의 리소스를 사용할수 있도록 되어 있습니다. 예를 들면 관리자는 특정 서비스에게 일정량의 CPU 사용률을 사용하도록 설정할 수 있습니다. 다른 말로 하면 특정서비스가 추가로 더 많은 CPU와 리소스를 사용할 수 없도록 할 수도 있습니다. systemd 이전에는 nice 값으로 프로세스의 cpu 점 유율을 컨트롤 했었지만 systemd는 cgroup을 사용하여 더 정확한 CPU 와 RAM 및 다른 리소스까지도 사용을 제한 할 수 있습니다 Slice slice라 불리는 기능은 시스템에 있는 다양한 리소스 타입을 나누고 user / service / virtual machine / unit 등에게 할당 할 수 있습니다. 또한 이 리소스들을 계산할수도 있습니다. 이 기능을 통하여 고객들의 리소스 사용량에 따라 요금을 부 여할 수도 있습니다
  • 10. 10 - Internal Use Only - Systemd 특장점 (2) 기능 설명 로깅 RAM Disk가 마운트 되는 시점부터 시스템이 다운되는 시점까지의 모든 로그가 systemd의 저널에 저장됩니다. systemd journal이 존재하기전인 부트 초기화 단계의 메시지는 저장되지 않습니다. 이 경우는 직접 콘솔 화면을 스크롤 해서 debug를 해야합니다. 이제는 모든 시스템 메시지가 하나의 스트림으로 들어오고 /run 디렉토리에 저장됩니다. 또한 메 시지는 rsyslog로 변경할 수 있습니다. (전통적인 로그 디렉토리인 /var/log 디렉토리로 보내거나 원격 로그서버로 보내 질 수 있습니다.) 또는 journalctl을 통해서 디스플레이 할 수도 있습니다 의존성 systemd는 부트순서에 따라서가 구동 되는 것이 아닌 각 각의 서비스에 명백한 의존성을 정의하여 실행되며, 이 것은 각 서비스가 의존성만 충족된다면 어떤 시점에서도 실행될 수 있음을 말합니다. 많은 서비스들은 같은 시간에 시작될 수 있 으며, 이것은 부트 프로세스를 더욱 빠르게 만듭니다. 마찬가지로 복잡한 의존성을 설정할 수도 있습니다. 그래서 서비 스 시작전에 정밀한 의존성(스토리지나 파일시스템 등)을 요구하도록 해야합니다 Cgroups 서비스들은 Cgroups에 의해서 식별됩니다. 이 말은 모든 서비스의 컴포넌트들이 관리된다는 말입니다. 예를 들면 System V init scripts의 프로세스는 스스로 자식 프로세스를 시작하거나 다른 프로세스들을 시작시킬 수 있습니다. 또 한 init scripts 프로세스의 부모 프로세스가 죽을때 자식 프로세스도 같이 죽는것이 올바른 로직이라고 볼 수 있습니다. (init scripts의 그렇지 않는 경우를 설명하는 부분입니다) Cgroups 를 사용한다면 서비스의 모든 컴포넌트들이 시작되었 는지 정지상태인지에 대한 태그를 가지고 있습니다 (서비스에 관련된 모든 컴포넌트가 관리가 된다는 얘기 입니다)
  • 12. 12 - Internal Use Only - Systemd Boot 의존성 init 과 같은 엄격하게 정해진 프로세스를 없지만 부트 프로세스를 위한 구조가 존재합니다
  • 13. 13 - Internal Use Only - Systemd Boot Process local-fs.target : /etc/fstab에 있는 파일시스템을 마운트합니다. swap.target : Swap 영역을 활성화 합니다 ①
  • 14. 14 - Internal Use Only - Systemd Boot Process sysinit.target : 시스템 initializing 서비스를 시작합니다  파일시스템 마운트  Logging 활성화  kernel 옵션 세팅  하드웨어 감지를 위한 udevd 시작  파일시스템 복호화  iSCSI / multipath / LVM monitoring / Raid ②
  • 15. 15 - Internal Use Only - Systemd Boot Process Basic.target : Basic 서비스를 시작합니다  firewalld  microcode  SELinux 를 위한 서비스 시작  Kernel 메시지를 위한 서비스 시작  /usr/lib/systemd/system/basic.target.wants 에서 모듈을 로딩 ③
  • 16. 16 - Internal Use Only - Systemd Boot Process multi-user.target : /etc/systemd/system/multi- user.target.wants 에 있는 서비스를 시작합니다  abrt-ccpp.service  avahi-daemon.service  hypervvssd.service  mdmonitor.service  rsyslog.service  abrtd.service  chronyd.service  irqbalance.service  ... ④
  • 17. 17 - Internal Use Only - Systemd Boot Process graphical.target : /lib/systemd/system/graphical.target 을 시작합니다  gnome-display-manager 시작 ⑤
  • 18. 18 - Internal Use Only - Systemd Boot Process 시스템 관리자로 부터 변경될 수 있는 기본 시작 target 파일입니다. 어떤 파일에 링크가 되어 있는지에 따라 해당 target 으로 부팅됩니다
  • 20. 20 - Internal Use Only - Systemd 유닛 파일의 구조 Unit 파일은 전통적으로 3가지 섹션으로 구성 되어있습니다. 지시자 설명 [Unit] Unit의 type에 의존적이지 않는 일반적인 옵션을 포함합니다. 이 옵션은 Unit을 설명하고 Unit의 동작을 정의합니다. 그 리고 다른 유닛과의 Dependency를 설정합니다 [Unit type] 특정 유닛이 type-specific 지시자를 가지고 있다면 해당 옵션에 대한 항목을 참조하여 유닛파일을 작성하거나 파악해야 합니다 [Install] 인스톨 관련 정보를 담고 있습니다. systemctl enable과 systemctl disabled 에 의한 동작이 기술되어 있습니다
  • 21. 21 - Internal Use Only - [Unit] 섹션 옵션 설명 Description 유닛에 대한 전반적인 설명을 기술합니다. 이 영역은 systemctl status 커맨드를 사용할때 표시됩니다 Documentation 유닛에 대한 문서를 참조할만한 URI 리스트를 기재하는 곳입니다 After After에 정의된 유닛이 활성화 된 이후에 유닛이 활성화 되어야 합니다. Requires와는 다르게 After는 After에 명시된 유닛을 활성화 시키지는 않습니다. Before는 After와 반대되는 기능의 옵션입니다 Requires Requires에 정의된 유닛 리스트에 의존성이 있음을 말합니다. Requires 리스트에 있는 유닛은 이 유닛과 같이 활성화 됩니다. 만약 Requires에 있는 유닛이 fail이 된다면, 이 유닛도 활성화 되지 못합니다 Wants Rqueires 보다는 약한 의존성을 나타냅니다. Wants에 있는 유닛이 fail이 되더라도 이 유닛을 활성화 될 수 있습니다 Conflicts Requires와 반대로 여기에 명시된 유닛이 활성화 되어 있다면 이 유닛을 활성화 될 수 없습니다
  • 22. 22 - Internal Use Only - [Unit type] 섹션 옵션 설명 Type 유닛의 시작 타입을 지정합니다. 아래와 같은 타입들이 존재합니다 • simple - 기본적인 형태이며, ExecStart에 있는 것이 메인 프로세스입니다 • forking - 이미 시작된 ExecStart 프로세스에서 child 프로세스를 생성하고 그 child 프로세스가 서비스의 main 프로 세스가 됩니다. 프로세스가 시작되면 부모 프로세스는 사라집니다 • oneshot - simple과 유사합니다. 다음 유닛이 시작되기 전에 사라집니다 • dbus - simple과 유사합니다. 메인 프로세스가 D-Bus 라는 이름을 얻게 될 경우만 다음 유닛이 시작됩니다 • notify - simple과 유사합니다. sd_notify() 펑션을 이용해서 메시지가 전달된 이후에만 다음 유닛이 시작됩니다 • idle - simple과 유사합니다. 모든 job이 끝날때까지 실질적인 실행이 지연됩니다 ExecStart 유닛이 시작되고 난 후 실행될 스크립트 커맨드를 정의 하는 곳입니다 ExecStop 유닛이 정지되고 난 후 실행될 스크립트 커맨드를 정의 하는 곳입니다 Restart 이 옵션이 정의되면 해당 프로세스가 모두 종료된 후 서비스가 재시작됩니다 RemainAfterExit True 로 설정하게 되면 프로세스가 종료된 후에도 서비스가 활성화 되어 있는 것으로 간주합니다. 기본값은 false 입니 다
  • 23. 23 - Internal Use Only - [Install] 섹션 옵션 설명 Alias 이 유닛의 별명을 설정할 수 있으며, 각 별명은 space로 구분됩니다 RequiredBy 이 유닛에게 의존성이 있는 유닛 리스트 입니다. 이 유닛이 활성화 되면 RequiredBy 리스트에 있는 유닛들은 Require 를 얻습니다 WantedBy 이 유닛에게 Wants를 갖는 유닛 리스트 입니다. 이 유닛이 활성화 되면 WantedBy 리스트에 있는 유닛들은 Want 를 얻습니다 Also Also 리스트에 있는 유닛은 이 유닛이 삭제되거나 설치될때 같이 삭제되거나 설치됩니다 DefaultInstance 유닛이 활성화 될 때 인스턴스화 될 유닛을 제합니다
  • 25. 25 - Internal Use Only - [Unit] 섹션 커맨드 설명 systemctl status <서비스명> 서비스의 상태 체크 systemctl stop <서비스명> 서비스의 정지 systemctl start <서비스명> 서비스의 시작 systemct enable <서비스명> 부트시 서비스 시작 활성화 systemctl disable <서비스명> 부트시 서비스 시작 비활성화 systemctl list-dependencies <서비스명> 서비스의 디펜던시를 출력 systemctl list-units --type <타입> 특정 타입을 출력 systemctl list-unit-files 시스템에 있는 모든 유닛의 리스트와 상태를 출력 systemctl list-unit-files 시스템에 있는 모든 유닛의 리스트와 상태를 출력 systemd-cgtop 각 각의 서비스가 사용하는 리소스를 보는 커맨드 systemd-cgls 각 각의 서비스에 할당되어 있는 프로세스를 출력 journalctl -k 현재 부트에서 kernel 메시지를 출력 journalctl -f 지속적으로 로그를 출력 journalctl -u 특정 unit에 대한 메시지를 출력
  • 26. 26 - Internal Use Only - 요약 OPEN SHARE CONTRIBUTE ADOPT REUSE