Quản trị viên Linux - Quản lý tài nguyên với crgoups

cgroups hoặc Control Groups là một tính năng của nhân Linux cho phép quản trị viên phân bổ hoặc giới hạn tài nguyên hệ thống cho các dịch vụ và cả nhóm.

Để liệt kê các nhóm điều khiển đang hoạt động , chúng ta có thể sử dụng lệnh ps sau :

[root@localhost]# ps xawf -eo pid,user,cgroup,args 
8362 root     -                            \_ [kworker/1:2] 
1 root        -                           /usr/lib/systemd/systemd --switched-
   root --system --    deserialize 21 
507 root     7:cpuacct,cpu:/system.slice  /usr/lib/systemd/systemd-journald 
527 root     7:cpuacct,cpu:/system.slice  /usr/sbin/lvmetad -f 
540 root     7:cpuacct,cpu:/system.slice  /usr/lib/systemd/systemd-udevd 
715 root     7:cpuacct,cpu:/system.slice  /sbin/auditd -n 
731 root     7:cpuacct,cpu:/system.slice   \_ /sbin/audispd 
734 root     7:cpuacct,cpu:/system.slice       \_ /usr/sbin/sedispatch 
737 polkitd  7:cpuacct,cpu:/system.slice  /usr/lib/polkit-1/polkitd --no-debug 
738 rtkit    6:memory:/system.slice/rtki  /usr/libexec/rtkit-daemon 
740 dbus     7:cpuacct,cpu:/system.slice  /bin/dbus-daemon --system --
   address=systemd: --nofork --nopidfile --systemd-activation

Quản lý tài nguyên, kể từ CentOS 6.X, đã được định nghĩa lại với việc triển khai systemd init . Khi nghĩ Quản lý tài nguyên cho các dịch vụ, điều chính cần tập trung là các nhóm .cgroupsnâng cao với systemd về cả chức năng và tính đơn giản.

Mục tiêu của các nhóm trong quản lý tài nguyên là - không một dịch vụ nào có thể làm suy giảm toàn bộ hệ thống. Hoặc không có quy trình dịch vụ đơn lẻ nào (có thể là một tập lệnh PHP được viết kém) sẽ làm tê liệt chức năng của máy chủ do tiêu tốn quá nhiều tài nguyên.

cgroups cho phép kiểm soát tài nguyên của các đơn vị đối với các tài nguyên sau:

  • CPU - Hạn chế các tác vụ chuyên sâu về cpu không quan trọng như các tác vụ ít chuyên sâu khác

  • Memory - Giới hạn dung lượng bộ nhớ mà một dịch vụ có thể sử dụng

  • Disks - Giới hạn i / o đĩa

** Thời gian CPU: **

Các tác vụ cần ít ưu tiên CPU hơn có thể có các Lát CPU được cấu hình tùy chỉnh.

Chúng ta hãy xem xét hai dịch vụ sau đây chẳng hạn.

Dịch vụ CPU lịch sự 1

[root@localhost]# systemctl cat polite.service 
# /etc/systemd/system/polite.service 
[Unit] 
Description = Polite service limits CPU Slice and Memory 
After=remote-fs.target nss-lookup.target

[Service] 
MemoryLimit = 1M 
ExecStart = /usr/bin/sha1sum /dev/zero 
ExecStop = /bin/kill -WINCH ${MAINPID} 
WantedBy=multi-user.target

# /etc/systemd/system/polite.service.d/50-CPUShares.conf 
[Service] 
CPUShares = 1024 
[root@localhost]#

Dịch vụ CPU ác 2

[root@localhost]# systemctl cat evil.service 
# /etc/systemd/system/evil.service 
[Unit] 
Description = I Eat You CPU 
After=remote-fs.target nss-lookup.target

[Service] 
ExecStart = /usr/bin/md5sum /dev/zero 
ExecStop = /bin/kill -WINCH ${MAINPID} 
WantedBy=multi-user.target

# /etc/systemd/system/evil.service.d/50-CPUShares.conf 
[Service] 
CPUShares = 1024 
[root@localhost]#

Hãy đặt Dịch vụ lịch sự bằng cách sử dụng mức ưu tiên CPU thấp hơn -

systemctl set-property polite.service CPUShares = 20  
/system.slice/polite.service
1   70.5   124.0K        -        -  

/system.slice/evil.service
1   99.5   304.0K        -        -

Như chúng ta có thể thấy, trong một khoảng thời gian hệ thống không hoạt động bình thường, cả hai tiến trình giả mạo vẫn đang sử dụng chu kỳ CPU. Tuy nhiên, một bộ để có ít thời gian hơn là sử dụng ít thời gian CPU hơn. Với suy nghĩ này, chúng ta có thể thấy việc sử dụng một khoảng thời gian ngắn hơn sẽ cho phép các tác vụ thiết yếu truy cập tài nguyên hệ thống tốt hơn như thế nào.

Để đặt dịch vụ cho từng tài nguyên, phương thức set-property xác định các tham số sau:

systemctl set-property name parameter=value

CPU Slices CPUShares
Giới hạn bộ nhớ Giới hạn bộ nhớ
Giới hạn bộ nhớ mềm MemorySoftLimit
Khối lượng IO BlockIOWeight
Giới hạn thiết bị chặn (được chỉ định trong / volume / path)) BlockIODeviceWeight
Đọc IO BlockIOReadBandwidth
Ghi đĩa IO BlockIOReadBandwidth

Thông thường, các dịch vụ sẽ bị giới hạn bởi việc sử dụng CPU , giới hạn bộ nhớIO Đọc / Ghi .

Sau khi thay đổi từng thứ, cần tải lại systemd và khởi động lại dịch vụ -

systemctl set-property foo.service CPUShares = 250 
systemctl daemon-reload 
systemctl restart foo.service

Định cấu hình nhóm CG trong CentOS Linux

Để tạo các nhóm tùy chỉnh trong CentOS Linux, trước tiên chúng ta cần cài đặt các dịch vụ và định cấu hình chúng.

Step 1 - Cài đặt libcgroup (nếu chưa cài đặt).

[root@localhost]# yum install libcgroup 
Package libcgroup-0.41-11.el7.x86_64 already installed and latest version 
Nothing to do 
[root@localhost]#

Như chúng ta thấy, mặc định CentOS 7 đã cài đặt libcgroup với trình cài đặt mọi thứ . Việc sử dụng một trình cài đặt tối thiểu sẽ yêu cầu chúng tôi cài đặt các tiện ích libcgroup cùng với bất kỳ phụ thuộc nào.

Step 2 - Khởi động và kích hoạt dịch vụ cgconfig.

[root@localhost]# systemctl enable cgconfig 
Created symlink from /etc/systemd/system/sysinit.target.wants/cgconfig.service 
to /usr/lib/systemd/system/cgconfig.service. 
[root@localhost]# systemctl start cgconfig 
[root@localhost]# systemctl status cgconfig 
● cgconfig.service - Control Group configuration service 
Loaded: loaded (/usr/lib/systemd/system/cgconfig.service; enabled; vendor 
preset: disabled) 
Active: active (exited) since Mon 2017-01-23 02:51:42 EST; 1min 21s ago 
Main PID: 4692 (code=exited, status = 0/SUCCESS) 
Memory: 0B 
CGroup: /system.slice/cgconfig.service  

Jan 23 02:51:42 localhost.localdomain systemd[1]: Starting Control Group 
configuration service... 
Jan 23 02:51:42 localhost.localdomain systemd[1]: Started Control Group 
configuration service. 
[root@localhost]#