Linux High Availability MySQL on Linux use MySQL NDB Cluster

vohongnhuy

Internship/Fresher
Mar 11, 2019
21
7
3
27
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---
 

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