sql >> データベース >  >> RDS >> MariaDB

PerconaXtraDBクラスターまたはMariaDBクラスターのクラスター間レプリケーションを構成する方法

    以前のブログで、クラスター間レプリケーションと呼ばれる新しいClusterControl1.7.4機能を発表しました。プライマリクラスターからDRクラスターをセットアップするプロセス全体を自動化し、その間にレプリケーションを配置します。詳細については、上記のブログエントリを参照してください。

    このブログでは、既存のクラスターに対してこの新機能を構成する方法を見ていきます。このタスクでは、ClusterControlがインストールされており、それを使用してマスタークラスターがデプロイされていることを前提としています。

    マスタークラスターの要件

    マスタークラスターを機能させるには、いくつかの要件があります。

    • Percona XtraDB Clusterバージョン5.6.x以降、またはMariaDBGaleraClusterバージョン10.x以降。
    • GTIDが有効になっています。
    • 少なくとも1つのデータベースノードでバイナリロギングが有効になっています。
    • バックアップクレデンシャルは、マスタークラスターとスレーブクラスターで同じである必要があります。
    マスタークラスターの準備

    この新機能を使用するには、マスタークラスターを準備する必要があります。 ClusterControl側とデータベース側の両方からの構成が必要です。

    ClusterControlの構成

    データベースノードで、/ etc / my.cnf.d / secrets-backup.cnf(RedHatベースのOSの場合)または/ etc / mysql/secrets-backupに保存されているバックアップユーザーの資格情報を確認します.cnf(DebianベースのOSの場合)。

    $ cat /etc/my.cnf.d/secrets-backup.cnf
    
    # Security credentials for backup.
    
    [mysqldump]
    
    user=backupuser
    
    password=cYj0GFBEdqdreZEl
    
    
    
    [xtrabackup]
    
    user=backupuser
    
    password=cYj0GFBEdqdreZEl
    
    
    
    [mysqld]
    
    wsrep_sst_auth=backupuser:cYj0GFBEdqdreZEl

    ClusterControlノードで、/ etc / cmon.d / cmon_ID.cnf構成ファイル(IDはクラスターID番号)を編集し、secrets-backupに保存されているものと同じ資格情報が含まれていることを確認します。 cnf。

    $ cat /etc/cmon.d/cmon_8.cnf
    
    backup_user=backupuser
    
    backup_user_password=cYj0GFBEdqdreZEl
    
    basedir=/usr
    
    cdt_path=/
    
    cluster_id=8
    
    ...

    このファイルを変更するには、cmonサービスを再起動する必要があります:

    $ service cmon restart

    データベースレプリケーションパラメータをチェックして、GTIDとバイナリロギングが有効になっていることを確認してください。

    データベース構成

    データベースノードで、ファイル/etc/my.cnf(RedHatベースのOSの場合)または/etc/mysql/my.cnf(DebianベースのOSの場合)をチェックして、に関連する構成を確認します。レプリケーションプロセス。

    Percona XtraDB:

    $ cat /etc/my.cnf
    
    # REPLICATION SPECIFIC
    
    server_id=4002
    
    binlog_format=ROW
    
    log_bin = /var/lib/mysql-binlog/binlog
    
    log_slave_updates = ON
    
    gtid_mode = ON
    
    enforce_gtid_consistency = true
    
    relay_log = relay-log
    
    expire_logs_days = 7

    MariaDBガレラクラスター:

    $ cat /etc/my.cnf
    
    # REPLICATION SPECIFIC
    
    server_id=9000
    
    binlog_format=ROW
    
    log_bin = /var/lib/mysql-binlog/binlog
    
    log_slave_updates = ON
    
    relay_log = relay-log
    
    wsrep_gtid_domain_id=9000
    
    wsrep_gtid_mode=ON
    
    gtid_domain_id=9000
    
    gtid_strict_mode=ON
    
    gtid_ignore_duplicates=ON
    
    expire_logs_days = 7

    構成ファイルを確認することで、ClusterControlUIで有効になっているかどうかを確認できます。 ClusterControl-> SelectCluster->Nodesに移動します。そこに次のようなものがあるはずです:

    最初のノードに追加された「マスター」の役割は、バイナリロギングを意味します有効になっています。

    バイナリロギングの有効化

    バイナリログを有効にしていない場合は、[ClusterControl]->[クラスター]->[ノード]->[ノードアクション]->[バイナリログを有効にする]に移動します。

    次に、バイナリログの保持と保存するパスを指定する必要がありますそれ。また、ClusterControlでデータベースノードを構成した後に再起動するか、自分で再起動するかを指定する必要があります。

    バイナリロギングを有効にするには、常にデータベースサービスを再起動する必要があることに注意してください。 。

    ClusterControlGUIからのスレーブクラスターの作成

    新しいスレーブクラスターを作成するには、ClusterControl->[クラスター]->[クラスターアクション]->[スレーブクラスターの作成]に移動します。

    スレーブクラスターは、現在のマスタークラスターまたは既存のバックアップを使用する。

    このセクションでは、現在のクラスターのマスターノードも選択する必要がありますそこからデータが複製されます。

    次の手順に進むときは、ユーザー、キー、またはを指定する必要がありますSSHでサーバーに接続するためのパスワードとポート。また、スレーブクラスターの名前と、ClusterControlに対応するソフトウェアと構成をインストールさせる場合も必要です。

    SSHアクセス情報を設定した後、データベースベンダーを定義する必要があります。バージョン、datadir、データベースポート、および管理者パスワード。マスタークラスターで使用されているものと同じベンダー/バージョンおよび資格情報を使用していることを確認してください。使用するリポジトリを指定することもできます。

    このステップでは、新しいスレーブクラスターにサーバーを追加する必要があります。このタスクでは、各データベースノードのIPアドレスまたはホスト名の両方を入力できます。

    から、新しいスレーブクラスターの作成ステータスを監視できます。 ClusterControlアクティビティモニター。タスクが完了すると、ClusterControlのメイン画面にクラスターが表示されます。

    ClusterControlGUIを使用したクラスター間レプリケーションの管理

    これで、クラスター間レプリケーションが稼働しました。ClusterControlを使用してこのトポロジで実行するさまざまなアクションがあります。

    アクティブ-アクティブクラスターの構成

    ご覧のとおり、デフォルトでは、スレーブクラスターは読み取り専用モードで設定されています。 ClusterControl UIからノードの読み取り専用フラグを1つずつ無効にすることは可能ですが、MySQL / MariaDBはそうではないため、アプリケーションがいずれかのクラスター上の互いに素なデータセットにのみアクセスしている場合にのみ、アクティブ-アクティブクラスタリングが推奨されることに注意してください。競合の検出または解決を提供します。

    読み取り専用モードを無効にするには、ClusterControl->SelectSlaveに移動します。クラスター->ノード。このセクションでは、各ノードを選択し、[読み取り専用を無効にする]オプションを使用します。

    スレーブクラスターの再構築

    不整合を回避するために、スレーブクラスターを再構築する場合、これは読み取り専用クラスターである必要があります。つまり、すべてのノードが読み取り専用モードである必要があります。

    ClusterControlに移動->スレーブクラスターを選択->ノード->を選択マスタークラスターに接続されているノード->ノードアクション->レプリケーションスレーブの再構築。

    トポロジの変更 次のトポロジを使用している場合:

    そして、何らかの理由で、マスターのレプリケーションノードを変更したい集まる。スレーブクラスターが使用するマスターノードを、マスタークラスター内の別のマスターノードに変更することができます。

    マスターノードと見なされるには、バイナリロギングが有効になっている必要があります。

    ClusterControlに移動->スレーブクラスターを選択->ノード->を選択マスタークラスターに接続されているノード->ノードアクション->スレーブの停止/スレーブの開始

    レプリケーションスレーブの停止/開始

    ClusterControlを使用すると、簡単な方法でレプリケーションスレーブを停止および開始できます。

    ClusterControlに移動->スレーブクラスターを選択->ノード->を選択マスタークラスターに接続されているノード->ノードアクション->スレーブの停止/スレーブの開始

    レプリケーションスレーブをリセット

    このアクションを使用すると、RESETSLAVEまたはRESETSLAVEALLを使用してレプリケーションプロセスをリセットできます。これらの違いは、RESET SLAVEは、マスターホスト、ポート、クレデンシャルなどのレプリケーションパラメータを変更しないことです。この情報を削除するには、すべてのレプリケーション構成を削除するRESET SLAVE ALLを使用する必要があるため、このコマンドを使用すると、クラスター間レプリケーションリンクが破棄されます。

    この機能を使用する前に、レプリケーションプロセスを停止する必要があります(前の機能を参照してください)。

    ClusterControlに移動->スレーブクラスターを選択->ノード->を選択マスタークラスターに接続されているノード->ノードアクション->スレーブのリセット/スレーブすべてのリセット

    ClusterControlCLIを使用したクラスター間レプリケーションの管理

    前のセクションでは、ClusterControlUIを使用してクラスター間レプリケーションを管理する方法を確認できました。それでは、コマンドラインを使用してそれを行う方法を見てみましょう。

    注:このブログの冒頭で述べたように、ClusterControlがインストールされており、マスタークラスターがそれを使用してデプロイされていることを前提としています。

    スレーブクラスターを作成する

    まず、ClusterControlCLIを使用してスレーブクラスターを作成するコマンドの例を見てみましょう。

    $ s9s cluster --create --cluster-name=Galera1rep --cluster-type=galera  --provider-version=10.4 --nodes="192.168.100.166;192.168.100.167;192.168.100.168"  --os-user=root --os-key-file=/root/.ssh/id_rsa --db-admin=root --db-admin-passwd=xxxxxxxx --vendor=mariadb --remote-cluster-id=11 --log

    これで、作成スレーブプロセスが実行されました。使用されている各パラメータを見てみましょう:

    • クラスター:クラスターを一覧表示して操作します。
    • 作成:新しいクラスターを作成してインストールします。
    • Cluster-name:新しいスレーブクラスターの名前。
    • Cluster-type:インストールするクラスターのタイプ。
    • プロバイダーバージョン:ソフトウェアバージョン。
    • ノード:スレーブクラスター内の新しいノードのリスト。
    • Os-user:SSHコマンドのユーザー名。
    • Os-key-file:SSH接続に使用するキーファイル。
    • Db-admin:データベース管理者のユーザー名。
    • Db-admin-passwd:データベース管理者のパスワード。
    • Remote-cluster-id:クラスター間レプリケーションのマスタークラスターID。
    • ログ:ジョブメッセージを待って監視します。

    --logフラグを使用すると、ログをリアルタイムで確認できます。

    Verifying job parameters.
    
    Checking ssh/sudo on 3 hosts.
    
    All 3 hosts are accessible by SSH.
    
    192.168.100.166: Checking if host already exists in another cluster.
    
    192.168.100.167: Checking if host already exists in another cluster.
    
    192.168.100.168: Checking if host already exists in another cluster.
    
    192.168.100.157:3306: Binary logging is enabled.
    
    192.168.100.158:3306: Binary logging is enabled.
    
    Creating the cluster with the following:
    
    wsrep_cluster_address = 'gcomm://192.168.100.166,192.168.100.167,192.168.100.168'
    
    Calling job: setupServer(192.168.100.166).
    
    192.168.100.166: Checking OS information.
    
    …
    
    Caching config files.
    
    Job finished, all the nodes have been added successfully.
    アクティブ-アクティブクラスターの構成

    前に示したように、新しいクラスターで読み取り専用モードを無効にするには、各ノードで無効にすることができるので、コマンドラインから実行する方法を見てみましょう。

    $ s9s node --set-read-write --nodes="192.168.100.166" --cluster-id=16 --log
    各パラメータを見てみましょう:

    • ノード:ノードを処理します。
    • Set-read-write:ノードを読み取り/書き込みモードに設定します。
    • ノード:変更するノード。
    • Cluster-id:ノードが存在するクラスターのID。

    次に、次のように表示されます:

    192.168.100.166:3306: Setting read_only=OFF.
    スレーブクラスターの再構築

    次のコマンドを使用して、スレーブクラスターを再構築できます。

    $ s9s replication --stage --master="192.168.100.157:3306" --slave="192.168.100.166:3306" --cluster-id=19 --remote-cluster-id=11 --log
    パラメータは次のとおりです。

    • レプリケーション:データレプリケーションを監視および制御します。
    • ステージ:レプリケーションスレーブをステージング/再構築します。
    • マスター:マスタークラスター内のレプリケーションマスター。
    • スレーブ:スレーブクラスター内のレプリケーションスレーブ。
    • Cluster-id:スレーブクラスターID。
    • Remote-cluster-id:マスタークラスターID。
    • ログ:ジョブメッセージを待って監視します。
    ジョブログは次のようになります:

    Rebuild replication slave 192.168.100.166:3306 from master 192.168.100.157:3306.
    
    Remote cluster id = 11
    
    Shutting down Galera Cluster.
    
    192.168.100.166:3306: Stopping node.
    
    192.168.100.166:3306: Stopping mysqld (timeout=60, force stop after timeout=true).
    
    192.168.100.166: Stopping MySQL service.
    
    192.168.100.166: All processes stopped.
    
    192.168.100.166:3306: Stopped node.
    
    192.168.100.167:3306: Stopping node.
    
    192.168.100.167:3306: Stopping mysqld (timeout=60, force stop after timeout=true).
    
    192.168.100.167: Stopping MySQL service.
    
    192.168.100.167: All processes stopped.
    
    …
    
    192.168.100.157:3306: Changing master to 192.168.100.166:3306.
    
    192.168.100.157:3306: Changed master to 192.168.100.166:3306
    
    192.168.100.157:3306: Starting slave.
    
    192.168.100.157:3306: Collecting replication statistics.
    
    192.168.100.157:3306: Started slave successfully.
    
    192.168.100.166:3306: Starting node
    
    Writing file '192.168.100.167:/etc/mysql/my.cnf'.
    
    Writing file '192.168.100.167:/etc/mysql/secrets-backup.cnf'.
    
    Writing file '192.168.100.168:/etc/mysql/my.cnf'.
    トポロジの変更

    データを複製するマスタークラスター内の別のノードを使用してトポロジを変更できるため、たとえば、次のコマンドを実行できます。

    $ s9s replication --failover --master="192.168.100.161:3306" --slave="192.168.100.163:3306" --cluster-id=10 --remote-cluster-id=9 --log
    使用されているパラメータを確認しましょう。

    • レプリケーション:データレプリケーションを監視および制御します。
    • フェイルオーバー:失敗した/古いマスターからマスターの役割を引き継ぎます。
    • マスター:マスタークラスター内の新しいレプリケーションマスター。
    • スレーブ:スレーブクラスター内のレプリケーションスレーブ。
    • Cluster-id:スレーブクラスターのID。
    • Remote-Cluster-id:マスタークラスターのID。
    • ログ:ジョブメッセージを待って監視します。
    このログが表示されます:

    192.168.100.161:3306 belongs to cluster id 9.
    
    192.168.100.163:3306: Changing master to 192.168.100.161:3306
    
    192.168.100.163:3306: My master is 192.168.100.160:3306.
    
    192.168.100.161:3306: Sanity checking replication master '192.168.100.161:3306[cid:9]' to be used by '192.168.100.163[cid:139814070386698]'.
    
    192.168.100.161:3306: Executing GRANT REPLICATION SLAVE ON *.* TO 'cmon_replication'@'192.168.100.163'.
    
    Setting up link between  192.168.100.161:3306 and 192.168.100.163:3306
    
    192.168.100.163:3306: Stopping slave.
    
    192.168.100.163:3306: Successfully stopped slave.
    
    192.168.100.163:3306: Setting up replication using MariaDB GTID: 192.168.100.161:3306->192.168.100.163:3306.
    
    192.168.100.163:3306: Changing Master using master_use_gtid=slave_pos.
    
    192.168.100.163:3306: Changing master to 192.168.100.161:3306.
    
    192.168.100.163:3306: Changed master to 192.168.100.161:3306
    
    192.168.100.163:3306: Starting slave.
    
    192.168.100.163:3306: Collecting replication statistics.
    
    192.168.100.163:3306: Started slave successfully.
    
    192.168.100.160:3306: Flushing logs to update 'SHOW SLAVE HOSTS'
    レプリケーションスレーブの停止/開始

    次の方法で、マスタークラスターからのデータの複製を停止できます。

    $ s9s replication --stop --slave="192.168.100.166:3306" --cluster-id=19 --log

    これが表示されます:

    192.168.100.166:3306: Ensuring the datadir '/var/lib/mysql' exists and is owned by 'mysql'.
    
    192.168.100.166:3306: Stopping slave.
    
    192.168.100.166:3306: Successfully stopped slave.

    これで、もう一度開始できます:

    $ s9s replication --start --slave="192.168.100.166:3306" --cluster-id=19 --log

    つまり、次のように表示されます:

    192.168.100.166:3306: Ensuring the datadir '/var/lib/mysql' exists and is owned by 'mysql'.
    
    192.168.100.166:3306: Starting slave.
    
    192.168.100.166:3306: Collecting replication statistics.
    
    192.168.100.166:3306: Started slave successfully.

    では、使用されているパラメータを確認しましょう。

    • レプリケーション:データレプリケーションを監視および制御します。
    • 停止/開始:スレーブを停止/複製を開始します。
    • スレーブ:レプリケーションスレーブノード。
    • Cluster-id:スレーブノードが存在するクラスターのID。
    • ログ:ジョブメッセージを待って監視します。
    レプリケーションスレーブをリセット

    このコマンドを使用すると、RESETSLAVEまたはRESETSLAVEALLを使用してレプリケーションプロセスをリセットできます。このコマンドの詳細については、前のClusterControlUIセクションでこのコマンドの使用法を確認してください。

    この機能を使用する前に、レプリケーションプロセスを停止する必要があります(前のコマンドを参照してください)。

    スレーブのリセット:

    $ s9s replication --reset  --slave="192.168.100.166:3306" --cluster-id=19 --log
    ログは次のようになります:

    192.168.100.166:3306: Ensuring the datadir '/var/lib/mysql' exists and is owned by 'mysql'.
    
    192.168.100.166:3306: Executing 'RESET SLAVE'.
    
    192.168.100.166:3306: Command 'RESET SLAVE' succeeded.

    すべてのスレーブをリセット:

    $ s9s replication --reset --force  --slave="192.168.100.166:3306" --cluster-id=19 --log

    そして、このログは次のようになります:

    192.168.100.166:3306: Ensuring the datadir '/var/lib/mysql' exists and is owned by 'mysql'.
    
    192.168.100.166:3306: Executing 'RESET SLAVE /*!50500 ALL */'.
    
    192.168.100.166:3306: Command 'RESET SLAVE /*!50500 ALL */' succeeded.

    RESETSLAVEとRESETSLAVEALLの両方で使用されるパラメーターを見てみましょう。

    • レプリケーション:データレプリケーションを監視および制御します。
    • リセット:スレーブノードをリセットします。
    • 強制:このフラグを使用すると、スレーブノードでRESETSLAVEALLコマンドを使用します。
    • スレーブ:レプリケーションスレーブノード。
    • Cluster-id:スレーブクラスターID。
    • ログ:ジョブメッセージを待って監視します。
    結論

    この新しいClusterControl機能を使用すると、クラスター間レプリケーションを高速に作成し、簡単で使いやすい方法で管理できます。この環境は、データベース/クラスタートポロジを改善し、ディザスタリカバリ計画、テスト環境、および概要ブログに記載されているさらに多くのオプションに役立ちます。


    1. カテゴリごとに最新の4つのアイテムを選択するにはどうすればよいですか?

    2. 何人のユーザーがサポートにアクセスできますか?

    3. SQL Server Management Studioで複合キーを作成するにはどうすればよいですか?

    4. PostgreSQLでパターンを照合しながら文字列をエスケープする方法