1

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

这里是我的配置文件 /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

当我understool时,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
-------------------+-----------------+-------+-------------+--------------------

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

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 中创建。

我的配置有问题吗?这很奇怪,因为它不是我的第一个集群,并且在其他集群上所有写入都转到主服务器(但侦听器正在运行)。我不太了解“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 上完成

4

2 回答 2

0

感谢 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

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

关于监听器未运行的解决方案是更新问题。

于 2016-11-29T12:04:04.967 回答
0

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

如果启用信息日志并检查日志文件没有提供任何线索,我建议在Maxscale Jira上打开错误报告。

于 2017-09-11T05:40:19.307 回答