2

请帮忙。

我已经使用maxscale了一个月,但是今天发生了一些事情。它不工作。然后我看到了以下错误:

这是我来自 Spring Boot 错误日志的错误日志:

org.springframework.dao.DataAccessResourceFailureException:
### Error querying database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Connection killed by MaxScale: Router could not recover from connection errors
### The error may exist in com/gop/exchange/mapper/MatchResultMapper.xml
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: select max(price)   maxPrice ,min(price) minPrice ,sum(number) amount   ,max(id)   closeid,min(id) openid from match_result_udc_iep where   create_time   >=   ?   and create_time < ?
### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Connection killed by MaxScale: Router could not recover from connection errors
; SQL []; Connection killed by MaxScale: Router could not recover from connection errors; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Connection killed by MaxScale: Router could not recover from connection errors
        at org.springframework.jdbc.support.SQLExceptionSubclassTranslator.doTranslate(SQLExceptionSubclassTranslator.java:79) ~[spring-jdbc-4.3.7.RELEASE.jar!/:4.3.7.RELEASE]
        at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73) ~[spring-jdbc-4.3.7.RELEASE.jar!/:4.3.7.RELEASE]
        at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) ~[spring-jdbc-4.3.7.RELEASE.jar!/:4.3.7.RELEASE]

我的 maxscale 版本:2.2.12 我的 maxscale 版本 maxscale 配置是:

[maxscale]
threads=auto

[server1]
type=server
address=192.168.133.15
port=3306
protocol=MySQLBackend

[server2]
type=server
address=192.168.133.16
port=3306
protocol=MySQLBackend

[MariaDB-Monitor]
type=monitor
module=mariadbmon
servers=server1,server2
user=maxscale_wx
passwd=05166D59D2C9BBB7B5BB77072AA5BF48
monitor_interval=10000 #监控心态10秒
backend_connect_attempts=3


[Read-Write-Service]
type=service
router=readwritesplit
router_options=master_accept_reads=true
servers=server1,server2
user=maxscale_route
passwd=05166D59D2C9BBB7B5BB77072AA5BF43
max_connections=3000


[MaxAdmin-Service]
type=service
router=cli
connection_timeout=300
max_connections=100

[Read-Write-Listener]
type=listener
service=Read-Write-Service
protocol=MySQLClient
port=4006

[MaxAdmin-Listener]
type=listener
service=MaxAdmin-Service
protocol=maxscaled
socket=default

谢谢。

4

2 回答 2

0

我遇到了同样的问题。但是,我使用 python 而不是 java 进行编程,并使用 sqlalchemy(一个 ORM 工具包)来处理数据库。

我使用连接池进行连接。看来这就是问题的原因。

从文档中,我们可以看到服务器必须为池连接设置 persistpoolmax 和 persistmaxtime 选项。

所以我为所有服务器添加了这两个选项,例如:

[server1]
type=server
address=slave1
port=3306
protocol=MariaDBBackend
persistpoolmax=100
persistmaxtime=3600

在我的程序中,连接回收时间等于persistmaxtime。

您可以从https://mariadb.com/kb/en/mariadb-maxscale-14/maxscale-administration-tutorial/#persistent获得更多信息,

于 2020-10-15T12:18:15.313 回答
0

错误消息Connection killed by MaxScale: Router could not recover from connection errors告诉我们,readwritesplit 路由器遇到了无法恢复的网络连接错误。大多数情况下,这意味着与主服务器的连接丢失。

查看 MaxScale 日志文件,/var/log/maxscale/maxscale.log查看在客户端错误时是否存在与 MaxScale 中配置的服务器相关的任何错误。如果错误与超时有关,则将backend_connect_timeoutbackend_read_timeout增加到更高的值可能会解决它。

于 2018-09-11T21:48:17.087 回答