Thứ năm, 13/04/2017 | 00:00 GMT+7

Cách cấu hình sao chép nhóm MySQL trên Ubuntu 16.04

Bản sao MySQL phản chiếu dữ liệu và hoạt động từ database này sang database khác một cách tin cậy . Sao chép thông thường liên quan đến một server chính được cấu hình để chấp nhận các hoạt động ghi database với các server thứ cấp sao chép và áp dụng các hành động từ log của server chính vào tập dữ liệu của riêng chúng. Các server phụ này được dùng để đọc, nhưng thường không thể thực hiện ghi dữ liệu.

Nhân rộng group là một cách thực hiện một cơ chế sao chép linh hoạt hơn, chịu được lỗi. Quá trình này liên quan đến việc cài đặt một group các server , mỗi server đều tham gia vào việc đảm bảo dữ liệu được sao chép chính xác. Nếu server chính gặp sự cố, các cuộc bầu cử thành viên có thể chọn một bầu cử sơ bộ mới từ group . Điều này cho phép các node còn lại tiếp tục hoạt động, ngay cả khi gặp sự cố. Thương lượng thành viên, phát hiện lỗi và gửi thông báo được cung cấp thông qua việc triển khai thuật toán Paxos concensus .

Trong hướng dẫn này, ta sẽ cài đặt nhân rộng group MySQL bằng cách sử dụng bộ ba server Ubuntu 16.04. Cấu hình sẽ bao gồm cách vận hành một group nhân bản chính hoặc nhiều group chính.

Yêu cầu

Để làm theo, bạn cần một group ba server Ubuntu 16.04. Trên mỗi server này, bạn cần cài đặt user không phải root có quyền sudo và cấu hình firewall cơ bản. Ta sẽ sử dụng hướng dẫn cài đặt server ban đầu cho Ubuntu 16.04 để đáp ứng các yêu cầu này và đưa từng server vào trạng thái sẵn sàng.

Phiên bản MySQL trong repository lưu trữ mặc định của Ubuntu không bao gồm plugin sao chép group mà ta yêu cầu. Rất may, dự án MySQL duy trì repository của riêng họ cho version MySQL mới nhất bao gồm thành phần này. Làm theo hướng dẫn của ta về cách cài đặt MySQL mới nhất trên Ubuntu 16.04 để cài đặt version MySQL có khả năng sao chép group trên mỗi server .

Tạo UUID để xác định group MySQL

Trước khi mở file cấu hình MySQL để cấu hình cài đặt sao chép group , ta cần tạo một UUID mà ta có thể sử dụng để xác định group MySQL mà ta sẽ tạo.

Trên mysqlmember1 , sử dụng lệnh uuidgen để tạo UUID hợp lệ cho group :

  • uuidgen
Output
959cf631-538c-415d-8164-ca00181be227

Sao chép giá trị bạn nhận được. Ta sẽ phải tham khảo điều này trong giây lát khi cấu hình tên group cho group server của ta .

Cài đặt nhân rộng group trong file cấu hình MySQL

Bây giờ ta đã sẵn sàng để sửa đổi file cấu hình của MySQL. Mở file cấu hình MySQL chính trên mỗi server MySQL :

  • sudo nano /etc/mysql/my.cnf

Theo mặc định, file này chỉ được sử dụng để tạo nguồn cho các file bổ sung từ các folder con. Ta sẽ phải thêm cấu hình của riêng mình bên dưới dòng !includedir Includeir. Điều này cho phép ta dễ dàng overrides cài đặt nào từ các file được bao gồm.

Để bắt đầu, hãy mở một phần cho các thành phần server MySQL bằng cách bao gồm tiêu đề [mysqld] . Bên dưới cái này, ta sẽ dán các cài đặt ta cần để nhân rộng group . Tiền tố loose- cho phép MySQL xử lý các tùy chọn mà nó không nhận ra một cách duyên dáng mà không bị lỗi. Ta cần điền và tùy chỉnh nhiều cài đặt này trong giây lát:

/etc/mysql/my.cnf
. . . !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/  [mysqld]  # General replication settings gtid_mode = ON enforce_gtid_consistency = ON master_info_repository = TABLE relay_log_info_repository = TABLE binlog_checksum = NONE log_slave_updates = ON log_bin = binlog binlog_format = ROW transaction_write_set_extraction = XXHASH64 loose-group_replication_bootstrap_group = OFF loose-group_replication_start_on_boot = OFF loose-group_replication_ssl_mode = REQUIRED loose-group_replication_recovery_use_ssl = 1  # Shared replication group configuration loose-group_replication_group_name = "" loose-group_replication_ip_whitelist = "" loose-group_replication_group_seeds = ""  # Single or Multi-primary mode? Uncomment these two lines # for multi-primary mode, where any host can accept writes #loose-group_replication_single_primary_mode = OFF #loose-group_replication_enforce_update_everywhere_checks = ON  # Host specific replication configuration server_id =  bind-address = "" report_host = "" loose-group_replication_local_address = "" 

Ta đã chia cấu hình ở trên thành bốn phần. Hãy xem qua chúng ngay bây giờ.

Boilerplate Group Replication Settings

Phần đầu tiên chứa các cài đặt chung cần thiết để nhân rộng group mà không cần sửa đổi:

/etc/mysql/my.cnf
. . . # General replication settings gtid_mode = ON enforce_gtid_consistency = ON master_info_repository = TABLE relay_log_info_repository = TABLE binlog_checksum = NONE log_slave_updates = ON log_bin = binlog binlog_format = ROW transaction_write_set_extraction = XXHASH64 loose-group_replication_bootstrap_group = OFF loose-group_replication_start_on_boot = OFF loose-group_replication_ssl_mode = REQUIRED loose-group_replication_recovery_use_ssl = 1 . . . 

Các cài đặt này bật ID giao dịch global , cấu hình ghi log binary cần thiết để nhân rộng group và cấu hình SSL cho group . Cấu hình cũng cài đặt một vài mục khác hỗ trợ khôi phục và khởi động. Bạn không cần phải sửa đổi bất cứ điều gì trong phần này, vì vậy bạn có thể tiếp tục sau khi dán nó vào.

Cài đặt sao chép group được chia sẻ

Phần thứ hai cài đặt cài đặt chia sẻ cho group . Ta sẽ phải tùy chỉnh điều này một lần và sau đó sử dụng các cài đặt tương tự trên mỗi nút của ta . Điều này bao gồm UUID cho group , danh sách trắng gồm các thành viên được chấp nhận và các thành viên hạt giống cần liên hệ để lấy dữ liệu ban đầu.

Đặt loose-group_replication_group_name thành UUID bạn đã tạo trước đó bằng lệnh uuidgen . Dán UUID bạn đã sao chép làm giá trị cho biến này.

Tiếp theo, đặt danh sách loose-group_replication_ip_whitelist thành danh sách tất cả các địa chỉ IP server MySQL của bạn, được phân tách bằng dấu phẩy. Cài đặt loose-group_replication_group_seeds phải gần giống với danh sách trắng, nhưng phải thêm cổng sao chép group mà ta sẽ sử dụng vào cuối mỗi thành viên. Đối với hướng dẫn này, ta sẽ sử dụng cổng được khuyến khích là 33061 để nhân rộng group :

/etc/mysql/my.cnf
. . . # Shared replication group configuration loose-group_replication_group_name = "959cf631-538c-415d-8164-ca00181be227" loose-group_replication_ip_whitelist = "203.0.113.1,203.0.113.2,203.0.113.3" loose-group_replication_group_seeds = ""203.0.113.1:33061,203.0.113.2:33061,203.0.113.3:33061" . . . 

Phần này phải giống nhau trên mỗi server MySQL của bạn, vì vậy hãy đảm bảo sao chép nó cẩn thận.

Chọn một chính hoặc nhiều chính

Tiếp theo, bạn cần quyết định cấu hình một group chính hay nhiều group chính. Trong một số phần của tài liệu MySQL chính thức, sự khác biệt này còn gọi là sao chép “đơn” so với “đa chủ”. Trong một cấu hình chính duy nhất, MySQL chỉ định một server chính duy nhất (hầu như luôn là thành viên group đầu tiên) để xử lý các hoạt động ghi. Một group đa chính cho phép ghi vào bất kỳ thành viên nào trong group .

Nếu bạn muốn cấu hình một group đa tiểu học, bỏ ghi chú các loose-group_replication_single_primary_modeloose-group_replication_enforce_update_everywhere_checks chỉ thị. Điều này sẽ cài đặt một group nhiều chính. Đối với một group chính, chỉ cần để lại hai dòng comment :

/etc/mysql/my.cnf
. . . # Single or Multi-primary mode? Uncomment these two lines # for multi-primary mode, where any host can accept writes #loose-group_replication_single_primary_mode = OFF #loose-group_replication_enforce_update_everywhere_checks = ON . . . 

Các cài đặt này phải giống nhau trên mỗi server MySQL của bạn.

Bạn có thể thay đổi cài đặt này sau đó, nhưng không phải không khởi động lại group MySQL của bạn. Để thay đổi cấu hình mới, bạn sẽ phải dừng từng cá thể MySQL trong group , khởi động từng thành viên với cài đặt mới, sau đó khởi động lại quá trình nhân rộng group . Điều này sẽ không ảnh hưởng đến bất kỳ dữ liệu nào của bạn, nhưng yêu cầu một khoảng thời gian ngừng hoạt động nhỏ.

Cài đặt cấu hình dành riêng cho server lưu trữ

Phần thứ tư chứa các cài đặt sẽ khác nhau trên mỗi server , bao gồm:

  • ID server
  • Địa chỉ để liên kết
  • Địa chỉ để báo cáo cho các thành viên khác
  • Địa chỉ bản sao local và cổng lắng nghe

Chỉ thị server_id phải được đặt thành một số duy nhất. Đối với thành viên đầu tiên, chỉ cần đặt giá trị này thành “1” và tăng số lượng trên mỗi server bổ sung. Đặt bind-addressreport_host thành địa chỉ IP của server hiện tại để version MySQL sẽ lắng nghe các kết nối bên ngoài và báo cáo chính xác địa chỉ của nó cho các server khác. loose-group_replication_local_address cũng phải được đặt thành địa chỉ IP của server hiện tại với cổng sao chép group (33061), được nối vào địa chỉ IP:

/etc/mysql/my.cnf
. . . # Host specific replication configuration server_id = 1 bind-address = "203.0.113.1" report_host = "203.0.113.1" loose-group_replication_local_address = "203.0.113.1:33061" 

Hoàn thành quá trình này trên mỗi server MySQL của bạn.

Khi bạn hoàn tất, hãy kiểm tra kỹ xem cài đặt sao chép được chia sẻ có giống nhau trên mỗi server lưu trữ và các cài đặt dành riêng cho server lưu trữ có được tùy chỉnh cho từng server lưu trữ hay không. Lưu file trên từng server khi bạn hoàn tất.

Khởi động lại MySQL và cho phép truy cập từ xa

Tệp cấu hình MySQL của ta hiện chứa các chỉ thị cần thiết để khởi động sao chép group MySQL. Để áp dụng cài đặt mới cho version MySQL, hãy khởi động lại dịch vụ trên từng server của bạn bằng lệnh sau:

  • sudo systemctl restart mysql

Trong file cấu hình MySQL, ta đã cấu hình dịch vụ để lắng nghe các kết nối bên ngoài trên cổng mặc định 3306. Ta cũng định nghĩa 33061 là cổng mà các thành viên nên sử dụng để phối hợp sao chép.

Ta cần mở quyền truy cập vào hai cổng này trong firewall của bạn , ta có thể thực hiện bằng lệnh :

  • sudo ufw allow 33061
  • sudo ufw allow 3306

Với quyền truy cập vào các cổng MySQL đang mở, ta có thể tạo một user nhân bản và kích hoạt plugin nhân bản group .

Cấu hình user sao chép và bật plugin sao chép group

Trên mỗi server MySQL của bạn , đăng nhập vào version MySQL của bạn với admin-user để bắt đầu một phiên tương tác:

  • mysql -u root -p

Bạn sẽ được yêu cầu nhập password quản trị MySQL. Sau đó, bạn sẽ được đưa vào một phiên MySQL. Điều đầu tiên ta cần làm là tạo một user nhân rộng.

Một user sao chép được yêu cầu trên mỗi server để cài đặt nhân rộng group . Bởi vì mỗi server sẽ có user nhân bản riêng của nó, ta cần tắt ghi log binary trong quá trình tạo. Nếu không, khi quá trình nhân bản bắt đầu, group sẽ cố gắng truyền user sao chép từ server chính sang các server khác, tạo ra xung đột với user sao chép đã có.

Ta sẽ yêu cầu SSL cho user sao chép, cấp cho họ các quyền sao chép trên server , sau đó xóa các quyền để áp dụng các thay đổi . Sau đó, ta sẽ bật lại ghi log binary để tiếp tục hoạt động bình thường. Đảm bảo sử dụng password an toàn khi tạo user sao chép:

  • SET SQL_LOG_BIN=0;
  • CREATE USER 'repl'@'%' IDENTIFIED BY 'password' REQUIRE SSL;
  • GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
  • FLUSH PRIVILEGES;
  • SET SQL_LOG_BIN=1;

Tiếp theo, ta cần đặt kênh group_replication_recovery để sử dụng user nhân bản mới của ta và password được liên kết. Mỗi server sau đó sẽ sử dụng các thông tin đăng nhập này để xác thực cho group .

  • CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='password' FOR CHANNEL 'group_replication_recovery';

Với user sao chép tại chỗ, ta có thể bật plugin sao chép group để chuẩn bị khởi tạo group . Vì ta đang sử dụng version MySQL mới nhất, ta có thể bật plugin bằng lệnh :

  • INSTALL PLUGIN group_replication SONAME 'group_replication.so';

Xác minh plugin đang hoạt động bằng lệnh :

  • SHOW PLUGINS;
Output
+----------------------------+----------+--------------------+----------------------+---------+ | Name | Status | Type | Library | License | +----------------------------+----------+--------------------+----------------------+---------+ | | | | | | | . . . | . . . | . . . | . . . | . . . | | | | | | | | group_replication | ACTIVE | GROUP REPLICATION | group_replication.so | GPL | +----------------------------+----------+--------------------+----------------------+---------+ 45 rows in set (0.00 sec)

Hàng group_replication xác nhận plugin đã được tải và hiện đang hoạt động.

Bắt đầu sao chép group

Bây giờ mỗi server MySQL đã được cấu hình một user nhân bản và plugin nhân bản group được kích hoạt, ta có thể bắt đầu khởi động group của bạn .

Bootstrap First Node

Để bắt đầu group , hãy hoàn thành các bước sau đối với một thành viên của group .

Các thành viên trong group dựa vào các thành viên hiện có để gửi dữ liệu nhân rộng, danh sách thành viên cập nhật và các thông tin khác khi tham gia group lần đầu. Do đó, ta cần sử dụng một quy trình hơi khác để khởi động thành viên group ban đầu để nó biết rằng không mong đợi thông tin này từ các thành viên khác trong danh sách hạt giống của nó.

Nếu được đặt, biến group_replication_bootstrap_group cho một thành viên biết rằng nó không nên mong đợi nhận thông tin từ các đồng nghiệp và thay vào đó nên thành lập một group mới và tự chọn mình làm thành viên chính. Vì tình huống duy nhất thích hợp là khi không có thành viên group hiện có, ta sẽ tắt chức năng này ngay sau khi khởi động group :

  • SET GLOBAL group_replication_bootstrap_group=ON;
  • START GROUP_REPLICATION;
  • SET GLOBAL group_replication_bootstrap_group=OFF;

Group phải được bắt đầu với server này là thành viên duy nhất. Ta có thể xác minh điều này bằng cách kiểm tra các mục nhập trong bảng replication_group_members trong database performance_schema :

  • SELECT * FROM performance_schema.replication_group_members;

Bạn sẽ thấy một hàng duy nhất đại diện cho server hiện tại:

Output
+---------------------------+--------------------------------------+--------------+-------------+--------------+ | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | +---------------------------+--------------------------------------+--------------+-------------+--------------+ | group_replication_applier | 13324ab7-1b01-11e7-9dd1-22b78adaa992 | 203.0.113.1 | 3306 | ONLINE | +---------------------------+--------------------------------------+--------------+-------------+--------------+ 1 row in set (0.00 sec)

Giá trị ONLINE cho MEMBER_STATE cho biết rằng nút này đang hoạt động hoàn toàn trong group .

Tiếp theo, tạo database thử nghiệm và bảng để kiểm tra bản sao của ta :

  • 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");

Kiểm tra nội dung đảm bảo rằng nó đã được nhập chính xác:

  • SELECT * FROM playground.equipment;
Output
+----+-------+-------+-------+ | id | type | quant | color | +----+-------+-------+-------+ | 1 | slide | 2 | blue | +----+-------+-------+-------+ 1 row in set (0.00 sec)

Hiện ta đã xác minh server này là một thành viên của group và nó có khả năng ghi. Bây giờ các server khác có thể tham gia group .

Khởi động các node còn lại

Tiếp theo, trên server thứ hai , bắt đầu nhân rộng group . Vì ta đã có một thành viên tích cực, ta không cần khởi động group và chỉ có thể tham gia group đó:

  • START GROUP_REPLICATION;

Trên server thứ ba , bắt đầu sao chép group theo cùng một cách:

  • START GROUP_REPLICATION;

Kiểm tra lại danh sách thành viên. Bạn sẽ thấy ba server bây giờ:

  • SELECT * FROM performance_schema.replication_group_members;
Output
+---------------------------+--------------------------------------+--------------+-------------+--------------+ | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | +---------------------------+--------------------------------------+--------------+-------------+--------------+ | group_replication_applier | 13324ab7-1b01-11e7-9dd1-22b78adaa992 | 203.0.113.1 | 3306 | ONLINE | | group_replication_applier | 1ae4b211-1b01-11e7-9d89-ceb93e1d5494 | 203.0.113.2 | 3306 | ONLINE | | group_replication_applier | 157b597a-1b01-11e7-9d83-566a6de6dfef | 203.0.113.3 | 3306 | ONLINE | +---------------------------+--------------------------------------+--------------+-------------+--------------+ 3 rows in set (0.01 sec)

Tất cả các thành viên phải có giá trị MEMBER_STATEONLINE . Đối với một group mới, nếu bất kỳ nút nào được liệt kê là đang RECOVERING trong hơn một hoặc hai giây, thì đó thường là dấu hiệu cho thấy lỗi đã xảy ra hoặc một cái gì đó đã được cấu hình sai. Kiểm tra log tại /var/log/mysql/error.log để biết thêm thông tin về những gì đã xảy ra.

Kiểm tra xem liệu thông tin database thử nghiệm đã được sao chép trên các thành viên mới hay chưa:

  • SELECT * FROM playground.equipment;
Output
+----+-------+-------+-------+ | id | type | quant | color | +----+-------+-------+-------+ | 1 | slide | 2 | blue | +----+-------+-------+-------+ 1 row in set (0.01 sec)

Nếu dữ liệu có sẵn trên các thành viên mới, điều đó nghĩa là bản sao group đang hoạt động chính xác.

Kiểm tra khả năng ghi của các thành viên group mới

Tiếp theo, ta có thể thử ghi vào database từ các thành viên mới của ta . Điều này có thành công hay không là do bạn chọn cấu hình một group chính hay nhiều group chính.

Kiểm tra ghi trong một môi trường chính duy nhất

Trong một group chính duy nhất, bạn nên mong đợi mọi hoạt động ghi từ server không phải chính sẽ bị từ chối vì lý do nhất quán. Bạn có thể khám phá account chính hiện tại bất kỳ lúc nào với truy vấn sau:

  • SHOW STATUS LIKE '%primary%';
Output
+----------------------------------+--------------------------------------+ | Variable_name | Value | +----------------------------------+--------------------------------------+ | group_replication_primary_member | 13324ab7-1b01-11e7-9dd1-22b78adaa992 | +----------------------------------+--------------------------------------+ 1 row in set (0.01 sec)

Giá trị của truy vấn sẽ là MEMBER_ID mà bạn có thể đối sánh với server lưu trữ bằng cách truy vấn danh sách thành viên group như ta đã làm trước đây:

  • SELECT * FROM performance_schema.replication_group_members;
Output
+---------------------------+--------------------------------------+--------------+-------------+--------------+ | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | +---------------------------+--------------------------------------+--------------+-------------+--------------+ | group_replication_applier | 13324ab7-1b01-11e7-9dd1-22b78adaa992 | 203.0.113.1 | 3306 | ONLINE | | group_replication_applier | 1ae4b211-1b01-11e7-9d89-ceb93e1d5494 | 203.0.113.2 | 3306 | ONLINE | | group_replication_applier | 157b597a-1b01-11e7-9d83-566a6de6dfef | 203.0.113.3 | 3306 | ONLINE | +---------------------------+--------------------------------------+--------------+-------------+--------------+ 3 rows in set (0.01 sec)

Trong ví dụ này, ta có thể thấy rằng server tại 203.0.113.1 hiện là server chính. Nếu ta cố gắng ghi vào database từ một thành viên khác, ta sẽ mong đợi hoạt động không thành công:

  • INSERT INTO playground.equipment (type, quant, color) VALUES ("swing", 10, "yellow");
Output
ERROR 1290 (HY000): The MySQL server is running with the --super-read-only option so it cannot execute this statement

Điều này được mong đợi vì group hiện được cấu hình với một group chính có khả năng ghi. Nếu server chính gặp sự cố và rời khỏi group , group sẽ tự động bầu một thành viên mới làm thành viên chính và chấp nhận ghi.

Kiểm tra ghi trong môi trường đa chính

Đối với các group đã được cấu hình theo hướng đa chính, bất kỳ thành viên nào cũng có thể commit ghi vào database .

Bạn có thể kiểm tra kỹ xem group của bạn có đang hoạt động ở chế độ đa chính hay không bằng cách kiểm tra lại giá trị của biến group_replication_primary_member :

  • SHOW STATUS LIKE '%primary%';
Output
+----------------------------------+-------+ | Variable_name | Value | +----------------------------------+-------+ | group_replication_primary_member | | +----------------------------------+-------+ 1 row in set (0.02 sec)

Nếu biến trống, điều này nghĩa là không có server chính được chỉ định và bất kỳ thành viên nào cũng có thể chấp nhận ghi.

Kiểm tra điều này trên server thứ hai của bạn bằng lệnh :

  • INSERT INTO playground.equipment (type, quant, color) VALUES ("swing", 10, "yellow");
Output
Query OK, 1 row affected (0.00 sec)

Server thứ hai commit hoạt động ghi mà không có bất kỳ lỗi nào.

Trên server thứ ba , hãy truy vấn để xem mục mới đã được thêm vào:

  • SELECT * FROM playground.equipment;
Output
+----+-------+-------+--------+ | id | type | quant | color | +----+-------+-------+--------+ | 1 | slide | 2 | blue | | 2 | swing | 10 | yellow | +----+-------+-------+--------+ 2 rows in set (0.00 sec)

Điều này xác nhận ghi của server thứ hai đã được sao chép thành công.

Bây giờ, hãy kiểm tra khả năng ghi trên server thứ ba bằng lệnh :

  • INSERT INTO playground.equipment (type, quant, color) VALUES ("seesaw", 3, "green");
Output
Query OK, 1 row affected (0.02 sec)

Quay lại server đầu tiên , kiểm tra đảm bảo rằng các hoạt động ghi từ cả hai thành viên mới đã được sao chép trở lại:

  • SELECT * FROM playground.equipment;
Output
+----+--------+-------+--------+ | id | type | quant | color | +----+--------+-------+--------+ | 1 | slide | 2 | blue | | 2 | swing | 10 | yellow | | 3 | seesaw | 3 | green | +----+--------+-------+--------+ 3 rows in set (0.01 sec)

Điều này xác nhận bản sao đang hoạt động theo từng hướng và mỗi thành viên có khả năng thực hiện các thao tác ghi.

Đưa group trở lại

Sau khi group được khởi động, các thành viên riêng lẻ có thể tham gia và rời đi mà không ảnh hưởng đến tính khả dụng, miễn là có đủ thành viên để chọn server chính. Tuy nhiên, nếu các thay đổi cấu hình nhất định được thực hiện (như chuyển đổi giữa các môi trường đơn và nhiều môi trường chính) hoặc tất cả các thành viên của group rời đi, bạn có thể cần khởi động lại group . Bạn làm điều này theo cách giống hệt như cách bạn đã làm lúc đầu.

Trên server đầu tiên của bạn, hãy đặt biến group_replciation_bootstrap_group và sau đó bắt đầu khởi tạo group :

  • SET GLOBAL GROUP_REPLICATION_BOOTSTRAP_GROUP=ON;
  • START GROUP_REPLICATION;
  • SET GLOBAL GROUP_REPLICATION_BOOTSTRAP_GROUP=OFF;

Khi thành viên đầu tiên đã bắt đầu group , các thành viên khác có thể tham gia:

  • START GROUP_REPLICATION;

Làm theo quy trình này để có thêm thành viên:

  • START GROUP_REPLICATION;

Group bây giờ sẽ trực tuyến với tất cả các thành viên có sẵn:

  • SELECT * FROM performance_schema.replication_group_members;
Output
+---------------------------+--------------------------------------+--------------+-------------+--------------+ | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | +---------------------------+--------------------------------------+--------------+-------------+--------------+ | group_replication_applier | 13324ab7-1b01-11e7-9dd1-22b78adaa992 | 203.0.113.1 | 3306 | ONLINE | | group_replication_applier | 1ae4b211-1b01-11e7-9d89-ceb93e1d5494 | 203.0.113.2 | 3306 | ONLINE | | group_replication_applier | 157b597a-1b01-11e7-9d83-566a6de6dfef | 203.0.113.3 | 3306 | ONLINE | +---------------------------+--------------------------------------+--------------+-------------+--------------+ 3 rows in set (0.01 sec)

Quá trình này được dùng để bắt đầu lại group khi nào cần thiết.

Tham gia group tự động khi MySQL bắt đầu

Với cài đặt hiện tại, nếu server thành viên khởi động lại, nó sẽ không tự động tham gia lại group khi khởi động. Nếu bạn muốn các thành viên tự động tham gia lại group , bạn có thể sửa đổi file cấu hình một chút.

Cài đặt ta sẽ phác thảo rất hữu ích khi bạn muốn các thành viên tự động tham gia khi họ khởi động. Tuy nhiên, có một số điều bạn cần lưu ý:

Đầu tiên, cài đặt này chỉ ảnh hưởng khi bản thân version MySQL được khởi động. Nếu thành viên bị xóa khỏi group vì vấn đề thời gian chờ, nhưng version MySQL vẫn trực tuyến, thành viên sẽ không tự động tham gia lại.

Thứ hai, việc bật cài đặt này khi khởi động group lần đầu tiên có thể có hại. Khi không có một group hiện có nào để tham gia, quá trình MySQL sẽ mất nhiều thời gian để bắt đầu vì nó sẽ cố gắng liên hệ với các thành viên khác, không tồn tại để khởi tạo. Chỉ sau một khoảng thời gian dài, nó sẽ từ bỏ và bắt đầu lại bình thường. Sau đó, bạn sẽ phải sử dụng quy trình nêu trên để khởi động group .

Với những lưu ý ở trên, nếu bạn muốn cấu hình các node tham gia group tự động khi MySQL khởi động, hãy mở file cấu hình MySQL chính:

  • sudo nano /etc/mysql/my.cnf

Bên trong, tìm biến loose-group_replication_start_on_boot và đặt nó thành “ON”:

/etc/mysql/my.cnf
 [mysqld] . . . loose-group_replication_start_on_boot = ON . . . 

Lưu file khi bạn hoàn tất. Thành viên sẽ tự động cố gắng tham gia group vào lần tiếp theo version MySQL của nó được khởi động.

Kết luận

Trong hướng dẫn này, ta đã trình bày cách cấu hình sao chép group MySQL giữa ba server Ubuntu 16.04. Đối với các cài đặt chính duy nhất, các thành viên sẽ tự động chọn một cài đặt chính có khả năng ghi khi cần thiết. Đối với nhiều group chính, bất kỳ thành viên nào cũng có thể thực hiện ghi và cập nhật.

Nhân rộng group cung cấp cấu trúc liên kết sao chép linh hoạt cho phép các thành viên tham gia hoặc rời đi theo ý muốn đồng thời cung cấp đảm bảo về tính nhất quán của dữ liệu và thứ tự thông điệp. Việc sao chép group MySQL có thể phức tạp hơn một chút để cấu hình, nhưng nó cung cấp các khả năng không thể có trong sao chép truyền thống.


Tags:

Các tin liên quan

Cách cài đặt MySQL mới nhất trên Ubuntu 16.04
2017-04-06
Cách cấu hình SSL / TLS cho MySQL trên Ubuntu 16.04
2017-03-20
Cách Import, Export database trong MySQL hoặc MariaDB
2016-12-21
Cách thay đổi thư mục dữ liệu MySQL sang vị trí mới trên CentOS 7
2016-12-19
Cách thay đổi thư mục dữ liệu MySQL sang vị trí mới bằng cách sử dụng liên kết biểu tượng
2016-12-02
Cách cài đặt MySQL trên CentOS 7
2016-12-01
Cách cài đặt MySQL trên Ubuntu 16.04
2016-11-23
Cách kết nối với server MySQL từ xa bằng MySQL Workbench
2016-10-21
Cách cấu hình một cụm Galera với MySQL 5.6 trên Ubuntu 16.04
2016-09-02
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