Maxscale пишет на подчиненном устройстве с router_options=master (репликация подчиненного устройства /master), и слушатели остановлены
Я настроил на 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
Когда я недооцениваю 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 (slave), и она была создана только на 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
---------------------+--------------------+-----------------+-------+--------
Но запрос записи все еще выполняется на подчиненном, а не на главном
2 ответа
Благодаря поддержке 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
Я пробовал оба решения, и они работают.
Решение о том, что слушатель не работает, заключается в обновлении вопроса.
Если запись выполняется на ведомых устройствах, простейшим объяснением будет то, что вы выполняете запись на неправильный порт или ваша конфигурация неверна. Чтобы диагностировать эти проблемы, включите уровень информационного журнала, добавив log_info=true
под [maxscale]
раздел.
Если включение информационного журнала и проверка файлов журнала не дает никаких подсказок, я бы предложил открыть отчет об ошибках в Maxscale Jira.