programing

Maxscale이 router_options=master(slave/마스터 복제)가 있는 슬레이브에 쓰고 있으며 수신기가 중지되었습니다.

bestprogram 2023. 10. 4. 22:13

Maxscale이 router_options=master(slave/마스터 복제)가 있는 슬레이브에 쓰고 있으며 수신기가 중지되었습니다.

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개의 서버를 발견하고 마녀 1이 마스터임을 이해하는 것 같습니다.

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 Write-Only Listener 포트(4009)에서 로컬 Mysql로 연결해도 Listener가 Stoped 모드에 있습니다. 정상입니까?

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)에서 데이터베이스를 생성하려고 했는데 srv50이 아닌 srv51에서만 생성되었습니다.

내 구성에 무슨 문제라도 있습니까?첫 번째 클러스터가 아니기 때문에 이상하며, 다른 클러스터에서는 모두 마스터에게 기록됩니다(하지만 리스너는 실행 중입니다).router_options=master의 의미를 잘 이해하지 못합니까? 청취자를 시작하는 방법은 무엇입니까? 토폴로지 변경을 감지하기 위해 Write 목록에 51을 유지하는 것이 좋습니다.

===== 업데이트 =====

Log file /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
---------------------+--------------------+-----------------+-------+--------

그러나 쓰기 쿼리는 마스터가 아닌 슬레이브에서 여전히 수행됩니다.

MariaDb 지원 덕분에 다음과 같이 연결하려고 했습니다.

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

그러나 Maxscale & Mysql이 동일한 서버에 설치되었습니다. Mysql bind port 3306을 지정해도 'localhost'를 지정하면 Mysql port 3306에서 연결이 되고 Maxscale port 4009에서는 연결이 되지 않습니다. 포트가 ignore!!

해결책은 다음과 같이 연결하는 것입니다.

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에 대한 버그 보고서를 여는 것을 제안합니다.

언급URL : https://stackoverflow.com/questions/40843748/maxscale-is-writing-on-slave-with-router-options-master-slave-master-replicatio