Hệ điều hành Centos 7 – Có gì mới và khác so với Centos 6 – Phần 2 - Systemd
FASTER - STRONGER - SAVER
sales@vietdata.com.vn   0914 83 55 22
Trang Chủ > Kiến thức dịch vụ > Centos 7 >Hệ điều hành Centos 7 – Có gì mới và khác so với Centos 6 – Phần 2 – Systemd

Hệ điều hành Centos 7 – Có gì mới và khác so với Centos 6 – Phần 2 – Systemd

Nối tiếp phần 11Hosting giới thiệu phần 2 của loạt series tìm hiểu về Centos 7 với việc đi sâu chi tiết hơn về những thay đổi trong hệ thống, đó là systemd.

Có thể nói đây là sự thay đổi lớn trong  Centos 7. Trước tiên ta tìm hiểu các kỹ thuật cũ về hệ thống khởi động trên các phiên bản trước của Centos:

+ init – là process đầu tiên được load và sẽ nằm ở đó cho đến khi hệ thống (họ nhà Red Hat, Centos ) shutdown. Múc đích của nó là sử dụng các run levels để quyết định daemons nào được start và tương tác để điều khiển chúng. Tuy nhiên điểm cố hữu ” chết người” của init là ở chỗ nó khởi động các process theo thứ tự lần lượt, các tác vụ chỉ được khởi động khi tác vụ trước đó đã hoàn thành. Vì thế sẽ mất nhiều thời gian hơn và nếu một tác vụ bị failed, quá trình khởi động sẽ dừng lại ở đó cho đến khi nó tìm được cách xử lý.
+ Upstart – là sự thay thế cho init, chủ yếu sử dụng trên Ubuntu và dành cho mục đích khởi động các process không đồng thời, điều này làm tăng tốc độ boot và mức ổn định của hệ thống.

Ở Centos 7 systemd cũng làm nhiệm vụ tương tự init và là tiến trình đầu tiên khi khởi động, có pid =1. systemd không phải là một process đơn thuần mà nó còn chứa các gói, các thư viện và các công cụ trong đó. Có thể nhìn sơ qua cấu trúc của systemd như sau:

systemd_components

Khác hoàn toàn với init, systemd khởi động các process song song, không còn phụ thuộc vào nhau nên giảm thiểu thời gian khởi động và tăng tính ổn định khi một process failed sẽ không ảnh hưởng đến toàn bộ quá trình khởi động. Không chỉ khởi động các chương trình core, systemd còn khởi động các hoạt động  khác trên hệ thống như network stack, bộ cron job scheduler, user login….

Ta sẽ xem các ví dụ về việc sử dụng systemd như sau:

File cấu hình chung của systemd nằm trong thư mục /etc/systemd

File cấu hình các service thì nằm trong /usr/lib/systemd

Các file custome config thì đặt trong /etc/systemd/system, đặc biệt đôi khi thư mục /run/systemd/system cũng đc sử dụng

Để xem phiên bản của systemd hiện tại, sử dụng lệnh:

# systemctl --version
systemd 208
+PAM +LIBWRAP +AUDIT +SELINUX +IMA +SYSVINIT +LIBCRYPTSETUP +GCRYPT +ACL +XZ

Nhiệm vụ chính của systemd là quản lý các boot process và cung cấp thông tin về nó, ta dùng lệnh sau:

# systemd-analyze
Startup finished in 422ms (kernel) + 2.722s (initrd) + 9.674s (userspace) = 12.820s

Để xem các service trong quá trình boot của nó, ta sử dụng lệnh như sau:

# systemd-analyze blame
7.029s network.service
2.241s plymouth-start.service
1.293s kdump.service
1.156s plymouth-quit-wait.service
1.048s firewalld.service
632ms postfix.service
621ms tuned.service
460ms iprupdate.service
446ms iprinit.service
344ms accounts-daemon.service
...
7ms systemd-update-utmp-runlevel.service
5ms systemd-random-seed.service
5ms sys-kernel-config.mount

systemd cho phép hiển thị những process quan trọng nhất trong khi khởi động hệ thống với tùy chọn critical chain 

# systemd-analyze critical-chain
The time after the unit is active or started is printed after the "@" character.
The time the unit takes to start is printed after the "+" character.

multi-user.target @6.167s
└─mariadb.service @2.661s +3.505s
  └─network.target @2.649s
    └─network.service @2.168s +478ms
      └─NetworkManager.service @1.993s +174ms
        └─firewalld.service @826ms +1.162s
          └─basic.target @822ms
            └─sockets.target @821ms
              └─dbus.socket @820ms
                └─sysinit.target @813ms
                  └─systemd-update-utmp.service @806ms +6ms
                    └─auditd.service @747ms +58ms
                      └─local-fs.target @742ms
                        └─boot.mount @709ms +32ms
                          └─systemd-fsck@dev-disk-by\x2duuid-497a43ab\x2d33b0\x2
                            └─dev-disk-by\x2duuid-497a43ab\x2d33b0\x2d4153\x2d9f

hay critical chain với 1 service cụ thể

# systemd-analyze critical-chain firewalld.service
The time after the unit is active or started is printed after the "@" character.
The time the unit takes to start is printed after the "+" character.

firewalld.service +1.162s
└─basic.target @822ms
  └─sockets.target @821ms
    └─dbus.socket @820ms
      └─sysinit.target @813ms
        └─systemd-update-utmp.service @806ms +6ms
          └─auditd.service @747ms +58ms
            └─local-fs.target @742ms
              └─boot.mount @709ms +32ms
                └─systemd-fsck@dev-disk-by\x2duuid-497a43ab\x2d33b0\x2d4153\x2d9
                  └─dev-disk-by\x2duuid-497a43ab\x2d33b0\x2d4153\x2d9f8d\x2d7788

Để xem sự phụ thuộc (dependencies) của các services

# systemctl list-dependencies
default.target
├─abrt-ccpp.service
├─abrt-oops.service
...
├─tuned.service
├─basic.target
│ ├─firewalld.service
│ ├─microcode.service
...
├─getty.target
│ ├─getty@tty1.service
│ └─serial-getty@ttyS0.service
└─remote-fs.target

Và xem dependencies của 1 services cụ thể:

# systemctl list-dependencies sshd.service

 CÁC THÀNH PHẦN CƠ BẢN VÀ QUAN TRỌNG TRONG systemd

1. Journal Analysis

Trong Centos 7, systemd sẽ xử lý sự kiện thông qua một công cụ của nó trong systemd Utilities là Journald, đây là một tính năng rất hay và đáng giá. Chẳng hạn, để xem tất cả các sự kiện liên quan đến sshd process, ta dùng lệnh:

# journalctl /sbin/sshd
hoặc
# journalctl --unit=sshd

Để hiển thị tất cả các sự kiện trong lần boot cuối cùng:

# journalctl -b

hay chỉ là của ngày hôm nay:

# journalctl --since=today

hoặc các sự kiện liên quan đến lỗi

# journalctl -p err

Mặc đinh, Journald logs được lưu trong thư mục /run/log/journal  và sẽ biến mất sau quá trình khởi động. Để lưu Journald logs cho mục đích xem lại ta làm như sau:

# mkdir /var/log/journal
# echo "SystemMaxUse=50M" >> /etc/systemd/journald.conf
# systemctl restart systemd-journald 

2. Service Management – Quản lý các services

Để quản lý các services, systemd sử dụng systemctl thay thế cho các lệnh chkconfig và service trước đây của Centos 6.

Ví dụ để active ntp services lúc khởi động thay cho chkconfig

# systemctl enable ntpd (thay vì chkconfig ntpd on)

Chú ý 1: Cú pháp chuẩn phải là ntpd.service nhưng mặc định .service sẽ tự động được thêm vào.
Chú ý 2: nếu là đường dẫn, .mount sẽ được thêm vào.
Chú ý 3: Nếu là thiết bị,  .device sẽ được thêm vào.

Để deactivate, start, stop một services:

# systemctl disable ntpd (thay vì chkconfig ntpd off)
# systemctl start ntpd (thay vì services ntpd start)
# systemctl stop ntpd (thay vì services ntpd stop)

Kiểm tra NTP service có được active lúc khởi động:

# systemctl is-enabled ntpd
enabled

Kiểm tra NTP service có hoạt động:

# systemctl is-active ntpd
inactive

Lấy trạng thái của sshd services :

# systemctl status sshd
sshd.service - OpenSSH server daemon
 Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
 Active: active (running) since Sun 2016-04-17 15:39:19 ICT; 42min ago
 Docs: man:sshd(8)
 man:sshd_config(5)
 Main PID: 714 (sshd)
 CGroup: /system.slice/sshd.service
 └─714 /usr/sbin/sshd -D

3. Targets/Run Levels

Systemd sử dụng các targets. Một target là một kỹ thuật ghép nhóm cho phép nhiều services khởi động cùng lúc. Các services này được kết hợp với một target cụ thể và được lưu trong thư mục cùng tên với tên target. Hiểu theo một cách nào đó, target thay thế các run levels (level 3 chế độ dòng lệnh hay level 5 chế độ đồ họa). File /etc/inittab sẽ không còn được sử dụng để set default run level nữa và vì thế việc thay đổi nó sẽ không còn tác dụng trong Centos 7.

Chẳng hạn để đưa Centos 7 vào chế độ maintenance mode:

# systemctl rescue

Để chuyển sang level 3:

# systemctl isolate runlevel3.target

hay

# systemctl isolate multi-user.target

Để chuyển sang chế độ đồ họa:

# systemctl isolate graphical.target

hay chế độ không dùng GUI:

# systemctl set-default multi-user.target

Kiểm tra run level đang chạy của hệ thống

# systemctl get-default
graphical.target

4. Control Groups (CGroups)

Phần này sẽ được 1Hosting giới thiệu chi tiết tại bài viết này.