• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Hello, systemd
 

Hello, systemd

on

  • 5 views

Systemd を使うと何がうれしいのかについて説明しています。

Systemd を使うと何がうれしいのかについて説明しています。

Statistics

Views

Total Views
5
Views on SlideShare
5
Embed Views
0

Actions

Likes
0
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Hello, systemd Hello, systemd Presentation Transcript

    • Hello, systemd! Haruka Iwao 2014/07/24
    • 自己紹介 • 岩尾 はるか(@Yuryu) • 恵比寿方面から来ました – 発表は個人の見解です(お約束) – 担当はストレージです(GlusterFS, Ceph) • クックパッドプレミアム会員です
    • Hello, systemd! • Systemd がやってきた • RHEL 7, CentOS 7, Fedora に採用 • DebianとUbuntuも将来は採用 – たぶんGentoo以外みんなsystemd • SysV Initとupstart、今までありがとう
    • Systemdとは • PID 1 を置き換える新しいデーモン • すべてのプロセスの親 – Systemd自体はカーネルにより直接起動される • 今までより担当範囲が広くなった • 後方互換性はほとんど無い
    • 追加されたコマンド • systemctl – service コマンドに相当 – systemctl <コマンド> <サービス名> • journalctl – ログを表示(syslogの代わり) • systemd-* – いっぱいあるけどとりあえず気にしない
    • 何がうれしいの? • init はサービスと点で接していた – 起動とシグナル送信だけに責任を持つ • systemd はサービスの一生を監視 – 起動前から終了後まですべてに責任を持つ – cgroup によるリソースの分離 • 「unit」単位でシステムを抽象化 • シェルスクリプトからの解放 • 高速化、柔軟性、etc
    • サービスの一生を監視 • init で起動した後SIGKILL送るとどうなる? – 例) Apacheの親プロセスだけSIGKILL • 従来のinitは知らぬ存ぜぬ • systemdはちゃんと見ている
    • SIGKILLしたらどうなるか # systemctl status httpd httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled) Active: active (running) since Thu 2014-07-24 03:57:50 JST; 1min 21s ago Main PID: 1311 (httpd) Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec" CGroup: /system.slice/httpd.service ├─1311 /usr/sbin/httpd -DFOREGROUND ├─1451 /usr/sbin/httpd -DFOREGROUND ├─1452 /usr/sbin/httpd -DFOREGROUND ├─1453 /usr/sbin/httpd -DFOREGROUND ├─1455 /usr/sbin/httpd -DFOREGROUND └─1457 /usr/sbin/httpd -DFOREGROUND Jul 24 03:57:50 centos7.local httpd[1311]: AH00558: httpd: Could not reliably determine the server's fully qualified ...essage Jul 24 03:57:50 centos7.local systemd[1]: Started The Apache HTTP Server.
    • # kill -9 1311 # systemctl status httpd httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled) Active: deactivating (stop-sigterm) (Result: signal) since Thu 2014-07-24 04:00:40 JST; 3s ago Process: 2554 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS) Process: 1311 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=killed, signal=KILL) Main PID: 1311 (code=killed, signal=KILL) Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec" CGroup: /system.slice/httpd.service ├─1451 /usr/sbin/httpd -DFOREGROUND ├─1452 /usr/sbin/httpd -DFOREGROUND ├─1453 /usr/sbin/httpd -DFOREGROUND ├─1455 /usr/sbin/httpd -DFOREGROUND └─1457 /usr/sbin/httpd -DFOREGROUND Jul 24 03:57:50 centos7.local httpd[1311]: AH00558: httpd: Could not reliably determine the server's fully qualified ...essage Jul 24 03:57:50 centos7.local systemd[1]: Started The Apache HTTP Server. Jul 24 04:00:40 centos7.local systemd[1]: httpd.service: main process exited, code=killed, status=9/KILL
    • systemdがみてる • サービスに対するSIGKILLをしっかり監視 • 子プロセスも迷子にならない • ついでにログも見てる – 従来はsyslogがごっちゃに吐いてた • プロセスの自動再起動も可能 – daemontools っぽいよね
    • cgroup によるリソースの分離 • リソース制限といえば ulimit – プロセス単位なのでforkすると別になる • cgroup で「サービス単位」の制限が可能 – すべてsystemd経由で指定できる – わかりやすい、漏れが無い – ulimit どこに書くのが正解か議論に終止符
    • unit 概念の追加 • あらゆるタスクを「unit」とした • unit には service, target, device などがある • runlevel も「multi-user.target」とunit化 • それぞれに依存関係を記述 – race conditionによる事故が無い – システムの起動が高速化
    • 起動と終了が高速化 • 「サーバーなんだから」と思うなかれ – AWSみたいな環境だと結構効くと思う • reboot 打ってからlogin:出るまで – RHEL 6.5: 29秒 – RHEL 7.0: 10秒
    • シェルスクリプトからの解放 • ポータブルなinit.dスクリプト、書けますか? • シェルスクリプトは遅い • init.dスクリプトのバグに悩む… • 数行の設定ファイルで大丈夫 – そう、systemdならね。
    • 柔軟性 • パケットが届いてからサービスを起動 – それってinetdじゃね • ファイルが作成されたらサービスを起動 • 複数のunitをまとめたtargetを作れる • サービス専用の/tmpを用意
    • おまけ: 単発コマンドを実行 • リソース制限したり、ログを残したり、状態を 監視しつつ簡単に実行できるよ # systemd-run echo abc Running as unit run-2942.service. # systemctl status run-2942 run-2942.service Loaded: not-found (Reason: No such file or directory) Active: inactive (dead) Jul 24 04:50:36 centos7.local systemd[1]: Starting /bin/echo abc... Jul 24 04:50:36 centos7.local systemd[1]: Started /bin/echo abc. Jul 24 04:50:36 centos7.local echo[2943]: abc
    • おしまい