Czyszczenie, optymalizacja, konfiguracja bazy danych mysql Zabbix

  1. Wprowadzenie
  2. Jak zaplanować ładowanie Zabbixa
  3. Czyszczenie i redukcja bazy danych mysql zabbix
  4. Aktualizacja i konfiguracja serwera mysql
  5. Wniosek
  6. Czy artykuł pomógł? Istnieje możliwość dziękuję autor
  7. Kurs online „DevOps praktyki i narzędzia”

Pracuję z serwerami małych i średnich firm, małych firm, w których wymagania dotyczące wielkości bazy danych i wydajności nie są wysokie. Najczęściej ustawienia domyślne są wystarczające, więc nie zwracałem szczególnej uwagi na bazę danych. Ale dziś zbadam kwestię dużego rozmiaru bazy danych zabbix, powiem, jak ją zmniejszyć i jak zoptymalizować jej pracę, aby zwiększyć prędkość.

Jeśli chcesz dowiedzieć się, jak zbudować i utrzymywać wysoce dostępne i niezawodne systemy, polecam zapoznanie się z kursem online „DevOps praktyki i narzędzia” w OTUS. Kurs nie jest dla początkujących, musisz przejść do przyjęcia.

Wprowadzenie

W jego instrukcjach dla instalacja i konfiguracja zabbix Nie poruszam kwestii bazy danych mysql ani ogólnej wydajności serwera. Po prostu biorę domyślne ustawienia mariadb, które pochodzą z instalacji i używam ich. Jeśli nie masz bardzo dużej infrastruktury do monitorowania, to wystarczy, aby normalnie korzystać z systemu.

Jeśli aktywnie korzystasz z zabbix i wdrażasz go wszędzie we wszystkich używanych systemach (i polecam to zrobić), prędzej czy później napotkasz pytanie o wydajność systemu monitorowania i rozmiar bazy danych zabbix.

Temat wydajności zabbix jest bardzo indywidualny. To zależy bezpośrednio od tego, jak z niego korzystasz, a schematy monitorowania mogą być bardzo różne. Monitorowanie wielu serwerów to jedna rzecz, a kolejna rzecz jest ładowana przełącza się na 48 portów z usuwaniem metryk z każdego portu co 30 sekund.

Aby pomóc ci zrozumieć ten temat i dowiedzieć się, na co należy się przygotować, podzielę się z Tobą moim doświadczeniem w używaniu zabbiks, jego ładowania, wydajności i konserwacji bazy danych mysql. Powiem ci, jak zmniejszyć rozmiar bazy.

Jak zaplanować ładowanie Zabbixa

Przez małą strukturę wspomnianą na początku rozumiem 50-100 węzłów (sprzęt niesieciowy z dziesiątkami portów) monitorowanej sieci i około 2000-4000 aktywnych elementów danych, które rejestrują 20-40 nowych wartości na sekundę. W takiej sieci potrzebna jest mała maszyna wirtualna z 2 rdzeniami i 4 GB pamięci. Baza danych w przeważającej mierze standardowych szablonów wzrośnie o około 2-4 GB rocznie. Jeszcze mniej, ponieważ zostanie automatycznie wyczyszczony.

Aby monitorować taką sieć, nie można wprowadzać żadnych dodatkowych ustawień. Monitorowanie będzie działać dobrze. Jeśli obciążenie zaczyna rosnąć, pierwszą rzeczą, jaką napotykasz, jest rozmiar i wydajność bazy danych. Baza zabbix będzie rosła proporcjonalnie do połączenia hosta z nią. I to będzie musiało coś zrobić.

Aby rozwiązać problem wydajności, trzeba będzie poruszać się w dwóch kierunkach:

  1. Czyszczenie bazy danych niepotrzebnych danych.
  2. Zwiększ wydajność serwera mysql.

Każda z tych kwestii jest wielopłaszczyznowa. Następnie częściowo je przejrzymy i wprowadzimy najbardziej proste, oczywiste i skuteczne zmiany.

Czyszczenie i redukcja bazy danych mysql zabbix

Zacznijmy od oczyszczenia bazy danych zabbix z niepotrzebnych danych. Rozważ punkty w kolejności, w której należy to zrobić.

  1. Pierwszą rzeczą jest uważne przejrzenie wszystkich używanych szablonów i wyłączenie wszystkiego, czego nie potrzebujesz . Na przykład, jeśli nie trzeba monitorować połączeń sieciowych systemu Windows, należy wyłączyć automatyczne wykrywanie interfejsów sieciowych. Sama odnajduje dziesiątki wirtualnych połączeń, które zwracają zera podczas odpytywania i nie mają żadnej wartości. Jednak wszystkie te dane są gromadzone i przechowywane, tworząc dodatkowe obciążenie. Jeśli potrzebujesz monitorowania sieci w systemie Windows, przejdź do każdego hosta i wyłącz dodatkowe adaptery, które zostaną znalezione. To znacznie zmniejszy obciążenie. Z mojego doświadczenia wynika, że ​​w standardowych szablonach systemu Windows monitorowanie wszystkich interfejsów sieciowych daje około 2/3 całego obciążenia tych szablonów.
  2. Edytuj czas odpytywania i przechowywania w standardowych szablonach. Być może nie potrzebujesz ustawionej częstotliwości odpytywania i czasu przechowywania. Występują dość duże interwały przechowywania. Najczęściej można je zmniejszyć. Ogólnie rzecz biorąc, nie zapomnij w szablonach, aby ustawić odpowiednie parametry potrzeb w rzeczywistym świecie. Nie ma potrzeby przechowywania przez lata informacji, które tracą znaczenie w ciągu tygodnia.
  3. Po wyłączeniu zbędnych elementów w szablonach należy wyczyścić bazę danych wartości nieaktywnych elementów . Domyślnie pozostają tam. Możesz je wyczyścić za pomocą interfejsu internetowego, ale jest to zły pomysł, ponieważ jest niewygodny i bardzo długi. Najczęściej próbom czyszczenia 50-100 pozycji na raz towarzyszą błędy przekroczenia limitu czasu lub zamrożenie interfejsu internetowego. Dalej powiem, jak zrobić to bardziej efektywnie.

Aby usunąć bazę danych zabbix z nieaktywnych wartości pozycji, możesz użyć następujących zapytań. Możesz je uruchamiać zarówno na serwerze mysql konsoli (najszybsza opcja), jak i na phpmyadminie, dla którego jest to wygodniejsze.

Dzięki tym zapytaniom możesz oszacować, ile danych zostanie wyczyszczonych:

SELECT count (itemid) Historia AS OD historii WHERE itemid NOT IN (SELECT itemid Z elementów WHERE status = '0'); SELECT count (itemid) AS history_uint FROM history_uint WHERE itemid NOT IN (ID elementu SELECT z elementów WHERE status = '0'); SELECT count (itemid) AS history_str FROM history_str WHERE itemid NOT IN (identyfikator elementu SELECT z elementów WHERE status = '0'); SELECT count (itemid) AS history_text FROM history_text WHERE itemid NOT IN (identyfikator elementu SELECT z elementów WHERE status = '0'); SELECT count (itemid) AS history_log FROM history_log WHERE itemid NOT IN (SELECT id elementu FROM pozycje WHERE status = '0'); SELECT liczba (itemid) AS trendy FROM trendy WHERE itemid NOT IN (SELECT itemid Z elementów WHERE status = '0'); SELECT count (itemid) AS trends_uint FROM trends_uint WHERE itemid NOT IN (identyfikator elementu SELECT z elementów WHERE status = '0');

Jeśli zapytania zwykle działają i zwracają licznik danych, który ma zostać usunięty, można je usunąć z bazy danych za pomocą następujących zapytań sql.

DELETE FROM history WHERE itemid NOT IN (SELECT itemid Z elementów WHERE status = '0'); DELETE FROM history_uint WHERE itemid NOT IN (SELECT itemid Z elementów WHERE status = '0'); DELETE FROM history_str WHERE itemid NOT IN (SELECT itemid Z elementów WHERE status = '0'); DELETE FROM history_text WHERE itemid NOT IN (SELECT itemid Z elementów WHERE status = '0'); DELETE FROM history_log WHERE itemid NOT IN (SELECT itemid Z elementów WHERE status = '0'); DELETE FROM trendów WHERE itemid NOT IN (SELECT itemid Z elementów WHERE status = '0'); DELETE FROM trends_uint WHERE itemid NOT IN (SELECT itemid Z elementów WHERE status = '0');

Dzięki tym zapytaniom usuniesz bazę danych zabbix wartości nieaktywnych elementów danych. W rzeczywistości rozmiar bazy danych nie zmniejszy się, ponieważ format innodb jest używany w domyślnej konfiguracji bazy danych. Wszystkie dane są przechowywane w pliku ibdata1 , który nie jest automatycznie czyszczony po usunięciu danych z bazy danych.

Administrowanie taką bazą danych jest niewygodne. Musisz przynajmniej skonfigurować przechowywanie każdej tabeli w osobnym pliku. Zrobimy to dalej, a jednocześnie zaktualizujemy serwer bazy danych do najnowszej wersji mariadb i naprawimy bazę danych, zmniejszając jej rozmiar.

Aktualizacja i konfiguracja serwera mysql

W tym przykładzie używam serwera CentOS 7. Ze standardowych repozytoriów zainstalowana jest raczej stara wersja MariaDB 5.5. Na początek zaktualizujemy go do najnowszej stabilnej wersji w momencie pisania wersji 10.2. Wcześniej zrobimy pełną kopię zapasową bazy danych zabbix, najpierw zatrzymując serwer.

# systemctl stop zabbix-server # / usr / bin / mysqldump --opt -v --databases zabbix -uzabbix -ppassword> /root/zabbix.sql

Teraz usuń z serwera mysql wszystkie bazy danych z wyjątkiem systemu.

# mysql -uroot -ppassword> pokaż bazy danych; + -------------------- + | Baza danych | + -------------------- + | information_schema | | mysql | | performance_schema | | zabbix | + -------------------- +> upuść bazę danych zabbix; > upuść schemat wydajności bazy danych;

Usuń stare pliki bazy danych zabbix.

# rm / var / lib / mysql / ibdata1 # rm / var / lib / mysql / ib_logfile0 # rm / var / lib / mysql / ib_logfile1

Zaczynamy aktualizować serwer. Dodajemy do systemu repozytorium MariaDB. Aby to zrobić, utwórz plik /etc/yum.repos.d/mariadb.repo o następującej treści:

[mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.2/centos7-amd64 gpgkey = https: //yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck = 1

Zainstaluj aktualizację:

# yum zainstaluj klienta MariaDB-serwer MariaDB

Następnie oferuję moją wersję konfiguracji dla serwera mysql. Umieść go w katalogu /etc/my.cnf.d .

# cat /etc/my.cnf.d/zabbix.cnf [klient] port = 3306 socket = /var/lib/mysql/mysql.sock default-character-set = utf8 [mysqld] character_set_server = utf8 collation-server = utf8_bin init_connect = "SET NAMES utf8 collate utf8_bin" port = 3306 socket = /var/lib/mysql/mysql.sock back_log = 50 pominięcie sieci max_connections click_ext_cryen_cryen_cen_cache = 2048 max_allowed_cachestan_capen_cache = 2048 max_allowed_pile_file_file 4M read_rnd_buffer_size = 32M sort_buffer_size = 16M join_buffer_size = 16M thread_cache_size = 4 ft_min_word_len = 4 long_query_time = 10 id-serwera = 1 innodb_file_per_table = 1 innodb_file_format = barracuda innodb_buffer_pool_size = 4G # uwaga na parametr! ustawić około 2 razy mniej niż serwer RAM innodb_buffer_pool_instances = 2 innodb_flush_log_at_trx_commit = 0 innodb_log_file_size = 512M innodb_log_files_in_group = 3 innodb_flush_method = O_DSYNC innodb_lock_wait_timeout = 120 [mysqldump] szybkie max_allowed_packet = 16M [mysql] no-auto-mikstura safe aktualizacje [myisamchk] key_buffer_size = 512M sort_buffer_size = 512M read_buffer = 8M write_buffer = 8M [mysqlhotcopy] interactive-timeout [mysqld_safe] open-files-limit = 8192

Natychmiast ostrzegam was, że mariadb nie ma uniwersalnych ustawień. Nie jestem wielkim ekspertem w zakresie ulepszania mysql i nie rozumiałem szczegółowo, jak zoptymalizować pracę z zabbix. Szczególnie niesprawdzona wydajność o różnych parametrach. Ten przykład to zbiór zaleceń otrzymanych z różnych źródeł. Sam korzystam z tej konfiguracji i nie mam żadnych skarg na ten temat, więc udostępniam Ci. Być może jest tu coś, co w ogóle nie pasuje i wymaga zmiany. Jeśli to widzisz, podziel się informacjami.

Będzie to na ogół świetne, jeśli ktoś oferuje bardziej optymalną konfigurację dla zabbix. Chociaż rozumiem, że ustawienia będą w dużej mierze zależały od parametrów serwera (głównie pamięć i procesor). Muszą być wybrane w każdym przypadku. W sytuacji standardowej instalacji zabbix, gdy nie występują problemy z wydajnością, nie chcę tego robić.

Uruchomimy serwer mariadb.

# systemctl start mariadb

Jeśli serwer się nie uruchamia, w błędzie dziennika / var / log / messages :

[BŁĄD] Silnik Aria nie jest włączony. Mysqld został skonfigurowany przy użyciu tabel --with-aria-tmp

Usuń pliki aria_log .

# rm /var/lib/mysql/aria_log.00000001 # rm / var / lib / mysql / aria_log_control

I znowu biegnij mariadb. Możesz sprawdzić stan uruchomienia za pomocą polecenia:

# statusctl status mariadb

# statusctl status mariadb

Serwer został uruchomiony. Jest kilka komentarzy, naprawimy je później. Teraz przywróć bazę danych zabbix z pobierania.

# mysql -uroot -ppassword </root/zabbix.sql

Uruchom narzędzie mysql_upgrade , aby wygenerować nową bazę danych performance_schema.

# mysql_upgrade -uroot -ppassword --force

Uruchom ponownie mariadb.

# systemctl restart mariadb

Uruchomimy serwer zabbix.

# systemctl uruchom zabbix-server

Sprawdzamy pracę. Teoretycznie wszystko powinno być w porządku. Baza danych zabbix jest teraz przechowywana w katalogu / var / lib / mysql / zabbix . Zmniejszył się rozmiar, a każda tabela jest przechowywana w osobnym pliku.

Wniosek

Nie podobał mi się ten artykuł i chcesz mnie nauczyć administrować? Proszę, uwielbiam studiować. Komentarze do Twojej dyspozycji. Powiedz mi, jak to zrobić dobrze!

Opisałem prostą metodę czyszczenia i niewielki wzrost wydajności bazy danych zabbix. Ten problem jest zasadniczo rozwiązany przez partycjonowanie bazy danych mysql. Możesz przeczytać więcej na ten temat na stronie zabbiks w sekcji wiki. howto . Nie ma w tym nic skomplikowanego, jest wiele przykładów w sieci, ale osobiście nigdy się nie ustawiłem, nie było potrzeby.

Czy artykuł pomógł? Istnieje możliwość dziękuję autor

Kurs online „DevOps praktyki i narzędzia”

Jeśli chcesz dowiedzieć się, jak budować i utrzymywać wysoce dostępne i niezawodne systemy, dowiedzieć się, jak stale dostarczać oprogramowanie, monitorować i logować aplikacje internetowe, polecam zapoznanie się z kursem online „DevOps praktyki i narzędzia” w OTUS. Kurs nie jest przeznaczony dla początkujących, ponieważ wstęp wymaga podstawowej wiedzy na temat sieci i instalacji Linuksa na maszynie wirtualnej. Szkolenie trwa 5 miesięcy, po których udani absolwenci kursu będą mogli przeprowadzać wywiady z partnerami. Sprawdź się podczas testu wstępnego i zobacz program, aby uzyskać więcej szczegółów.

Czy artykuł pomógł?
Меню сайта
Мини-профиль
  • Регистрация Напомнить пароль?

    Бесплатно можно смотреть фильмы онлайн и не забудьте о шаблоны dle на нашем ресурсе фильмы бесплатно скачать c лучшего сайта
    Опросы
    Топ новости