Thứ năm, 20/06/2019 | 00:00 GMT+7

Cách cấu hình Cụm Galera với MariaDB 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ả.

MariaDB là một hệ thống database quan hệ open-souce hoàn toàn tương thích với hệ thống MySQL RDBMS phổ biến. Bạn có thể đọc tài liệu chính thức cho MariaDB tại trang này . 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 MariaDB 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. Đây là cụm 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 chúng cũng nên áp dụng cho các server không phải DigitalOcean có bật mạng riêng.

Bước 1 - Thêm repository MariaDB vào tất cả server

Trong bước này, bạn sẽ thêm các repository MariaDB 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 MariaDB được sử dụng trong hướng dẫn này. Khi repository được cập nhật trên cả ba server , bạn sẽ sẵn sàng cài đặt MariaDB.

Một điều cần lưu ý về MariaDB là nó có nguồn root như một sự thay thế thả xuống cho MySQL, vì vậy trong nhiều file cấu hình và tập lệnh khởi động, bạn sẽ thấy mysql thay vì mariadb . Vì lợi ích của tính nhất quán, ta sẽ sử dụng mysql trong hướng dẫn này ở những nơi có thể hoạt động.

Trong hướng dẫn này, bạn sẽ sử dụng MariaDB version 10.4 . Vì version này không có trong repository lưu trữ Ubuntu mặc định, 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 MariaDB vào cả ba server của bạn.

Lưu ý: MariaDB là một nhà cung cấp có uy tín tốt, nhưng 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ước tiên, bạn sẽ thêm khóa repository MariaDB 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 --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8

Khi bạn có khóa tin cậy trong database , bạn có thể thêm repository bằng lệnh sau:

  • sudo add-apt-repository 'deb [arch=amd64] http://nyc2.mirrors.digitalocean.com/mariadb/repo/10.4/ubuntu bionic main'

Sau khi thêm repository , hãy chạy apt update để bao gồm file kê khai gói từ repository mới:

  • sudo apt update

Khi bạn đã hoàn thành bước này trên server đầu tiên, hãy lặp lại cho server thứ hai và thứ ba.

Đế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 MariaDB trong phần tiếp theo.

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

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

Bắt đầu từ version 10.1 , gói Server MariaDB và Server MariaDB Galera được kết hợp, vì vậy việc cài đặt mariadb-server sẽ tự động cài đặt Galera và một số gói phụ thuộc:

  • sudo apt install mariadb-server

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 yes để tiếp tục cài đặt.

Từ version MariaDB 10.4 trở đi, user MariaDB gốc không có password theo mặc định. Để đặt password cho user root , hãy bắt đầu bằng cách đăng nhập vào MariaDB:

  • sudo mysql -uroot

Khi bạn đang ở trong shell MariaDB, hãy thay đổi password bằng cách thực hiện câu lệnh sau:

  • set password = password("your_password");

Bạn sẽ thấy kết quả sau cho biết password đã được đặt chính xác:

Output
Query OK, 0 rows affected (0.001 sec)

Thoát khỏi shell MariaDB bằng cách chạy lệnh sau:

  • quit;

Nếu bạn muốn tìm hiểu thêm về SQL hoặc cần cập nhật nhanh, hãy xem hướng dẫn MySQL của ta .

Đến đây bạ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ì bạn sẽ dựa vào rsync trong các bước sau, hãy đảm bảo nó đã được cài đặt:

  • sudo apt install rsync

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

Khi bạn đã cài đặt MariaDB và đặt password root 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 MariaDB 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, MariaDB đượ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 có .cnf . Tạo 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 MariaDB / 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 MariaDB 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 .
  • 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 “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, bạn đang sử dụng rsync , vì nó thường có sẵn và thực hiện những gì bạn cần bây giờ.
  • 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 , lưu file . Với editor nano, bạn có thể thực hiện việc này bằng cách nhấn CTRL+X , nhập y và nhấn ENTER .

Đế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 .

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 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ẽ bắt đầu cụm MariaDB của bạn . Để bắt đầu, bạn cần dừng dịch vụ MariaDB đang chạy để có thể đưa cụm của bạn trực tuyến.

Dừng MariaDB trên cả ba server

Sử dụng lệnh sau trên cả ba server để dừng MariaDB để bạn có thể khôi phục chúng 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 bạn đã thành công, hãy sử dụng lệnh sau:

  • sudo systemctl status mysql

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

Output
. . . Apr 26 03:34:23 galera-node-01 systemd[1]: Stopped MariaDB 10.4.4 database server.

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

Đư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 galera_new_cluster cho phép systemd truyền tham số --wsrep-new-cluster , một systemctl start mysql thông thường sẽ không thành công vì không có nút nào chạy cho nút đầu tiên kết nối.

  • sudo galera_new_cluster

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'"

Bạn sẽ thấy kết quả sau cho biết 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ì vậy khi họ tìm thấy một thành viên, 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 tiếp theo.

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. Làm theo các bước dưới đây để 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;'

Nếu bản sao đang hoạt động, 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:

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

Từ cùng một nút này, bạn 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, 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 đây 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 | +----+--------+-------+--------+

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 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 đế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 như cụm MySQL, trong trường hợp này, bạn có thể xem hướng dẫn Cách tạo cụm MySQL đa nút trên Ubuntu 18.04 hướng dẫn của ta .


Tags:

Các tin liên quan

Cách backup thư mục lớn với Unison trên Ubuntu 18.04
2019-05-21
Cách tạo một cụm Kubernetes bằng Kubeadm trên Ubuntu 18.04
2019-04-24
Cách tạo một cụm Kubernetes bằng Kubeadm trên Ubuntu 16.04
2019-04-24
Cách tạo một cụm Kubernetes bằng Kubeadm trên Ubuntu 18.04
2019-04-24
Cách tạo một cụm Kubernetes bằng Kubeadm trên Ubuntu 16.04
2019-04-24
Cách cài đặt và cấu hình Zabbix để giám sát an toàn server từ xa trên Ubuntu 18.04
2019-04-18
Cách cài đặt Anaconda trên Ubuntu 18.04 [Quickstart]
2019-04-18
Cách cài đặt Go và thiết lập môi trường lập trình cục bộ trên Ubuntu 18.04
2019-04-09
Cách backup thư mục lớn với Unison trên Ubuntu 16.04
2019-04-08
Cách cài đặt và sử dụng TensorFlow trên Ubuntu 18.04
2019-03-20