Thứ sáu, 02/09/2016 | 00:00 GMT+7

Cách cấu hình một cụm Galera với MySQL 5.6 trên Ubuntu 16.04

Phân cụm bổ sung tính khả dụng cao cho database của bạn bằng cách phân phối các thay đổi trên các server khác nhau. Trong trường hợp một trong các version không thành công, các version khác đã có sẵn để tiếp tục phục vụ.

Các cụm có hai cấu hình chung, chủ động-bị động và chủ động-tích cực. Trong các cụm chủ động-thụ động, tất cả các quá trình ghi được thực hiện trên một server hoạt động duy nhất và sau đó được sao chép sang một hoặc nhiều server thụ động sẵn sàng tiếp quản chỉ trong trường hợp server hoạt động bị lỗi. Một số cụm chủ động-thụ động cũng cho phép các hoạt động SELECT trên các node thụ động. Trong một cụm đang hoạt động tích cực, mọi nút đều được đọc-ghi và một thay đổi được thực hiện đối với một nút sẽ được sao chép cho tất cả.

Trong hướng dẫn này, ta sẽ cấu hình một cụm MySQL Galera đang hoạt động. Với mục đích demo , ta sẽ cấu hình và kiểm tra ba nút, cụm có thể cấu hình nhỏ nhất.

Yêu cầu

Để làm theo, bạn cần ba server Ubuntu 16.04, mỗi server có:

Khi tất cả các yêu cầu này đã có, ta đã sẵn sàng cài đặt phần mềm.

Bước 1 - Thêm Kho lưu trữ Galera vào Tất cả Server

MySQL, được vá để bao gồm Galera clustering, không có trong repository lưu trữ mặc định của Ubuntu, vì vậy ta sẽ bắt đầu bằng cách thêm các repository Ubuntu bên ngoài được duy trì bởi dự án Galera vào cả ba server của ta .

Lưu ý: Codership, công ty đứng sau Galera Cluster, duy trì repository này, nhưng lưu ý không phải tất cả các repository bên ngoài đều tin cậy . Đảm bảo chỉ cài đặt từ các nguồn tin cậy .

Trên mỗi server , hãy thêm khóa repository bằng apt-key , apt sẽ sử dụng để xác minh các gói là xác thực.

  • sudo apt-key adv --keyserver keyserver.ubuntu.com --recv BC19DDBA

Khi ta có khóa tin cậy trong database của mỗi server , ta có thể thêm các repository . Để làm như vậy, hãy tạo một file mới có tên galera.list trong /etc/apt/sources.list.d/ trên mỗi server :

  • sudo nano /etc/apt/sources.list.d/galera.list

Trong editor , hãy thêm các dòng sau để làm cho các repository thích hợp có sẵn cho trình quản lý gói APT:

/etc/apt/sources.list.d/galera.list
deb http://releases.galeracluster.com/mysql-wsrep-5.6/ubuntu xenial main deb http://releases.galeracluster.com/galera-3/ubuntu xenial main 

Lưu file (nhấn CTRL + X , Y , sau đó ENTER ).

Kho lưu trữ Codership hiện có sẵn cho cả ba server của bạn. Tuy nhiên, điều quan trọng là bạn phải hướng dẫn apt thích các repository của Codership hơn các kho khác đảm bảo rằng nó cài đặt các version vá lỗi của phần mềm cần thiết để tạo một cụm Galera. Để thực hiện việc này, hãy tạo một file mới khác có tên galera.pref trong folder /etc/apt/preferences.d/ :

  • sudo nano /etc/apt/preferences.d/galera.pref

Thêm các dòng sau vào editor :

/etc/apt/preferences.d/galera.pref
# Prefer Codership repository Package: * Pin: origin releases.galeracluster.com Pin-Priority: 1001 

Lưu file đó, sau đó chạy sudo apt-get update để bao gồm các file kê khai gói từ các repository mới:

  • sudo apt-get update

Bạn có thể thấy cảnh báo rằng chữ ký uses weak digest algorithm (SHA1) . Có một vấn đề mở trên GitHub để giải quyết vấn đề này . Trong thời gian chờ đợi, bạn có thể tiếp tục.

Sau khi các kho được cập nhật trên cả ba server , ta đã sẵn sàng cài đặt MySQL và Galera.

Bước 2 - Cài đặt MySQL và Galera trên tất cả các server

Chạy lệnh sau trên cả ba server để cài đặt version MySQL được vá để hoạt động với Galera, cũng như Galera và một số phụ thuộc:

  • sudo apt-get install galera-3 galera-arbitrator-3 mysql-wsrep-5.6

Trong quá trình cài đặt, bạn cần đặt password cho admin-user MySQL.

Ta nên có tất cả các phần cần thiết để bắt đầu cấu hình cụm, nhưng vì ta sẽ dựa vào rsync trong các bước sau, hãy đảm bảo nó cũng được cài đặt trên cả ba:

  • sudo apt-get install rsync

Thao tác này sẽ xác nhận version rsync mới nhất đã có sẵn, nhắc bạn nâng cấp hoặc cài đặt version bạn có.

Khi ta đã cài đặt MySQL trên mỗi server trong ba server , ta có thể bắt đầu cấu hình.

Bước 3 - Cấu hình nút đầu tiên

Mỗi nút trong cụm cần có cấu hình gần giống nhau. Do đó, ta sẽ thực hiện tất cả cấu hình trên máy đầu tiên của bạn , sau đó sao chép nó vào các node khác.

Theo mặc định, MySQL được cấu hình để kiểm tra folder /etc/mysql/conf.d để nhận cài đặt cấu hình bổ sung từ các file kết thúc bằng .cnf . Ta sẽ tạo một file trong folder này với tất cả các lệnh dành riêng cho từng cụm của ta :

  • sudo nano /etc/mysql/conf.d/galera.cnf

Thêm cấu hình sau vào file . Bạn cần thay đổi cài đặt được đánh dấu màu đỏ. Ta sẽ giải thích ý nghĩa của từng phần bên dưới.

/etc/mysql/conf.d/galera.cnf trên nút đầu tiên
[mysqld] binlog_format=ROW default-storage-engine=innodb innodb_autoinc_lock_mode=2 bind-address=0.0.0.0  # Galera Provider Configuration wsrep_on=ON wsrep_provider=/usr/lib/galera/libgalera_smm.so  # Galera Cluster Configuration wsrep_cluster_name="test_cluster" wsrep_cluster_address="gcomm://first_ip,second_ip,third_ip"  # Galera Synchronization Configuration wsrep_sst_method=rsync  # Galera Node Configuration wsrep_node_address="this_node_ip" wsrep_node_name="this_node_name" 
  • Phần đầu tiên sửa đổi hoặc xác nhận lại cài đặt MySQL sẽ cho phép cụm hoạt động chính xác. Ví dụ: Galera Cluster sẽ không hoạt động với MyISAM hoặc các công cụ lưu trữ không giao dịch tương tự và mysqld không được ràng buộc với địa chỉ IP cho localhost. Bạn có thể tìm hiểu chi tiết hơn về các cài đặt trên trang cấu hình hệ thống Galera Cluster.

  • Phần “Cấu hình nhà cung cấp Galera” cấu hình các thành phần MySQL cung cấp API sao chép bộ ghi. Điều này nghĩa là Galera trong trường hợp của ta , vì Galera là một nhà cung cấp wsrep (bản sao bộ ghi). Ta chỉ định các tham số chung để cấu hình môi trường nhân bản ban đầu. Điều này không yêu cầu bất kỳ tùy chỉnh nào, nhưng bạn có thể tìm hiểu thêm về các tùy chọn cấu hình Galera .

  • Phần “Cấu hình cụm Galera” xác định cụm, xác định các thành viên của cụm bằng địa chỉ IP hoặc domain có thể phân giải và tạo tên cho cụm đảm bảo rằng các thành viên tham gia đúng group . Bạn có thể thay đổi wsrep_cluster_name thành một cái gì đó có ý nghĩa hơn test_cluster hoặc giữ nguyên nó, nhưng bạn phải cập nhật wsrep_cluster_address với địa chỉ của ba server của bạn. Nếu server của bạn có địa chỉ IP riêng, hãy sử dụng chúng tại đây.

  • Phần “Cấu hình đồng bộ hóa Galera” xác định cách cụm sẽ giao tiếp và đồng bộ hóa dữ liệu giữa các thành viên. Điều này chỉ được sử dụng để chuyển trạng thái xảy ra khi một nút trực tuyến. Đối với cài đặt ban đầu của ta , ta đang sử dụng rsync , vì nó thường có sẵn và thực hiện những gì ta cần hiện tại.

  • Phần “Cấu hình nút Galera” làm rõ địa chỉ IP và tên của server hiện tại. Điều này rất hữu ích khi cố gắng chẩn đoán sự cố trong log và tham chiếu đến từng server theo nhiều cách. Địa chỉ wsrep_node_address phải trùng với địa chỉ của máy bạn đang sử dụng, nhưng bạn có thể chọn bất kỳ tên nào bạn muốn để giúp bạn xác định nút trong file log .

Khi thấy ổn với file cấu hình cụm của bạn , hãy sao chép nội dung vào clipboard của bạn, sau đó lưu file .

Bây giờ server đầu tiên đã được cấu hình, ta sẽ chuyển sang hai nút tiếp theo.

Bước 4 - Cấu hình các node còn lại

Trên mỗi nút còn lại, hãy mở file cấu hình:

  • sudo nano /etc/mysql/conf.d/galera.cnf

Dán cấu hình bạn đã sao chép từ nút đầu tiên, sau đó cập nhật “Cấu hình nút Galera” để sử dụng địa chỉ IP hoặc domain có thể phân giải cho nút cụ thể mà bạn đang cài đặt . Cuối cùng, cập nhật tên của nó, mà bạn có thể đặt thành bất kỳ thứ gì giúp bạn xác định được nút trong file log của bạn :

/etc/mysql/conf.d/galera.cnf
. . . # Galera Node Configuration wsrep_node_address="this_node_ip" wsrep_node_name="this_node_name" . . . 

Lưu và thoát file trên mỗi server .

Ta gần như đã sẵn sàng để đưa cụm này lên, nhưng trước khi thực hiện, ta sẽ muốn đảm bảo các cổng thích hợp đang mở.

Bước 5 - Mở firewall trên mọi server

Trên mọi server , hãy kiểm tra trạng thái của firewall :

  • sudo ufw status

Trong trường hợp này, chỉ SSH được phép thông qua:

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6)

Bạn có thể có các luật khác hoặc không có luật firewall nào cả. Vì chỉ lưu lượng SSH được cho phép trong trường hợp này, bạn cần thêm luật cho lưu lượng MySQL và Galera.

Galera có thể sử dụng bốn cổng:

  • 3306 được sử dụng cho các kết nối client MySQL và Truyền ảnh chụp trạng thái sử dụng phương thức mysqldump.
  • 4567 được Galera Cluster sử dụng cho lưu lượng nhân bản, bản sao đa hướng sử dụng cả phương thức truyền tải UDP và TCP trên cổng này.
  • 4568 được sử dụng để chuyển trạng thái tăng dần.
  • 4444 được sử dụng cho tất cả các Chuyển giao Ảnh chụp nhanh trạng thái khác.

Trong ví dụ của ta , ta sẽ mở tất cả bốn cổng trong khi ta cài đặt . Khi ta đã xác nhận tính năng sao chép đang hoạt động, ta sẽ đóng bất kỳ cổng nào mà ta không thực sự sử dụng và hạn chế lưu lượng truy cập chỉ đến các server trong cụm.

Mở các cổng bằng lệnh sau:

  • sudo ufw allow 3306,4567,4568,4444/tcp
  • sudo ufw allow 4567/udp

Lưu ý: Tùy thuộc vào những gì khác đang chạy trên server của bạn, bạn có thể cần hạn chế quyền truy cập ngay lập tức. Hướng dẫn Cơ bản về UFW: Luật và lệnh firewall chung có thể giúp bạn thực hiện việc này.

Bước 6 - Khởi động cụm

Để bắt đầu, ta cần dừng dịch vụ MySQL đang chạy để cụm của ta có thể được đưa trực tuyến.

Dừng MySQL trên cả ba Server :

Sử dụng lệnh bên dưới trên cả ba server để dừng mysql để ta có thể đưa chúng trở lại trong một cụm:

  • sudo systemctl stop mysql

systemctl không hiển thị kết quả của tất cả các lệnh quản lý dịch vụ, vì vậy đảm bảo ta đã thành công, hãy chạy lệnh sau:

  • sudo systemctl status mysql

Nếu dòng cuối cùng giống như sau, lệnh đã thành công.

Output
. . . Sep 02 22:17:56 galera-02 systemd[1]: Stopped LSB: start and stop MySQL.

Khi ta đã tắt mysql trên tất cả các server , ta đã sẵn sàng tiếp tục.

Đưa ra Node đầu tiên:

Theo cách ta đã cấu hình cụm của bạn , mỗi nút trực tuyến sẽ cố gắng kết nối với ít nhất một nút khác được chỉ định trong file galera.cnf của nó để có được trạng thái ban đầu. Một systemctl start mysql bình thường sẽ không thành công vì không có nút nào đang chạy cho nút đầu tiên để kết nối, vì vậy ta cần chuyển tham số wsrep-new-cluster cho nút đầu tiên ta bắt đầu. Tuy nhiên, cả systemdservice đều không chấp nhận đối số --wsrep-new-cluster vào lúc này , vì vậy ta cần khởi động nút đầu tiên bằng cách sử dụng tập lệnh khởi động trong /etc/init.d . Khi bạn đã hoàn thành việc này, bạn có thể bắt đầu các node còn lại với systemctl.

Lưu ý: Nếu bạn muốn tất cả chúng được khởi động bằng systemd , khi bạn có một nút khác, bạn có thể hủy nút ban đầu. Vì nút thứ hai có sẵn, khi bạn khởi động lại nút đầu tiên với sudo systemctl start mysql nó sẽ có thể tham gia cụm đang chạy

  • sudo /etc/init.d/mysql start --wsrep-new-cluster

Khi tập lệnh này hoàn thành, nút được đăng ký như một phần của cụm và ta có thể thấy nó bằng lệnh sau:

  • mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
Output
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 1 | +--------------------+-------+

Trên các node còn lại, ta có thể khởi động mysql bình thường. Họ sẽ tìm kiếm bất kỳ thành viên nào trong danh sách cụm đang trực tuyến, vì vậy khi họ tìm thấy một thành viên, họ sẽ tham gia vào group .

Bật nút thứ hai:

Khởi động mysql :

  • sudo systemctl start mysql

Ta sẽ thấy kích thước cụm của bạn tăng lên khi mỗi nút trực tuyến:

  • mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
Output
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 2 | +--------------------+-------+

Đưa lên nút thứ ba:

Khởi động mysql :

  • sudo systemctl start mysql

Nếu mọi thứ hoạt động tốt, kích thước cụm nên được đặt thành ba:

  • mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
Output
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 3 | +--------------------+-------+

Đến đây, toàn bộ cụm phải trực tuyến và giao tiếp. Như vậy, ta có thể kiểm tra sự sao chép giữa mỗi nút của cụm.

Bước 7 - Kiểm tra nhân rộng

Ta đã thực hiện các bước cho đến thời điểm này để cụm của ta có thể thực hiện sao chép từ bất kỳ nút nào sang bất kỳ nút nào khác, được gọi là sao chép hoạt động tích cực. Hãy thử nghiệm để xem liệu bản sao có hoạt động như mong đợi hay không.

Viết cho nút đầu tiên:

Ta sẽ bắt đầu bằng cách áp dụng các thay đổi database trên nút đầu tiên của ta . Các lệnh sau sẽ tạo một database được gọi là playground và một bảng bên trong được gọi là equipment .

  • mysql -u root -p -e 'CREATE DATABASE playground;
  • CREATE TABLE playground.equipment ( id INT NOT NULL AUTO_INCREMENT, type VARCHAR(50), quant INT, color VARCHAR(25), PRIMARY KEY(id));
  • INSERT INTO playground.equipment (type, quant, color) VALUES ("slide", 2, "blue");'

Bây giờ ta có một giá trị trong bảng của ta .

Đọc và Viết trên nút thứ hai:

Tiếp theo, ta sẽ xem xét nút thứ hai để xác minh bản sao đang hoạt động:

  • mysql -u root -p -e 'SELECT * FROM playground.equipment;'

Nếu bản sao đang hoạt động, dữ liệu ta đã nhập trên nút đầu tiên sẽ hiển thị ở đây vào nút thứ hai:

Output
+----+-------+-------+-------+ | id | type | quant | color | +----+-------+-------+-------+ | 1 | slide | 2 | blue | +----+-------+-------+-------+

Từ cùng một nút này, ta có thể ghi dữ liệu vào cụm:

  • mysql -u root -p -e 'INSERT INTO playground.equipment (type, quant, color) VALUES ("swing", 10, "yellow");'

Đọc và Viết trên Nút thứ Ba:

Từ nút thứ ba, ta có thể đọc tất cả dữ liệu này bằng cách truy vấn lại database :

  • mysql -u root -p -e 'SELECT * FROM playground.equipment;'
Output
+----+-------+-------+--------+ | id | type | quant | color | +----+-------+-------+--------+ | 1 | slide | 2 | blue | | 2 | swing | 10 | yellow | +----+-------+-------+--------+

, ta có thể thêm một giá trị khác từ nút này:

  • mysql -u root -p -e 'INSERT INTO playground.equipment (type, quant, color) VALUES ("seesaw", 3, "green");'

Đọc trên Nút đầu tiên:

Quay lại nút đầu tiên, ta có thể xác minh dữ liệu của ta có sẵn ở mọi nơi:

  • mysql -u root -p -e 'SELECT * FROM playground.equipment;'
Output
+----+--------+-------+--------+ | id | type | quant | color | +----+--------+-------+--------+ | 1 | slide | 2 | blue | | 2 | swing | 10 | yellow | | 3 | seesaw | 3 | green | +----+--------+-------+--------+

Ta đã thử nghiệm, ta có thể ghi vào tất cả các node và việc sao chép đang được thực hiện đúng cách.

Kết luận

Đến đây, bạn sẽ có một cụm kiểm tra Galera ba nút đang hoạt động được cấu hình . Nếu bạn dự định sử dụng một cụm Galera trong tình huống production , bạn nên bắt đầu với không ít hơn năm nút.

Trước khi sử dụng production , bạn có thể cần xem xét một số tác nhân truyền ảnh chụp nhanh trạng thái khác (sst) như “xtrabackup” cho phép bạn cài đặt các node mới rất nhanh chóng và không bị gián đoạn lớn đối với các node đang hoạt động của bạn. Điều này không ảnh hưởng thực tế sao chép, nhưng là một mối quan tâm khi các node đang được khởi tạo. Cuối cùng, để bảo vệ dữ liệu khi dữ liệu di chuyển giữa các server , bạn cũng nên cài đặt mã hóa SSL .


Tags:

Các tin liên quan

Cách di chuyển thư mục dữ liệu MySQL đến vị trí mới trên Ubuntu 16.04
2016-07-21
Cách tạo một cụm MySQL nhiều node trên Ubuntu 16.04
2016-06-17
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