Xây dựng hệ thống Apache Cluster

Nếu như bạn là một system admin thì bạn luôn phải quan tâm đến tính phát triển của hệ thống . Lấy một ví dụ cụ thể Công ty bạn có một webserver và mọi người truy cập vào website đó để lấy thông tin về khách hàng. Vậy ta đặt ra một trường hợp nếu một ngày nào đó server bị lỗi thì không có nhân viên nào sử dụng được vậy công việc sẽ bị gián đoạn. Vậy chúng ta có giải pháp tạo ra 2 máy chủ webserver cùng chức năng nếu một máy chủ nào đó chẳng may bị hỏng hóc tự động máy chủ còn lại sẽ đóng vai trò thay thế. Đó chính là giải pháp Cluster Apache High Availability.Cluster sửa chữa lỗi (failover cluster) được dùng để đảm bảo tính sẵn sàng cho các dịch vụ và ứng dụng hệ thống khi bị tấn công, xử lý các lỗi phần cứng và rủi ro do môi trường. Trong bài này chúng tôi sẽ hướng dẫn các bạn cách thức thực hiện một cluster Apache hai nút, chắc chắn tin cậy và hiệu quả cao với ứng dụng thú vị của dự án The High-Availability Linux. Cluster này đã được kiểm tra trên các phân phối Fedora Core 5, CentOS 4.3, và Ubuntu 6.06.1 LTS server.

Trong môi trường cluster, hệ thống ‘có tính sẵn sàng cao’ (high ability – HA) chịu trách nhiệm bắt đầu và kết thúc các dịch vụ, cài đặt và gỡ bỏ tài nguyên, giám sát khả năng sẵn sàng của hệ thống trong môi trường cluster và điều khiển quyền sở hữu địa chỉ IP ảo chia sẻ giữa các nút cluster. Dịch vụ heartbeat (trung tâm) cung cấp các tính năng cơ sở cần thiết cho hệ thống HA.

Cấu hình cluster phổ biến nhất là standby, sẽ được mô tả dưới đây. Trong cấu hình cluster này, một nút thực hiện tất cả các việc, còn các nút khác ở trạng thái nghỉ ngơi. Heartbeat giám sát “sức khoẻ” của từng dịch vụ cụ thể, thông thường qua một giao diện Ethernet phân tách vốn chỉ dùng cho hệ thống HA sử dụng câu lệnh đặc biệt ping. Nếu vì một lý do nào đó, nút đang thực hiện bị hỏng, heartbeat sẽ chuyển tất cả thành phần HA sang nút khoẻ mạnh khác. Khi nút cũ phục hồi, nó có thể khôi phục lại tình trạng cũ trước đó của mình.

Cài đặt và cấu hình

Để kiểm tra hệ thống High Availability Linux, bạn cần một bộ điều hợp Ethernet thứ hai trên từng nút dành cho heartbeat. Cài đặt Web server Apache và chương trình heartbeat phải trên cả hai nút. Nếu gói heartbeat không nằm trong bất kỳ phần lưu trữ của các phân phối đã có, bạn có thể download tại đây. Trên server CentOS, tôi dùng yum để cài đặt phần mềm cần thiết:

yum install -y httpd heartbeat

Các file cấu hình cho hearbeat không nằm ở nơi phần mềm được cài đặt. Bạn cần copy chúng từ thư mục documentation tới thư mục /etc/ha.d/:

cp /usr/share/doc/heartbeat*/ha.cf /etc/ha.d/
cp /usr/share/doc/heartbeat*/haresources /etc/ha.d/
cp /usr/share/doc/heartbeat*/authkeys /etc/ha.d/

Trong file /etc/hosts bạn phải bổ sung thêm tên hostname và địa chỉ IP để hai nút có thể giao tiếp được với nhau. Trong trường hợp của tôi sẽ như thế này:

192.168.1.1 server1
192.168.1.2 server2

Phải đảm bảo file /etc/hosts là giống nhau ở cả hai nút. Sau đó ping chúng, copy file từ nút này tới nút khác, sử dụng câu lệnh copy an toàn:

scp /etc/hosts root@node2:/etc/

Tiếp theo, chỉnh sửa file cấu hình /etc/ha.d/ha.cf theo các điểm vào để heartbeat có thể hoạt động:

logfile /var/log/ha-log # chỗ để log mọi thứ từ heartbeat
logfacility local0 # tiện ích sử dụng cho syslog hoặc logger
keepalive 2 # thời gian giữa các heartbeat
deadtime 30 # thời gian đến khi host được đưa ra ‘chết’
warntime 10 # thời gian trước khi cung cấp cảnh báo chậm trễ “late heartbeat”.
initdead 120 # thời gian chết đầu tiên (initdead)

udpport 694 # cổng udp cho truyền thông bcast hoặc ucast
bcast eth1 # giao diện quảng bá (broadcast)
ucast eth1 10.0.0.1 # cluster 2 nút, vì thế không cần dùng dạng đa quảng bá (multicast)
auto_failback on # tự động gửi tài nguyên sai trở lại nút chính
node server1 # tên của nút đầu tiên
node server2 # tên của nút thứ hai

Đây là các tuỳ chọn cơ sở cần thiết để heartbeat hoạt động. File này phải được cấu hình giống hệt nhau trên cả hai nút, ngoại trừ phần “ucast” (nơi để địa chỉ IP của hàng để gửi các gói tới).

File tiếp theo là /etc/ha.d/haresources. Trong file này bạn cần định nghĩa tên nút chính, địa chỉ IP ảo (cluster IP) và tài nguyên dùng để bắt đầu. Ở trường hợp của chúng ta thì đó là Web server Apache.

Chỉ cần một dòng dữ liệu ở đây:

server1 192.168.1.5 httpd

Hãy chắc chắn rằng file này giống nhau hoàn toàn trên cả hai nút. Chú ý tên tài nguyên là tên script khởi tạo đặt trong thư mục /etc/init.d. Nếu tên tài nguyên trong /etc/init.d không hoàn toàn giống nhau, heartbeat sẽ không thể tìm thấy khi cố gắng đọc nó và cả Apache lẫn hearbeat đều không thể khởi động được.

File liên quan đến heartbeat cuối cùng là /etc/ha.d/authkeys. File này cũng phải hoàn toàn giống nhau trên cả hai nút và chỉ được đọc hoặc ghi bởi người dùng root. Nếu quyền hạn bị thiết lập khác đi, heartbeat sẽ từ chối khởi động. Bạn cần phải cấu hình file như thế này:

auth 1
1 crc

và giới hạn quyền đọc hoặc ghi chỉ dành cho người dùng root:

chmod 600 /etc/ha.d/authkeys

Bây giờ là cấu hình Apache service. Chúng ta muốn Apache nghe địa chỉ IP ảo 192.168.1.5 và cần trỏ thư mục Apache gốc tới điểm cài đặt dữ liệu /data, nơi các file Web được lưu lại. Chú ý là nơi lưu trữ dành cho Apache có thể là một nơi cụ thể từ thư mục file hệ thống cục bộ tới mạng khu vực lưu trữ. Tất nhiên nếu dữ liệu trong cả hai nút không giống nhau thì sẽ chẳng có điểm nào trong cluster failover cả. Nếu bạn không có thiết bị lưu trữ mạng mở rộng (như Fibre Channel chẳng hạn), bạn có thể cài đặt bất kỳ file hệ thống nào như SMB, NFS, iSCSI, hoặc SAN là thư mục địa phương để dữ liệu có thể được truy cập trên từng nút khi các nút hoạt động. Điều này được thực hiện bằng cách chỉnh sửa các thông số đầu vào trong file /etc/httpd/conf/httpd.conf như sau (ít nhất là trên phân phối CentOS):

Listen 192.168.1.5:80
DocumentRoot “/data”

Bỏ chức năng bắt đầu tự động khởi động trong thời gian boot cho Apache service là khá quan trọng. Khi đó heartbeat sẽ bắt đầu và kết thúc dịch vụ khi cần thiết. Vô hiệu hoá chức năng bắt đầu với câu lệnh sau (trên hệ thống Red Hat):

chkconfig httpd remove

Phải đảm bảo cấu hình Apache giống nhau trên cả hai nút.

Kiểm tra

Bây giờ chúng ta sẽ kiểm tra thử chương trình làm việc với cấu hình vừa thiết lập, bắt đầu tạo cluster mới, khởi động dịch vụ hearbeat trên cả hai nút:

/etc/init.d/heartbeat start

Nếu heartbeat start okay thì xin chúc mừng bạn đã cấu hình thành công heartbeat. Sau khi reboot lại server bạn đợi khoảng 2 — 3 phút để heartbeat khởi động.

Sau khi khởi động xong bạn có thể check server được rồi.

Nguyễn Thăng Long (Kenhgiaiphap.vn)

About Tony Nguyễn
Tôi tên Tony tự Tèo trú tại thôn Tám, Trảng Thanh tỉnh Thừa Thiên. Thưở thiếu thời trí tuệ tôi thường thường, tuy thế tính tình thật thà thẳng thắng, thích thi thơ ...

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: