Поскольку трафик в моей электронной коммерции (PrestaShop) продолжает расти, а навигация становится медленной, я решил после прочтения многих сообщений здесь отделить свой веб-сервер от сервера БД. Я установил удаленное соединение с MySQL. Оба сервера находятся в одном центре обработки данных и имеют между собой пинг менее 1 мс.
Когда я переключаю БД на новый удаленный сервер, все идет очень медленно,
Я пропустил разрешение имени в конфигурации my.cnf, но ничего заметно не изменилось. любое действие на веб-сайте загружается более 10 секунд
Что мне не хватает? Это из-за PrestaShop? Как тогда я могу улучшить доступность моего сервера? Должен ли я просто балансировать нагрузку между серверами с Интернетом и БД в одном ящике?
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0
[mysqld]
#
# * Basic Settings
#
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
#skip_name_resolve
skip-name-resolve
#bind-address = 127.0.0.1
#
# * Fine Tuning
#
key_buffer = 16M
max_allowed_packet = 16M
thread_stack = 192K
thread_cache_size = 8
myisam-recover = BACKUP
#max_connections = 100
#table_cache = 64
#thread_concurrency = 10
# * Query Cache Configuration
#
query_cache_limit = 1M
query_cache_size = 16M
#general_log_file = /var/log/mysql/mysql.log
#general_log = 1
log_error = /var/log/mysql/error.log
#slow_query_log_file = /var/log/mysql/mysql-slow.log
#slow_query_log = 1
#long_query_time = 2
#log_queries_not_using_indexes
#server-id = 1
#log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
#binlog_do_db = include_database_name
#binlog_ignore_db = include_database_name
# chroot = /var/lib/mysql/
# ssl-ca=/etc/mysql/cacert.pem
# ssl-cert=/etc/mysql/server-cert.pem
# ssl-key=/etc/mysql/server-key.pem
[mysqldump]
quick
quote-names
max_allowed_packet = 16M
[mysql]
#no-auto-rehash # faster start of mysql but no tab completition
[isamchk]
key_buffer = 16M
[mysql]
#no-auto-rehash # faster start of mysql but no tab completition
Я не получаю потери пакетов между серверами.
Как я мог должным образом исследовать и найти причины этой медлительности?
Мои серверы на Debian 8:
Процессор: Intel 2x Xeon E5-2630v3 - 16c / 32t - 2,4 ГГц / 3,2 ГГц
Оперативная память: 128Go DDR4 ECC 1866 МГц
Диск: SoftRaid 2x2To SSD
На ваш вопрос нет однозначного ответа, так как информации просто недостаточно. Однако вместо того, чтобы сосредоточиться на сети как на основной причине вашей проблемы, я лучше изучу конфигурацию MySQL на новом сервере. Обычно это в /etc/mysql/my.cnf
(или похожие). Сравните обе версии старой и новой установки. Может нужно увеличить пул подключений что ли?
Прежде всего проверьте настройки, если вы уверены, что в сети нет узких мест.
Если второй сервер - это новая установка, возможно, никто не будет изменять настройки на этом сервере.
Вторичный вы можете получить хорошие результаты, если разделите трафик.
Например:
interfaceA веб-сервера, подключенного напрямую к интерфейсу сервера БД
interfaceB веб-сервера, используемого для обработки веб-запросов
Попробуйте запустить запрос MySQL вручную с сервера приложений на сервер базы данных с помощью mysql
такую команду и определите, как она будет выполняться:
time mysql -u'username' -p'password' -e'show status'
Кроме того, убедитесь, что нет ограничений, таких как правила брандмауэра для ограничения скорости сети.
Ознакомьтесь с протоколом сжатия MySQL - это удобно, когда есть множество записей для возврата на веб-страницу с внешнего сервера (особенно WAN)
https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-connections.html
Если установлено значение true (или 1), этот параметр включает сжатие всей информации, передаваемой между клиентом и сервером, если оба поддерживают сжатие. По умолчанию сжатие отсутствует (false или 0). Если вы подключаетесь с использованием параметров команды, эквивалентным параметром является --compress (-C). Сжатие доступно только для соединений MySQL Shell, использующих классический протокол MySQL. Вы можете установить параметр конфигурации defaultCompress MySQL Shell, чтобы включить сжатие для каждого глобального сеанса. Команда MySQL Shell \ status показывает, включено ли сжатие для сеанса.