Maxscale 正在使用 router_options=master(slave/master 复制)在 slave 上写入并且听众停止

Maxscale is writing on slave with router_options=master (slave/master replication) and listeners stopped

我在 2 台服务器上进行了配置(srv50/51), 其中一个是Master,第二个是slave,

这里是我配置文件的配置/etc/maxscale.cnf :

[Read-Only Service]
type=service
router=readconnroute
servers=server50, server51
user=YYYYYYYYYYYYY
passwd=XXXXXXXXXXXXXX
router_options=slave

[Write-Only Service]
type=service
router=readconnroute
servers=server50, server51
user=YYYYYYYYYYYYY
passwd=XXXXXXXXXXXXXX
router_options=master

[Read-Only Listener]
type=listener
service=Read-Only Service
protocol=MySQLClient
port=4008

[Write-Only Listener]
type=listener
service=Write-Only Service
protocol=MySQLClient
port=4009

据我了解 router_options 看谁是高手 发文询问给高手

Maxscale(通过 maxadmin)似乎发现了 2 个服务器并了解 一个是主服务器:

MaxScale> list servers
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server             | Address         | Port  | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server51           | 192.168.0.51    |  3306 |           0 | Slave, Running
server50           | 192.168.0.50    |  3306 |           0 | Master, Running
-------------------+-----------------+-------+-------------+--------------------

但是即使我在本地的 Mysql 连接到我的 Maxscale 只写侦听器端口 (4009),侦听器处于停止模式,这正常吗?

MaxScale> list listeners
Listeners.
---------------------+--------------------+-----------------+-------+--------
Service Name         | Protocol Module    | Address         | Port  | State
---------------------+--------------------+-----------------+-------+--------
Read-Only Service    | MySQLClient        | *               |  4008 | Stopped
Write-Only Service   | MySQLClient        | *               |  4009 | Stopped
MaxAdmin Service     | maxscaled          | *               |  6603 | Running
---------------------+--------------------+-----------------+-------+--------

我尝试在 srv51(从属)中创建数据库,但它仅在 srv51 上创建,而不是在 srv50 中创建。

我的配置有问题吗?这很奇怪,因为它不是我的第一个集群,在其他集群上所有写入都转到 master(但听众是 运行)。 "router_options=master" 的意思我不是很明白吗?如何开始听众?我更喜欢将 51 保留在写入列表中以检测拓扑变化

=====更新=====

看完日志文件后/var/log/maxscale/maxscale1.log 我发现我的监控用户没有正确的密码:

[MySQL Monitor]
type=monitor
module=mysqlmon
servers=server50, server51
user=MONITOR
passwd=MONITOR_PASS
monitor_interval=10000

我更正了用户密码并重新启动了 maxscale,现在一切都是 运行 :

MaxScale> list listeners
Listeners.
---------------------+--------------------+-----------------+-------+--------
Service Name         | Protocol Module    | Address         | Port  | State
---------------------+--------------------+-----------------+-------+--------
Read-Only Service    | MySQLClient        | *               |  4008 | Running
Write-Only Service   | MySQLClient        | *               |  4009 | Running
MaxAdmin Service     | maxscaled          | *               |  6603 | Running
---------------------+--------------------+-----------------+-------+--------

但是写入查询仍然是在 Slave 上完成的,而不是在 Master 上完成的

感谢 MariaDb 的支持,我尝试这样连接:

mysql -h localhost --port=4009 -u USER -p

但是 Maxscale 和 Mysql 安装在同一台服务器上,即使 Mysql 绑定端口 3306,当您指定 'localhost' 时,连接也会在 Mysql 上完成端口 3306 而不是 Maxscale 端口 4009,该端口被忽略 !!

解决方法是这样连接:

mysql -h 127.0.0.1 --port=4009 -u USER -p

或者像这样:

mysql -h localhost --protocol=tcp --port=4009 -u USER -p

我已经尝试了两种解决方案,它们都有效。

关于listener not 运行的解决方法在问题的更新中。

如果写入是在从服务器上完成的,最简单的解释就是您在错误的端口上执行写入或您的配置有误。要诊断这些问题,请通过在 [maxscale] 部分下添加 log_info=true 来启用信息日志级别。

如果启用信息日志并检查日志文件没有提供任何线索,我建议在 Maxscale Jira.

上打开错误报告