Cách thiết lập MariaDB High Availability với Heartbeat và DRBD trên Ubuntu 16.04 LTS

theanh

Administrator
Nhân viên
Heartbeat và DRBD đều được sử dụng cho giải pháp cụm cho bất kỳ ứng dụng nào sử dụng hai máy chủ. Cả hai máy chủ đều hoạt động ở chế độ chủ động và thụ động, một máy chủ sẽ hoạt động cùng lúc và máy chủ khác làm máy chủ dự phòng. DRBD (Distributed Replicated Block Device) là dịch vụ cấp hạt nhân đồng bộ hóa dữ liệu giữa hai máy chủ theo thời gian thực. Heartbeat là chương trình nguồn mở cho phép máy chủ Linux chính và máy chủ dự phòng xác định xem máy chủ kia có "hoạt động" hay không và nếu máy chủ chính không hoạt động, sẽ chuyển đổi tài nguyên dự phòng sang máy chủ dự phòng. Nó cũng sẽ quản lý tính khả dụng cao của IP và các dịch vụ khác trong máy chủ của bạn.

Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách đạt được tính khả dụng cao của MariaDB bằng Heartbeat và DRBD trên máy chủ Ubuntu 16.04.

Yêu cầu​

  • Hai nút đã cài đặt máy chủ Ubuntu 16.04.
  • Hai card mạng được cài đặt trên mỗi nút.
  • Ổ cứng chưa phân vùng bổ sung được cài đặt trên mỗi nút.
  • Người dùng không phải root có quyền sudo được thiết lập trên mỗi nút.

Bắt đầu​

Trước khi bắt đầu, bạn sẽ cần thiết lập địa chỉ IP trên mỗi nút. Sử dụng địa chỉ IP sau trên mỗi nút:

Node1 :

172.16.0.1 trên eth0 và 192.168.0.101 trên eth1

Node2 :

172.16.0.2 trên eth0 và 192.168.0.102 trên eth1

IP 192.168.0.103 sẽ là IP có tính khả dụng cao.

Tiếp theo, bạn cũng sẽ cần thiết lập tên máy chủ và phân giải tên máy chủ trên mỗi nút. Vì vậy, mỗi nút có thể giao tiếp với nhau. Trên Node đầu tiên, mở tệp /etc/hosts và tệp /etc/hostname:
Mã:
sudo nano /etc/hosts
Thêm các dòng sau vào cuối tệp:
Mã:
172.16.0.1 Node1172.16.0.2 Node2
Mã:
sudo nano /etc/hostname
Thay đổi tệp như hiển thị bên dưới:
Mã:
Node1
Lưu và đóng tệp khi bạn hoàn tất.

Trên node thứ hai, mở tệp /etc/hosts và tệp /etc/hostname:
Mã:
sudo nano /etc/hosts
Thêm các dòng sau vào cuối file:
Mã:
172.16.0.1 Node1172.16.0.2 Node2
Mã:
sudo nano /etc/hostname
Thay đổi tệp như hiển thị bên dưới:
Mã:
Node2
Lưu và đóng tệp khi bạn hoàn tất.

Tiếp theo, cập nhật từng nút bằng phiên bản mới nhất bằng lệnh sau:
Mã:
sudo apt-get update -y
sudo apt-get upgrade -y
Sau khi hệ thống của bạn được cập nhật, hãy khởi động lại hệ thống để áp dụng những thay đổi này.

Cài đặt DRBD và Heartbeat​

Tiếp theo, bạn sẽ cần cài đặt DRBD và Heartbeat trên cả hai nút. Theo mặc định, cả hai đều có sẵn trong kho lưu trữ mặc định của Ubuntu 16.04. Bạn có thể cài đặt chúng chỉ bằng cách chạy lệnh sau trên cả hai Node:
Mã:
sudo apt-get install drbd8-utils heartbeat -y
Tiếp theo, khởi động dịch vụ DRBD và Heartbeat và cho phép chúng khởi động khi khởi động:
Mã:
sudo systemctl start drbd
sudo systemctl start heartbeat
systemctl enable drbd
systemctl enable heartbeat

Cấu hình DRBD và Heartbeat​

Tiếp theo, bạn sẽ cần thiết lập thiết bị DRBD trên mỗi Node. Tạo một phân vùng duy nhất trên ổ đĩa chưa phân vùng thứ hai /dev/sdb trên mỗi Node.

Bạn có thể thực hiện việc này chỉ bằng cách chạy lệnh sau trên mỗi Node:
Mã:
sudo echo -e 'n\np\n1\n\n\nw' | fdisk /dev/sdb
Tiếp theo, bạn sẽ cần cấu hình DRBD trên cả hai nút. Bạn có thể thực hiện việc này bằng cách tạo tệp /etc/drbd.d/r0.res trên mỗi Nút.
Mã:
sudo nano /etc/drbd.d/r0.res
Thêm các dòng sau:
Mã:
global {usage-count no;}resource r0 {protocol C;startup {degr-wfc-timeout 60;}disk {}syncer {rate 100M;}net {cram-hmac-alg sha1;shared-secret "aBcDeF";}on Node1 {device /dev/drbd0;disk /dev/sdb1;address 172.16.0.1:7789;meta-disk nội bộ;}trên Node2 {thiết bị /dev/drbd0;đĩa /dev/sdb1;địa chỉ 172.16.0.2:7789;meta-disk nội bộ;}}
Lưu và đóng tệp khi bạn hoàn tất, sau đó mở tệp cấu hình khác trên mỗi Node:
Mã:
sudo nano /etc/ha.d/ha.cf
Thêm các dòng sau:
Mã:
# Kiểm tra khoảng thời giankeepalive 1# Thời gian trước khi máy chủ được tuyên bố là chếtdeadtime 10# Độ trễ chờ thứ cấp khi khởi độnginitdead 60# Tự động quay lạiauto_failback tắt# Giao diện nhịp timbcast eth1# Các nút cần theo dõinode Node1node Node2
Lưu và đóng tệp.

Tiếp theo, mở tệp tài nguyên /etc/ha.d/haresources trên mỗi Node:
Mã:
sudo nano /etc/ha.d/haresources
Thêm các dòng sau:
Mã:
Node1 192.168.0.103/24 drbddisk::r0 Filesystem::/dev/drbd0::/var/lib/mysql::ext4::noatime
Tại đây, Node1 là tên máy chủ của nút hoạt động chính của bạn, 192.168.0.103 là địa chỉ IP dấu phẩy động, /var/lib/mysql là điểm gắn kết và /dev/drbd0 là thiết bị DRBD.

Tiếp theo, bạn sẽ cần phải xác định và lưu trữ các khóa ủy quyền giống hệt nhau trên cả hai nút. Bạn có thể thực hiện việc này bằng tệp /etc/ha.d/authkeys trên mỗi Node:
Mã:
sudo nano /etc/ha.d/authkeys
Thêm các dòng sau:
Mã:
auth11 sha1 your-secure-password
Tại đây, your-secure-password là mật khẩu an toàn của bạn. Sử dụng cùng một mật khẩu trên cả hai nút.

Tiếp theo, tạo và khởi động DRBD bằng cách chạy lệnh sau trên Node1:
Mã:
sudo drbdadm create-md r0
sudo systemctl restart drbd
sudo drbdadm outdate r0
sudo drbdadm -- --overwrite-data-of-peer primary all
sudo drbdadm primary r0
sudo mkfs.ext4 /dev/drbd0
sudo chmod 600 /etc/ha.d/authkeys
sudo mkdir /var/lib/mysql
Sau khi đĩa DRBD được tạo trên Node1, hãy tạo đĩa DRBD trên Node2 bằng lệnh sau:
Mã:
sudo drbdadm create-md r0
sudo systemctl restart drbd
sudo chmod 600 /etc/ha.d/authkeys
sudo mkdir /var/lib/mysql
Bây giờ, bạn có thể xác minh đĩa DRBD đã được kết nối và đang đồng bộ hóa đúng cách bằng cách chạy lệnh sau:
Mã:
sudo cat /proc/drbd
Nếu mọi thứ đều ổn, bạn sẽ thấy đầu ra sau:
Mã:
version: 8.4.5 (api:1/proto:86-101)srcversion: F446E16BFEBS8B115AJB14H0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----ns:210413 nr:0 dw:126413 dr:815311 al:35 bm:0 lo:0 pe:11 ua:0 ap:0 ep:1 wo:f oos:16233752[>....................] đã đồng bộ: 3,3% (14752/14350)Mkết thúc: 0:12:23 tốc độ: 12.156 (16.932) K/giây
Tiếp theo, bắt đầu heartbeat trên cả hai Node để kích hoạt phần chuyển đổi dự phòng trong thiết lập của bạn.
Mã:
sudo systemctl start heartbeat
Tiếp theo, xác minh phân vùng DRBD đã gắn kết bằng lệnh sau trên Node1:
Mã:
sudo mount | grep drbd
Bạn sẽ thấy đầu ra sau:
Mã:
/dev/drbd0 trên /var/lib/mysql gõ ext4 (rw,noatime,data=ordered)
Tiếp theo, xác minh IP động chỉ được liên kết với Node1 bằng lệnh sau:
Mã:
sudo ip addr show | grep 192.168.0.103
Bạn sẽ thấy kết quả sau:
Mã:
inet 192.168.0.103/24 brd 192.168.0.255 scope global secondary eth1:0

Cài đặt và cấu hình MariaDB​

Sau khi mọi thứ được cấu hình đúng trên cả hai Node, đã đến lúc cài đặt máy chủ MariaDB trên cả hai Node.

Chạy lệnh sau trên cả hai Node để cài đặt máy chủ MariaDB:
Mã:
sudo apt-get install mariadb-server -y
Tiếp theo, bạn sẽ cần tắt dịch vụ MariaDB trên cả hai Node:
Mã:
sudo systemctl disable mysql
Tại đây, chúng ta sẽ sử dụng Node1 làm chính và cơ sở dữ liệu trên Node2 sẽ được tạo và điền thông qua đồng bộ hóa với Node1. Vì vậy, bạn sẽ cần dừng dịch vụ MariaDB và xóa nội dung bên trong /var/lib/mysql trên Node2. Bạn có thể thực hiện việc này bằng lệnh sau:
Mã:
sudo systemctl stop mysql
sudo rm -rf /var/lib/mysql/*
Tiếp theo, bạn sẽ cần sao chép tệp cấu hình MySQL Maintenance từ Node1 sang Node2. Bạn có thể thực hiện việc này bằng cách chạy lệnh sau:
Mã:
sudo scp /etc/mysql/debian.cnf [emailprotected]:/etc/mysql/debian.cnf
Tiếp theo, bạn sẽ cần tạo một người dùng root để quản lý và truy cập từ xa vào cơ sở dữ liệu trên phiên bản MySQL có tính khả dụng cao.

Bạn có thể thực hiện việc này bằng cách chạy lệnh sau trên Node1:
Mã:
mysql -u root -p
Nhập mật khẩu root của bạn, sau đó tạo một người dùng root bằng lệnh sau:
Mã:
MariaDB [(none)]> CREATE USER 'root'@'192.168.0.%' IDENTIFIED BY 'password';
MariaDB [(none)]> CẤP TẤT CẢ CÁC QUYỀN TRÊN *.* CHO 'root'@'192.168.0..%' VỚI TÙY CHỌN CẤP;
MariaDB [(none)]> XÓA QUYỀN;
MariaDB [(none)]> THOÁT;
Tiếp theo, Đặt địa chỉ liên kết cho MySQL trên cả hai Node bằng lệnh sau:
Mã:
sudo sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/mariadb.conf.d/*.cnf

Khởi tạo Heartbeat cho Dịch vụ MariaDB​

Tiếp theo, bạn sẽ cần thêm dịch vụ MariaDB vào các phiên bản heartbeat của mình trên cả hai Node. Bạn có thể thực hiện việc này bằng cách chỉnh sửa tệp /etc/ha.d/haresources:
Mã:
sudo nano /etc/ha.d/haresources
Sửa đổi các dòng sau:
Mã:
Node1 192.168.0.103/24 drbddisk::r0 Filesystem::/dev/drbd0::/var/lib/mysql::ext4::noatime mysql
Lưu và đóng tệp khi bạn hoàn tất.

Sau khi cấu hình heartbeat, bạn sẽ cần khởi động lại nó trên cả hai Node.

Đầu tiên, khởi động lại heartbea trên Node1:
Mã:
sudo systemctl restart heartbeat
Tiếp theo, đợi 50 giây, sau đó khởi động lại dịch vụ heartbeat trên Node2:
Mã:
sudo systemctl restart heartbeat

Kiểm tra heartbeat và DRBD​

Bây giờ, mọi thứ đã được cấu hình đúng, đã đến lúc thực hiện một loạt các bài kiểm tra để xác minh rằng heartbeat thực sự sẽ kích hoạt quá trình chuyển từ máy chủ đang hoạt động sang máy chủ thụ động khi máy chủ đang hoạt động gặp sự cố nào đó.

Đầu tiên, xác minh rằng Node1 là nút drbd chính bằng lệnh sau trên Node1:
Mã:
sudo cat /proc/drbd
Bạn sẽ thấy thông báo sau output:
Mã:
version: 8.4.5 (api:1/proto:86-101)srcversion: F446E16BFEBS8B115AJB14HO cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----ns:22764644 nr:256 dw:529232 dr:22248299 al:111 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
Tiếp theo, chúng ta sẽ xác minh rằng đĩa DRBD đã được gắn kết bằng lệnh sau:
Mã:
sudo mount | grep drbd
Mã:
/dev/drbd0 trên /var/lib/mysql gõ ext4 (rw,noatime,data=ordered)
Tiếp theo, xác minh dịch vụ MariaDB bằng lệnh sau:
Mã:
sudo systemctl status mysql
Tiếp theo, truy cập máy chủ MariaDB từ máy từ xa bằng IP động và tạo cơ sở dữ liệu thử nghiệm:
Mã:
mysql -h 192.168.0.103 -u root -p
Mã:
MariaDB [(none)]> create database test;
MariaDB [(none)]> quit
Tiếp theo, khởi động lại heartbeat trên Node1:
Mã:
sudo systemctl restart heartbeat
Bây giờ, heartbeat sẽ diễn giải lệnh khởi động lại này là lỗi của MariaDB trên Node1 và sẽ kích hoạt chuyển đổi dự phòng để biến Node2 thành máy chủ chính.

Bạn có thể kiểm tra xem DRBD hiện đang coi Node1 là máy chủ phụ bằng lệnh sau trên Node1:
Mã:
sudo cat /proc/drbd
Bạn sẽ thấy đầu ra sau:
Mã:
version: 8.4.5 (api:1/proto:86-101)srcversion: F446E16BFEBS8B115AJB14H0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----ns:22764856 nr:388 dw:529576 dr:22248303 al:112 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
Bây giờ, hãy xác minh rằng Node2 là nút drbd chính bằng cách chạy lệnh sau trên Node2:
Mã:
sudo cat /proc/drbd
Bạn sẽ thấy đầu ra sau:
Mã:
version: 8.4.5 (api:1/proto:86-101)srcversion: F446E16BFEBS8B115AJB14H0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----ns:412 nr:20880892 dw:20881304 dr:11463 al:7 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
Tiếp theo, Kiểm tra để đảm bảo MariaDB đang chạy trên Node2:
Mã:
sudo systemctl status mysql
Bây giờ, hãy kết nối với máy chủ MariaDB bằng IP động trên Node2 từ người dùng từ xa.
Mã:
mysql -h 192.168.0.103 -u root -p
Tiếp theo, hãy xem cơ sở dữ liệu thử nghiệm mà chúng ta đã tạo trước đó khi Node1 là máy chủ chính.
Mã:
MariaDB [(none)]> show databases;
Bạn sẽ thấy đầu ra sau:
Mã:
+--------------------+| Database |+--------------------+| test || information_schema || lost+found || mysql || performance_schema |+--------------------+5 hàng trong tập hợp (0,04 giây)
 
Back
Bên trên