Linux P1_High Availability Service on Linux (Apache + MySQL)

Discussion in 'LINUX SERVICE' started by vohongnhuy, Jun 10, 2019.

  1. vohongnhuy

    vohongnhuy New Member

    Joined:
    Mar 11, 2019
    Messages:
    11
    Likes Received:
    0
    Trophy Points:
    1
    Gender:
    Male
    Location:
    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: Jun 19, 2019

Share This Page