Thứ sáu, 17/06/2016 | 00:00 GMT+7

Cách tạo một cụm MySQL nhiều node trên Ubuntu 16.04

MySQL cluster là một công nghệ phần mềm cung cấp tính khả dụng và thông lượng cao. Nếu bạn đã quen thuộc với các công nghệ cluster khác, bạn sẽ thấy MySQL cluster tương tự như chúng. Tóm lại, có một hoặc nhiều nút quản lý điều khiển các node dữ liệu (nơi dữ liệu được lưu trữ). Sau khi tham khảo ý kiến với nút quản lý, các client (máy khách MySQL, server hoặc API root ) kết nối trực tiếp với các node dữ liệu.

Bạn có thể tự hỏi sao chép MySQL có liên quan đến cụm MySQL như thế nào. Với cluster không có sự sao chép dữ liệu điển hình mà thay vào đó là sự đồng bộ hóa của các node dữ liệu. Vì mục đích này, một công cụ dữ liệu đặc biệt phải được sử dụng - NDBCluster (NDB). Hãy nghĩ về cụm như một môi trường MySQL logic duy nhất với các thành phần dư thừa. Do đó, một cụm MySQL có thể tham gia vào quá trình nhân rộng với các cụm MySQL khác.

MySQL cluster hoạt động tốt nhất trong môi trường không chia sẻ gì. Tốt nhất, không có hai thành phần nào nên chia sẻ cùng một phần cứng. Vì mục đích đơn giản và trình diễn, ta sẽ giới hạn bản thân chỉ sử dụng ba server . Sẽ có hai Server hoạt động như các node dữ liệu đang đồng bộ hóa dữ liệu giữa chúng. Server thứ ba sẽ được sử dụng cho trình quản lý cụm và đồng thời cho server / client MySQL. Nếu bạn có nhiều Server hơn, bạn có thể thêm nhiều nút dữ liệu hơn, tách trình quản lý cụm khỏi server / client MySQL và thậm chí thêm nhiều Server hơn làm trình quản lý cụm và server / client MySQL.

Một cụm MySQL đơn giản

Yêu cầu

Bạn cần tổng cộng ba server - một server cho trình quản lý cụm MySQL và server / client MySQL và hai server cho các node dữ liệu MySQL dự phòng.

Trong cùng một trung tâm dữ liệu DigitalOcean , hãy tạo các Server sau khi bật mạng riêng tư :

MySQL cluster lưu trữ nhiều thông tin trong RAM. Mỗi Server phải có ít nhất 1GB RAM.

Như đã đề cập trong hướng dẫn mạng riêng tư , hãy đảm bảo cài đặt các bản ghi tùy chỉnh cho 3 Server. Vì mục đích đơn giản và thuận tiện, ta sẽ sử dụng các bản ghi tùy chỉnh sau đây cho từng server trong file /etc/hosts :

10.XXX.XX.X node1.mysql.cluster
10.YYY.YY.Y node2.mysql.cluster
10.ZZZ.ZZ.Z manager.mysql.cluster

Vui lòng thay thế các IP được đánh dấu bằng các IP riêng của Server tương ứng.

Trừ khi có lưu ý khác, tất cả các lệnh yêu cầu quyền root trong hướng dẫn này phải được chạy với quyền user không phải root có quyền sudo.

Bước 1 - Download và cài đặt MySQL Cluster

Tại thời điểm viết hướng dẫn này, version GPL mới nhất của cụm MySQL là 7.4.11. Sản phẩm được xây dựng trên MySQL 5.6 và nó bao gồm:

  • Phần mềm quản lý cụm
  • Phần mềm quản lý nút dữ liệu
  • Server MySQL 5.6 và binary client

Bạn có thể download bản phát hành cụm MySQL miễn phí, Thường có sẵn (GA) từ trang download cụm MySQL chính thức . Từ trang này, chọn gói nền tảng Debian Linux, gói này cũng phù hợp với Ubuntu. Ngoài ra, hãy đảm bảo chọn version 32 bit hoặc 64 bit tùy thuộc vào kiến trúc của Server. Tải gói cài đặt lên từng server của bạn.

Hướng dẫn cài đặt sẽ giống nhau cho tất cả các server , vì vậy hãy hoàn thành các bước này trên cả 3 server .

Trước khi bạn bắt đầu cài đặt, gói libaio1 phải được cài đặt vì nó là một phần phụ thuộc:

  • sudo apt-get install libaio1

Sau đó, cài đặt gói cụm MySQL:

  • sudo dpkg -i mysql-cluster-gpl-7.4.11-debian7-x86_64.deb

Đến đây bạn có thể tìm thấy cài đặt cụm MySQL trong folder /opt/mysql/server-5.6/ . Ta sẽ đặc biệt làm việc với folder bin ( /opt/mysql/server-5.6/bin/ ), nơi chứa tất cả các file binary .

Các bước cài đặt giống nhau nên được thực hiện trên cả ba Server dù thực tế là mỗi loại sẽ có chức năng khác nhau - trình quản lý hoặc nút dữ liệu.

Tiếp theo, ta sẽ cấu hình trình quản lý cụm MySQL trên mỗi Server.

Bước 2 - Cấu hình và khởi động trình quản lý cụm

Trong bước này, ta sẽ cấu hình trình quản lý cụm MySQL ( manager.mysql.cluster ). Cấu hình phù hợp của nó sẽ đảm bảo đồng bộ hóa chính xác và phân phối tải giữa các node dữ liệu. Tất cả các lệnh phải được thực thi trên Server manager.mysql.cluster .

Trình quản lý cụm là thành phần đầu tiên phải được bắt đầu trong bất kỳ cụm nào. Nó cần một file cấu hình được chuyển làm đối số cho file binary của nó. Để thuận tiện, ta sẽ sử dụng file /var/lib/mysql-cluster/config.ini cho cấu hình của nó.

Trên manager.mysql.cluster Server, trước tiên hãy tạo folder nơi file này sẽ nằm ( /var/lib/mysql-cluster ):

  • sudo mkdir /var/lib/mysql-cluster

Sau đó, tạo một file và bắt đầu chỉnh sửa nó bằng nano:

  • sudo nano /var/lib/mysql-cluster/config.ini

Tệp này phải chứa mã sau:

/var/lib/mysql-cluster/config.ini
[ndb_mgmd] # Management process options: hostname=manager.mysql.cluster  # Hostname of the manager datadir=/var/lib/mysql-cluster  # Directory for the log files  [ndbd] hostname=node1.mysql.cluster    # Hostname of the first data node datadir=/usr/local/mysql/data   # Remote directory for the data files  [ndbd] hostname=node2.mysql.cluster    # Hostname of the second data node datadir=/usr/local/mysql/data   # Remote directory for the data files  [mysqld] # SQL node options: hostname=manager.mysql.cluster  # In our case the MySQL server/client is on the same Server as the cluster manager 

Đối với mỗi thành phần trên, ta đã xác định một tham số hostname . Đây là một biện pháp bảo mật quan trọng vì chỉ tên server được chỉ định mới được phép kết nối với trình quản lý và tham gia vào cụm theo role được chỉ định của họ.

Hơn nữa, các tham số hostname chỉ định dịch vụ sẽ chạy trên giao diện nào. Điều này quan trọng và quan trọng đối với bảo mật, vì trong trường hợp của ta , các tên server ở trên trỏ đến các IP riêng mà ta đã chỉ định trong các file /etc/hosts . Do đó, bạn không thể truy cập bất kỳ dịch vụ nào ở trên từ bên ngoài mạng riêng.

Trong file trên, bạn có thể thêm nhiều thành phần dự phòng hơn như nút dữ liệu (ndbd) hoặc server MySQL (mysqld) bằng cách chỉ định nghĩa các version bổ sung theo cùng một cách.

Bây giờ, bạn có thể khởi động trình quản lý lần đầu tiên bằng cách thực thi binary ndb_mgmd và chỉ định file cấu hình với đối số -f như sau:

  • sudo /opt/mysql/server-5.6/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini

Bạn sẽ thấy một thông báo về khởi động thành công tương tự như sau:

Output of ndb_mgmd
MySQL Cluster Management Server mysql-5.6.29 ndb-7.4.11

Bạn có thể cần dịch vụ quản lý tự động khởi động với server . Bản phát hành cụm GA không đi kèm với tập lệnh khởi động phù hợp, nhưng có một số tập lệnh có sẵn trực tuyến. Để bắt đầu, bạn chỉ cần thêm lệnh start vào file /etc/rc.local và dịch vụ sẽ tự động được khởi động trong khi khởi động. Tuy nhiên, trước tiên, bạn sẽ phải đảm bảo /etc/rc.local được thực thi trong quá trình khởi động server . Trong Ubuntu 16.04, điều này yêu cầu chạy một lệnh bổ sung:

  • sudo systemctl enable rc-local.service

Sau đó, mở file /etc/rc.local để chỉnh sửa:

  • sudo nano /etc/rc.local

Có thêm lệnh bắt đầu trước dòng exit như thế này:

/etc/rc.local
... /opt/mysql/server-5.6/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini exit 0 

Lưu và thoát khỏi file .

Người quản lý cụm không phải chạy mọi lúc. Nó có thể được bắt đầu, dừng và khởi động lại mà không cần thời gian chết cho cụm. Nó chỉ được yêu cầu trong quá trình khởi động ban đầu của các node cụm và server / client MySQL.

Bước 3 - Cấu hình và khởi động các node dữ liệu

Tiếp theo, ta sẽ cấu hình các node dữ liệu ( node1.mysql.clusternode2.mysql.cluster ) để lưu trữ các file dữ liệu và hỗ trợ đúng công cụ NDB. Tất cả các lệnh phải được thực hiện trên cả hai nút. Trước tiên, bạn có thể bắt đầu với node1.mysql.cluster và sau đó lặp lại chính xác các bước tương tự trên node2.mysql.cluster .

Các node dữ liệu đọc cấu hình từ file cấu hình MySQL tiêu chuẩn /etc/my.cnf và cụ thể hơn là phần sau dòng [mysql_cluster] . Tạo file này bằng nano và bắt đầu chỉnh sửa nó:

  • sudo nano /etc/my.cnf

Chỉ định tên server của người quản lý như sau:

/etc/my.cnf
[mysql_cluster] ndb-connectstring=manager.mysql.cluster 

Lưu và thoát khỏi file .

Chỉ định vị trí của trình quản lý là cấu hình duy nhất cần thiết để công cụ nút khởi động. Phần còn lại của cấu hình sẽ được lấy trực tiếp từ người quản lý. Trong ví dụ của ta , nút dữ liệu sẽ phát hiện ra rằng folder dữ liệu của nó là /usr/local/mysql/data theo cấu hình của trình quản lý. Thư mục này phải được tạo trên nút. Bạn có thể làm điều đó bằng lệnh:

  • sudo mkdir -p /usr/local/mysql/data

Sau đó, bạn có thể khởi động nút dữ liệu lần đầu tiên bằng lệnh:

  • sudo /opt/mysql/server-5.6/bin/ndbd

Sau khi bắt đầu thành công, bạn sẽ thấy một kết quả tương tự:

Output of ndbd
2016-05-11 16:12:23 [ndbd] INFO -- Angel connected to 'manager.mysql.cluster:1186' 2016-05-11 16:12:23 [ndbd] INFO -- Angel allocated nodeid: 2

Bạn sẽ tự động khởi động dịch vụ ndbd với server . Bản phát hành cụm GA cũng không đi kèm với tập lệnh khởi động phù hợp cho việc này. Giống như ta đã làm với trình quản lý cụm, hãy thêm lệnh khởi động vào file /etc/rc.local . , bạn sẽ phải đảm bảo /etc/rc.local được thực thi trong quá trình khởi động server bằng lệnh:

  • sudo systemctl enable rc-local.service

Sau đó, mở file /etc/rc.local để chỉnh sửa:

  • sudo nano /etc/rc.local

Thêm lệnh bắt đầu trước dòng exit như sau:

/etc/rc.local
... /opt/mysql/server-5.6/bin/ndbd exit 0 

Lưu và thoát khỏi file .

Khi bạn đã hoàn thành nút đầu tiên, hãy lặp lại chính xác các bước tương tự trên nút khác, đó là node2.mysql.cluster trong ví dụ của ta .

Bước 4 - Cấu hình và khởi động server và client MySQL

Server MySQL tiêu chuẩn, chẳng hạn như server có sẵn trong repository lưu trữ apt mặc định của Ubuntu, không hỗ trợ NDB cụm công cụ MySQL. Đó là lý do tại sao bạn cần cài đặt server MySQL tùy chỉnh. Gói cụm mà ta đã cài đặt trên ba Server đi kèm với một server MySQL và một ứng dụng client nữa. Như đã đề cập, ta sẽ sử dụng server và client MySQL trên nút quản lý ( manager.mysql.cluster ).

Cấu hình được lưu trữ lại thành file /etc/my.cnf mặc định. Trên manager.mysql.cluster , mở file cấu hình:

  • sudo nano /etc/my.cnf

Sau đó, thêm phần sau vào nó:

/etc/my.cnf
[mysqld] ndbcluster # run NDB storage engine ... 

Lưu và thoát khỏi file .

Theo các phương pháp hay nhất, server MySQL nên chạy dưới user của chính nó ( mysql ) thuộc group riêng của nó (lại là mysql ). Vì vậy, trước tiên hãy tạo group :

  • sudo groupadd mysql

Sau đó, tạo user mysql thuộc group này và đảm bảo nó không thể sử dụng shell bằng cách đặt đường dẫn shell của nó thành /bin/false như sau:

  • sudo useradd -r -g mysql -s /bin/false mysql

Yêu cầu cuối cùng để cài đặt server MySQL tùy chỉnh là tạo database mặc định. Bạn có thể làm điều đó bằng lệnh:

  • sudo /opt/mysql/server-5.6/scripts/mysql_install_db --user=mysql

Để khởi động server MySQL, ta sẽ sử dụng tập lệnh khởi động từ /opt/mysql/server-5.6/support-files/mysql.server . Sao chép nó vào folder init scripts mặc định dưới tên mysqld như thế này:

  • sudo cp /opt/mysql/server-5.6/support-files/mysql.server /etc/init.d/mysqld

Kích hoạt script khởi động và thêm nó vào runlevel mặc định bằng lệnh:

  • sudo systemctl enable mysqld.service

Bây giờ ta có thể khởi động server MySQL lần đầu tiên theo cách thủ công bằng lệnh:

  • sudo systemctl start mysqld

Là một client MySQL, ta sẽ sử dụng lại file binary tùy chỉnh đi kèm với cài đặt cụm. Nó có đường dẫn sau: /opt/mysql/server-5.6/bin/mysql . Để thuận tiện, hãy tạo một softlink đến nó trong đường dẫn mặc định /usr/bin :

  • sudo ln -s /opt/mysql/server-5.6/bin/mysql /usr/bin/

Đến đây bạn có thể bắt đầu ứng dụng client từ dòng lệnh bằng cách chỉ cần gõ mysql như sau:

  • mysql

Bạn sẽ thấy một kết quả tương tự như:

Output of ndb_mgmd
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.6.29-ndb-7.4.11-cluster-gpl MySQL Cluster Community Server (GPL)

Để thoát khỏi dấu nhắc MySQL, chỉ cần gõ quit hoặc nhấn đồng thời CTRL-D .

Trên đây là lần kiểm tra đầu tiên để cho thấy MySQL cluster, server và client đang hoạt động. Tiếp theo, ta sẽ thực hiện các bài kiểm tra chi tiết hơn để xác nhận cụm đang hoạt động bình thường.

Kiểm tra cụm

Đến đây, cụm MySQL đơn giản của ta với một client , một server , một trình quản lý và hai nút dữ liệu sẽ hoàn tất. Từ trình quản lý cụm Server ( manager.mysql.cluster ), mở console quản lý bằng lệnh:

  • sudo /opt/mysql/server-5.6/bin/ndb_mgm

Bây giờ dấu nhắc sẽ thay đổi thành console quản lý cụm. Nó trông như thế này:

Inside the ndb_mgm console
-- NDB Cluster -- Management Client -- ndb_mgm>

Khi bên trong console , hãy thực hiện lệnh SHOW như sau:

  • SHOW

Bạn sẽ thấy kết quả tương tự như sau:

Output of ndb_mgm
Connected to Management Server at: manager.mysql.cluster:1186 Cluster Configuration --------------------- [ndbd(NDB)] 2 node(s) id=2 @10.135.27.42 (mysql-5.6.29 ndb-7.4.11, Nodegroup: 0, *) id=3 @10.135.27.43 (mysql-5.6.29 ndb-7.4.11, Nodegroup: 0) [ndb_mgmd(MGM)] 1 node(s) id=1 @10.135.27.51 (mysql-5.6.29 ndb-7.4.11) [mysqld(API)] 1 node(s) id=4 @10.135.27.51 (mysql-5.6.29 ndb-7.4.11)

Ở trên cho thấy rằng có hai nút dữ liệu với id 2 và 3. Chúng đang hoạt động và được kết nối. Ngoài ra còn có một nút quản lý với id 1 và một server MySQL với id 4. Bạn có thể tìm thêm thông tin về từng id bằng lệnh số của nó bằng lệnh STATUS như sau:

  • 2 STATUS

Lệnh trên sẽ hiển thị cho bạn trạng thái của nút 2 cùng với các version MySQL và NDB của nó:

Output of ndb_mgm
Node 2: started (mysql-5.6.29 ndb-7.4.11)

Để thoát khỏi console quản lý, loại quit .

Control panel quản lý rất mạnh mẽ và cung cấp cho bạn nhiều tùy chọn khác để quản lý cụm và dữ liệu của nó, bao gồm cả tạo bản backup trực tuyến. Để biết thêm thông tin, hãy kiểm tra tài liệu chính thức .

Hãy làm một bài kiểm tra với MySQL client bây giờ. Từ cùng một Server, khởi động ứng dụng client bằng lệnh mysql cho user root MySQL. Vui lòng nhớ lại rằng ta đã tạo một softlink cho nó trước đó.

  • mysql -u root

\ Control panel của bạn sẽ thay đổi thành console client MySQL. Khi bên trong client MySQL, hãy chạy lệnh:

  • SHOW ENGINE NDB STATUS \G

Đến đây bạn sẽ thấy tất cả thông tin về động cơ cụm NDB bắt đầu với các chi tiết kết nối:

Output of mysql
*************************** 1. row *************************** Type: ndbcluster Name: connection Status: cluster_node_id=4, connected_host=manager.mysql.cluster, connected_port=1186, number_of_data_nodes=2, number_of_ready_data_nodes=2, connect_count=0 ...

Thông tin quan trọng nhất ở trên là số lượng các node sẵn sàng - 2. Sự dư thừa này sẽ cho phép cụm MySQL của bạn tiếp tục hoạt động ngay cả khi một trong các node dữ liệu bị lỗi. Đồng thời, các truy vấn SQL của bạn sẽ được cân bằng tải cho hai nút.

Bạn có thể thử tắt một trong các node dữ liệu để kiểm tra độ ổn định của cụm. Điều đơn giản nhất là khởi động lại toàn bộ Server để kiểm tra toàn bộ quá trình khôi phục. Bạn sẽ thấy giá trị của number_of_ready_data_nodes thay đổi thành 1 và trở lại thành 2 khi nút được khởi động lại.

Làm việc với Công cụ NDB

Để xem cụm thực sự hoạt động như thế nào, hãy tạo một bảng mới với công cụ NDB và chèn một số dữ liệu vào đó. Xin lưu ý để sử dụng chức năng cụm, động cơ phải là NDB. Nếu bạn sử dụng InnoDB (mặc định) hoặc bất kỳ công cụ nào khác ngoài NDB, bạn sẽ không sử dụng cụm.

Đầu tiên, hãy tạo một database có tên là cluster bằng lệnh:

  • CREATE DATABASE cluster;

Tiếp theo, chuyển sang database mới:

  • USE cluster;

Bây giờ, hãy tạo một bảng đơn giản có tên là cluster_test như sau:

  • CREATE TABLE cluster_test (name VARCHAR(20), value VARCHAR(20)) ENGINE=ndbcluster;

Ta đã chỉ định rõ ràng phía trên engine ndbcluster để sử dụng cụm. Tiếp theo, ta có thể bắt đầu chèn dữ liệu bằng một truy vấn như sau:

  • INSERT INTO cluster_test (name,value) VALUES('some_name','some_value');

Để xác minh dữ liệu đã được chèn, hãy chạy một truy vấn chọn lọc như sau:

  • SELECT * FROM cluster_test;

Khi bạn đang chèn và chọn dữ liệu như thế này, bạn đang cân bằng tải các truy vấn của bạn giữa tất cả các node dữ liệu có sẵn, đây là hai nút trong ví dụ của ta . Với việc mở rộng quy mô này, bạn được hưởng lợi cả về độ ổn định và hiệu suất.

Kết luận

Như ta đã thấy trong bài viết này, việc cài đặt một cụm MySQL có thể đơn giản và dễ dàng. Tất nhiên, có nhiều tùy chọn và tính năng nâng cao hơn đáng để làm chủ trước khi đưa cụm vào môi trường production của bạn. Như mọi khi, hãy đảm bảo có một quy trình kiểm tra đầy đủ vì một số vấn đề có thể rất khó giải quyết sau này. Để biết thêm thông tin và đọc thêm, vui lòng truy cập tài liệu chính thức cho cụm MySQL .


Tags:

Các tin liên quan

Cách cài đặt MySQL trên Ubuntu 14.04
2016-03-08
Cơ sở hạ tầng SaltStack: Tạo Salt States cho server database MySQL
2015-10-05
Cách sử dụng Mytop để theo dõi hiệu suất MySQL
2015-08-27
Cách tạo bản hot backup của database MySQL với Percona XtraBackup trên CentOS 7
2015-04-24
Cách tạo bản hot backup của database MySQL với Percona XtraBackup trên Ubuntu 14.04
2015-04-21
Cách chuẩn bị cho việc nâng cấp MySQL 5.7 của bạn
2015-04-20
Cách sử dụng MySQL hoặc MariaDB với Ứng dụng Django của bạn trên Ubuntu 14.04
2015-03-24
Cách sử dụng MySQL với ứng dụng Ruby on Rails của bạn trên Ubuntu 14.04
2015-03-18
Cách sử dụng MySQL với ứng dụng Ruby on Rails của bạn trên CentOS 7
2015-03-17
Cách đo hiệu suất truy vấn MySQL với mysqlslap
2014-10-02