Lưu trữ thẻ: #centos

Hướng dẫn cấu hình Apache MPM

I. Giới thiệu và so sánh sự khác nhau giữa 3 mode chính

Apache MPM là các module muti-processing quyết định cách thức mà Apache sẽ tiếp nhận và xử lý các request từ client. MPM là module của apache nên có thể enable hay disable trong file config của apache. Apache từ version 2.4 trở đi hỗ trợ 3 modules multi-processing : worker, prefork và event (lưu ý : trong một thời điểm chỉ sử dụng được 1 trong 3 modules này).

  1. MPM Perfork
    Sử dụng nhiều tiến trình con (chill process) trong apache và mỗi chill process đó chỉ có 1 luồng (thread) để xử lý một request tại cùng một thời điểm.

    • Ưu điểm: Các process được xử lý hoàn toàn một cách độc lập không liên quan gì đến nhau, cho nên nếu một process chết thì các process còn lại vẫn hoạt động và vẫn hoàn thành công việc của nó. Đây là module mặc định và là module ổn định nhất, tương thích với các phần mềm cũ hơn.
    • Nhược điểm: do xử lý không phân luồng nên tạo ra quá nhiều process sẽ chiếm dụng lượng tài nguyên server lớn.
    • Thông số cần lưu ý:
      • StartServers : số process được tạo ra lúc apache start
      • MinspareServer : số process tối thiểu được chuẩn bị sẵn.
      • MaxSpareServer : số process tối đa được chuẩn bị sẵn
      • ServerLimit : Giá trị lớn nhất của Maxclient trong thời gian chạy apache
      • MaxClient : số process lớn nhất được chạy
      • MaxRequestsPerChild : số lượng request tối đa mà một process có thể phục vụ
      • MaxRequestWorkers : số lượng tiến trình con tối đa có thể tồn tại cùng một lúc
  2. MPM Worker
    Sử dụng nhiều tiến trình con (chill process) trong apache và mỗi chill process sẽ có nhiều luồng (thread) và mỗi luồng sẽ xứ lý một request tại một thời điểm.

    • Ưu điểm: có thể xử lý nhiều tiến trình cùng 1 lúc. Nhanh hơn prefork và có thể xử lý nhiều khách truy cập hơn.
    • Nhược điểm: do xử lý nhiều nên tính ổn định sẽ không cao so với prefork.
    • Thông số cần lưu ý:
      • StartServers : số process được tạo ra lúc apache start
      • MaxClient : tổng số connections đồng thời sẽ được xử lý
      • MinSpareThread : số Thread tối thiểu được chuẩn bị sẵn
      • MaxSpareServer : Số Thread tối đa được chuẩn bị sẵn
      • ThreadsPerChild : số thread có trong một process
      • MaxrequestsPerchild : tổng số connections đồng thời được process xử lý.
      • MaxRequestWorkers : tổng số luồng tối đa có thể hoạt động đồng thời.
  3. MPM Event
    Event MPM dựa trên mô hình Worker MPM để hoạt động. Event MPM sử dụng các tiến trình parent ( tiến trình cha ) chịu trách nhiệm chạy các chill process, mỗi chill process sẽ tạo ra nhiều thread để xứ lý các request.

    • Ưu điểm : là cải tiến từ mpm worker với mục tiểu chỉ sử dụng các luồng cho các kết nối có xử lý tích cực và là module nhanh nhất, sử dụng ít tài nguyên nhất.
    • Nhược điểm : Do xử lý phức tạp và xử lý nhiều tiến trình hơn cho với 2 module trên nên tính ổn định kém nhất.

II. Kiểm tra module MPM đang chạy trên server

Để kiểm tra module mpm nào đang chạy trên server, Quý khách có thể thực hiện lệnh sau:

  • Centos: httpd -V | grep -i mpm
  • Ubuntu: apachectl -V | grep -i mpm

III. Tính toán và thiết lập các thông số để tối ưu phù hợp

  1. Tính toán các thông số:
    • Cài đặt python ps_mem.py
      wget https://raw.githubusercontent.com/pixelb/ps_mem/master/ps_mem.py
      chmod a+x ps_mem.py
      python ps_mem.py


      Như ví dụ trong bài viết này đang có 3 process size apache (httpd) tiêu thụ 4.6MB, vì vậy mỗi apache process đang sử dụng khoảng 1.5MB RAM và mỗi PHP process size sẽ sử dụng khoảng 4.5MB

    • Công thức tính MaxrequestWorkers và ServerLimit:
      MaxRequestWorkers = (Total RAM – Memory used for Linux, DB, etc.) / process size
      MaxRequestWorkers = (3770 – 925) / 1.5 = 1896
    • Công Thức tính php-fpm max-children
      Max-children = (Tổng RAM – Bộ nhớ được sử dụng cho Linux, DB, v.v.) / PHP process zise
      Max-children = (3770 – 925) / 4.5 = 632
  2. Điều chỉnh cấu hình
    • Vào file cấu hình của module MPM đang chạy để chỉnh sửa ví dụ trong bài viết đang chạy MPM Event thì ta vào đường dẫn ” /etc/apache2/mods-enabled/mpm_event.conf ”
    • Lưu ý rằng cài đặt mặc định không chứa “server limit “, vì vậy thêm nó vào đây còn các thông số khác thì để mặc định.
    • Cấu hình thông số php-fpm (8.1 là version trong bài  viết này sử dụng), vào file config của php-fpm “/etc/php/8.1/fpm/pool.d/www.conf”
      pm = dynamic
      pm.max_children =  640
      pm.start_servers = (cpu cores * 4)
      pm.min_spare_servers =  (cpu cores * 2)
      pm.max_spare_servers =  (cpu cores * 4)
      pm.max_requests = 1000
    • Lưu lại và restart service apache để áp dụng cấu hình mới.

Như vậy, Long Vân đã hoàn thành hướng dẫn Quý khách cách cấu hình module mpm trong máy chủ Apache. Chúc Quý khách thành công!

Tìm hiểu Apache MPM

I. Giới thiệu và so sánh sự khác nhau giữa 3 mode chính (Prefork, Worker, Event)

Apache MPM là các module muti-processing quyết định cách thức mà apache sẽ tiếp nhận và xử lý các request từ client. MPM là module của apache nên có thể enable hay disable trong file config của apache. Apache từ version 2.4 trở đi hỗ trợ 3 modules multi-processing : worker, prefork và event (lưu ý : chỉ sử dụng được 1 trong 3 modules này).

   1. MPM Perfork
Sử dụng nhiều tiến trình con (chill process) trong apache và mỗi chill process đó chỉ có 1 luồng (thread) để xử lý một request tại cùng một thời điểm.

Ưu điểm: Các process được xử lý hoàn toàn một cách độc lập không liên quan gì đến nhau, cho nên nếu một process chết thì các process còn lại vẫn hoạt động và vẫn hoàn thành công việc của nó. Đây là module mặc định và là module ổn định nhất, tương thích với các phần mềm cũ hơn.

Nhược điểm: do xử lý không phân luồng nên tạo ra quá nhiều process sẽ chiếm dụng lượng tài nguyên server lớn.

Thông số cần lưu ý:

StartServers : số process được tạo ra lúc apache start
MinspareServer : số process tối thiểu được chuẩn bị sẵn.
MaxSpareServer : số process tối đa được chuẩn bị sẵn
ServerLimit : Giá trị lớn nhất của Maxclient trong thời gian chạy apache
MaxClient : số process lớn nhất được chạy
MaxRequestsPerChild : số lượng request tối đa mà một process có thể phục vụ
MaxRequestWorkers : xác định số lượng tiến trình con tối đa có thể tồn tại cùng một lúc.

 2. MPM Worker
Sử dụng nhiều tiến trình con (chill process) trong apache và mỗi chill process sẽ có nhiều luồng (thread) và mỗi luồng sẽ xứ lý một request tại một thời điểm.

Ưu điểm: có thể xử lý nhiều tiến trình cùng 1 lúc. Nhanh hơn prefork và có thể xử lý nhiều khách truy cập hơn.

Nhược điểm: do xử lý nhiều nên tính ổn định sẽ không cao so với prefork.
Thông số cần lưu ý:
StartServers : số process được tạo ra lúc apache start
MaxClient : tổng số connections đồng thời sẽ được xử lý
MinSpareThread : số Thread tối thiểu được chuẩn bị sẵn
MaxSpareServer : Số Thread tối đa được chuẩn bị sẵn
ThreadsPerChild : số thread có trong một process
MaxrequestsPerchild : tổng số connections đồng thời được process xử lý.
MaxRequestWorkers : trong Worker xác định tổng số luồng tối đa có thể hoạt động đồng thời.

   3. MPM Event
Event MPM dựa trên mô hình Worker MPM để hoạt động. Event MPM sử dụng các tiến trình parent ( tiến trình cha ) chịu trách nhiệm chạy các chill process, mỗi chill process sẽ tạo ra nhiều thread để xứ lý các request.

 Ưu điểm : là cải tiến từ mpm worker với mục tiểu chỉ sử dụng các luồng cho các kết nối có xử lý tích cực và là module nhanh nhất, sử dụng ít tài nguyên nhất.

Nhược điểm : Do xử lý phức tạp và xử lý nhiều tiến trình hơn cho với 2 module trên nên tính ổn định kém nhất.

II. Kiểm tra module MPM đang chạy trên server

Centos: httpd -V | grep -i mpm
Ubuntu: apachectl -V | grep -i mpm

III. Thiết lập và tính toán các thông số để tối ưu phù hợp

– Cài đặt python ps_mem.py
wget https://raw.githubusercontent.com/pixelb/ps_mem/master/ps_mem.py
chmod a+x ps_mem.py
python ps_mem.py

Như ví dụ trong bài viết này đang có 3 process size apache (httpd) tiêu thụ 4.6MB, vì vậy mỗi apache process đang sử dụng khoảng 1.5MB RAM và mỗi PHP process size sẽ sử dụng khoảng 4.5MB

– Công thức tính MaxrequestWorkers và ServerLimit:
MaxRequestWorkers = (Total RAM – Memory used for Linux, DB, etc.) / process sizeMaxRequestWorkers = (3770 – 925) / 1.5 = 1896

– Công Thức tính php-fpm max-children
Max-children = (Tổng RAM – Bộ nhớ được sử dụng cho Linux, DB, v.v.) / PHP process zise
Max-children = (3770 – 925) / 4.5 = 632

IV. Chỉnh sửa cấu hình MPM trong apache

Vào file cấu hình của module MPM đang chạy để chỉnh sửa ví dụ trong bài viết đang chạy MPM Event thì ta vào đường dẫn ” /etc/apache2/mods-enabled/mpm_event.conf ”

Lưu ý rằng cài đặt mặc định không chứa “server limit “, vì vậy thêm nó vào đây còn các thông số khác thì để mặc định.
Cấu hình thông số php-fpm (8.1 là version trong bài  viết này sử dụng), vào file config của php-fpm “/etc/php/8.1/fpm/pool.d/www.conf”

pm = dynamic

pm.max_children =  640

pm.start_servers = (cpu cores * 4)

pm.min_spare_servers =  (cpu cores * 2)

pm.max_spare_servers =  (cpu cores * 4)

pm.max_requests = 1000

Hướng dẫn cấu hình và xem log trên Linux (Ubuntu và CentOS)

Giới thiệu

Quản trị viên hệ thống Linux thường cần xem các tệp nhật ký cho mục đích khắc phục sự cố. Đây là một trong những điều đầu tiên mà một system admin sẽ làm.

Bài viết bao gồm những thông tin chi tiết về các loại log khác nhau trên hệ thống Linux, cách cấu hình để lưu log vào file, cách xem và quản lý các file log đã được tạo ra, cũng như các công cụ hữu ích để phân tích và giải mã các thông tin trong các file log. Do đó, biết nơi hệ thống lưu giữ các tệp nhật ký và cách sử dụng các lệnh liên quan có thể giúp tiết kiệm thời gian quý báu trong quá trình khắc phục sự cố.

Trong hướng dẫn này, chúng ta sẽ xem xét các phần khác nhau của cơ chế ghi nhật ký Linux.

I. Tệp nhật ký mặc định

1. Kiểm tra vị trí tệp nhật ký

Vị trí mặc định cho các tệp nhật ký trong Linux là /var/log. Bạn có thể xem danh sách các tệp nhật ký trong thư mục này bằng lệnh sau:

ls /var/log

Bạn sẽ thấy nội dung tương tự trên hệ thống của mình:

2. Xem nội dung tệp nhật ký

Dưới đây là một số tệp nhật ký phổ biến mà bạn sẽ tìm thấy bên dưới /var/log:

  • wtmp
  • utmp
  • dmesg
  • messages
  • maillog hoặc mail.log
  • spooler
  • auth.log hoặc secure

Các tệp wtmp và utmp tệp theo dõi người dùng đăng nhập và đăng xuất khỏi hệ thống. Bạn không thể đọc trực tiếp nội dung của các tệp này bằng cat các lệnh trong thiết bị đầu cuối – có các lệnh cụ thể khác cho việc đó và bạn sẽ sử dụng một số lệnh này. hoặc

Để xem ai hiện đang đăng nhập vào máy chủ Linux, hãy sử dụng lệnh :

who

Để xem lịch sử đăng nhập người dùng, ta dùng lệnh :

last

Bạn cũng có thể sử dụng last lệnh với dấu gạch ngang ( |) để thêm grep tìm kiếm cho những người dùng cụ thể.
Để xem lịch sử khởi động lại lần cuối, ta dùng lệnh :

last reboot

Để xem lần cuối ai đó đăng nhập vào hệ thống là khi nào, hãy sử dụng

lastlog

II. Sử dụng rsyslog Daemon

Trung tâm của cơ chế ghi nhật ký là rsyslog daemon. Dịch vụ này chịu trách nhiệm lắng nghe các thông báo tường trình từ các phần khác nhau của hệ thống Linux và định tuyến thông báo tới một tệp nhật ký thích hợp trong thư mục/var/log. Nó cũng có thể chuyển tiếp các thông điệp bản ghi đến một máy chủ Linux khác.

1. Tệp cấu hình rsyslog

Cơ bản trên file rsyslog.conf mặc định cho chúng ta thấy nơi lưu trữ các log tiến trình của hệ thống:

cat /etc/rsyslog.conf

Cấu hình trên được chia ra làm 2 trường:

Trường 1: Trường Seletor

  • Trường Seletor : Chỉ ra nguồn tạo ra log và mức cảnh bảo của log đó.
  • Trong trường seletor có 2 thành phần và được tách nhau bằng dấu “.“

Trường 2: Trường Action

  • Trường Action:là trường để chỉ ra nơi lưu log của tiến trình đó. Có 2 loại là lưu tại file trong localhost hoặc gửi đến IP của máy chủ Log

Đối với các dòng lệnh như sau:

mail.info         /var/log/maillog

Lúc này bản tin log sẽ mail lại với mức cảnh báo từ info trở lên. Cụ thể là mức notice,warn,… nếu bạn chỉ muốn nó log lại với mức info, hãy sử dụng như sau: mail.=info /var/log/maillog

mail.*

Lúc này kí tự * đại diên cho các mức cảnh báo nó sẽ lưu hết các level của mail vào trong thư mục. Tương tự khi đặt *. thì lúc này nó sẽ log lại tất cả các tiến trình của hệ thống vào một file. Nếu bạn muốn log lại tiến trình của mail ngoại trừ mức info bạn có thể dùng kí tự “!”

Ví dụ: mail.!info

*.info;mail.none;authpriv.none;cron.none /var/log/messages

Lúc này tất các log từ info của tiến trình hệ thống sẽ được lưu vào trong file log messages nhưng đối với các log của mail, authpriv và cron sẽ không lưu vào trong message

2. Tạo và kiểm tra thông báo log của riêng bạn

Bây giờ là lúc để bạn tạo các tệp nhật ký của riêng mình. Để kiểm tra điều này, bạn sẽ làm như sau:

  • Thêm đặc tả tệp nhật ký vào tệp /etc/rsyslog.conf
  • Khởi động lại rsyslog daemon
  • Kiểm tra cấu hình bằng tiện ích logger

Ví dụ: bạn sẽ thêm hai dòng mới vào tệp của hệ thống CentOS Linux rsyslog.conf. Mỗi người trong số họ đến từ một cơ sở gọi là local4 và họ có các ưu tiên khác nhau.

local4.crit               /var/log/local4crit.log  
local4.=info              /var/log/local4info.log  
vi /etc/rsyslog.conf

Tiếp theo, bạn sẽ khởi động lại dịch vụ để dữ liệu tệp cấu hình được tải lại:

/etc/init.d/rsyslog restart
systemctl restart rsyslog

Để tạo thông báo nhật ký ngay bây giờ, ứng dụng nhật ký được gọi là:

logger -p local4.info " Day la mot thong bao tin tu local4 "

Bây giờ tìm trong thư mục /var/log hiển thị hai tệp mới:

Mở file lên sẽ thấy thông báo khi nãy

III. Cấu hình Logrotate

1. Rotating Log Files

Khi ngày càng có nhiều thông tin được ghi vào tệp nhật ký, chúng sẽ ngày càng lớn hơn. Điều này rõ ràng đặt ra một vấn đề hiệu suất tiềm năng. Ngoài ra, việc quản lý các tập tin trở nên cồng kềnh.

Các tệp này sẽ quay trở lại trong một khoảng thời gian và sẽ đại diện cho hồ sơ tồn đọng. Khi một số lượng tồn đọng nhất định đã được tạo, một vòng quay nhật ký mới sẽ khiến tệp nhật ký cũ nhất bị xóa.

Vòng quay được bắt đầu thông qua tiện ích logrotate.

cat /etc/logrotate.conf

Ngoại lệ duy nhất là cho tập tin wtmp và btmpwtmp theo dõi các lần đăng nhập hệ thống và btmp theo dõi các lần đăng nhập không hợp lệ. Cả hai tệp nhật ký này sẽ được luân phiên hàng tháng và không có lỗi nào được trả về nếu có thể tìm thấy bất kỳ tệp trước đó wtmp hoặc tệp nào. btmp

Các cấu hình xoay nhật ký tùy chỉnh được giữ trong thư mục /etc/logrotate.d. Chúng cũng được bao gồm trong chỉ thị logrotate.conf with include

ls -l /etc/logrotate.d

Ví dụ : Xem thông tin cấu hình của gói bootlog

Trong đó:

missingok: Nếu file log bị mất hoặc không tồn tại *.log thì logrotate sẽ tự động di chuyển tới phần cấu hình log của file log khác mà không cần phải xuất ra thông báo lỗi

daily: Được rotate mỗi ngày

copytruncate: File bootlog cũ được sao chép vào một tệp lưu trữ, và sau đó nó xóa các dòng log cũ

rotate 7: Giữ lại 7 file log cũ sau khi rotate

notifempty: Không rotate log nếu file bootlog này trống

2. Rotate theo dung lượng file log

Chúng ta có thể quy định tiến trình rotate dựa vào dung lượng file. Với /var/log/wtmp khi size 1M sẽ tạo tệp mới:

cat /etc/logrotate.conf

Ví dụ trên các tùy chọn có ý nghĩa như sau:

size 1M: Logrotate chỉ chạy nếu kích thước tệp bằng (hoặc lớn hơn) kích thước này.

minsize có nghĩa là kích thước nhật ký ít nhất phải là minsize để việc xoay tần số xảy ra. Tần suất hàng ngày (được gọi là hàng ngày từ cron) sẽ không có tác dụng gì nếu kích thước nhỏ hơn minsize.

maxsize có nghĩa là, ngoài tần suất chạy, nếu kích thước vượt quá maxsize, một vòng quay có thể xảy ra. Nếu cấu hình có tần suất hàng tuần được gọi là hàng ngày và nếu kích thước lớn hơn kích thước tối đa, thì việc xoay vòng có thể xảy ra.

create Rotate tệp gốc và tạo tệp mới với sự cho phép người dùng và nhóm được chỉ định.

rotate Giới hạn số vòng quay của fle log. Vì vậy, điều này sẽ chỉ giữ lại 1 file log được rotate gần nhất.

3. Chạy Logrotate thủ công và kiểm tra

Để xem cách thức hoạt động này, đây là danh sách một phần các tệp nhật ký trong thư mục trong máy chủ CentOS thử nghiệm:

ls -l /var/log

Khi chúng ta muốn chạy ngay Logrotate, hãy dùng lệnh bên dưới:

logrotate -vf /etc/logrotate.d/

Trong đó các tuỳ chọn là:

-v: Hiển thị thêm thông tin, có ích khi bạn muốn dò lỗi logrotate

-f: Bắt buộc rotate ngay lập tức

Tin nhắn cuộn qua khi tệp mới được tạo, gặp lỗi, v.v. Bạn kiểm tra các tệp hoặc đã được tạo mới: mail secure message

ls -l /var/log/mail*

ls -l /var/log/messages*

ls -l /var/log/secure*

Chúng ta sẽ thấy nhật ký mới đã được tạo. Các tệp vẫn trống, nhưng tệp mới đã có một số dữ liệu trong đó.

4. Một số cấu hình khác

Chúng ta vẫn cấu hình trong tệp logrotate.conf :

vi /etc/logrotate.conf

Sao chép logrotate – copytruncate

Nén – compress

logextate dateext – dateext

Cú pháp này sẽ chỉ làm việc một lần trong một ngày. Vì vậy, logrotate sẽ không thành công sau lần chạy đầu tiên cùng ngày.

Đăng nhập hàng tháng, hàng ngày, hàng tuần – monthly, daily, weekly

Kết thúc postrotate – postrotate

Maxage Logrotate – maxage

Logrotate missingok – missingok

Hy vọng rằng hướng dẫn này đã cung cấp cho bạn một số ý tưởng về ghi nhật ký Linux. Bạn có thể cố gắng xem xét các hệ thống phát triển hoặc thử nghiệm của riêng bạn để có một ý tưởng tốt hơn. Chúc bạn thành công !