Lưu trữ thẻ: #Linux

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!

Hướng dẫn cài đặt wordpress trên Ubuntu

I. Tổng quan

WordPress là một CMS (content management system) mã nguồn mở cho phép người dùng xây dựng và quản lý nội dung trên website. WordPress cung cấp cơ sở hạ tầng cơ bản để xây dựng một website, do đó nó phù hợp với hầu hết đối tượng người sử, bao gồm cả đối tượng là người sử dụng có ít kiến thức về lập trình.

Có nhiều cách để cài đặt một website WordPress, trong đó có những cách khá đơn giản đã được tích hợp sẳn trên các công cụ Hosting Control Panel (DirectAdmin, Cpanel,…) . Hướng dẫn dưới đây sẽ cài đặt WordPress thông qua cửa sổ dòng lệnh trên hệ điều hành Linux. Đây là cách cài đặt phức tạp và yêu cầu nhiều bước tiến , nhưng mặt khác cung cấp cho người dùng phương thức quản lý tốt hơn đối với website WordPress và môi trường mà nó chạy trên.

Môi trường cụ thể:

  • Hệ điều hành: Ubuntu 18.04
  • Web Server: Apache 2.4.54 + PHP 7.4
  • SQL Server: MySQL 10.6.9

II. Hướng dẫn cụ thể

  1. Cài đặt APACHE
    • Thực hiện lệnh cài đặt:
      # sudo apt install apache2
    • Start và enable dịch vụ Apache, đảm bảo Apache sẽ chạy cùng hệ điều hành
      sudo systemctl start apache2
      # sudo systemctl enable apache2
    • Tiến hành kiểm tra trạng thái dịch vụ Apache bằng lệnh:
      # sudo systemctl status apache2
  2. Cài đặt MYSQL
    • Trước tiên ta  tiến hành update  trước khi cài đặt một thứ gì đó bằng lệnh:
      # sudo apt update && sudo apt upgrade -y
    • Tiếp đến ta tiến hành cài đặt các  gói mysql-server:
      # sudo apt install mysql-server
    • MySQL chưa được khởi động sau khi install MySQL trên Ubuntu , nên bạn cần khởi động
      # systemctl start mysql
      # systemctl enable mysql
    • Tiến hành tạo 1 database cho website wordpress theo bằng các lệnh sau
      # mysql -u root -p

      Tạo một database trong MariaDB

      > create database wordpress;

      Tiếp đến tạo tạo một User

      > create user 'user1'@'địa chỉ Ip' IDENTIFIED BY 'password';

      Thiết lập quyền cho user để có quyền truy cập vào cơ sở dữ liệu.

      > GRANT ALL PRIVILEGES ON wordpress.* TO 'user1'@'%' IDENTIFIED BY 'password';

      > flush privileges;

  3. Cài đặt PHP-FPM
    • Để cài đặt PHP-FPM ta nên sử dụng ppa:ondrej/php PPA để có thể cài đặt phiên bản PHP-FPM mới nhất
      # sudo add-apt-repository ppa:ondrej/php
    • Tiếp theo các bạn cài đặt PHP bằng lệnh sau.
      # sudo apt -y install php7.4 php7.4-fpm
    • Đầu tiên các bạn backup lại file cấu hình mặc định
      # sudo cp /etc/php/7.4/fpm/pool.d/www.conf /etc/php/7.4/fpm/pool.d/www.conf.bak
    • Tiếp theo ta thực hiện lệnh Sed để thay đổi các thông số trong file www.conf
      # sudo sed -i 's/;listen.mode = 0660/listen.mode = 0660/g' /etc/php/7.4/fpm/pool.d/www.conf
      # sudo sed -i 's/;security.limit_extensions = .php .php3 .php4 .php5 .php7/security.limit_extensions = .php .php3 .php4 .php5 .php7/g' /etc/php/7.4/fpm/pool.d/www.conf
    • Cuối cùng tiến hành khởi động PHP-FPM
      # systemctl start php7.4-fpm
      # systemctl enable php7.4-fpm
  4. Cài đặt WORDPRESS
    • Đầu tiên ta cần tạo 1 foder Public_Apache
      # mkdir /home/wordpress/Public_Apache
    • Tiến hành cài download wordpress
      # cd /home/wordpress/
      # wget https://vi.wordpress.org/latest-vi.tar.gz
    • Giải nén file source wordpress bằng lệnh
      # tar -xvf latest-vi.tar.gz
    • Sau khi giải nén, bạn sẽ có file source wordpress như sau:
  5. Cấu hình Virtual Host:
    • Tạo file cấu hình virtual host cho website wordpress như sau :
      # touch /etc/apache2/site-availables/wordpress.conf
      # ln -s /etc/apache2/site-availables/wordpress.conf /etc/apache2/site-enables/
    • Ta truy cập vào file /etc/apache2/site-availables/wordpress.conf và cấu hình như sau:
      <VirtualHost *:80>
              DocumentRoot /home/wordpress/Public_Aphache/wordpress                  
              ServerName httai.tk                  
              ServerAlias www.httai.tk          
              <Directory "/home/wordpress/Public_Aphache/wordpress">
                       DirectoryIndex index.html index.php                          
                       Options FollowSymLinks                            
                       AllowOverride All                           
                       Require all granted          
               </Directory> 
      </VirtualHost>
    • Đến đây ta tiến hành cấp quyền cho thư mục
      # chown -R 755 /home/wordpress/Public_Aphache/wordpress
      # chown -R www-data:www-data /home/wordpress/Public_Aphache/wordpress
    • Truy cập vào wordpress và sử dụng thông tin MySQL đã tạo ở Phần 2 để kết nối đến database.
      Hình ảnh này chưa có thuộc tính alt; tên tệp của nó là image.png
    • Trong trường hợp gặp lỗi trong quá trình kết nối database, bạn có thể cấu hình trực tiếp ở file config trong resouce của WordPress như sau:
      # cd /home/wordpress/Public_Apache
      # mv wp-config-sample.php wp-config.php
      # vi wp-config.php
      Nhập thông tin database theo hướng dẫn ở hình dưới.
    • Tiếp tục thiết lập các thông tin của website WordPress và user quản lý, và cuối cùng nhấn Install WordPress để tiến hành cài đặt WordPress với thông tin đã cấu hình
    • Sau khi cài đặt xong, tiến hành login với tài khoản đã thiết lập ở trên.

Như vậy, Long Vân đã hoàn thành hướng dẫn Quý khách cài đặt WordPress trên server Ubuntu. Chúc Quý khách thành công!

Hướng dẫn reset password MYSQL8

MYSQL là một hệ quản trị cơ sở dữ liệu rất phổ biến, đặc biệt là đối với các máy chủ chạy dịch vụ web. Trong bài viết này, Long Vân sẽ hướng dẫn Quý khách cách reset lại password cho MYSQL phiên bản 8.0. Các bước cụ thể như sau:

  1. Bước 1: Kiểm tra phiên bản MYSQL đang sử dụng bằng lệnh
    # mysqld -V


    Theo hình, phiên bản MYSQL đang sử dụng là 8.0.31

  2. Bước 2: Tạm dừng service MYSQL thực hiên lệnh
    # systemctl stop mysql
    # systemctl status mysql ( kiểm tra đảm bảo trạng thái mysql đã stop).

  3. Bước 3: Tạo thư mục chứa /var/run/mysqld’. Sau đó phân quyền thư mục vừa tạo.
    Bước này nhằm tránh lỗi “If mysqld_safe Directory ‘/var/run/mysqld’ for UNIX socket file don’t exists”

    # mkdir -p /var/run/mysqld
    # chown mysql:mysql /var/run/mysqld
  4. Bước 4: Chạy lại MYSQL với tùy chọn “–skip-grant-tables” để chạy mysql mà không cần root password.

    # sudo mysqld_safe --skip-grant-tables &

  5. Bước 5: Tiến hành truy cập lại MYSQL mà không cân password sau đó cài đặt lại password mới.

    # mysql -u root
    > UPDATE mysql.user SET authentication_string=null WHERE User='root';
    > flush privileges;
    > ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_root_password';
    > flush privileges;
    > quit

  6. Bước 6: Khởi động lại MYSQL và kiểm tra truy cập với password vừa thiết lập

Vậy là mình đã hướng dẫn xong phần reset password Mysql8 trên hệ điều hành Ubuntu 22.04. Chúc các bạn thành công.

Hướng dẫn cài đặt nhiều phiên bản PHP trên HestiaCP

I. HestiaCP

HestiaCP là một Web Control Panel mã nguồn mở và hoàn toàn miễn phí, đồng thời là một nhánh của VestaCP. Nó cung cấp một giao diện web đơn giản và sạch sẽ, đồng thời cung cấp khả năng cho quản trị viên quản lý các tính năng cốt lõi của máy chủ web của họ, bao gồm quản lý và triển khai trang web, email, DNS và cơ sở dữ liệu một cách dể dàng.

HestiaCP cũng cung cấp giao diện dòng lệnh, bạn có thể đọc thêm trong tài liệu HestiaCP  Hestia Control Panel (hestiacp.com)

Là một nhánh của VestaCP nên HestiaCP cũng sẽ có giao diện làm việc khá tương đồng. Điều khác biệt cơ bản nhất là Hestia sẽ hỗ trợ Ubuntu và Debian, cụ thể bao gồm các phiên bản OS sau:

  • Debian 9
  • Debian 10
  • Ubuntu 16.04 LTS
  • Ubuntu 18.04 LTS
  • Ubuntu 20.04 LTS

II. Hướng dẫn cài đặt nhiều phiên bản PHP trên HestiaCP

  1. Bước 1: SSH vào server HestiaCP.
  2. Bước 2. Thực hiện các lệnh sau:
    # cd /usr/local/hestia/bin
    # ./v-add-web-php 7.4
    • Lưu ý : 7.4 bạn có thế thay thế bằng các version php khác
  3. Bước 3: Thay đổi phiên bản PHP trên website
    • Truy cập vào panel quản trị hestiacp http://[ip-address]:8083
    • Chọn domain mong muốn cấu hình hoặc thay đổi version PHP.
    • Tại mục web ta chọn Edit Web Domain
    • Ở phần Backend Template, chọn version PHP đã thiết lập, ở đây Quý khách sẽ thấy HestiaCP sẽ hiển thị nhiều phiên bản PHP trong tùy chọn.
    • Nhấn OK và kiểm tra lại website đã thiết lập phiên bản PHP.
    • Quý khách có thể tạo một file info.php với nội dung như sau trong source code để kiểm tra chính xác phiên bản php đang chạy.
      <?php
          phpinfo();
      ?>

Như vậy, Long Vân đã hoàn thành hướng dẫn Quý khách chạy nhiều phiên bản php trên HestiaCP. Chúc Quý khách thành công !


Hướng dẫn cấu hình Virtual Host trên Apache

I. Tổng quan

Virtual Host là một phương thức cho phép bạn chạy nhiều website khác nhau trên một máy chủ web. Virtual Host phân biệt và phục vụ các trang web khác nhau dựa trên địa chỉ IP hoặc tên miền của từng trang web.

Với Virtual Host, bạn có thể cấu hình các thiết lập riêng cho từng trang web, bao gồm cả các tệp cấu hình, định tuyến và các tính năng khác. Việc sử dụng Virtual Host giúp bạn quản lý nhiều trang web trên cùng một máy chủ một cách dễ dàng và tiết kiệm chi phí phát triển và quản lý hệ thống.

Trong bài viết này, Long Vân sẽ hướng dẫn về cách cấu hình Virtual Host trên máy chủ Apache2.

II. Cài đặt Apache2 trên Ubuntu

  1. Truy cập vào server chạy các lệnh sau để cài đặt Apache:
    # apt-get update
    # apt-get install apache2
  2. Sau khi cài xong ta bắt đầu khỏi chạy dịch vụ
    # systemctl enable apache2
    # systemctl start apache2
  3. Mở firewall cho service apache2
    # ufw allow 80
    # ufw allow 443

III. Cấu hình Virtual Host

  1. Tạo 1 đường dẫn source web và cấp quyền cho đường dẫn đó:
    Trong hướng dẫn này, Long Vân sử dụng domain lvtest.com với source được lưu ở thư mục /var/www/html/lvstest/public_html/

    # mkdir -p /var/www/html/lvstest/public_html/
    # chown -R $USER:$USER /var/www/lvstest/public_html/
    # chmod -R 755 /var/www/
  2. Tạo 1 file Virtual Host mới và thêm nội dung
    <VirtualHost *:80>
        ServerAdmin admin@lvstest.com
        ServerName lvstest.com
        DocumentRoot /var/www/html/lvstest/public_html/
        ErrorLog /var/log/apache2/lvstest.error.log
        CustomLog /var/log/apache2/lvstest.access.log combined
    </VirtualHost>
    • Trong đó:
      • ServerAdmin là từ khóa khai báo địa chỉ email của admin
      • ServerName là tên miền mà ta muốn chạy website
      • DocumentRoot là từ khóa khai báo đường dẫn của source code khi người dùng truy cập vào domain được cấu hình. Đường dẫn này có thể nằm ở bất kỳ một phân vùng nào.
      • ErrorLog là đường dẫn file log thì có lỗi
      • CustomLog là đường dẫn file log ghi lại tất cả các request và người dùng truy cập.
  3. Kích hoạt Virtual Host
    # a2ensite lvstest.conf
  4. Sau đó ta kiểm tra lỗi cấu hình bằng lệnh sau
    # apache2ctl configtest
  5. Sau đó khởi động lại dịch vụ apache2

IV. Kiểm tra

  1. Tạo một trang web test đơn giản với lệnh
    touch /var/www/html/lvstest/public_html/index.html
  2. Nội dung như sau:
    <html>
        <head>
            <title> website test</title>
        </head>
        <body>
            <h1> Long Van xin chao quy khach!</h1>
        </body>
    </html>
  3. Kiểm tra kết quả bằng cách truy cập tên miền http://lvstest.com

Như vậy, Webviet đã hoàn thành hướng dẫn Quý khách cách cấu hình Virtual Host trên Apache2. 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

Giới thiệu về Galera Cluster và cách cài đặt MySQL Galera Cluster trên Ubuntu 22.04

Galera Cluster là một giải pháp đồng bộ hóa dữ liệu mạnh mẽ dành cho MySQL, giúp tạo ra một hệ thống MySQL phân tán với tính nhất quán cao giữa các node trong cluster. Galera Cluster được sử dụng phổ biến trong các môi trường yêu cầu tính sẵn sàng cao, cho phép quản lý nhiều node cùng lúc mà vẫn đảm bảo tính toàn vẹn của dữ liệu.
Trong bài viết này Long Vân sẽ giới thiệu và hướng dẫn các bước để cài đặt cấu hình Galera Cluster cho MySQL, bao gồm:

  • Giới thiệu về Galera Cluster.
  • Sự khác nhau giữa Galera Cluster và mô hình Replication thường.
  • Hướng dẫn cài đặt Galera Cluster.
  • Thêm node Slave

I. Giới thiệu MySQL Galera Cluster

MySQL Galera Cluster là một hệ thống Multi-Master mà trên đó tất cả node đều có thể đọc và ghi dữ liệu tại mọi thời điểm. Client có thể kết nối tới mọi node, dữ liệu sẽ được tự động đồng bộ giữa các node, đồng thời sẽ đồng bộ sang node mới khi mới được thêm vào Cluster.

Một cụm Galera cần có ít nhất 3 node và ưu tiên chạy với số lượng node lẻ để đảm bảo tính toàn vẹn khi xảy ra sự cố với một trong các node.

II .Sự khác nhau giữa Galera Cluster với mô hình Mysql Replicate thường.

  1. Sơ đồ minh họa 
  2. Sự khác nhau
    • MySQL Replication (Hình bên trái)
      • Mô hình Master-Slave: Dữ liệu từ máy chủ chính (Master) sẽ được ghi vào một tệp log (Binlog). Sau đó, dữ liệu này được gửi tới máy chủ phụ (Slave) thông qua các luồng sao chép (IO Thread, SQL Thread).
      • Chế độ ghi và đọc:
        • Master: Cho phép thực hiện cả đọc và ghi dữ liệu.
        • Slave: Chỉ cho phép đọc dữ liệu (không ghi).
      • Nhược điểm chính của mô hình này là có độ trễ trong việc sao chép dữ liệu và chỉ có một máy chủ chính (Master) thực hiện các tác vụ ghi. Điều này có thể gây ra hiện tượng nghẽn cổ chai nếu có quá nhiều yêu cầu ghi vào Master.
    • Galera Cluster (Hình bên phải)

      • Mô hình Multi-Master: Mỗi node trong cụm Galera đều có thể thực hiện cả đọc và ghi dữ liệu. Các giao dịch sau khi được thực hiện sẽ được đồng bộ hóa tức thời giữa các node bằng cách sử dụng API wsrep và cơ chế giao tiếp nhóm (group communication).
      • Chế độ ghi và đọc:
        • Tất cả các node đều có khả năng đọc/ghi (read/write).
      • Galera sử dụng phương pháp đồng bộ dữ liệu đồng thời trên tất cả các node, giúp loại bỏ độ trễ và cho phép ghi vào bất kỳ node nào mà không lo xung đột hoặc mất dữ liệu. Mô hình này đảm bảo tính nhất quán cao hơn so với MySQL Replication.
    • Tóm lại
      • MySQL Replication chỉ có một máy chủ chính (Master) thực hiện các tác vụ ghi và có độ trễ khi sao chép dữ liệu sang máy chủ phụ (Slave).
      • Galera Cluster cho phép mọi node đều có thể ghi và dữ liệu được đồng bộ hóa đồng thời, giúp giảm thiểu các vấn đề về xung đột và độ trễ.

III. Hướng dẫn cài đặt Mysql Galera Cluster

  1. Chuẩn bị:
    • Ở bài viết này Long Vân sẽ sử dụng 4 VPS được cài đặt sẵn Os Ubuntu 22.04. Trong đó
      • 1 server làm Controller , cài đặt Galera Manager
        • 192.168.70.188 ( lvsnodecontroller)
      • 3 server để cấu hình Mysql Galera Cluster
        • 192.168.70.156 ( lvsnode1)
        • 192.168.70.159 ( lvsnode2)
        • 192.168.70.168 ( lvsnode3)
  2. Tiến hành cài đặt:
    • Cập nhật lại hệ thống cho cả 4 node
      sudo apt-get update
      sudo apt-get upgrade 
    • Trên Server Controller ( lvsnodecontroller)
      • Cài đặt trình quản lí Galera Manager để quản lí các lvsnode
        wget https://galeracluster.com/galera-manager/gm-installer
        chmod +x gm-installer
        ./gm-installer install 

        • Chọn a để accept cài đặt .
        • Điền thông tin user admin và password (cần đặt password ở bước này sau đó mới đổi password để tránh không login được ).
        • Điền thông tin server làm controller -> nhấn Enter 
        • Chạy lại cập nhật hệ thống để apply Galera-Manager vừa khởi  tạo
          sudo apt-get update
          sudo apt-get upgrade 
        • Truy cập trình duyệt để tạo Galera Cluster với user và password đã tạo ở trước đó 
        • Lúc này, quản trị viên có thể thực hiện các thao tác trên giao diện controller như tạo Cluster hoặc thêm node vào Cluster.
      • Tạo Cluster:
        • Trong giao diện Galera Controller, chọn ADD CLUSTER -> Deloy cluster on user-provided hosts
        • Nhập thêm thông tin tên Cluster và chọn cơ sở dữ liệu muốn sử dụng ở đây Long Vân sẽ chạy với mysql8.0. Chọn host system là hệ điều hành đang chạy.
        • Click chọn I have added public key to /root/.ssh/authorized_keys file on all nodes
        • Copy đoạn key trên và thêm vào cấu hình /root/.ssh/authorized_keys của các node còn lại ( lvsnode1, lvsnode2, lvsnode3 ).
        • Trên trình duyệt Galena Controller tiếp tục chọn ADD NODE. Thêm thông Node cần thêm –>CHECK ACCESS –> DEPLOY ( ở đây thêm lvsnode1 node đầu tiên vào).

        • Thêm tiếp các node còn lại lvsnode2 và lvsnode3 tương tự như làm ở lvsnode1.
        • Quá trình thêm node hoàn tất.
    • Kiểm tra quá trình đồng bộ giữa các lvsnode trên Cluster
      • Kiểm tra hoạt động của LongVan_Cluster vừa tạo giữa các lvsnode
      • Kiểm tra tính đồng bộ dữ liệu trên database
      • Tiến hành tạo database có tên lvsdemo ở lvsnode1 và kiểm tra đồng bộ ở lvsnode2 và lvsnode3 (như hình trên).

IV. Thêm node Slave vào trong Galera Cluster.

  1. Trong Galera Cluster, bạn có thể kết nối một node không đồng bộ (async slave) vào cụm. Điều này hữu ích vì vài lý do:

    • Chuyển tải truy vấn : Nếu cụm của bạn phải xử lý các truy vấn  hoặc phân tích dài và nặng, nó có thể làm chậm cả hệ thống. Bằng cách gửi các truy vấn này đến một máy chủ async slave riêng, bạn ngăn không cho tải này ảnh hưởng đến Galera Cluster.

    • Sao lưu trực tiếp: Async slave cũng có thể được sử dụng như một sao lưu từ xa, giúp tạo một bản sao dữ liệu trực tiếp để khôi phục khi gặp sự cố.

  2. Các bước thêm node Async
    • Thêm 1 Server  cho quá trình thêm Node Async ( Slave )
      • 192.168.70.180 ( lvsnode4 )
    • Trên node lvsnode4
      • Cài đặt galera-4 mysql-wsrep-8.0
        • Trước tiên, cần đảm bảo rằng khóa Galera Cluster GPG đã được cài đặt:

          apt-key adv --keyserver keyserver.ubuntu.com --recv 8DA84635 

        • Thêm thư viện souce list
          vi /etc/apt/sources.list.d/galera.list 
          deb https://releases.galeracluster.com/galera-4.20/ubuntu jammy main
          deb https://releases.galeracluster.com/mysql-wsrep-8.0.39-26.20/ubuntu jammy main 
        • Thêm kho lưu trữ
          vi /etc/apt/preferences.d/galera.pref 
          Package: *
          Pin: origin releases.galeracluster.com
          Pin-Priority: 1001 
        • Chạy lại update để cập nhật thư viện và kho lưu trữ vừa thêm
          sudo apt-get update 

        • Cài đặt galera-4 mysql-wsrep-8.0
          sudo apt-get install galera-4 mysql-wsrep-8.0 
        • Thêm cấu hình vào file conf mysql vừa đặt
          vi /etc/mysql/mysql.conf.d/mysqld.cnf 
          gtid_mode=ON
          log_bin=binlog
          log_slave_updates=1
          enforce_gtid_consistency
          expire_logs_days=7
          server_id=4
          binlog_format=ROW
          slave_net_timeout=60 
        • Khởi động lại Mysql để lưu lại cấu hình
          systemctl restart mysql 
    • Trên node lvsnode1
      • Thêm cấu hình vào file conf mysql
        vi /etc/mysql/mysql.conf.d/mysqld.cnf 
        gtid_mode=ON
        log_bin=binlog
        log_slave_updates=1
        enforce_gtid_consistency
        expire_logs_days=7
        server_id=1
        binlog_format=ROW 
      • Khởi động lại Mysql để lưu lại cấu hình
        systemctl restart mysql 
      • Tạo user replica cho node lvsnode4
        mysql
        CREATE USER 'replica'@'192.168.70.180' IDENTIFIED WITH 'mysql_native_password' BY 'P@ssw0rd321';
        GRANT REPLICATION SLAVE ON *.* TO 'replica'@'192.168.70.180';
        FLUSH PRIVILEGES;
        exit 

      • Trên node lvsnode4
        • Cấu hình replicate với user vừa tạo ở node lvsnode1
          mysql
          CHANGE MASTER TO MASTER_HOST = '192.168.70.156', MASTER_PORT = 3306, MASTER_USER = 'replica', MASTER_PASSWORD = 'P@ssw0rd321', MASTER_AUTO_POSITION = 1;
          START SLAVE;
          SHOW SLAVE STATUSG; 

      • Kiểm tra đồng bộ giữa server Master ( lvsnode1) và server Slave ( lvsnode4 ).
        • Đứng từ server Master (lvsnode1) tạo database với tên lvsdemo1  để xem quá trình đồng bộ từ Master (lvsnode1) xuống Slave (lvsnode4).
        • Ngược lại từ server Slave (lvsnode4) tạo database với tên lvsdemo2  để xem quá trình có đồng bộ ngược từ Slave ( lvsnode4 ) về Master ( lvsnode1).
        • Kết quả cho thấy dữ liệu phát sinh trên server Slave sẽ không đồng bộ ngược lại.

 

Như vậy qua bài viết này Long Vân đã giúp các bạn tìm hiểu sơ lược về Galera Cluster cũng như cách cài đặt Mysql Galera Cluster với cấu hình 3 node trên Galera-Manager là như thế nào. Chúc các bạn thành công .


Hướng dẫn copy dữ liệu với lệnh rsync thông qua kết nối SSH

I. Rsync

Rsync (remote sync) là công cụ đồng bộ file, thư mục của Linux. Nó sử dụng thuật toán khi copy dữ liệu sao cho dữ liệu phải copy là nhỏ nhất (chỉ copy những gì thay đổi giữa nguồn và gốc), khi đồng bộ nó giữ nguyên mọi thuộc tính của file, thư mục (từ chủ sở hữu, quyền truy cập file …). Mặc định, trên hầu hết các phiên bản hệ điều hành Linux đều cung cấp sẳn công cụ này.

  • Rsync nhanh hơn SCP vì Rsync sử dụng giao thức remote-update, chỉ transfer những dữ liệu thay đổi mà thôi.
  • Rsync tiết kiệm băng thông do sử dụng phương pháp nén và giải nén khi transfer.

II. Cài đặt và sử dụng Rsync

  1. Cài đặt Rsync:

    SSH vào server linux và tiến hành cài đặt bằng lệnh sau.

    • Trên RedHat/CentOS
      # yum install rsync -y
      # systemctl start rsyncd
      # systemctl enable rsyncd
    • Trên Debian/Ubuntu
      #apt-get install rsync -y


  2. Sử dụng RSYNC để copy dữ liệu thông qua kết nối SSH
    • Mô hình:
      • Source Host: Máy chủ gửi dữ liệu
      • Destination Host: Máy chủ nhận dữ liệu
    • Cú pháp chung:
      rsync -option source_file username@destination_host:/destination_folder
    • Chú thích:
      • rsync: Lệnh rsync thực hiện
      • -option: Các tùy chọn phụ
      • source_file: File/Thư mục cần copy
      • username@destination_host: tên user và IP/hostname (Ví dụ root@45.252.252.252)
      • /destination_folder: Thư mục đích cần copy đến.
    • Một số tùy chọn quan trọng trong rsync:
      • -v: hiển thị trạng thái kết quả
      • -r: copy toàn bộ dữ liệu, nhưng không giữ thông tin quyền, sở hữu của file và thư mục.
      • -a: copy toàn bộ dữ liệu, đồng thời giữ nguyên được tất cả các thông tin về quyền, sở hữu, liên kết,.. của thư mục và file.
      • -z: nén dữ liệu khi transfer, tiết kiệm băng thông tuy nhiên tốn thêm một chút thời gian
      • -h: hiển thị kết quả đồng bộ dữ liệu một cách dễ đọc
      • -e ‘ssh -p PORT’: Tùy chọn khi sử dụng port ssh riêng (Ví dụ máy Đích port SSH là 22 bạn sẽ sử dụng là -e ‘ssh -p 2222’)
      • –delete: xóa dữ liệu ở destination nếu source không tồn tại dữ liệu đó.
      • –exclude: loại trừ ra những dữ liệu không muốn truyền đi, nếu bạn cần loại ra nhiều file hoặc folder ở nhiều đường dẫn khác nhau thì mỗi cái bạn phải thêm –exclude tương ứng.
    • Ví dụ thực tế:

      Ở ví dụ này, chúng ta sẽ tiến hành chép dữ liệu wordpress từ thư mục /home/doamins/vannhieu.com ở server 103.27.238.62  đến thư mục /home/domains/vannhieu123.com trên server 103.27.238.61, các bước thực hiện như sau:

      • Đảm bảo rsync đã được cài đặt trên cả 2 server.
      • SSh vào server 103.27.238.62 và thực hiên lệnh:
        rsync -P -avz /home/domains/vannhieu.com/*  103.27.238.61:/home/domains/vannhieu123.com/

        Trong đó:

        • sync: lệnh đồng bộ
        • -avzh: Các option đi kèm (Bạn có thể xem chú thích các option ở trên)
        • /home/domains/vannhieu.com/* : Thư mục Nguồn, đồng bộ toàn bộ các file và thư mục trong thư mục vannhieu.com (Dấu * có nghĩa là tất cả)
        • 103.27.238.61: Máy Đích, máy mà đồng bộ file đến
        • /home/domains/vannhieu123.com/: Thư mục máy đích, các file sẽ được lưu tại đây.
      • Nhập thông tin password của server để bắt đầu copy dữ liệu
      • Sau khi copy dữ liệu xong

Như vậy, Long Vân đã hoàn thành hướng dẫn Quý khách cách copy dữ liệu với lệnh RSYNC thông qua kết nối SSH. Chúc Quý khách thành công!

Hướng dẫn sử dụng lệnh curl để download file

I. Cài đặt CURL trên Linux

  • Để cài đặt curl trên Debian / Ubuntu và các dẫn xuất, hãy nhập như sau
    # sudo apt install curl
  • Để cài đặt curl trên RHEL, CentOS, Fedora và các dẫn xuất, hãy nhập như sau:
    # sudo yum install curl
  • Để cài đặt curl trên OpenSUSE và các dẫn xuất, hãy nhập như sau:
    # sudo zipper install curl

II. Cách sử dụng

  • Cú pháp chung của lệnh Curl trong Linux như sau:
    # curl [options] [URL...]
  • Trong đó:
    • Tham số URL là bắt buộc.
    • Tham số OPTIONS thì có thể có hoặc không.
      URL là đường dẫn trỏ đến thư viện / mã nguồn trên internet, thường là đường dẫn các website.
  • Ví dụ: Lấy thông tin mã nguồn của website longvan.net
    # curl longvan.net
    Lệnh sẽ trả kết quả về là nội dung mã HTML của website. Nếu bạn không chỉ rõ sử dụng phương thức HTTP hay HTTPS thì nó sẽ lấy giá trị mặc định là HTTP.

III. Download file với lệnh CURL

Để tải xuống một tệp với curl, sử dụng tùy chọn -o hoặc -O, theo sau là URL vào tệp.

  • Tùy chọn chữ thường -o cho phép bạn chỉ định tên của tệp đã lưu. Ví dụ sau, file lưu lại sẽ có tên là linux.tar.xz
    # curl -o linux.tar.xz https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.5.3.tar.xz
  • Với tuỳ chọn chữ Hoa là -O lưu tệp với tên tệp gốc của nó. Ví dụ sau sẽ lưu file với tên là linux-5.5.3.tar.xz
    # curl -O https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.5.3.tar.xz

Ngoài ra:

  • Với curl, bạn cũng có thể tải xuống các tệp từ máy chủ FTP được bảo vệ bằng mật khẩu, Ví dụ:
    #curl -u FTP_USERNAME:FTP_PASSWORD ftp://ftp.example.com/file.tar.gz
  • Khi được sử dụng với tùy chọn -I curl sẽ hiển thị các tiêu đề HTTP của một URL đã cho

Như vậy, Long Vân đã hướng dẫn Quý khách cách sử dụng công cụ CURL để download file. Chúc quý khách thành công !

Sử dụng phần mềm PuTTY để truy cập SSH vào server

  1. Hướng dẫn cài đăt

    • Truy cập vào trang chủ hoặc trực tiếp đường dẫn dưới đây để tải phiên bản PuTTy mới nhất
      https://www.chiark.greenend.org.uk/~sgtatham/putty/
    • Chọn phiên bản tương tích
    • Sau khi tải về tiếp tục install như một ứng dụng thông thường.
  2. Sử dụng Putty để SSH tới server

    • Bước 1: Mở PuTTY SSH client.
    • Bước 2: Nhập thông tin Host Name và Port (hình dưới), và nhấn Open để thực hiện kết nối.
    • Bước 3: Nhập thông tin truy cập với:
      Dòng login as:  là nơi bạn nhập SSH username, và nhấn Enter.
      Tiếp theo là nhập thông tin mật khẩu và nhấn Enter để login vào server.

      Lưu ý:

      • Màn hình Putty sẽ không hiển thị bất bì ký tự gì khi nhập password, bạn chỉ cần nhập đúng password và nhấn Enter.
      • Trong trường hợp copy và paste password, bạn chỉ cần rê chuột vào màn hình chính của PuTTY và nhấn right-click, sau đó nhấn Enter.

Như vậy, Long Vân đã hướng dẫn Quý khách sử dụng PuTTY để kết nối SSH đến server linux. Chúc Quý khách thành công !