MySQLレプリケーションアーキテクチャのデュアルプライマリモデル


MySQLレプリケーションアーキテクチャのデュアルプライマリモデル
デュアルマスターモデルの特性
  • 両ノードは互いに主従している:各ノードはそれぞれbinlog(バイナリログ)とrelay log(中継ログ)
  • を開く.
  • デュアルプライマリモデルは、2つのデータベースのデータが一致しない
  • を招きやすい.
  • デュアルプライマリ・モデルでは、プライマリ・キーまたはユニーク・キーとしてのフィールドの値タイプにINCREMENT(自己成長)が設定されている場合、2つのデータベースの同期時にプライマリ・キーまたはユニーク・キーが競合する可能性があります.これを回避するために、各ノードに対して自己成長値の開始オフセットと成長ステップ
  • を再定義します.
    デュアルプライマリモデルの実装手順
  • 最初のノードの構成
  • を変更する.
    vim /etc/my.cnf.d/server.cnf
    [mysqld]
    innodb_file_per_table=ON
    skip_name_resolve=ON
    #  serverid,            
    server_id=1
    log_bin=master-log
    relay_log=relay-log
    #     id     
    auto_increment_offset=1
    auto_increment_increment=2
  • 第2のノードの構成
  • を変更する.
    [mysqld]
    innodb_file_per_table=ON
    skip_name_resolve=ON
    
    server_id=2
    log_bin=master-log
    relay_log=relay-log
    #     id     
    auto_increment_offset=2
    auto_increment_increment=2
  • 両ノードにそれぞれレプリケーション権限を持つアカウントを作成
  • は、第1のノード(172.16.5.9)上で
  • を実行する.
    GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'repluser'@'172.16.50.10' IDENTIFIED BY 'replpass';
    FLUSH PRIVILEGES;
  • は、第2のノード(172.16.5.10)上で
  • を実行する.
    GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'repluser'@'172.16.50.9' IDENTIFIED BY 'replpass';
    FLUSH PRIVILEGES;
  • バイナリ・ログの状況を2つのノードで個別に表示
  • は、第1のノード
  • にある.
    SHOW MASTER STATUS;
    +-------------------+----------+--------------+------------------+
    | File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +-------------------+----------+--------------+------------------+
    | master-log.000003 |      507 |              |                  |
    +-------------------+----------+--------------+------------------+
  • は、第2のノード
  • にある.
    SHOW MASTER STATUS;
    +-------------------+----------+--------------+------------------+
    | File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +-------------------+----------+--------------+------------------+
    | master-log.000003 |      507 |              |                  |
    +-------------------+----------+--------------+------------------+
  • 相手が自分のメインノードである情報を設定する
  • は、第1のノード
  • にある.
    CHANGE MASTER TO MASTER_HOST='172.16.50.9',MASTER_USER='repluser',MASTER_PASSWORD='replpass',MASTER_PORT=3306,MASTER_LOG_FILE='master-log.000003',MASTER_LOG_POS=507;
  • は、第2のノード
  • にある.
    CHANGE MASTER TO MASTER_HOST='172.16.50.10',MASTER_USER='repluser',MASTER_PASSWORD='replpass',MASTER_PORT=3306,MASTER_LOG_FILE='master-log.000003',MASTER_LOG_POS=507;
  • IOスレッドとSQLスレッドをそれぞれ起動し、情報を表示
  • は、第1のノード
  • にある.
    START SLAVE;
    SHOW SLAVE STATUS\G;
  • は、第2のノード
  • にある.
    START SLAVE;
    SHOW SLAVE STATUS\G;
  • は、2つのノードでそれぞれデータを修正し、デュアルプライマリモデルの効果
  • を検証する.
    コピー時に注意すべき問題:
    1、      “  ”;
                   read_only,    SUPER       ;
    
                  :
                mysql> FLUSH TABLES WITH READ LOCK;
    
    2、            
             master      :
                sync_binlog = ON 
    
                  InnoDB    :
                innodb_flush_logs_at_trx_commit=ON
                innodb_support_xa=ON
    
    34、   :    
            sync_master_info=ON
    
            sync_relay_log_info=ON