MariaDB
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> MariaDB

Giám sát MySQL chủ động (Developer Studio / Góc cố vấn)

Giám sát cơ sở dữ liệu MySQL của bạn một cách chủ động là điều bắt buộc hiện nay. Nó đóng một phần quan trọng và quan trọng để quản lý và kiểm soát cơ sở dữ liệu của bạn, đặc biệt là đối với các cụm cấp sản xuất của bạn. Việc thiếu thông tin cụ thể có lợi cho việc cải thiện cơ sở dữ liệu của bạn hoặc không xác định được nguyên nhân gốc rễ của các vấn đề có thể gặp phải có thể gây ra khó khăn rất lớn để khắc phục hoặc khôi phục từ những ngày vinh quang.

Việc giám sát chủ động trong cơ sở dữ liệu MySQL của bạn cho phép nhóm của bạn hiểu các dịch vụ cơ sở dữ liệu của bạn đang hoạt động như thế nào. Nó có hoạt động và phân phối dựa trên khối lượng công việc mà nó dự kiến ​​sẽ thực hiện không? Bạn có đủ tài nguyên để máy chủ hoạt động dựa trên khối lượng công việc mà nó hiện đang xử lý không? Giám sát chủ động áp dụng những thứ có thể ngăn ngừa thảm họa hoặc không gây hại cho cơ sở dữ liệu của bạn, điều này sẽ thông báo trước cho bạn. Do đó, cho phép các DBA hoặc quản trị viên thực hiện các tác vụ quan trọng để tránh gặp phải sự cố, hỏng dữ liệu, khai thác và tấn công bảo mật hoặc lưu lượng truy cập bị trả lại bất ngờ trong cụm cơ sở dữ liệu của bạn. Với những điều này được tham gia ngay lập tức, việc giám sát chủ động cho MySQL phải được tự động hóa và sẽ hoạt động 24/7 mà không bị gián đoạn và tùy thuộc vào DBAs, Devops, quản trị viên để quyết định xem dựa trên mức độ ưu tiên của các nhiệm vụ và mức độ quan trọng của nó nếu nó yêu cầu bảo trì hoặc chỉ là một công việc thông thường hàng ngày.

Giám sát chủ động với ClusterControl

ClusterControl cung cấp một phong cách đa dạng để giám sát các máy chủ cơ sở dữ liệu MySQL của bạn. Cách tiếp cận của nó có thể so sánh với các công cụ giám sát doanh nghiệp khác và các giải pháp đám mây cấp doanh nghiệp. ClusterControl có xu hướng áp dụng tất cả các phương pháp hay nhất để quản lý và giám sát cơ sở dữ liệu nhưng với tính linh hoạt trong việc định cấu hình để đạt được thiết lập mong muốn dựa trên môi trường của bạn.

Khi nói đến cảnh báo và thông báo, ClusterControl có một cách tiếp cận hỗn hợp trong đó có các cảnh báo tích hợp và sau đó có Cố vấn mà chúng ta sẽ thảo luận nhiều hơn trên blog này.

ClusterControl Alarms dành cho MySQL

Cảnh báo cho biết các vấn đề có thể ảnh hưởng hoặc làm suy giảm toàn bộ cụm. Giao diện này cung cấp giải thích chi tiết về sự cố, cùng với hành động được đề xuất (nếu có) để giải quyết sự cố. Mỗi cảnh báo được phân loại là:

  • Cụm

  • Khôi phục cụm

  • Tình trạng cơ sở dữ liệu

  • Hiệu suất cơ sở dữ liệu

  • Người dẫn chương trình

  • Nút

  • Mạng

Có thể xác nhận báo động bằng cách chọn Bỏ qua? hộp kiểm. Khi bị bỏ qua, sẽ không có thông báo nào được gửi qua email. Không thể xóa hoặc loại bỏ báo thức, mặc dù bạn có thể ẩn báo thức đó khỏi danh sách bằng cách nhấp vào nút Ẩn báo thức bị bỏ qua.

Xem ảnh chụp màn hình ví dụ bên dưới,

Hoạt động với ClusterControl

ClusterControl hỗ trợ khôi phục tự động phản ứng bất cứ khi nào phát hiện lỗi xảy ra. Tự động khôi phục với ClusterControl là một trong những chức năng chủ động nhất đóng vai trò quan trọng trong trường hợp xảy ra thảm họa.

Cần bật tính năng tự động khôi phục để giám sát chủ động này phản ứng trong các tình huống khác nhau, chẳng hạn như nếu nút MySQL chính bị lỗi.

Trong ClusterControl, điều này sẽ được phát hiện ngay lập tức khi nó lắng nghe kết nối với máy chủ cơ sở dữ liệu hoặc trong trường hợp này là máy chủ chính. ClusterControl sẽ phản ứng càng sớm càng tốt và áp dụng chuyển đổi dự phòng.

Chuyển đổi dự phòng là một phần của khôi phục cụm được bật. Vì cả hai nút Cluster và Node đều được bật nên nó sẽ theo sau quá trình khôi phục nút như bạn thấy bên dưới.

Tùy thuộc vào khả năng tiếp cận của các nút, ClusterControl sẽ cố gắng liên tục bằng cách kết nối thông qua SSH và cố gắng truy cập vào nút và cố gắng khôi phục bằng cách bắt đầu sử dụng sysvinit hoặc systemd. Rõ ràng, bạn có thể nghĩ rằng nó áp dụng chuyển đổi dự phòng và ClusterControl cố gắng bắt đầu chuyển đổi chính không thành công. Điều đó có nghĩa là có sẵn hai nút cơ sở dữ liệu, phải không? Mặc dù đúng, ClusterControl sẽ đưa bản chính bị lỗi sang trạng thái chỉ đọc trong khi được phục hồi. Xem bên dưới,

Mặc dù có một số tùy chọn nhất định bạn có thể đặt để quản lý cơ chế chuyển đổi dự phòng, bạn nên tham khảo tài liệu của chúng tôi về vấn đề này vì nó không phải là trọng tâm của blog này.

Sử dụng Cố vấn về Hoạt động với ClusterControl

Trong ClusterControl, Cố vấn sẽ được định vị bằng cách đi tới → Hiệu suất → Cố vấn. Các cố vấn ClusterControl được thiết lập để áp dụng tùy thuộc vào cụm mà nó đang cố gắng giám sát. Ví dụ, một MySQL Replication và MySQL với Galera Cluster chạy trên Percona hoặc MariaDB có thể có sự khác biệt. Ví dụ:Cố vấn sao chép MySQL có những điều sau đây,

Khi ở trong Cụm Galera, nó thêm các cố vấn cụ thể của Galera như được hiển thị bên dưới ,

Tùy chỉnh ClusterControl MySQL Advisors

Cố vấn có thể tùy chỉnh và có thể được sửa đổi theo nhu cầu của bạn. Trong ảnh chụp màn hình của Advisors ở trên, chỉ cần nhấp vào Chỉnh sửa và bạn sẽ được chuyển hướng đến IDE đơn giản mà chúng tôi đã tích hợp sẵn trong ClusterControl.

Bạn cũng có thể tạo Cố vấn ClusterControl của riêng mình. Bạn có thể tự tham khảo để tìm hiểu thêm về cách tạo bằng cách đọc Viết cố vấn đầu tiên của bạn hoặc xem loạt bài gồm 2 phần để tự tạo bằng cách sử dụng tập lệnh phát hiện Meltdown / Spectre.

Cố vấn ClusterControl hoạt động như thế nào?

Về mặt kỹ thuật, các cố vấn của ClusterControl chủ yếu hoạt động như một người thông báo và theo nghĩa đen là các cố vấn của bạn. ClusterControl Advisors sẽ thông báo cho bạn nếu nó phát hiện hành vi bất thường nếu nó đạt đến ngưỡng cơ sở được đặt theo mặc định bởi ClusterControl. Thông thường, các ngưỡng được áp dụng là các giá trị chung. Các giá trị chung này dựa trên các phương pháp hay nhất và dựa trên khối lượng công việc hoặc thiết lập môi trường phổ biến và có thể chấp nhận được. Hầu hết mặc định của cố vấn không cung cấp cảnh báo hoặc cơ chế cảnh báo trong giao diện người dùng ClusterControl. Nó thông báo cho bạn qua giao diện người dùng (xem ảnh chụp màn hình mẫu của cố vấn Vị trí lưu trữ Binlog bên dưới).

Như đã đề cập trước đó, Cố vấn có thể được sửa đổi và có thể chỉnh sửa thông qua trình soạn thảo đơn giản hoặc IDE của chúng tôi. Ví dụ:trong một cụm Nhân bản MySQL, ClusterControl cung cấp một cố vấn Vị trí Lưu trữ Binlog. Nó phát hiện rằng các binlog được lưu trữ trong thư mục dữ liệu, nơi nó khuyên rằng nó phải nằm ngoài thư mục dữ liệu.

Hãy lấy một ví dụ từ danh sách cố vấn và chọn Kết nối hiện đang sử dụng cố vấn . Hãy chỉnh sửa điều này như được hiển thị bên dưới,

hoặc cách khác, bạn có thể chuyển đến → Quản lý → Nhà phát triển Studio và chọn các kết nối_used_pct.js như hình dưới đây.

Bằng cách làm cho nó chủ động hơn bằng cách gửi báo thức, bạn có thể sửa đổi và thêm các chức năng sau giống như bên dưới,

function myAlarm(title, message, recommendation)
{
  return Alarm::alarmId(
        Node,
      true,
        title,
        message,
        recommendation
  );
}

Trong khi đó, đặt ngưỡng thành 20 rồi thêm các dòng này bên dưới ngay trong câu lệnh điều kiện if nơi ngưỡng đạt trên giá trị ngưỡng đã cho của nó.

                 myAlarmId = myAlarm(TITLE, msg, ADVICE_WARNING);
                // Let's raise an alarm.
                host.raiseAlarm(myAlarmId, Warning);
Here's the complete script with my modifications in bold,
#include "common/mysql_helper.js"
var DESCRIPTION="This advisor calculates the percentage of threads_connected over max_connections,"
                " if the percentage is higher than 20% you will be notified,"
                " preventing your database server from becoming unstable.";
var WARNING_THRESHOLD=20;
var TITLE="Connections currently used";
var ADVICE_WARNING="You are using more than " + WARNING_THRESHOLD +
    "% of the max_connections."
    " Consider regulating load, e.g by using HAProxy. Using up all connections"
    " may render the database server unusable.";
var ADVICE_OK="The percentage of currently used connections is satisfactory." ;

function myAlarm(title, message, recommendation)
{
  return Alarm::alarmId(
        Node,
      true,
        title,
        message,
        recommendation
  );
}


function main()
{
    var hosts     = cluster::mySqlNodes();
    var advisorMap = {};
    for (idx = 0; idx < hosts.size(); ++idx)
    {
        host        = hosts[idx];
        map         = host.toMap();
        connected     = map["connected"];
        var advice = new CmonAdvice();
        print("   ");
        print(host);
        print("==========================");
        if (!connected)
        {
            print("Not connected");
            continue;
        }
        var Threads_connected = host.sqlStatusVariable("Threads_connected");
        var Max_connections   = host.sqlSystemVariable("Max_connections");
        if (Threads_connected.isError() || Max_connections.isError())
        {
            justification = "";
            msg = "Not enough data to calculate";
        }
        else
        {
            var used = round(100 * Threads_connected / Max_connections,1);
            if (used > WARNING_THRESHOLD)
            {
                advice.setSeverity(1);
                msg = ADVICE_WARNING;
                justification = used + "% of the connections is currently used,"
                " which is > " + WARNING_THRESHOLD + "% of max_connections.";
                 myAlarmId = myAlarm(TITLE, msg, ADVICE_WARNING);
                // Let's raise an alarm.
                host.raiseAlarm(myAlarmId, Warning);
            }
            else
            {
                justification = used + "% of the connections is currently used,"
                " which is < 90% of max_connections.";
                advice.setSeverity(0);
                msg = ADVICE_OK;
            }
        }
        advice.setHost(host);
        advice.setTitle(TITLE);
        advice.setJustification(justification);
        advice.setAdvice(msg);
        advisorMap[idx]= advice;
        print(advice.toString("%E"));
    }
    return advisorMap;
}

Bạn có thể sử dụng sysbench để kiểm tra nó. Trong thử nghiệm của tôi, tôi chủ động được thông báo bằng cách gửi báo động. Điều này cũng sẽ được gửi cho tôi qua email hoặc có thể được thông báo nếu bạn đã tích hợp thông báo của bên thứ ba. Xem ảnh chụp màn hình bên dưới,

Thông báo của Cố vấn của ClusterControl

Sửa đổi hoặc chỉnh sửa một cố vấn hiện có trong ClusterControl được áp dụng cho tất cả các cụm. Điều đó có nghĩa là, bạn cần kiểm tra tập lệnh của mình nếu nó có điều kiện cụ thể chỉ áp dụng cho cụm hiện có của bạn (MySQL hoặc các cơ sở dữ liệu được hỗ trợ khác bởi ClusterControl). Điều này là do các cố vấn ClusterControl được lưu trữ trong một nguồn duy nhất thông qua cmon DB của chúng tôi. Chúng được kéo hoặc truy xuất bởi tất cả các cụm bạn đã tạo trong ClusterControl.

Ví dụ:bạn có thể thực hiện việc này trong script:

var hosts =cluster ::mySqlNodes ();

var ConsultorMap ={};

print (hosts [1] .clusterId ());

Tập lệnh này sẽ in ID cụm. Khi bạn nhận được giá trị, hãy gán giá trị đó cho một biến và sử dụng biến đó để đánh giá xem liệu ID cụm cụ thể này có được chấp nhận hay không dựa trên nhiệm vụ mong muốn được thực hiện bởi cố vấn của bạn. Giả sử,

function main()
{
    var hosts     = cluster::mySqlNodes();
    var advisorMap = {};
    for (idx = 0; idx < hosts.size(); ++idx)
    {
        host        = hosts[idx];
        map         = host.toMap();
        connected     = map["connected"];
        var advice = new CmonAdvice();
        print("   ");
        print(host);
        print("==========================");
        if (host.clusterId() == 15)
        {
            print("Not applicable for cluster id == 15");
            continue;
        }
…
….
…..

có nghĩa là nếu đó là cluster_id ==15, thì chỉ cần bỏ qua hoặc tiếp tục với vòng lặp tiếp theo.

Kết luận

Tạo hoặc sửa đổi ClusterControl Advisors là một cơ hội tốt để tận dụng chức năng ẩn mà ClusterControl có thể cung cấp cho bạn. Nó có vẻ như bị ẩn nhưng nó ở đó - chỉ là tính năng được sử dụng ít hơn. Nó cung cấp một tính năng đơn giản nhưng mạnh mẽ được gọi là ClusterControl Domain Specific Language (CDSL) có thể được sử dụng cho các tác vụ cực kỳ khó khăn mà ClusterControl thiếu. Chỉ cần đảm bảo rằng bạn biết tất cả các lưu ý và cũng kiểm tra mọi thứ trước khi cuối cùng áp dụng nó vào môi trường sản xuất của bạn.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách LN () hoạt động trong MariaDB

  2. MariaDB VERSION () Giải thích

  3. Phần 2:Phân loại hình ảnh với Máy chủ MariaDB và TensorFlow - Hướng dẫn

  4. Chuyển đổi dự phòng nâng cao sử dụng Post / pre Script Hooks

  5. MariaDB JSON_CONTAINS () Giải thích