Thứ hai, 16/12/2019 | 00:00 GMT+7

Cách cấu hình Cụm Galera với MySQL trên server Ubuntu 18.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 cho 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 sẽ nhanh chóng có mặt để 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ả.

MySQL là một hệ quản trị database quan hệ open-souce là một lựa chọn phổ biến cho cơ sở dữ liệu SQL . Galera là một giải pháp phân cụm database cho phép bạn cài đặt các cụm đa tổng thể bằng cách sử dụng sao chép đồng bộ. Galera tự động xử lý việc giữ đồng bộ dữ liệu trên các node khác nhau trong khi cho phép bạn gửi các truy vấn đọc và ghi tới bất kỳ nút nào trong cụm. Bạn có thể tìm hiểu thêm về Galera tại trang tài liệu chính thức.

Trong hướng dẫn này, bạn sẽ cấu hình một cụm MySQL Galera đang hoạt động. Với mục đích demo , bạn sẽ cấu hình và kiểm tra ba server Ubuntu 18.04 sẽ hoạt động như các node trong cụm. Số lượng nút này là cụm có thể cấu hình nhỏ nhất.

Yêu cầu

Để làm theo, bạn cần một tài khoản DigitalOcean , ngoài những thứ sau:

Mặc dù các bước trong hướng dẫn này đã được viết và thử nghiệm dựa trên các server DigitalOcean, nhưng phần lớn trong số chúng cũng sẽ được áp dụng cho các server không phải DigitalOcean có bật mạng riêng.

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

Trong bước này, bạn sẽ thêm các repository MySQL và Galera có liên quan vào từng server trong số ba server của bạn để bạn có thể cài đặt đúng version MySQL và Galera được sử dụng trong hướng dẫn này.

Lưu ý: Codership , công ty đứng sau Galera Cluster, duy trì repository Galera, 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 .

Trong hướng dẫn này, bạn sẽ sử dụng MySQL version 5.7 . Bạn sẽ bắt đầu bằng cách thêm repository Ubuntu bên ngoài được duy trì bởi dự án Galera vào cả ba server của bạn.

Khi repository được cập nhật trên cả ba server , bạn sẽ sẵn sàng cài đặt MySQL cùng với Galera.

Trước tiên, trên cả ba server của bạn, hãy thêm khóa repository Galera bằng apt-key , mà trình quản lý gói APT sẽ sử dụng để xác minh gói đó là xác thực:

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

Sau một vài giây, bạn sẽ nhận được kết quả sau:

Output
Executing: /tmp/apt-key-gpghome.RG5cTZjQo0/gpg.1.sh --keyserver keyserver.ubuntu.com --recv BC19DDBA gpg: key D669017EBC19DDBA: public key "Codership Oy <info@galeracluster.com>" imported gpg: Total number processed: 1 gpg: imported: 1

Khi bạn có khóa tin cậy trong database của mỗi server , bạn 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 folder /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, điều này sẽ cung cấp các repository thích hợp cho trình quản lý gói APT:

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

Lưu file trên mỗi server (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/ của mỗi server :

  • 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 lệnh sau trên mỗi server để bao gồm các file kê khai gói từ các repository mới:

  • sudo apt update

Đến đây bạn đã thêm thành công repository trên cả ba server của bạn , bạn đã sẵn sàng cài đặt MySQL trong phần tiếp theo.

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

Trong bước này, bạn sẽ cài đặt gói MySQL trên ba server của bạn .

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ư gói Galera.

  • sudo apt install galera-3 mysql-wsrep-5.7

Bạn cần xác nhận xem bạn có muốn tiếp tục cài đặt hay không. Nhập Y để tiếp tục cài đặt. Trong quá trình cài đặt, bạn cần đặt password cho admin-user MySQL. Đặt password mạnh và nhấn ENTER để tiếp tục.

Sau khi MySQL được cài đặt, bạn sẽ tắt cấu hình AppArmor mặc định đảm bảo rằng Galera hoạt động bình thường, theo tài liệu chính thức của Galera . AppArmor là một module nhân cho Linux cung cấp chức năng kiểm soát truy cập cho các dịch vụ thông qua các cấu hình bảo mật.

Tắt AppArmor bằng cách thực hiện các thao tác sau trên mỗi server :

  • sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/

Lệnh này thêm một softlink của profile MySQL vào folder disable , vô hiệu hóa profile khi khởi động.

Sau đó, chạy lệnh sau để xóa định nghĩa MySQL đã được tải trong kernel .

  • sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld

Khi bạn đã cài đặt MySQL và tắt cấu hình AppArmor trên server đầu tiên của bạn , hãy lặp lại các bước này cho hai server khác của bạn.

Đến đây bạn đã cài đặt MySQL thành công trên mỗi server trong số ba server , bạn có thể tiến hành bước cấu hình trong phần tiếp theo.

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

Trong bước này, bạn sẽ cấu hình nút đầu tiên của bạn . Mỗi nút trong cụm cần có cấu hình gần giống nhau. Vì điều này, bạn 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ó sang 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 . Trên server đầu tiên của bạn, hãy tạo một file trong folder này với tất cả các lệnh dành riêng cho cụm của bạn:

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

Thêm cấu hình sau vào file . Cấu hình chỉ định các tùy chọn cụm khác nhau, chi tiết về server hiện tại và các server khác trong cụm và các cài đặt liên quan đến sao chép. Lưu ý địa chỉ IP trong cấu hình là địa chỉ riêng của các server tương ứng của bạn; thay thế các dòng được đánh dấu bằng các địa chỉ IP thích hợp.

/etc/mysql/conf.d/galera.cnf
[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_Node_IP,Second_Node_IP,Third_Node_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 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 WriteSet. Điều này nghĩa là Galera trong trường hợp của bạn, vì Galera là một nhà cung cấp wsrep (WriteSet Replication). Bạn 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 trong tài liệu .
  • Phần “Cấu hình cụm Galera” xác định cụm, xác định các thành viên cụm theo đị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 bằng địa chỉ IP riêng của ba server của bạn.
  • Phần Galera Synchronization Configuration 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, bạn đang sử dụng rsync , vì nó thường khả dụng và thực hiện những gì bạn cần bây giờ.
  • Phần Galera Node Configuration 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 , sau đó lưu file .

Đến đây bạn đã cấu hình thành công nút đầu tiên của bạn , bạn có thể chuyển sang cấu hình các node còn lại trong phần tiếp theo.

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

Trong bước này, bạn sẽ cấu hình hai nút còn lại. Trên nút thứ hai của bạn, 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 Galera Node Configuration để 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 khỏi file .

Khi bạn đã hoàn thành các bước này, hãy lặp lại chúng trên nút thứ ba.

Bạn gần như đã sẵn sàng để khởi động cụm, nhưng trước khi thực hiện, hãy đảm bảo các cổng thích hợp đang mở trong firewall của bạn.

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

Trong bước này, bạn sẽ cấu hình firewall của bạn để các cổng cần thiết cho giao tiếp giữa các node được mở. Trên mọi server , hãy kiểm tra trạng thái của firewall bằng lệnh:

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

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. Nếu bạn cố gắng khởi động cụm, nó sẽ không thành công do các luật firewall này.

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

  • 3306 Đối với 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 Đối với lưu lượng sao chép Cụm Galera. Nhân rộng Multicast sử dụng cả truyền tải UDP và TCP trên cổng này.
  • 4568 Chuyển trạng thái gia tăng.
  • 4444 Đối với tất cả các Chuyển Ảnh Chụp Nhanh Tiểu Bang khác.

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

Mở các cổng bằng các 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.

Sau khi bạn đã cấu hình firewall của bạn trên nút đầu tiên, hãy tạo cài đặt firewall tương tự trên nút thứ hai và thứ ba.

Đến đây bạn đã cấu hình firewall thành công, bạn đã sẵn sàng để bắt đầu cụm trong bước tiếp theo.

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

Trong bước này, bạn sẽ khởi động cụm MySQL Galera của bạn . Nhưng trước tiên, bạn sẽ kích hoạt dịch vụ MySQL systemd , để MySQL sẽ tự động khởi động khi nào server được khởi động lại.

Bật MySQL để bắt đầu khởi động trên cả ba server

Sử dụng lệnh sau trên cả ba server để kích hoạt dịch vụ MySQL systemd :

  • sudo systemctl enable mysql

Bạn sẽ thấy kết quả sau, cho thấy rằng dịch vụ đã được liên kết thành công với danh sách dịch vụ khởi động:

Output
Created symlink /etc/systemd/system/multi-user.target.wants/mysql.service → /lib/systemd/system/mysql.service.

Đến đây bạn đã bật mysql để bắt đầu khởi động trên tất cả các server , bạn đã sẵn sàng để tiến hành khởi động cụm.

Đưa lên nút đầu tiên

Để hiển thị nút đầu tiên, bạn cần sử dụng một tập lệnh khởi động đặc biệt. Theo cách bạn đã 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. Nếu không sử dụng tập lệnh mysqld_bootstrap cho phép systemd truyền tham số --wsrep-new-cluster , thì 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.

Chạy phần sau trên server đầu tiên của bạn:

  • sudo mysqld_bootstrap

Lệnh này sẽ không hiển thị bất kỳ kết quả nào khi thực hiện thành công. Khi tập lệnh này thành công, nút được đăng ký như một phần của cụm và bạn có thể thấy nó bằng lệnh sau:

  • mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"

Sau khi nhập password của bạn , bạn sẽ thấy kết quả sau cho biết rằng có một nút trong cụm:

Output
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 1 | +--------------------+-------+

Trên các node còn lại, bạn 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à khi họ tìm thấy, họ sẽ tham gia vào group .

Đưa lên nút thứ hai

Đến đây bạn có thể hiển thị nút thứ hai. Khởi động mysql :

  • sudo systemctl start mysql

Không có kết quả nào được hiển thị khi thực hiện thành công. Bạn 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'"

Bạn sẽ thấy kết quả sau cho biết nút thứ hai đã tham gia vào cụm và tổng cộng có hai nút.

Output
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 2 | +--------------------+-------+

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

Bây giờ là lúc đưa ra nút thứ ba. Khởi động mysql :

  • sudo systemctl start mysql

Chạy lệnh sau để tìm kích thước cụm:

  • mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"

Bạn sẽ thấy kết quả sau cho biết rằng nút thứ ba đã tham gia vào cụm và tổng số nút trong cụm là ba.

Output
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 3 | +--------------------+-------+

Đến đây, toàn bộ cụm đang trực tuyến và giao tiếp thành công. Tiếp theo, bạn có thể đảm bảo cài đặt hoạt động bằng cách thử nghiệm sao chép trong phần sau.

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

Bạn đã thực hiện các bước cho đến thời điểm này để cụm của bạn 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. Trong bước này, bạn sẽ kiểm tra và xem liệu bản sao có hoạt động như mong đợi hay không.

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

Bạn 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 bạn . Các lệnh sau sẽ tạo một database được gọi là playground và một bảng bên trong database này đượ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");'

Trong lệnh trước, câu CREATE DATABASE tạo một database có tên là playground . Câu CREATE tạo một bảng có tên equipment bên trong database playground có cột định danh tự động tăng dần được gọi là id và các cột khác. Các type cột, quant cột, và color cột được định nghĩa để lưu trữ các loại, số lượng và màu sắc của các thiết bị tương ứng. Câu INSERT chèn một mục nhập kiểu slide , số lượng 2 và màu blue .

Đến đây bạn có một giá trị trong bảng của bạn .

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

Tiếp theo, hãy nhìn vào nút thứ hai để xác minh bản sao đang hoạt động:

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

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

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

Từ cùng một nút này, 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, bạn có thể đọc tất cả dữ liệu này bằng cách truy vấn lại bảng:

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

Bạn sẽ thấy kết quả sau hiển thị hai hàng:

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

, bạn 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, bạn có thể xác minh dữ liệu của bạn có ở mọi nơi:

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

Bạn sẽ thấy kết quả sau cho biết rằng các hàng có sẵn trên nút đầu tiên.

Output
+----+--------+-------+--------+ | id | type | quant | color | +----+--------+-------+--------+ | 1 | slide | 2 | blue | | 2 | swing | 10 | yellow | | 3 | seesaw | 3 | green | +----+--------+-------+--------+

Đến đây bạn đã xác minh thành công rằng bạn 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 đã cấu hình cụm kiểm tra Galera ba nút đang hoạt động. 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 chuyển ảnh chụp nhanh trạng thái ( sst ) khác như xtrabackup , cho phép bạn cài đặt các node mới 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 đến việc sao chép thực tế, nhưng là một mối quan tâm khi các node đang được khởi tạo.

Bạn cũng có thể quan tâm đến các giải pháp phân cụm khác cho MySQL, trong trường hợp đó, bạn có thể xem hướng dẫn Cách tạo cụm MySQL đa nút trên Ubuntu 18.04 của ta . Nếu bạn đang muốn dùng thử giải pháp database được quản lý, hãy xem tài liệu Dịch vụ database DigitalOcean của ta .


Tags:

Các tin liên quan

Cách quản lý và sử dụng trình kích hoạt database MySQL trên Ubuntu 18.04
2019-12-10
Cách tạo một ứng dụng trích dẫn đầy cảm hứng bằng AdonisJs và MySQL
2019-11-22
Cách cài đặt MySQL mới nhất trên Debian 10
2019-07-25
Cách triển khai ứng dụng cốt lõi ASP.NET với server MySQL bằng Nginx trên Ubuntu 18.04
2019-07-23
Cách tối ưu hóa MySQL với Bộ đệm truy vấn trên Ubuntu 18.04
2019-06-12
Cách di chuyển database MySQL sang PostgreSQL bằng pgLoader
2019-05-28
Cách cấu hình SSL / TLS cho MySQL trên Ubuntu 18.04
2019-05-17
Cách thiết lập WordPress với MySQL trên Kubernetes bằng Helm
2019-05-07
Cách cho phép truy cập từ xa vào MySQL
2019-03-07
Cách sửa chữa bảng bị hỏng trong MySQL
2019-03-07