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.
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:
Thêm các dòng sau vào cuối tệp:
Thay đổi tệp như hiển thị bên dưới:
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:
Thêm các dòng sau vào cuối file:
Thay đổi tệp như hiển thị bên dưới:
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:
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.
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:
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:
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.
Thêm các dòng sau:
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:
Thêm các dòng sau:
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:
Thêm các dòng sau:
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:
Thêm các dòng sau:
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:
Sau khi đĩa DRBD được tạo trên Node1, hãy tạo đĩa DRBD trên Node2 bằng lệnh sau:
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:
Nếu mọi thứ đều ổn, bạn sẽ thấy đầu ra sau:
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.
Tiếp theo, xác minh phân vùng DRBD đã gắn kết bằng lệnh sau trên Node1:
Bạn sẽ thấy đầu ra sau:
Tiếp theo, xác minh IP động chỉ được liên kết với Node1 bằng lệnh sau:
Bạn sẽ thấy kết quả sau:
Chạy lệnh sau trên cả hai Node để cài đặt máy chủ MariaDB:
Tiếp theo, bạn sẽ cần tắt dịch vụ MariaDB trên cả hai Node:
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:
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:
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:
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:
Tiếp theo, Đặt địa chỉ liên kết cho MySQL trên cả hai Node bằng lệnh sau:
Sửa đổi các dòng sau:
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:
Tiếp theo, đợi 50 giây, sau đó khởi động lại dịch vụ heartbeat trên Node2:
Đầu tiên, xác minh rằng Node1 là nút drbd chính bằng lệnh sau trên Node1:
Bạn sẽ thấy thông báo sau output:
Tiếp theo, chúng ta sẽ xác minh rằng đĩa DRBD đã được gắn kết bằng lệnh sau:
Tiếp theo, xác minh dịch vụ MariaDB bằng lệnh sau:
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:
Tiếp theo, khởi động lại heartbeat trên Node1:
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:
Bạn sẽ thấy đầu ra sau:
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:
Bạn sẽ thấy đầu ra sau:
Tiếp theo, Kiểm tra để đảm bảo MariaDB đang chạy trên Node2:
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.
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.
Bạn sẽ thấy đầu ra sau:
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
Mã:
172.16.0.1 Node1172.16.0.2 Node2
Mã:
sudo nano /etc/hostname
Mã:
Node1
Trên node thứ hai, mở tệp /etc/hosts và tệp /etc/hostname:
Mã:
sudo nano /etc/hosts
Mã:
172.16.0.1 Node1172.16.0.2 Node2
Mã:
sudo nano /etc/hostname
Mã:
Node2
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
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
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
Mã:
sudo nano /etc/drbd.d/r0.res
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ộ;}}
Mã:
sudo nano /etc/ha.d/ha.cf
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
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
Mã:
Node1 192.168.0.103/24 drbddisk::r0 Filesystem::/dev/drbd0::/var/lib/mysql::ext4::noatime
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
Mã:
auth11 sha1 your-secure-password
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
Mã:
sudo drbdadm create-md r0
sudo systemctl restart drbd
sudo chmod 600 /etc/ha.d/authkeys
sudo mkdir /var/lib/mysql
Mã:
sudo cat /proc/drbd
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
Mã:
sudo systemctl start heartbeat
Mã:
sudo mount | grep drbd
Mã:
/dev/drbd0 trên /var/lib/mysql gõ ext4 (rw,noatime,data=ordered)
Mã:
sudo ip addr show | grep 192.168.0.103
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
Mã:
sudo systemctl disable mysql
Mã:
sudo systemctl stop mysql
sudo rm -rf /var/lib/mysql/*
Mã:
sudo scp /etc/mysql/debian.cnf [emailprotected]:/etc/mysql/debian.cnf
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
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;
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
Mã:
Node1 192.168.0.103/24 drbddisk::r0 Filesystem::/dev/drbd0::/var/lib/mysql::ext4::noatime mysql
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
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
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
Mã:
sudo mount | grep drbd
Mã:
/dev/drbd0 trên /var/lib/mysql gõ ext4 (rw,noatime,data=ordered)
Mã:
sudo systemctl status mysql
Mã:
mysql -h 192.168.0.103 -u root -p
Mã:
MariaDB [(none)]> create database test;
MariaDB [(none)]> quit
Mã:
sudo systemctl restart heartbeat
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
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
Mã:
sudo cat /proc/drbd
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
Mã:
sudo systemctl status mysql
Mã:
mysql -h 192.168.0.103 -u root -p
Mã:
MariaDB [(none)]> show databases;
Mã:
+--------------------+| Database |+--------------------+| test || information_schema || lost+found || mysql || performance_schema |+--------------------+5 hàng trong tập hợp (0,04 giây)