做了个小项目,tp6+redis+mysql,前台端分离,mysql 数据库与php项目部署不在同一个机子上

CentOS+MySQL和CentOS+php两台机子 

mysql内网无法访问 连接内网mysql_DNS

访问非常慢,不但SSH慢,MySQL连接也慢。内网连接不应该这么慢才对

故障描述:

    我参与项目做完后测试反映,测试环境下访问 http://192.168.88.192 很慢。我测试了一下,确实很慢。

    192.168.88.192这台服务器上装有lnmp所以都是走本地的,而且是内网的测试服务器没有负载,所以应该不会出现慢的情况。

排查过程:

    我使用这台服务器上的mysql客户端连入mysqld,使用命令查询数据很快。

    查看了程序链接mysqld的配置,发现是用192.168.88.192这个ip,我就修改成了127.0.0.1 ,后来发现程序速度明显快了很多。

把程序中连接mysqld的配置修改为192.168.88.192,并在/etc/hosts 加入'192.168.88.192 localhost',修改后速度确实也是很快的。

mysql内网无法访问 连接内网mysql_DNS_02

主要是DNS的问题,因为是内网的服务器,无法访问DNS服务器。

解决办法:

1:SSH慢的处理

修改一下SSH的配置,关闭DNS,另外按网上的说法,连GSSAPI验证一并关掉。操作如下:

 

vi /etc/ssh/sshd_config

将UseDNS和GSSAPIAuthentication都设置为no。

1. #GSSAPIAuthentication yes
2. GSSAPIAuthentication no
3. #UseDNS yes
4. UseDNS no

然后,重启SSH服务。

/etc/init.d/sshd restart

2:MySQL慢的处理

在mysqld节增加一句话,不使用DNS即可。

1. [mysqld]
2. skip-name-resolve
3. skip-grant-tables

 

说明:skip-name-resolve 选项就能禁用DNS解析,连接速度会快很多。不过,这样的话就不能在MySQL的授权表中使用主机名了而只能用ip格式。

若使用–skip-grant-tables系统将对任何用户的访问不做任何访问控制,但可以用 mysqladmin flush-privileges或mysqladmin reload来开启访问控制;默认情况是show databases语句对所有用户开放,

如果mysql服务器没有开远程帐户,就在my.cnf里面加上skip-grant-tables 

/etc/init.d/mysqld restart

mysql内网无法访问 连接内网mysql_DNS_03

3.遇到DNS解析导致慢解决思路

 查看服务器的/etc/resolv.conf ,配置是192.168.88.192作为dns,可能是网络变更后dns是192.168.77.192。于是便修改了dns配置。

    但是后来又发现网卡的掩码也不对,导致无法ping通192.168.88.192,于是便将网卡的配置重新修改了一下。

    故障彻底恢复。

    最后,通过抓包发现有很多反向解析的记录。

mysql内网无法访问 连接内网mysql_mysql_04

结论:

    在程序运行的过程中,都会做DNS的反向解析。而在DNS有问题的情况下,会导致DNS查询超时,从而导致程序访问起来非常慢。