---
1. Проверить текущее потребление памяти
- Используйте команду
topилиhtop, чтобы подтвердить, что MariaDB действительно потребляет 90% памяти. - Проверьте текущую конфигурацию MariaDB:
mysql -u root -p -e "SHOW VARIABLES LIKE '%buffer_pool_size%';"
mysql -u root -p -e "SHOW VARIABLES LIKE '%cache%';"
Это покажет текущие значения innodb_buffer_pool_size, query_cache_size и других параметров, влияющих на память.
---
2. Определить объем оперативной памяти
- Узнайте общий объем оперативной памяти на сервере:
free -m
Например, если у вас 16 ГБ (16384 МБ) оперативной памяти, то 80% = ~13 ГБ (13312 МБ).
---
3. Настроить innodb_buffer_pool_size
- Основной параметр, который нужно настроить, — это
innodb_buffer_pool_size. Рекомендуется установить его на уровне 60–80% от общей оперативной памяти, оставляя место для ОС и других процессов. - Откройте файл конфигурации MariaDB (обычно
/etc/my.cnfили/etc/my.cnf.d/server.cnf):
sudo nano /etc/my.cnf
- Найдите или добавьте секцию
[mysqld]и установите параметрinnodb_buffer_pool_size. Например, для 13 ГБ:
[mysqld]
innodb_buffer_pool_size=13G
Если у вас меньше памяти (например, 8 ГБ), установите значение около 6–6.4 ГБ:
innodb_buffer_pool_size=6G
---
4. Дополнительные параметры для оптимизации памяти
- Отключить или уменьшить кэш запросов (устаревший в новых версиях MariaDB, но может быть включен):
query_cache_size=0
query_cache_type=0
- Ограничить размер временных таблиц:
tmp_table_size=64M
max_heap_table_size=64M
- Уменьшить количество соединений, если их слишком много:
max_connections=100
- Ограничить память для сортировки:
sort_buffer_size=512K
read_rnd_buffer_size=256K
join_buffer_size=256K
---
5. Перезапустить MariaDB
После внесения изменений сохраните файл и перезапустите службу MariaDB:
sudo systemctl restart mariadb
---
6. Проверить эффект изменений
- После перезапуска снова проверьте потребление памяти:
top
или
free -m
- Убедитесь, что MariaDB теперь использует не более 80% памяти.
---
7. Мониторинг и тюнинг
- Используйте утилиту
mysqltunerдля дополнительной оптимизации:
sudo yum install mysqltuner
mysqltuner
Она предложит рекомендации по настройке параметров в зависимости от текущей нагрузки.
- Если алерт продолжает срабатывать, проверьте, не вызвано ли это другими процессами или утечками памяти. Используйте
ps aux --sort=-%mem | headдля анализа.
---
=============
если у вас настроен Galera Cluster для MariaDB, изменения конфигурации, описанные ранее (например, настройка innodb_buffer_pool_size и других параметров памяти), применяются к каждому инстансу (узлу) кластера индивидуально. Galera Cluster состоит из отдельных узлов, каждый из которых работает как самостоятельный экземпляр MariaDB со своей собственной конфигурацией. Поэтому вам нужно учесть несколько важных моментов:
---
1. Применение изменений к каждому узлу
- Параметры в файле
my.cnf(или/etc/my.cnf.d/server.cnf) задаются для каждого узла отдельно. Если вы хотите, чтобы MariaDB на всех узлах кластера использовала до 80% памяти, необходимо: - Внести изменения в конфигурационный файл на каждом узле.
- Убедиться, что объем памяти, выделяемый для
innodb_buffer_pool_sizeи других параметров, соответствует доступной оперативной памяти на каждом сервере (если узлы имеют разное оборудование, настройки могут отличаться). - Например, если у вас три узла с 16 ГБ RAM на каждом, настройте
innodb_buffer_pool_size=13Gв файлеmy.cnfна каждом узле.
---
2. Синхронизация конфигурации
- Для согласованности работы кластера рекомендуется, чтобы конфигурации всех узлов были максимально идентичны (за исключением параметров, связанных с индивидуальными настройками узлов, таких как
wsrep_node_address). - Если вы измените параметры только на одном узле, это может привести к:
- Несбалансированному потреблению памяти (один узел будет использовать больше/меньше ресурсов, что может повлиять на производительность).
- Потенциальным проблемам с репликацией или синхронизацией, если настройки сильно различаются.
---
3. Перезапуск узлов в Galera Cluster
- Перезапуск службы MariaDB для применения изменений нужно выполнять осторожно, чтобы не нарушить работу кластера:
1. Перезапускайте узлы по одному (rolling restart), чтобы кластер оставался доступным.
2. Убедитесь, что узел синхронизировался с кластером после перезапуска:
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_status';"
Значение Primary указывает, что узел в порядке и синхронизирован.
3. Команда для перезапуска на каждом узле:
sudo systemctl restart mariadb
---
4. Особенности Galera Cluster
- Память для репликации: Galera Cluster использует дополнительную память для механизма репликации (например, для кэширования write-set’ов). Параметр
wsrep_slave_threadsвлияет на количество потоков репликации, что также может влиять на потребление памяти. Рекомендуется оставить его в разумных пределах (например, 2–4 потока на узел, в зависимости от числа CPU). - Общие параметры памяти: Параметры, такие как
innodb_buffer_pool_size,tmp_table_size,query_cache_sizeи т.д., действуют только на локальном узле и не синхронизируются между узлами. - Мониторинг: Используйте
SHOW STATUS LIKE 'wsrep_%';для проверки состояния кластера и убедитесь, что изменения в конфигурации не вызывают проблем с синхронизацией.
---
5. Рекомендации для Galera Cluster
- Рассчитайте память для каждого узла: Если узлы имеют одинаковую конфигурацию, установите
innodb_buffer_pool_sizeна 60–80% от RAM на каждом узле (например, 13 ГБ для 16 ГБ RAM). Если узлы различаются по объему памяти, настройте пропорционально. - Проверьте параметры Galera:
[mysqld]
# Параметры для Galera
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://node1,node2,node3"
# Память
innodb_buffer_pool_size=13G
query_cache_size=0
tmp_table_size=64M
max_heap_table_size=64M
max_connections=100
- Тестирование: Внесите изменения на одном узле, протестируйте производительность и потребление памяти, затем примените к остальным узлам.
- Мониторинг: Используйте инструменты вроде
mysqltunerилиpt-mysql-summaryдля анализа потребления ресурсов на каждом узле.
---
6. Проверка результата
- После настройки каждого узла проверьте потребление памяти на всех узлах:
free -m
top
- Убедитесь, что ни один узел не превышает 80% использования RAM.
- Проверьте состояние кластера:
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_local_state_comment';"
Ожидаемое значение: Synced.
---
7. Дополнительные советы
- Если корпоративный алерт продолжает срабатывать, проверьте, не связан ли он с пиковыми нагрузками или другими процессами на серверах.
- Для автоматизации применения одинаковой конфигурации на всех узлах используйте инструменты управления конфигурацией (Ansible, Puppet, Chef).
- Если кластер обслуживает высоконагруженное приложение, протестируйте изменения на staging-окружении, чтобы избежать влияния на производительность.
[file-name 000148_2025-06-02_07-08-34.txt]