Linux High Availability MySQL on Linux use MySQL NDB Cluster

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

  1. vohongnhuy

    vohongnhuy New Member

    Joined:
    Mar 11, 2019
    Messages:
    11
    Likes Received:
    0
    Trophy Points:
    1
    Gender:
    Male
    Location:
    HCM
    High Availability MySQL on Linux CentOS 7 use MySQL NDB Cluster
    Nội dung:
    I. Đặt vấn đề
    II. Giải pháp
    III. Tổng quan giải pháp
    IV. Thử nghiệm giải pháp
    1. Mô hình hệ thống lab thử nghiệm giải pháp MySQL NDB Cluster trên VMWare
    2. Triển khai MySQL NDB Cluster
    3. Kiểm tra hoạt động.


    I. Đặt vấn đề
    Giả sử một doanh nghiệp có hệ thống cơ sở dữ liệu MySQL mà không có giải pháp lưu trữ tập trung như SAN hoặc NAS.
    Làm thế nào để tăng tính sẵn sàng High Availability (HA), khả năng sao lưu đảm bảo an toàn dữ liệu (Backup) và có khả năng cân bằng tải đối với dịch vụ MySQL (Load Balancing)?

    II. Giải pháp
    MySQL NDB Cluster: một giải pháp cluster được phát triển trong MySQL, tạo cluster đảm bảo HA, Backup data và Load Balancing cho dịch vụ MySQL.

    III.Tổng quan giải pháp
    Tham khảo: https://dev.mysql.com/doc/refman/8.0/en/mysql-cluster.html
    MySQL NDB Cluster cung cấp tính sẵn sàng cao và thông lượng lớn cho hệ thống quản lý cơ sở dữ liệu MySQL. Một cụm MySQL bao gồm một hoặc nhiều nút quản lý (ndb_mgmd) lưu trữ cấu hình của cụm và kiểm soát các nút dữ liệu (ndbd), nơi dữ liệu cụm được lưu trữ. Sau khi giao tiếp với nút quản lý, máy khách (máy khách MySQL, máy chủ hoặc API) kết nối trực tiếp với các nút dữ liệu này.

    Với MySQL Cluster, thường không có sự sao chép dữ liệu, mà thay vào đó là đồng bộ hóa nút dữ liệu. Với mục đích này, một công cụ dữ liệu đặc biệt phải được sử dụng - NDBCluster (NDB). Cluster như một môi trường logic đơn với các thành phần dự phòng. Vì vậy, MySQL Cluster có thể tham gia vào replication với MySQL Cluster khác.

    Mô hình triển khai MySQL NDB Cluster phân tán và phân hoá các thành phần MySQL giúp MySQL tăng khả năng chịu lỗi cũng như tăng hiệu năng xử lý tác vụ tại các thành phần này.

    Mô hình triển khai tổng quát

    ndb(1)

    IV. Thử nghiệm giải pháp
    1. Mô hình hệ thống lab thử nghiệm giải pháp MySQL NDB Cluster trên VMWare
    ndb(2)

    Môi trường lab sử dụng năm server với các chức năng riêng biệt theo mô hình triển khai tổng quát của MySQL NDB Cluster.

    Chuẩn bị: Năm 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 giao tiếp giữa các node MySQL (subnet 172.16.1.0/24))
    • Management node: 172.16.1.20 (hostname: mgmd) làm NDB Management Server chạy ndb_mgmd, quản lý và đồng bộ các data node và sql node; kết hợp làm NDB Management Client để quản trị.
    • SQL node 1: 172.16.1.21 (hostname: sql.1) làm sql nodes chạy mysqld để nhận các query.
    • SQL node 2: 172.16.1.22 (hostname: sql.2) làm sql nodes chạy mysqld để nhận các query.
    • Data node 1: 172.16.1.23 (hostname: data1) làm data nodes chạy ndbd chứa dữ liệu.
    • Data node 2: 172.16.1.24 (hostname: data2) làm data nodes chạy ndbd chứa dữ liệu.
    Cài đặt các dich vụ cơ bản sau lên hai server:
    • Vi text editor
    Thêm 5 dòng sau vào file /etc/hosts trên mỗi máy:
    172.16.1.20 mgmd
    172.16.1.21 sql.1
    172.16.1.22 sql.2
    172.16.1.23 data1
    172.16.1.24 data2


    2. Triển khai MySQL NDB Cluster
    Có nhiều cách cài đặt MySQL NDB Cluster khác nhau. Bài viết sử dụng phương pháp cài đặt bằng Binary Release.

    Đầu tiên cần download file mysql-cluster-gpl-7.6.10-linux-glibc2.12-x86_64.tar.gz (tuỳ phiên bản OS và môi trường triển khai mà lựa chọn file thích hợp) tại https://dev.mysql.com/downloads/cluster/
    *Lưu ý: trong qua trình cài đặt, cần đảm bảo rằng các node kết nối thông suốt với nhau (vấn đề tường lửa).
    • Management node: mở port 1186/tcp (các node kết nối đến để quản trị)
    • SQL node: mở port 3306/tcp (mysql)
    • Data node: mở dãy port 32768-61000 cho ip Data node khác (đồng bộ dữ liệu)
    Bước 1: Cấu hình trên manager node (với quyền root)
    Copy file nén mysql cluster vào folder /usr/local
    Thực hiện lệnh thêm user mysql
    #groupadd mysql
    #useradd -g mysql mysql


    Giải nén MySQL NDB Cluster
    #cd /usr/local
    #tar -zxvf mysql-cluster-gpl-7.6.10-linux-glibc2.12-x86_64.tar.gz
    #mv mysql-cluster-gpl-7.6.10-linux-glibc2.12-x86_64 mysql
    #chown -R mysql:mysql /usr/local/mysql/


    Tạo thư mục chứa cấu hình và file log:
    #mkdir /var/lib/mysql-cluster
    #chown -R mysql:mysql /var/lib/mysql-cluster


    Tạo file khai báo các thông tin Manager, SQL và Storage Node: /var/lib/mysql-cluster/config.ini với nội dung:
    [ndbd default]
    # Options affecting ndbd processes on all data nodes:
    NoOfReplicas=2 # Number of replicas
    DataMemory=98M # How much memory to allocate for data storage

    [ndb_mgmd]
    # Management process options:
    HostName=mgmd # Hostname or IP address of MGM node
    DataDir=/var/lib/mysql-cluster # Directory for MGM node log files

    [ndbd]
    # Options for data node "data1":
    # (one [ndbd] section per data node)
    HostName=data1 # Hostname or IP address
    NodeId=2 # Node ID for this data node
    DataDir=/usr/local/mysql/data # Directory for this data node's data files Initial Startup of NDB Cluster

    [ndbd]
    # Options for data node "data2":
    HostName=data2 # Hostname or IP address
    NodeId=3 # Node ID for this data node
    DataDir=/usr/local/mysql/data # Directory for this data node's data files Initial Startup of NDB Cluster

    [mysqld]
    # Options for sql node "sql.1":
    HostName=sql.1 # Hostname or IP address
    NodeId=4
    # (additional mysqld connections can be
    # specified for this node for various
    # purposes such as running ndb_restore)

    [mysqld]
    # Options for sql node "sql.2":
    HostName=sql.2 # Hostname or IP address
    NodeId=5
    # (additional mysqld connections can be
    # specified for this node for various
    # purposes such as running ndb_restore)


    ndb(3)


    Ta có thư mục /usr/local/mysql/ đã giải nén chứa tất cả các dịch vụ cần thiết cho tất cả các node.

    Ở Management Node ta cần quan tâm 2 dịch vụ là NDB Management Server (file binary /usr/local/mysql/bin/ndb_mgmd) và NDB Management Client (file binary /usr/local/mysql/bin/ndb_mgm).

    Thực hiện cài đặt 2 file binary trên như dịch vụ trên Linux.
    #cp /usr/local/mysql/bin/ndb_mgm* /usr/local/bin
    #chmod -R +x /usr/local/bin/ndb_mgm*


    Khởi động dịch vụ NDB Management Server cùng hệ thống, tạo file /etc/systemd/system/ndb_mgmd.service với nội dung sau:
    [Unit]
    Description=MySQL NDB Cluster Management Server
    After=network.target auditd.service

    [Service]
    Type=forking
    ExecStart=/usr/local/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini
    ExecReload=/bin/kill -HUP $MAINPID
    KillMode=process
    Restart=on-failure

    [Install]
    WantedBy=multi-user.target


    Cập nhật lại hệ thống để cài đặt được thực thi:
    #systemctl daemon-reload
    #systemctl enable ndb_mgmd
    #systemctl start ndb_mgmd


    ndb(4)

    Kiểm tra trạng thái dịch vụ, nếu running là cài đặt và chạy thành công:
    #systemctl status ndb_mgmd

    ndb(5)

    NDB Management Server đã khởi chạy, giờ có thể dùng NDB Management Client để quản lý.
    Ví dụ như show trạng thái các node dùng lệnh sau (dùng lệnh ndb_mgm> help để tìm hiểu thêm):
    #ndb_mgm
    ndb_mgm> show


    ndb(6)

    Bước 2: Cấu hình Data node (với quyền root) (Thực hiện tất cả các bước sau trên lần lượt từng Data node)
    Copy file nén mysql cluster vào folder /usr/local
    Thực hiện lệnh thêm user mysql
    #groupadd mysql
    #useradd -g mysql mysql


    Giải nén MySQL NDB Cluster
    #cd /usr/local
    #tar -zxvf mysql-cluster-gpl-7.6.10-linux-glibc2.12-x86_64.tar.gz
    #mv mysql-cluster-gpl-7.6.10-linux-glibc2.12-x86_64 mysql
    #chown -R mysql:mysql /usr/local/mysql/


    Tạo thư mục chứa dữ liệu và log:
    #mkdir /usr/local/mysql/data
    #chown -R mysql:mysql /usr/local/mysql/data


    Ở Data Node ta cần quan tâm hai dịch vụ là ndbd (file binary /usr/local/mysql/bin/ndbd, single-threaded) và ndbmtd (file binary /usr/local/mysql/bin/ndbmtd, multi-threaded).

    Thực hiện cài đặt 2 file binary trên như dịch vụ trên Linux.
    #cp /usr/local/mysql/bin/ndbd /usr/local/bin
    #cp /usr/local/mysql/bin/ndbmtd /usr/local/bin
    #chmod -R +x /usr/local/bin/ndb*


    *Lưu ý chỉ chọn chạy 1 trong 2 dịch vụ trên (bài viết sử dụng ndbd).

    Tạo file khai báo các thông tin Management node để Data node kết nối đến, /etc/my.cnf với nội dung:
    [mysqld]
    # Options for mysqld process:
    ndbcluster # run NDB storage engine

    [mysql_cluster]
    # Options for NDB Cluster processes:
    ndb-connectstring=mgmd # location of management server


    Khởi động dịch vụ ndbd cùng hệ thống, tạo file /etc/systemd/system/ndbd.service với nội dung sau:
    [Unit]
    Description=MySQL NDB Cluster Management Server
    After=network.target auditd.service

    [Service]
    Type=forking
    ExecStart=/usr/local/bin/ndbd
    ExecReload=/bin/kill -HUP $MAINPID
    KillMode=process
    Restart=on-failure

    [Install]
    WantedBy=multi-user.target


    Cập nhật lại hệ thống để cài đặt được thực thi:
    #systemctl daemon-reload
    #systemctl enable ndbd
    #systemctl start ndbd


    ndb(7)

    Kiểm tra trạng thái dịch vụ, nếu running là cài đặt và chạy thành công:
    #systemctl status ndbd

    ndb(8)

    Kiểm tra trên Management node, các Data Node sau khi chạy ndbd đã kết nối đến Management node thành công.
    #ndb_mgm -e 'show'

    ndb(9)

    Bước 3: Cấu hình cho các SQL Node (Thực hiện tất cả các bước sau trên lần lượt từng SQL node)
    Copy file nén mysql cluster vào folder /usr/local
    Thực hiện lệnh thêm user mysql
    #groupadd mysql
    #useradd -g mysql mysql


    Giải nén MySQL NDB Cluster
    #cd /usr/local
    #tar -zxvf mysql-cluster-gpl-7.6.10-linux-glibc2.12-x86_64.tar.gz
    #mv mysql-cluster-gpl-7.6.10-linux-glibc2.12-x86_64 mysql
    #chown -R mysql:mysql /usr/local/mysql/


    Ở SQL node ta cần quan tâm các dịch vụ là:
    • Mysql command-line client (file binary /usr/local/mysql/bin/mysql)
    • Dịch vụ mysql server (file binary /usr/local/mysql/bin/mysqld)
    • Thiết lập bảo mật cho MySQL (file binary /usr/local/mysql/bin/mysql_secure_installation)
    • Khởi động an toàn và sửa lỗi cho mysql (file binary /usr/local/mysql/bin/mysqld_safe),
    • Client với quyền admin để thiết lập mysql (file binary /usr/local/mysql/bin/mysqladmin)
    • Khởi động mysql server (file binary /usr/local/mysql/support-files/mysql.server)
    Tạo thư mục chứa dữ liệu và log:
    #mkdir /usr/local/mysql/data
    #chown -R mysql:mysql /usr/local/mysql/data


    Tạo file khai báo các thông tin Management node để SQL node kết nối đến, /etc/my.cnf với nội dung:
    [mysqld]
    # Options for mysqld process:
    ndbcluster # run NDB storage engine
    ndb-connectstring=mgmd # IP address for server management node
    default_storage_engine=ndbcluster # Define default Storage Engine used by MySQL

    [mysql_cluster]
    # Options for NDB Cluster processes:
    ndb-connectstring=mgmd # location of management server


    Thực hiện lệnh để tạo một mật khẩu tạm cho tài khoản ‘root’.
    #cd /usr/local/mysql/bin
    #./mysqld --initialize


    ndb(10)

    Gán quyền cho thư mục chứa cấu hình và log:
    #chown -R mysql:mysql /usr/local/mysql/data

    Khởi động dịch vụ mysql server cùng hệ thống
    #cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/
    #chmod +x /etc/rc.d/init.d/mysql.server
    #chkconfig --add mysql.server


    ndb(11)

    Khởi chạy và kiểm tra trạng thái mysql server
    #systemctl start mysql
    #systemctl status mysql


    ndb(12)

    Đăng nhập với mật khẩu tạm vừa tạo
    #cd /usr/local/mysql/bin
    #./mysql -u root -p


    Nhập mật khẩu tạm ở trên

    ndb(13)

    Thay đổi mật khẩu cho tài khoản ‘root’
    Mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '1', 'root'@'localhost' PASSWORD EXPIRE NEVER;
    Mysql>flush privileges;
    Mysql>exit


    ndb(14)

    Kiểm tra trên Management node, các SQL Node sau khi chạy mysql server đã kết nối đến Management node thành công.
    #ndb_mgm -e 'show'

    ndb(15)

    Trong lab này, cấu hình hai SQL node: một cấp cho client kết nối (sql.1), một để dự phòng (sql.2).
    Ngoài ra, có thể triển khai các giải pháp khác để nhóm 2 SQL node này về chung một SQL node ảo và cho client kết nối để đảm bảo High Availability hoặc Load Balancing tuỳ yêu cầu.

    3. Kiểm tra hoạt động
    Tạo một database: dbtest để kiểm tra hoạt động của NDB Cluster.
    Trên SQL node 1, đăng nhập với tài khoản ‘root’
    #cd /usr/local/mysql/bin
    #./mysql -u root -p


    Tạo database
    Mysql>create database dbtest;
    Mysql>use dbtest;


    Tạo table
    Mysql>create table students(student_Id BIGINT NOT NULL, student_name VARCHAR(40) NOT NULL) ENGINE=ndbcluster;


    *Lưu ý: để dữ liệu được sao chép trên các data node trong cluster, cần sử dụng NDBCLUSTER storage engine bằng cách dùng tuỳ chọn ENGINE=NDBCLUSTER hoặc ENGINE=NDB khi tạo table. Ngoài ra, nếu muốn các table hiện có được đồng bộ lên các data node, sử dụng lệnh ALTER TABLE để thay đổi storage engine là NDBCLUSTER. Lệnh thay đổi tương tự:
    Mysql>ALTER TABLE table_name ENGINE=NDBCLUSTER;

    Thêm dữ liệu cho table students vừa tạo
    Mysql> insert into students(student_Id, student_name) values('1', 'Nguyen Van A');
    Mysql> insert into students(student_Id, student_name) values('2', 'Tran Thi B');


    Kết quả trên SQL node 1
    Mysql> select * from students;

    ndb(16)

    Đăng nhập SQL node 2, ta cũng có thể thấy dữ liệu, chứng minh dữ liệu được lưu trên các data node.

    ndb(17)

    Trường hợp Failover, ta thử tắt SQL node 1 và Data node 1, kiểm tra, dữ liệu và dịch vụ mysql hoạt động bình thường.

    ndb(18)

    ---HẾT---
     

Share This Page