Linux P1_High Availability Service on Linux (Apache + MySQL)

vohongnhuy

Internship/Fresher
Mar 11, 2019
21
7
3
27
HCM
High Availability Service on Linux CentOS 7 (Apache + MySQL)
Tóm tắt nội dung
Phần 1: http://svuit.vn/threads/p1_high-availability-service-on-linux-apache-mysql-10144/
I. Đặt vấn đề
II. Giải pháp
III. Tổng quan các giải pháp
1. Pacemaker
2. Corosync
3. MySQL Replication
IV. Thử nghiệm giải pháp
1. Mô hình hệ thống lab thử nghiệm các giải pháp HA Web trên VMWare
2. Cài đặt và cấu hình Pacemaker + Corosync

Phần 2: http://svuit.vn/threads/p2_high-availability-service-on-linux-apache-mysql-10145/
3. HA dạng Active/Passive Apache
4. HA dạng Active/Passive cho MySQL
5. Trường hợp 1 node fail

I. Đặt vấn đề
Giả sử một doanh nghiệp có hệ thống các server Linux sử dụng các dịch vụ cho nền tảng web gồm Apache – MySQL – PHP (LAMP).
Làm thế nào để tăng tính sẵn sàng High Availability (HA) cho các dịch vụ trên?

II. Giải pháp
Sử dụng kết hợp các giải pháp phần mềm trên Linux có thể giúp giải quyết vấn đề đặt ra:
  • Pacemaker + Corosync: tạo cluster đảm bảo HA cho các dịch vụ và tài nguyên trong hệ thống.
  • MySQL Replication: sao lưu cơ sở dữ liệu, đảm bảo nhất quán dữ liệu cho web.
III. Tổng quan các giải pháp
1. Pacemaker
Pacemaker là trình quản lý tài nguyên trong cluster được phát triển bởi ClusterLabs. Pacemaker tương thích với rất nhiều dịch vụ phổ biến hiện có và hoàn toàn có thể tự phát triển module để quản lý các tài nguyên mà pacemaker chưa hỗ trợ.

Chức năng
  • Phát hiện và phục hồi các hỏng hóc của node và các dịch vụ
  • Không yêu cầu chia sẻ không gian lưu trữ
  • Hỗ trợ hầu hết các tài nguyên (resource) là script
  • Hỗ trợ STONITH để đảm bảo toàn vẹn dữ liệu
  • Hỗ trợ các cluster lớn và nhỏ
  • Hỗ trợ cả cluster quorate và resource clusters
  • Hỗ trợ thiết lập dự phòng mọi lúc
  • Tự động tái lập cấu hình có thể được cập nhật từ bất kỳ node nào
  • Hỗ trợ nhiều loại dịch vụ
    • Bản sao: đối với các dịch vụ cần phải hoạt động trên nhiều node
    • Đa trạng thái: cho các dịch vụ với nhiều chế độ (ví dụ master / slave, primary / secondary)
  • Thống nhất, có kịch bản, những công cụ quản lý cluster.
Kiến trúc của Pacemaker
 ser(1)
Ở mức độ cao nhất, các cluster được tạo thành từ 3 phần:
  • Kiến trúc hạ tầng chính của cluster cung cấp khả năng trao đổi, mối quan hệ... (màu đỏ)
  • Thành phần nhận biết non-cluster (màu xanh lam)
  • "A brain" (màu xanh lá cây): xử lý và phản ứng với các sự kiện từ cluster và các resource (ví dụ: giám sát các hỏng hóc) cũng như thay đổi cấu hình từ quản trị viên. Để đối phó với tất cả các sự kiện này, Pacemaker sẽ tính toán trạng thái lý tưởng của cluster và vẽ ra một con đường để đạt được nó.
Khi kết hợp Corosync, Pacemaker cũng hỗ trợ những hệ thống cluster mã nguồn mở phổ biến. Dựa vào tiêu chuẩn gần đây trong cộng đồng cluster filesystem, sử dụng Corosyn, dùng khả năng liên lạc của nó với Pacemaker, quản lý đối với những thành phần (những node nào up hay down) và bảo vệ những dịch vụ.

Các mô hình triển khai Pacemaker
Pacemaker không có giới hạn về cách triển khai, chính điều này mà nó cho phép ta có thể triển khai theo hầu hết các mô hình như: Active/Active, Active/Passive, N + 1, N + M, N to 1, N to M.
Dưới đây là một vài mô hình triển khai:
  • Active/Passive
 ser(2)
Sử dụng Pacemaker và DRBD là giải pháp hiệu quả về chi phí cho nhiều tình huống High Availability.
  • Share Failover
 ser(3)
Pacemaker có thể làm giảm đáng kể chi phí phần cứng bằng cách cho phép một số nhóm Active/Passive được kết hợp và chia sẻ một node dự phòng chung.
  • Active/Active (N to N)
 ser(4)
Khi có sẵn share storage, mọi node đều có khả năng sử dụng để chuyển đổi dự phòng. Pacemaker thậm chí có thể chạy nhiều bản sao của các dịch vụ để trải đều khối lượng công việc.

2. Corosync
Corosync Cluster Engine là một dự án nguồn mở có nguồn gốc từ dự án OpenAIS và được cấp phép theo Giấy phép BSD mới. Nhiệm vụ của Corosync là phát triển, phát hành và hỗ trợ giải pháp cluster nguồn mở.

Tính năng, đặc điểm
Corosync Cluster Engine là một hệ thống liên lạc nhóm với các tính năng bổ sung để triển khai tính sẵn sàng cao trong các ứng dụng.
Cung cấp bốn C API:
  • Một mô hình quy trình truyền thông nhóm khép kín với các đảm bảo đồng bộ ảo để tạo các máy trạng thái nhân rộng.
  • Một trình quản lý sẵn có đơn giản khởi động lại quá trình ứng dụng khi nó bị lỗi.
  • Một cơ sở dữ liệu lưu trữ cấu hình và thống kê trong bộ nhớ, cung cấp khả năng thiết lập, truy xuất và nhận thông báo thông tin thay đổi.
  • Một hệ thống quorum thông báo cho các ứng dụng khi có hoặc mất quorum.
Phần mềm được thiết kế để hoạt động trên các mạng UDP/IP và InfiniBand.
3. MySQL Replication
Replication cho phép dữ liệu từ một máy chủ cơ sở dữ liệu MySQL (master) được sao chép sang một hoặc nhiều máy chủ cơ sở dữ liệu MySQL (slave). Sao chép không đồng bộ theo mặc định; slave không cần phải kết nối vĩnh viễn để nhận thông tin cập nhật từ master. Tùy thuộc vào cấu hình, bạn có thể sao chép tất cả các cơ sở dữ liệu, cơ sở dữ liệu được chọn hoặc thậm chí các bảng trong cơ sở dữ liệu.
Nó thường được sử dụng để cấp quyền đọc trên nhiều máy chủ cho khả năng mở rộng, chuyển đổi dự phòng hoặc phân tích dữ liệu trên slave để không làm quá tải master.

 ser(5)
Mô hình MySQL Replication và cách thức hoạt động
Replication dựa trên master lưu giữ theo dõi tất cả những thay đổi cơ sở dữ liệu (cập nhật, xóa, vv) trong bản ghi nhị phân. Các bản ghi nhị phân phục vụ như là các record của tất cả các sự kiện làm thay đổi cấu trúc cơ sở dữ liệu hoặc nội dung (dữ liệu) từ thời điểm các máy chủ đã bắt đầu thực thi. Thông thường, câu SELECT không được ghi lại bởi vì chúng không phải thay đổi cấu trúc cũng như nội dung của cơ sở dữ liệu.

Mỗi slave kết nối đến các master yêu cầu một bản sao của bản ghi nhị phân. Nó kéo các dữ liệu từ các master, chứ không phải là master đẩy dữ liệu đến các slave. Các slave cũng thực hiện các sự kiện từ các bản ghi nhị phân mà nó nhận được. Quá trình này lặp đi lặp lại những thay đổi ban đầu cũng giống như nó đã được thực hiện trên master. Bảng được tạo ra hoặc cấu trúc thay đổi và dữ liệu đã chèn hay đã xóa và kể cả cập nhật thì đều giống hệt theo những thay đổi mà ban đầu đã được thực hiện trên master.

Chi tiết quá trình thực thi trong Replication như sau:
  • Luồng Binlog dump: Các master tạo 1 luồng và gửi nội dung binary log đến một slave khi các slave kết nối với master. Luồng này có thể được xác định trong đầu ra của query SHOW PROCESSLIST trên master như là 1 luồng Binlog Dump. Các binary log có được trên bản ghi nhị phân của master đọc các sự kiện đó và gửi đi cho slave. Ngay sau khi sự kiện được đọc, khóa được phát hành ngay cả khi sự kiện được gửi tới slave.
  • Luồng Slave I/O: Khi thông báo Slave được ban hành trên slave server, các slave tạo một luồng I/O, cái mà kết nối với server master và hỏi nó để nó gửi thông tin bản ghi cập nhật nó vào trong log nhị phân. Luồng slave I/O đọc sự cập nhật trên luồng Binlog Dump của master gửi và sao chép chúng vào 1 file local - file mà bao hàm cả những log trễ (Relay Log). Các trạng thái của luồng này được thể hiện như là Slave_IO_running trong output SHOW SLAVE STATUS hoặc là Slave_running trong ouput của SHOW STATUS.
  • Luồng Slave SQL: Các slave tạo ra một luồng SQL để đọc cái log trễ, cái này sau đó sẽ được ghi vào luồng slave I/O và thực thi các sự kiện chứa trong đó
Ưu điểm của MySQL Replication
  • Giải pháp mở rộng quy mô - phân tán tải trọng giữa nhiều slave để cải thiện hiệu suất. Trong môi trường này, tất cả các ghi và cập nhật diễn ra trên master. Tuy nhiên việc đọc có thể đặt trên một hoặc nhiều slave. Mô hình này có thể cải thiện hiệu suất ghi (vì bản gốc trên master là dành riêng cho các bản cập nhật), trong khi tăng đáng kể tốc độ đọc trên số lượng slave tăng.
  • Bảo mật dữ liệu - vì dữ liệu được sao chép vào slave và slave có thể tạm dừng quá trình sao chép, chạy các dịch vụ sao lưu trên slave mà không làm hỏng dữ liệu ở master tương ứng.
  • Phân tích - dữ liệu trực tiếp có thể được tạo trên master, trong khi phân tích thông tin có thể diễn ra trên slave mà không ảnh hưởng đến hiệu suất của master.
  • Phân phối dữ liệu đường dài - bạn có thể sử dụng replication để tạo bản sao dữ liệu cục bộ cho hệ thống từ xa sử dụng, mà không cần truy cập vào master.
IV. Thử nghiệm giải pháp
1. Mô hình hệ thống lab thử nghiệm các giải pháp HA Web trên VMWare
 ser(6)

Giả định hệ thống sử dụng LAMP Server (Linux-Apache-MySQL-PHP) cho dịch vụ web và database; và cần đảm bảo các tính năng HA.
Môi trường lab sử dụng hai server, một server fail thì web vẫn hoạt động.
Chuẩn bị: Hai máy ảo VMWare chạy server Linux Centos 7 Minimal 64bit (mỗi máy 2 card mạng, nên dùng riêng một cho HA&DR (subnet 172.16.1.0/24))
  • Node1: 172.16.1.11 (hostname: node1)
  • Node2: 172.16.1.12 (hostname: node2)
  • Một IP ảo 172.16.1.10, mọi truy cập từ client được đưa đến IP này, sau đó Pacemaker sẽ điều hướng về một trong hai node.
Cài đặt các dich vụ cơ bản sau lên hai server:
  • LAMP Server (Linux-Apache-MySQL-PHP)
Tham khảo: https://hostadvice.com/how-to/how-to-install-lamp-stack-on-centos-7/. Lưu ý mở firewall cho các dịch vụ này.
  • Vi text editor
Thêm 2 dòng sau vào file /etc/hosts trên mỗi máy:
172.16.1.11 node1
172.16.1.12 node2


2. Cài đặt và cấu hình Pacemaker + Corosync
Do Apache được cài đặt trên hai node khác nhau, mỗi node sẽ có source web khác nhau (mặc định ở thư mực /var/www/html), cần sử dụng các giải pháp đồng bộ dữ liệu hoặc copy dữ liệu thủ công để đảm bảo rằng source web là giống nhau.

Tạo file /etc/httpd/conf.d/status.conf với nội dung sau:
<Location /server-status>
SetHandler server-status
Order Deny, Allow
Deny from all
Allow from 127.0.0.1
</Location>


Lưu ý: Httpd trên Centos sau khi được cài đặt trên mỗi node cần đảm bảo đã stop và không khởi động cùng hệ thống, sử dụng lệnh:
#systemctl stop httpd
#systemctl disable httpd


Cài đặt Pacemaker và Corosync (thực hiện tương tự trên cả 2 node)
Mở firewall:
#firewall-cmd --permanent --add-service=high-availability
#firewall-cmd --reload


Cài đặt các gói cài đặt cần thiết cho pacemaker:
#yum -y install pacemaker pcs

Corosync sẽ được cài đặt kèm theo với câu lệnh trên như một phần mềm được phụ thuộc bởi pacemaker. Đồng thời, có một người dùng mới là hacluster sẽ được tạo ra và gán vào group hacluster
Khởi động pacemaker
#systemctl start pcsd
#systemctl enable pcsd


Kiểm tra lại trạng thái của pacemaker bằng lệnh
#systemctl status pcsd

 ser(7)

Thiết lập mật khẩu cho người dùng hacluster:
#passwd hacluster

 ser(8)

Lưu ý: đặt mật khẩu giống nhau trên cả 2 node để xác thực lẫn nhau.
Tạo cluster (Chỉ thực thiện trên cấu hình trên một node duy nhất)
Tạo xác thực giữa các node với nhau bằng câu lệnh:
#pcs cluster auth node1 node2
Sau đó nhập password của người dùng hacluster đã tạo ở phía trên. Kết quả nhận được như sau:

 ser(9)

Cấu hình cho cluster
#pcs cluster setup --name ha_apache node1 node2

 ser(10)

Trong câu lệnh trên:
  • ha_apache là tên của cluster sẽ tạo, mục này có thể nhập tùy ý.
  • Node1 và node2 là hostname các máy chủ trong cụm cluster. Muốn sử dụng tên này thì phải chắc chắn đã khai báo trong file /etc/hosts. Có thể sử dụng địa chỉ IP thay thế.
Khởi động cluster vừa tạo:
#pcs cluster start --all

 ser(11)

Kích hoạt cho phép cluster khởi động cùng với OS:
#pcs cluster enable --all

 ser(12)

Kiểm tra trạng thái của Corosync
#pcs status corosync

 ser(13)

Cấu hình để thêm các resources vào Cluster
Lưu ý:
  • Disable cơ chế STONITH
#pcs property set stonith-enabled=false
  • Thiết lập policy cho cơ chế quorum (bỏ qua bước này nếu như cluster có nhiều hơn 2 node)
#pcs property set no-quorum-policy=ignore
  • Disable auto failback
#pcs property set default-resource-stickiness="INFINITY"

Kiểm tra lại các thiết lập ở trên
#pcs property list

 ser(14)

Thiết lập Virtual IP (VIP) cho Cluster. Trong bài lab này, chọn là 172.16.1.10.
Tên của resource này là Virtual_IP.
#pcs resource create Virtual_IP ocf:heartbeat:IPaddr2 ip=172.16.1.10 cidr_netmask=24 op monitor interval=30s

Kiểm tra trạng thái của các resource hiện tại.
#pcs status resources

 ser(15)

HẾT PHẦN 1.
 
Last edited:

About us

  • Securityzone.vn là một trang web chuyên về an ninh mạng và công nghệ thông tin. Trang web này cung cấp các bài viết, tin tức, video, diễn đàn và các dịch vụ liên quan đến lĩnh vực này. Securityzone.vn là một trong những cộng đồng IT lớn và uy tín tại Việt Nam, thu hút nhiều người quan tâm và tham gia. Securityzone.vn cũng là nơi để các chuyên gia, nhà nghiên cứu, sinh viên và người yêu thích an ninh mạng có thể trao đổi, học hỏi và chia sẻ kiến thức, kinh nghiệm và giải pháp về các vấn đề bảo mật trong thời đại số.

Quick Navigation

User Menu