环境描述:

mysql版本5.6.37    keepalived-1.2.19    系统centos 7:3.10.0-514.26.2.el7    web是:windows  server 2012  IIS

mysql部署了主从,使用keepalived做高可用,防止数据库故障。web中连接数据库使用了keepalived的VIP地址。

问题描述:

测试同事在测试时,发现网站的日志如下:

日志时间:2019-04-11 14:00:14,314 [29]
日志级别:ERROR
日 志 类:Logger [(null)]
Authentication to host '172.16.179.167' for user 'user' using method 'mysql_native_password' failed with message: Reading from the stream has failed.
MySql.Data.MySqlClient.MySqlException (0x80004005): Authentication to host '172.16.179.167' for user 'dcyy' using method 'mysql_native_password' failed with message: Reading from the stream has failed. ---> MySql.Data.MySqlClient.MySqlException (0x80004005): Reading from the stream has failed. ---> System.IO.IOException: 无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接。。 ---> System.Net.Sockets.SocketException: 远程主机强迫关闭了一个现有的连接。
在 System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)

尝试过:修改mysql的连接数,skip-name-resolve, 系统的内存够用,系统的ulimit 调整为最大值,包括在IIS中添加sslMode=none.  这个故障还是无法解决!

通过抓包分析:当web的请求发送到数据库后,完成3次握手以后,建立连接,然后开始走mysql协议,这时候WEB服务使用指定的用户和密码及数据库参数去访问数据库,然后直接被数据库发来RST包拒绝了。

查看抓取的包,访问使用是数据库协议是正确的。

正常情况下:数据库是应该给一个返回值的。不可能是RST。如下是正常情况下的抓包。

经用验证。把使用的keepalived的VIP地址,更换为主库的IP地址后,故障没再出现。现在是怎么解决这个问题。为什么keepalived的回应值是RST呢?

下面附加keepalived的配置文件:

主库上keepalived的配置如下:

[root@DB_M ~]# cat /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
# notification_email {
# acassen@firewall.loc
# failover@firewall.loc
#sysadmin@firewall.loc
#}
#notification_email_from Alexandre.Cassen@firewall.loc
#smtp_server 192.168.200.1
#smtp_connect_timeout 30
router_id i-tgwtglov
}

vrrp_instance VI_1 {
state BACKUP
interface ens192
virtual_router_id 51
priority 150
advert_int 3
nopreempt
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.16.179.167

}
}

virtual_server 172.16.179.167 3306 {
delay_loop 2
lb_algo wrr
lb_kind DR
persistence_timeout 7200
protocol TCP

real_server 172.16.179.165 3306 {
weight 3
notify_down /data/mysql/mysql.sh
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}

从库上keepalived的配置如下:

[root@DB_S ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
# notification_email {
# acassen@firewall.loc
# failover@firewall.loc
#sysadmin@firewall.loc
#}
#notification_email_from Alexandre.Cassen@firewall.loc
#smtp_server 192.168.200.1
#smtp_connect_timeout 30
router_id i-tgwtglov
}

vrrp_instance VI_1 {
state BACKUP
interface ens192
virtual_router_id 51
priority 50
advert_int 3
nopreempt
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.16.179.167

}
}

virtual_server 172.16.179.167 3306 {
delay_loop 2
lb_algo wrr
lb_kind DR
persistence_timeout 7200
protocol TCP

real_server 172.16.179.166 3306 {
weight 3
notify_down /data/mysql/mysql.sh
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}

请忽略配置了一个read_server ,做主从的目的就是防止mysql故障。环境就是只使用主库,当主库宕机后,才使用从库。

请大家帮忙看看!谁见过这个问题。该怎么处理啊。不然现在环境只用的主库的IP地址,keepalived就没用了。

keepalived+mysql主从环境,keepalived返回值是RST,需求解决方法?的更多相关文章

  1. mysql主从同步的键值冲突问题的解决方法

    转自https://njs375666635.iteye.com/blog/2242067 多主互备和主从复制有一些区别,因为多主中都可以对服务器有写权限,所以设计到自增长重复问题 出现的问题(多主自 ...

  2. Visual Studio 2013 Ultimate & IIS Express 8.0 错误 [iisexpress.exe”已退出,返回值为 -1073741816 (0xc0000008)] 解决方法

    1. 开发环境 Visual Studio 2013 Ultimate IIS 8.0 Express 2. 错误信息 错误提示:iisexpress.exe”已退出,返回值为 -1073741816 ...

  3. .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)

    最近在项目中与别的公司对接业务,对方是Java语言,需要调用对方的WebServices,结果常规的添加web引用的方法可以传过去值,但是返回值为null 查了很多资料,没有解决方法 思考应该是.Ne ...

  4. VS 返回值被忽略的解决方法

    •问题 用 Visual Studio 编写 C++ 代码的时候,一旦用到 scanf , freopen 等函数的时候,编译器总会不合时宜的给你提示 "返回值被忽略",那么该如何 ...

  5. Lvs+keepalived+mysql主从热备

    p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; f ...

  6. 监控Mysql主从环境下Slave延迟状态的操作记录

    在MySQL主从环境下,通常会根据Seconds_Behind_Master的值来判断slave的延迟状态,这么做在大部分情况下尚可接受,但其实是并不够准确的.对于Slave延迟状态的监控,应该考虑多 ...

  7. java通过jdbc访问mysql,update数据返回值的思考

    java通过jdbc访问mysql,update数据返回值的思考 先不说那么多,把Java代码贴出来吧. public static void main(String[] args) throws I ...

  8. 用 Docker 构建 MySQL 主从环境

    开源Linux 一个执着于技术的公众号 前言 本篇文章记录使用 docker-compose 以及 dockerfile 来构建基于 binlog 的 MySQL 主从环境.如果你严格按照文中的步骤进 ...

  9. 返回值是JSON的阿贾克斯方法

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

随机推荐

  1. java DOM

    使用DOM解析XML文档的步骤 1.创建解析器工厂对象 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 2 ...

  2. 记Weblogic部署BUG(websocket)

    将含有websocket的SSM项目部署在Weblogic上面,遇到websocket报错如下 java.lang.ClassCastException: org.springframework.se ...

  3. java中对类中成员的排序

    要求:编写一个程序.程序中定义一个类circle,其中有数据成员radius:创建一个有5个circle型元素的数组,其radius值分别为2.10.8.4.121.调用Arrays.sort()给这 ...

  4. C#控件之ComboBox控件使用

    首先如果要给ComboBox控件输入要显示的内容,方法是点击控件会显示如下图所示: 然后点击”编辑项”,如下所示: 下面在这里输入控件要显示的内容,即可. 如果要让ComboBox控件设置默认显示项, ...

  5. C语言的AT指令

    今天跟人聊嵌入式,对面是某国际硬盘生产商的嵌入式软件工程师,问了我很简单的问题,如何快速将一个变量赋给某个特定的地址. 按我们思路就是unsigned *a = address1:  *a = add ...

  6. Oracle编码

    三.解决数据库乱码原理特辑内容 3.1 前言 在解决数据库乱码问题中,涉及到三个方面的字符集:1.oracel server端的字符集:2.oracle client端的字符集:3.dmp文件的字符集 ...

  7. 使用Docker搭建LNMP开发环境

    1.什么是Docker Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技 ...

  8. 通过sql查找指定字段存在哪些表中

    select * from INFORMATION_SCHEMA.columns where COLUMN_NAME Like '%order_type%';

  9. PHP 多维数组排序 函数怎么保持数字键不被重新索引

    /** * 根据数组中的某个键值大小进行排序,仅支持二维数组 * * @param array $array 排序数组 * @param string $key 键值 * @param bool $a ...

  10. 简述grub启动引导程序配置及命令行接口详解

    一.版本 grub:Grand Unified Bootloader grub 0.x:grub legacy grub 1.x:grub2 二.grub legacy 三个过程 stage1:安装在 ...