Trong thiết lập tính khả dụng cao của bản sao nguồn (HA) của MySQL, điều quan trọng là phải liên tục theo dõi tình trạng của máy chủ nguồn và bản sao để bạn có thể phát hiện các sự cố tiềm ẩn và thực hiện các hành động khắc phục . Trong bài đăng trên blog này, chúng tôi giải thích một số kiểm tra sức khỏe cơ bản mà bạn có thể thực hiện trên nguồn MySQL và các nút bản sao của mình để đảm bảo thiết lập của bạn hoạt động tốt. Chương trình hoặc tập lệnh giám sát phải cảnh báo khung sẵn sàng cao trong trường hợp bất kỳ kiểm tra sức khỏe nào không thành công, cho phép khung sẵn sàng cao thực hiện các hành động khắc phục để đảm bảo tính khả dụng của dịch vụ.
Kiểm tra tình trạng máy chủ nguồn MySQL
Chúng tôi khuyên bạn nên chạy các tập lệnh hoặc chương trình giám sát nguồn MySQL của bạn thường xuyên. Giả sử rằng tập lệnh giám sát đang chạy trên cùng một máy chủ với máy chủ MySQL của bạn, bạn có thể kiểm tra những điều sau:
-
Đảm bảo dịch vụ MySQL đang chạy
Điều này có thể được thực hiện bằng cách sử dụng một lệnh đơn giản như:
> pgrep mysqld
HOẶC
>service mysqld status
-
Đảm bảo bạn có thể kết nối với MySQL và thực hiện một truy vấn đơn giản
Chúng tôi khuyên bạn nên có một khoảng thời gian chờ ngắn cho các lệnh này để bạn có thể nhanh chóng phát hiện xem MySQL có phản hồi hay không. Điều này có thể đạt được từ một cuộc gọi như:
/usr/bin/timeout 5 mysql -u testuser -ptestpswd -e 'select * from mysql.test’
Đảm bảo kiểm tra giá trị thoát của lệnh trên:
Giá trị thoát =0 ⇒ Thành công
Giá trị thoát =1 ⇒ Không đạt
Exit-value =124 ⇒ Hết giờ
Nếu lệnh hết thời gian chờ, điều đó có nghĩa là dịch vụ MySQL không đủ phản hồi. Chúng tôi khuyên bạn nên thử lại sau một thời gian để tránh kết quả âm tính giả. Nếu mã thoát chỉ ra lỗi, mã trả về từ MySQL sẽ cho chúng ta biết lý do thất bại. Một ví dụ về sự cố là lỗi "Quá nhiều kết nối" từ MySQL xảy ra nếu số lượng kết nối đến máy chủ vượt quá giá trị cấu hình "max_connections" của bạn.
-
Đảm bảo nguồn MySQL đang chạy ở chế độ đọc-ghi
Bạn có thể sử dụng lệnh sau để đảm bảo nguồn MySQL đang chạy ở chế độ đọc-ghi:
/usr/bin/timeout 5 mysql -u testuser -ptestpswd -e "SELECT @@global.read_only"
Nguồn dự kiến sẽ luôn chạy ở chế độ đọc-ghi và do đó, giá trị của read_only phải là "OFF".
Cũng có thể kết hợp bước này với bước 2 và thay vì thực hiện truy vấn kiểm tra 'select * từ mysql.test, chúng ta chỉ có thể thực hiện truy vấn để lấy read_only giá trị.
Kiểm tra tình trạng máy chủ bản sao của MySQL
Bạn có thể chạy giám sát các bản sao MySQL của mình với tần suất thấp hơn so với nguồn, vì chúng không xử lý việc ghi dữ liệu. 3 bước đầu tiên để kiểm tra tình trạng bản sao của bạn có thể giống với bước của nguồn, ngoại trừ việc chúng tôi cần đảm bảo bản sao đang chạy ở chế độ chỉ đọc - giá trị của biến read_only phải là 'BẬT' ở bước 3 .
Ngoài ra, chúng tôi có thể thực hiện nhiều kiểm tra hơn đối với bản sao để đảm bảo trạng thái sao chép của nó hoạt động tốt, chẳng hạn như:
-
Bản sao được định cấu hình để sao chép từ nguồn bên phải.
-
Kết nối của bản sao với nguồn tốt.
-
Bản sao có thể áp dụng các sự kiện nguồn mà nó đã nhận được.
Bạn có thể kiểm tra tất cả những điều trên bằng lệnh "hiển thị trạng thái bản sao". Ví dụ:
mysql> show replica status \G; *************************** 1. row *************************** Replica_IO_State: Waiting for source to send event Source_Host: 172.31.17.43 Source_User: repl_user Source_Port: 3306 Connect_Retry: 10 Source_Log_File: mysql-bin.000001 Read_Source_Log_Pos: 7510 Relay_Log_File: relay-log.000006 Relay_Log_Pos: 414 Relay_Source_Log_File: mysql-bin.000001 Replica_IO_Running: Yes Replica_SQL_Running: Yes ******************Truncated*********************************
-
Giá trị Source_Host cho biết máy chủ nguồn được định cấu hình để sao chép.
-
Đối với giá trị Replica_IO_Running, “Có” cho biết rằng bản sao đã kết nối với nguồn và đang nhận luồng sao chép.
-
Đối với giá trị Replica_SQL_Running, “Có” cho biết rằng ứng dụng của bản sao đang chạy và có thể áp dụng tất cả các sự kiện nhận được từ nguồn.
Trong bài đăng trên blog này, chúng tôi đã thảo luận về một số kiểm tra đơn giản có thể phát hiện xem có vấn đề cơ bản nào trong nguồn MySQL và máy chủ bản sao của bạn hay không. Nói chung, cơ chế phát hiện lỗi trong thiết lập tính sẵn sàng cao là một chủ đề phức tạp và cần một khuôn khổ tính sẵn sàng cao mạnh mẽ mà qua đó cần thực hiện theo dõi kiểm tra sức khỏe. Bạn có thể tìm hiểu thêm về các chi tiết của khung tính sẵn sàng cao của chúng tôi trong Giải thích về khung tính sẵn sàng cao trong MySQL của chúng tôi - Phần I:Bài đăng trên blog giới thiệu.