LoginSignup
0
0

More than 5 years have passed since last update.

MariaDBのレプリケーションが切れてるのに切れてないっぽく見える件

Last updated at Posted at 2019-03-19

MariaDB でレプリケーションが切断されているのに、ステータスを見る限り問題ないように見える現象が発生したのでメモ。

構成

[データセンターA]
Master DB
Slave DB 2

[データセンターB]
Slave DB 3
Slave DB 4

現象

  1. データセンターAで30分程度のネットワーク障害が発生
    その間データセンターB の Slave DB から Master DB への接続が出来なくなる
  2. 復旧後、データセンター B の Slave DB 2台のデータが更新されない状況が発生。

これだけ見ると、レプリケーションが切れたんじゃねーの?って話です。
実際、再接続すればOKなのですが、ステータスを見る限りレプリケーションが切れてるようには見えなかったので困りました。

show slave status を見た限りでは問題無さそう

と言う訳で、現象発生時の show slave status がこちら。

MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 123.456.789.012
                  Master_User: slaveuser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000617
          Read_Master_Log_Pos: 725712009
               Relay_Log_File: relay-bin.000784
                Relay_Log_Pos: 725712301
        Relay_Master_Log_File: mysql-bin.000617
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 725712009
              Relay_Log_Space: 725712644
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: Yes
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: /etc/mysql/ssl/client-cert.pem
            Master_SSL_Cipher: 
               Master_SSL_Key: /etc/mysql/ssl/client-key.pem
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
                   Using_Gtid: No
                  Gtid_IO_Pos: 
      Replicate_Do_Domain_Ids: 
  Replicate_Ignore_Domain_Ids: 
                Parallel_Mode: conservative

(一部適当に変更してます…)

これを見る限りレプリケーションが停止しているようには見えない。

             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

だし

        Seconds_Behind_Master: 0

だし。

でも、

          Read_Master_Log_Pos: 107817893

が更新されないのです。

マスター側で show master status した際の値はどんどん更新されていくので、本来であれば Read_Master_Log_Pos も更新されるはず。

show slave hosts を見ると…

こうなると、レプリケーションは上手く行ってないことは確実なのですが、現象が良く分かりません。

一応、マスター側で何か分からないかなと思い、show slave hosts を打った結果が下記のような感じ。

> show slave hosts;
+-----------+------+------+-----------+
| Server_id | Host | Port | Master_id |
+-----------+------+------+-----------+
|         2 |      | 3306 |         1 |
+-----------+------+------+-----------+

本来、スレーブ DB は3台あるのはずなのですが、1台しか出てきません。

データセンター B にある slave db 3 と 4 は接続が切れていると言う事ですね。

謎です…

なんでこの状況で

             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

なのか。

一応

> stop slave;
> start slave;

で復旧はしました。

が、モニタリングを考えないとダメだなと。

今までは、

             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

だったら、レプリケーションは動いている。

で、

        Seconds_Behind_Master: 0

だったら、遅延もしてない。

みたいな感じで考えてましたけど、それだと今回のようなケースは拾えないですね…

ちなみに、エラーログも見てみましたがマスタースレーブ共にそれらしきエラーはなし。

困った。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0