Linux
 Computer >> コンピューター >  >> システム >> Linux

MariaDBマスター/マスター/スレーブレプリケーションを構成する方法は?

レプリケーション SQLデータベースでは、ソースデータベースから別のデータベース(または複数のデータベース)にデータをコピーするプロセスであり、その逆も同様です。 1つのデータベースサーバーからのデータは、常に1つ以上のサーバーにコピーされます。レプリケーションを使用して、レプリケーションされたサーバーのプール全体にリクエストを分散してバランスを取り、MariaDBデータベースのフェイルオーバーと高可用性を提供できます。 MariaDB(およびMySQL)では、マスター-マスターの2種類のデータベースレプリケーションを使用できます。 およびマスタースレーブ 。この記事では、LinuxCentOS7で両方のタイプのMariaDBレプリケーションを構成する方法を検討します。

MariaDBのインストール

以前、CentOS 7へのMariaDBのインストールプロセスを説明する記事を公開しました。次のリンクから読むことができます:http://woshub.com/mariadb-install-configure-tunning-centos。そのため、MariaDBのインストール自体には焦点を当てませんが、レプリケーションの構成方法に進みます。

MariaDBでの単純なマスターマスターレプリケーションの構成

マスター-マスターレプリケーションスキームでは、MariaDB / MySQLデータベースサーバーのいずれかを使用して、データの書き込みと読み取りの両方を行うことができます。レプリケーションは特別なbinlogファイルに基づいており、マスターサーバーはデータベースでのすべての操作をに保存します。スレーブサーバーはマスターに接続し、そのデータベースにコマンドを適用します。

1。 MariaDB:最初のマスターサーバー(Master-1)の構成

次の行をmy.cnfに追加します 最初のMariaDBサーバー上のファイル:

#replication
server_id = 1
report_host = master
log_bin = /var/lib/mysql/mariadb-bin
log_bin_index = /var/lib/mysql/mariadb-bin.index
relay_log = /var/lib/mysql/relay-bin
relay_log_index = /var/lib/mysql/relay-bin.index

MariaDBマスター/マスター/スレーブレプリケーションを構成する方法は?

service mariadb restart

レプリケーションを構成するユーザーを作成します:

mysql
create user 'test_master'@'%' identified by 'test_master';
grant replication slave on *.* to 'test_master'@'%';

スレーブを追加するには、Master-1サーバーからbin_logデータを取得する必要があります。

MariaDB [(none)]> show master status;

+--------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| mariadb-bin.000002 | 664 | | |
+--------------------+----------+--------------+------------------+
1 row in set (0.000 sec)

MariaDBマスター/マスター/スレーブレプリケーションを構成する方法は?

2。 MariaDB:2番目のマスターサーバー(Master-2)の構成

2番目のMariaDBサーバーに接続し、my.cnfファイルを開いて、次の構成を追加します。

#replication
server_id = 2
report_host = master2
log_bin = /var/lib/mysql/mariadb-bin
log_bin_index = /var/lib/mysql/mariadb-bin.index
relay_log = /var/lib/mysql/relay-bin
relay_log_index = /var/lib/mysql/relay-bin.index

MariaDBマスター/マスター/スレーブレプリケーションを構成する方法は?

2番目のサーバーにも新しいユーザーを作成します:

create user 'test_master2'@'%' identified by 'test_master2';
grant replication slave on *.* to 'test_master2'@'%';

Master-2でbin_logを取得します:

MariaDB [(none)]> show master status;

+--------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| mariadb-bin.000001 | 667 | | |
+--------------------+----------+--------------+------------------+
1 row in set (0.000 sec)

ソフトウェアレプリケーションクラスター内のMariaDBサーバー間の接続を構成しましょう:

奴隷を止めろ:

STOP SLAVE;

Master-1を2番目のサーバーに追加します:

CHANGE MASTER TO MASTER_HOST='IP_master1', MASTER_USER='test_master', MASTER_PASSWORD='test_master', MASTER_LOG_FILE='mariadb-bin.000002', MASTER_LOG_POS=664;

レプリケーションを開始します:

START SLAVE;

MariaDBマスター/マスター/スレーブレプリケーションを構成する方法は?

Master-1に接続し、同じ手順に従いますが、代わりに2番目のサーバーに関する情報を指定します。

STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='10.2.10.36', MASTER_USER='test_master2', MASTER_PASSWORD='test_master2', MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=667;
START SLAVE;

2番目のサーバーのステータスを確認します:

show slave status \G

MariaDBマスター/マスター/スレーブレプリケーションを構成する方法は?

スクリーンショットでわかるように、2つのサーバー間に接続があり、エラーは発生しません。

3。 MariaDBサーバー間のレプリケーションを確認する方法

次に、2つのMariaDBサーバー間のレプリケーションがmaster + masterで機能することを確認するために、Master-1に新しいデータベースを作成し、その中にテーブルを作成します。

MariaDB [(none)]> create database master1;
MariaDB [(none)]> use master1;
MariaDB [master1]> CREATE TABLE hello (
-> AuthorID INT NOT NULL AUTO_INCREMENT,
-> AuthorName VARCHAR(100),
-> PRIMARY KEY(AuthorID)
-> );

MariaDBマスター/マスター/スレーブレプリケーションを構成する方法は?

このデータベースが2番目のマスターに自動的に複製され、同じテーブルが含まれていることを確認してください。

MariaDB [(none)]> show databases;

+--------------------+
| Database |
+--------------------+
| information_schema |
| master1 |
| mysql |
| performance_schema |
+--------------------+

MariaDB [(none)]> use master1;
MariaDB [master1]> show tables;

+-------------------+
| Tables_in_master1 |
+-------------------+
| hello |
+-------------------+

データベースは2番目のマスターにも作成されています。完全なサイクルを確認するには、2番目のマスターサーバーのMaster1データベースにテーブルを作成し、それが最初のサーバーに表示されるかどうかを確認します。

MariaDB [master1]> CREATE TABLE hello_master1 (
-> AuthorID INT NOT NULL AUTO_INCREMENT,
-> AuthorName VARCHAR(100),
-> PRIMARY KEY(AuthorID)
-> );

hello_master1テーブルが最初のサーバーに複製されました:

MariaDB [master1]> show tables;

+-------------------+
| Tables_in_master1 |
+-------------------+
| hello |
| hello_master1 |
+-------------------+

MariaDBマスター/マスター/スレーブレプリケーションを構成する方法は?

ご覧のとおり、新しいテーブルがMaster-1に表示されています。レプリケーションは機能します。

MariaDBでマスター/スレーブレプリケーションを設定するにはどうすればよいですか?

マスタースレーブMariaDBレプリケーションモードでは、1つのサーバーがスレーブとして機能し、マスターサーバーからのデータが常にそこに書き込まれます。スレーブサーバーで行ったすべての変更は、マスターサーバーに転送されません。このデータベースレプリケーションタイプは、より回復力があり、より頻繁に使用されます。この構成では、常に最新のデータベースを備えたバックアップサーバーがあり、スレーブサーバーに障害が発生しても、マスターはデータを失うことはありません。プロジェクトのデータベース負荷を分散して、アプリがスレーブサーバーからデータを読み取り、マスターサーバーにのみデータを書き込むようにすることもできます。したがって、データベースの応答をできるだけ速くします。

MariaDBデータベースのマスター+スレーブレプリケーションを構成する場合、マスターサーバー(master1)は上記のように構成されます。

スレーブサーバーに移動します。次の構成をスレーブmy.cnfファイルに追加します。

#replication
server_id = 2
report_host = slave2
log_bin = /var/lib/mysql/mariadb-bin
log_bin_index = /var/lib/mysql/mariadb-bin.index
relay_log = /var/lib/mysql/relay-bin
relay_log_index = /var/lib/mysql/relay-bin.index

MariaDBサービスを再起動します。最初のサーバーからbin_log情報を取得します:

MariaDB [(none)]> show master status;

+--------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| mariadb-bin.000001 | 664 | | |
+--------------------+----------+--------------+------------------+

スレーブサーバーのmariadbコンソールで次のコマンドを実行します。

MariaDB [(none)]> STOP SLAVE;

MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='IP_master', MASTER_USER='test_master', MASTER_PASSWORD='test_master', MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=664;
MariaDB [(none)]> START SLAVE;

既存のMariaDBデータベースのレプリケーションを構成する場合、bin_log番号が更新されないようにするには、レプリケーションを開始する前にデータベースを読み取り専用モードにする必要があります。

SET GLOBAL read_only = ON;

また、データベースメモリダンプを作成し、それをスレーブサーバー上のMariaDBへのデータの初期アップロードに使用する必要があります。

スレーブのステータスを確認するには:SHOW SLAVE STATUS\G;

マスター上にデータベースを作成するには:

MariaDB [(none)]> create database master_hello;

データベースがスレーブサーバーにも作成されていることを確認してください:

MariaDB [(none)]> show databases;

+--------------------+
| Database |
+--------------------+
| information_schema |
| master_hello |
| master_test |
| mysql |
| performance_schema |
| test |
+--------------------+

MariaDBマスター/マスター/スレーブレプリケーションを構成する方法は?

スレーブサーバー上にデータベースを作成し、データベースがマスターに複製されているかどうかを確認します。

MariaDBマスター/マスター/スレーブレプリケーションを構成する方法は?

ご覧のとおり、データベースを作成し、スレーブに存在します。マスターに表示されているか確認しましょう。ありません。データはスレーブからマスターに複製されません。

MariaDBマスター/マスター/スレーブレプリケーションを構成する方法は?

これは、MariaDBレプリケーションが一方向でのみ機能することを意味します。別のチェックを行って、 master_helloを削除しましょう。 スレーブサーバーからのデータベース:

MariaDBマスター/マスター/スレーブレプリケーションを構成する方法は?

マスターサーバーから削除されているかどうかを確認します:

MariaDBマスター/マスター/スレーブレプリケーションを構成する方法は?

ご覧のとおり、問題はなく、データベースは存在します。

追伸:mariadbレプリケーションを構成するときに、ファイアウォールが最も頻繁に発生するいくつかの落とし穴に遭遇する可能性があります。デフォルトでは、firewalldはCentOSにインストールされており、MariaDBレプリケーションポート(TCP 3396)をブロックします。 iptablesを使用してポートを開くか、ファイアウォールを無効にすることができます(最善のオプションではありません)。

データベースが接続を待機しているIPアドレスは、my.cnfのbind-addressパラメーターで指定されます。ローカル接続と外部接続を許可するには、この行にコメントを付け、マスターからの接続を許可するiptablesルールを追加する必要があります。 /slaveIPアドレスをポート3306に送信します。

iptables -I INPUT -p tcp -s ip_address_slave_server --dport 3306 -j ACCEPT
iptables -I INPUT -p tcp --dport 3306 -j DROP

初期設定中にこの問題に遭遇しましたが、簡単に検出されます。スレーブステータスチェックを実行する場合は、SHOW SLAVE STATUS\G 、次のエラーが表示されます:

MariaDBマスター/マスター/スレーブレプリケーションを構成する方法は?

#replicationにいくつかのパラメータを追加できます my.cnfファイルのブロック。以下に、いくつかの例と有用なパラメータの簡単な説明を示します。 mariadbデータベースレプリケーションを構成するときに役立つ可能性のある他の関数の例をいくつか示します。

server_id = 1 —サーバーIDを指定します。通常は1から始まりますが、レプリケーションに使用される他のサーバーの番号と一致しない任意の番号を使用できます。

report_host = master —通常はサーバーのホスト名を指定しますが、代わりにそのIPアドレスを入力することもできます。

log_bin = /var/lib/mysql/mariadb-bin —は更新ログ(log_bin)へのパスです。

log_bin_index = /var/lib/mysql/mariadb-bin.index —現在アクティブなログと、以前に使用されたログを確認できます。

relay_log = /var/lib/mysql/relay-bin

relay_log_index = /var/lib/mysql/relay-bin.index —はレプリケーションログです。

特定のデータベースまたは選択したデータベースのレプリカを構成する場合は、次のパラメーターを使用します。

replicate-do-db = dbname —複数のデータベースが必要な場合は、名前をコンマで区切って指定してください。

一部のデータベースをレプリケーションから除外するには(通常どおり、サービスデータベースはレプリケーションから除外されます:information_schema、mysql、performance_schema):

binlog-ignore-db = dbname

bin_logのログ履歴時間を設定するには:

expire_logs_days = 10 —ここで、10はログが保存される日数です。

また、マスターサーバーからのデータが別の名前のデータベースに書き込まれている場合は、構成ファイルで設定できます。

replicate-rewrite-db=dbmastername->dbslavename

レプリケーションの構成が完了しました。この記事を使用すると、MariaDBレプリケーションをマスター+マスターモードとマスター+スレーブモードの両方で問題なく構成できると思います。


  1. Windows 11 でインデックス作成オプションを構成する方法

    ファイル/フォルダー/アプリにアクセスする必要があるのに、コンピューターのストレージを参照するのが面倒な場合はどうすればよいですか? 救助のためにWindows Searchを入力してください。 Windows Search Index は、定義済みの領域内からファイル、アプリ、または設定を検索することで、検索結果をすばやく提供します。 Windows オペレーティング システムは、新しい場所を追加すると、インデックスを自動的に再構築して定期的に更新し、更新されたインデックスから新しいファイルを表示できるようにします。今日は、Windows 11 でインデックス作成オプションを手動で構成および

  2. Outlook で Yahoo メールを設定する方法

    この記事では、IMAP を介して Outlook で Yahoo メールを構成するためのステップ バイ ステップの図を示します。 ただし、Outlook を構成する前に、Yahoo メール アカウントでいくつかの変更を行う必要があります。 Outlook で Yahoo メールを設定する手順 アカウントにログインして設定をクリックします。 「アカウント情報」オプションを選択します。 新しいウィンドウが表示されます。左側のメニュー ペインで [アカウント セキュリティ] を選択し、[安全性の低いサインインを使用するアプリを許可する] を切り替えます。 完了したら、このウィンドウを