随着我的电子商务 (PrestaShop) 的流量不断增长,导航开始变得缓慢,在阅读了这里的许多帖子后,我决定将我的 Web 服务器与我的 DB 服务器分开。我确实设置了 MySQL 远程连接。两台服务器都在同一个数据中心,彼此之间的 ping 时间不到 1ms。
当我将数据库切换到新的远程服务器时,一切都变得非常慢,
我在 my.cnf 配置中执行了 skip-name-resolve,但没有任何明显的变化。网站上的任何操作都需要超过 10 秒才能加载
我错过了什么?是因为 PrestaShop 吗?那么我该如何提高服务器可用性?我是否应该只在同一个框中的 Web 和 DB 服务器之间进行负载平衡?
[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:
CPU:Intel 2x Xeon E5-2630v3 - 16c/32t - 2,4GHz /3,2GHz
RAM:128Go DDR4 ECC 1866 MHz
磁盘:SoftRaid 2x2To SSD
答案1
检查 MySQL 压缩协议 - 当有大量记录需要从外部服务器(尤其是 WAN)返回到网页时非常方便
https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-connections.html
当设置为 true(或 1)时,如果客户端和服务器都支持压缩,则此选项将启用对客户端和服务器之间发送的所有信息的压缩。默认值为无压缩(false 或 0)。如果您使用命令参数进行连接,则等效参数为 --compress (-C)。压缩仅适用于使用经典 MySQL 协议的 MySQL Shell 连接。您可以设置 defaultCompress MySQL Shell 配置选项以为每个全局会话启用压缩。MySQL Shell \status 命令显示是否为会话启用了压缩。
答案2
尝试使用如下命令从应用程序服务器向数据库服务器手动运行 MySQL 查询,mysql
并确定运行需要的时间:
time mysql -u'username' -p'password' -e'show status'
另外,确保没有防火墙规则等对网络速率的限制。
答案3
首先检查设置,看看是否确定没有网络瓶颈。
如果第二台服务器是全新安装,那么可能没有人调整该服务器上的设置。
其次,如果您分离流量,您就可以获得良好的结果。
例如:
直接连接到 DB 服务器接口的 Web 服务器接口
Web服务器的接口B,用于处理Web请求
答案4
由于信息不足,所以无法明确回答您的问题。但是,我宁愿调查新服务器上的 MySQL 配置,而不是将重点放在网络作为问题的根本原因上。通常,它是 in /etc/mysql/my.cnf
(或类似)。比较旧安装和新安装的两个版本。也许您需要增加连接池或其他东西?