MySQLデータベースはMMM高可用性クラスタアーキテクチャを実装します

MySQLデータベースはMMM高可用性クラスタアーキテクチャを実装します

コンセプト

MMM (Mysql のマスター マスター レプリケーション マネージャー) は、Perl ベースの柔軟なスクリプト プログラムであり、MySQL レプリケーションの監視とフェイルオーバー、および MySQL マスター マスター レプリケーションの構成の管理に使用されます (同時に書き込み可能なノードは 1 つだけです)。

MMM 高可用性アーキテクチャの説明

  • mmm_mond: すべての監視タスクを担当し、すべてのノード ロール アクティビティを決定および処理する監視プロセス。このスクリプトはスーパーバイザー マシンで実行する必要があります。
  • mmm_agentd: 各 MySQL サーバー上で実行され、監視プローブ作業を完了し、簡単なリモート サービス設定を実行するエージェント プロセス。このスクリプトは監視対象のマシンで実行する必要があります。
  • mmm_control: mmm_mond プロセスを管理するためのコマンドを提供するシンプルなスクリプト。
  • mysql-mmm のスーパーバイザは、1 つの書き込み可能な VIP と複数の読み取り可能な VIP を含む複数の仮想 IP (VIP) を提供します。スーパーバイザ管理を通じて、これらの IP は利用可能な mysql にバインドされます。mysql がダウンすると、スーパーバイザは VIP を他の mysql に移行します。監視プロセス全体を通じて、MySQL が監視マシンのメンテナンスをサポートできるように、MySQL に関連する承認済みユーザーを追加する必要があります。承認されたユーザーには、mmm_monitor ユーザーと mmm_agent ユーザーが含まれます。

MMMの利点と欠点

利点: 高可用性、優れたスケーラビリティ、障害発生時の自動切り替え、マスター間同期では、データの一貫性を確保するために同時に 1 つのデータベース書き込み操作のみが提供されます。
デメリット: モニター ノードは単一のポイントです。Keepalived と組み合わせて高可用性を実現できます。ホストの数に関する要件があり、読み取りと書き込みの分離を実現する必要があり、これはプログラムにとって課題となります。

実験環境の展開

ステップ1: 4つのサーバーすべてにMySQLデータベースをインストールする

1. ALIクラウドソースを設定し、epel-releaseソースをインストールします。

[root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

[root@localhost ~]# yum -y インストール epel-release

[root@localhost ~]# yum clean all && yum makecache

2. ローカルのyumソースを構築する

#データベースをインストールします [root@localhost ~]# yum -y install mariadb-server mariadb

#ファイアウォールとセキュリティ機能をオフにする [root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0

#データベースを開く [root@localhost ~]# systemctl start mariadb.service

3. mlメイン設定ファイルを変更する

[root@localhost ~]# vim /etc/my.cnf
#最初の9行を削除し、次の内容を追加します [mysqld]
log_error=/var/lib/mysql/mysql.err #エラーファイルの場所 loglog=/var/lib/mysql/mysql_log.log #アクセスログファイルの場所 log_slow_queries=/var/lib/mysql_slow_queris.log #man ログのファイルの場所 binlog-ignore-db=mysql,information_schema #mysql、information_schema はバイナリログファイルを生成しませんcharacter_set_server=utf8 #文字セットlog_bin=mysql_bin #バイナリログファイル機能が有効server_id=1 #ホスト ID が異なると異なりますlog_slave_updates=true #認証同期sync_binlog=1 #バイナリログファイル機能が有効auto_increment_increment=2 #自動増分auto_increment_offset=1 #開始値[root@localhost ~]# systemctl restart mariadb.service 
[root@localhost ~]# netstat -natp | grep 3306

4. 構成ファイルを他の3つのデータベースサーバーにコピーし、server_idを変更することに注意してください。

[root@localhost ~]# scp /etc/my.cnf [email protected]:etc/

5. データベースにアクセスし、ログファイル情報を表示します。

[root@localhost ~]# mysql

#ログファイル名と位置の値を表示します。MariaDB [(none)]> show master status;    
+------------------+----------+--------------+---------------------------+
| ファイル | 位置 | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+---------------------------+
| mysql_bin.000001 | 245| | mysql、情報スキーマ |
+------------------+----------+--------------+---------------------------+
セット内の 1 行 (0.00 秒)

6. m1とm2に相互にアクセス権限を与え、同期ログを承認する

#m1 と m2 で相互にアクセス権限を付与しますMariaDB [(なし)]> grant replication slave on *.* to 'replication'@'192.168.142.%' identified by '123456';

# m1MariaDB 上の m2 のログファイル名と位置パラメータを指定します [(なし)]> マスターを master_host='192.168.142.134'、master_user='replication'、master_password='123456'、master_log_file='mysql_bin.000001'、master_log_pos=245 に変更します。

# m2MariaDB 上の m1 のログファイル名と位置パラメータを指定します [(なし)]> マスターを master_host='192.168.142.131'、master_user='replication'、master_password='123456'、master_log_file='mysql_bin.000001'、master_log_pos=245 に変更します。

7. m1で同期を有効にする

MariaDB [(なし)]> スレーブを起動します。

8. 同期ステータスを確認します。両方のマスターサーバーに「はい」と表示されます。

MariaDB [(なし)]> スレーブステータスを表示します\G;

       スレーブIO実行中: はい
      スレーブSQL実行中: はい

9. m1にデータベースを作成する

MariaDB [(なし)]> データベース school を作成します。

10. m2で同期されたデータベースを表示する

MariaDB [(なし)]> データベースを表示します。
+--------------------+
| データベース |
+--------------------+
| 情報スキーマ |
|mysql |
| パフォーマンススキーマ |
| 学校 |
| テスト |
+--------------------+
セット内の行数は 5 です (0.00 秒)

11. 両方のスレーブでこれを実行します - ログ ファイルと位置パラメータの変更に注意してください (両方とも m1 を指します)

MariaDB [(なし)]> マスターを master_host='192.168.142.131'、master_user='replication'、master_password='123456'、master_log_file='mysql_bin.000001'、master_log_pos=245 に変更します。

12. 同期を有効にする

MariaDB [(なし)]> スレーブを起動します。

#スレーブ サーバー MariaDB の同期データ情報を表示します [(none)]> show databases;
+--------------------+
| データベース |
+--------------------+
| 情報スキーマ |
|mysql |
| パフォーマンススキーマ |
| 学校 |
| テスト |
+--------------------+
セット内の行数は 5 です (0.00 秒)

13. 4台のサーバーにMMM関連ソフトウェアをインストールする

[root@localhost ~]# yum -y install mysql-mmm*

14. mmm_common.conf設定ファイルを設定する

[root@localhost ~]# vim /etc/mysql-mmm/mmm_common.conf

<ホストのデフォルト>
#ネットワークカードをens33に変更する
  クラスタインターフェイスens33
  pid_path /run/mysql-mmm-agent.pid
  bin_path /usr/libexec/mysql-mmm/
  replication_user レプリケーション

  #認証パスワードの変更 replication_password 123456
  エージェントユーザー mmm_agent

  #エージェント認証パスワードを変更する agent_password 123456
</ホスト>

#4つのサーバーの役割とIPアドレスを指定します<host db1>
  192.168.142.131 のIPアドレス
  モードマスター
  ピア DB2
</ホスト>

<ホスト db2>
  192.168.142.134 のIPアドレス
  モードマスター
  ピア db1
</ホスト>

<ホスト db3>
  192.168.142.130 のIPアドレス
  モードスレーブ
</ホスト>

<ホスト db4>
  192.168.142.135 のIPアドレス
  モードスレーブ
</ホスト>

#メインサーバーの仮想IPを設定する
<ロールライター>
  ホスト db1、db2
  192.168.142.250 のips
  モード限定
</役割>

#スレーブサーバーの仮想IPを設定する
<ロールリーダー>
  ホスト db3、db4
  192.168.142.251, 192.168.142.252 のIPアドレス
  モードバランス
</役割>

15. m1から他の3つのサーバーに構成ファイルをコピーします。

[root@localhost ~]# scp mmm_common.conf/mmm_common.conf [email protected]:/etc/mysql-mmm/mmm_common.conf
[root@localhost ~]# scp mmm_common.conf/mmm_common.conf [email protected]:/etc/mysql-mmm/mmm_common.conf
[root@localhost ~]# scp mmm_common.conf/mmm_common.conf [email protected]:/etc/mysql-mmm/mmm_common.conf

ステップ2: 監視サーバーを構成する

1. epel-releaseソースとMMM関連ソフトウェアをインストールする

[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0
[root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@localhost ~]# yum -y インストール epel-release
[root@localhost ~]# yum clean all && yum makecache
[root@localhost ~]# yum -y install mysql-mmm*

2. m1から監視サーバーに設定ファイルをコピーする

[root@localhost ~]# scp mmm_common.conf [email protected]:/etc/mysql-mmm/

3. mmm_common.conf設定ファイルを設定する

[root@localhost ~]# vim /etc/mysql-mmm/mmm_mon.conf

<モニター>
  IPアドレス 127.0.0.1
  pid_path /run/mysql-mmm-monitor.pid
  bin_path /usr/libexec/mysql-mmm
  ステータスパス /var/lib/mysql-mmm/mmm_mond.status

  #Ping_ips は 4 つのサーバーの IP アドレス 192.168.142.131、192.168.142.134、192.168.142.130、192.168.142.135 を指します
  自動オンライン設定 10

4. すべてのデータベースサーバーで mmm_agent を承認する

MariaDB [(なし)]> '123456' で識別される 'mmm_agent'@'192.168.142.%' に、*.* 上のスーパー、レプリケーション クライアント、プロセスを付与します。
クエリは正常、影響を受けた行は 0 行 (0.02 秒)

5. すべてのデータベースサーバーで mmm_moniter を承認する

MariaDB [(なし)]> *.* 上のレプリケーション クライアントを、'123456' で識別される 'mmm_monitor'@'192.168.18.%' に許可します。 
クエリは正常、影響を受けた行は 0 行 (0.02 秒)

6. データベースを更新し、すべてのデータベースサーバーでプロキシ名を設定します。

[root@localhost ~]# vim /etc/mysql-mmm/mmm_agent.conf #エージェント設定ファイルを変更する #m1 デフォルト名 this db1 

#m2 内のこの db2 の名前

#s1 このdb3に名前を付ける

#s2 このdb4に名前を付ける

7. すべてのデータベースサーバーでプロキシ機能を有効にし、起動時に自動的に開始するように設定します。

#エージェント機能を起動します [root@localhost ~]# systemctl start mysql-mmm-agent.service

#自動起動を設定する [root@localhost ~]# systemctl enable mysql-mmm-agent.service  

8. 監視サーバー上で監視サービスを開始し、各ノードのステータスを確認します。

[root@localhost mysql-mmm]# systemctl start mysql-mmm-monitor.service 
[root@localhost ~]# mmm_control 表示
 db1(192.168.142.131) マスター/オンライン。役割: ライター(192.168.142.250)
 db2(192.168.142.134) マスター/ONLINE。役割: 
 db3(192.168.142.130) スレーブ/オンライン。役割: リーダー(192.168.142.252)
 db4(192.168.142.135) スレーブ/オンライン。役割: リーダー(192.168.142.251)

9. すべてのサーバーのステータスを確認する

[root@localhost ~]# mmm_controlはすべてをチェックします
db4 ping [最終更新: 2019/11/25 18:23:03] OK
db4 mysql [最終更新: 2019/11/25 18:23:03] OK
db4 rep_threads [最終変更: 2019/11/25 18:23:03] OK
db4 rep_backlog [最終変更: 2019/11/25 18:23:03] OK: バックログはnullです
db2 ping [最終変更: 2019/11/25 18:23:03] OK
db2 mysql [最終更新: 2019/11/25 18:59:01] OK
db2 rep_threads [最終変更: 2019/11/25 18:59:01] OK
db2 rep_backlog [最終変更: 2019/11/25 18:59:01] OK: バックログは null です
db3 ping [最終更新: 2019/11/25 18:23:03] OK
db3 mysql [最終更新: 2019/11/25 18:59:01] OK
db3 rep_threads [最終変更: 2019/11/25 18:59:01] OK
db3 rep_backlog [最終変更: 2019/11/25 18:59:01] OK: バックログはnullです
db1 ping [最終更新: 2019/11/25 18:23:03] OK
db1 mysql [最終変更: 2019/11/25 18:59:01] OK
db1 rep_threads [最終変更: 2019/11/25 18:59:01] OK
db1 rep_backlog [最終変更: 2019/11/25 18:59:01] OK: バックログはnullです

3番目は故障テスト

1. M1サーバーのダウンタイムをシミュレートし、サービスを停止する

[root@localhost ~]# systemctl mariadb.service を停止します

2. m1サーバーがダウンすると、m2は仮想IPを受け取り、サービスの提供を継続します。

[root@localhost ~]# mmm_control 表示
 db1(192.168.142.131) マスター/ONLINE。役割: 
 db2(192.168.142.134) マスター/オンライン。役割: ライター(192.168.142.250)
 db3(192.168.142.130) スレーブ/オンライン。役割: リーダー(192.168.142.252)
 db4(192.168.142.135) スレーブ/オンライン。役割: リーダー(192.168.142.251)

3. s1サーバーがダウンすると、s2は仮想IPを受け取り、サービスの提供を継続します。

[root@localhost ~]# mmm_control show db1(192.168.142.131) master/ONLINE。ロール: writer(192.168.142.250) 
db2(192.168.142.134) マスター/ONLINE。役割: 
db3(192.168.142.130) スレーブ/HARD_OFFLINE。役割: 
db4(192.168.142.135) スレーブ/オンライン。役割: リーダー(192.168.142.251)、リーダー(192.168.142.252)

4. m1サーバー上の監視サーバーアドレスへのログインを承認する

MariaDB [(なし)]> '123456' で識別される 'root'@'192.168.142.136' に *.* のすべての権限を許可します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

5. 監視サーバーにデータベースクライアントをインストールする

[root@localhost ~]# yum -y mariadbをインストールします 

6. 指定されたユーザーを使用して監視サーバー上のデータベースにログインし、データ情報を作成します。

[root@localhost ~]# mysql -u root -p -h 192.168.142.250
パスワードを入力してください: 
#パスワードを入力#データベースを作成 MariaDB [(なし)]> create database BDQN;
クエリは正常、1 行が影響を受けました (0.01 秒)

7. 時間的に同期されたデータ情報はすべてのデータベースで閲覧可能

MariaDB [(なし)]> show databases; #データベースの表示+--------------------+
| データベース |
+--------------------+
| 情報スキーマ |
| BDQN | #BDQN データベースに同期 | mysql |
| パフォーマンススキーマ |
| 学校 |
| テスト |
+--------------------+
セット内の 6 行 (0.00 秒)

MMM クラスター アーキテクチャが完成しました。お読みいただきありがとうございました。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQL 高可用性クラスタの展開とフェイルオーバーの実装
  • MySQL MHA の高可用性構成とフェイルオーバーの詳細な導入手順
  • mysql+mycat、負荷分散、マスタースレーブレプリケーション、読み取り/書き込み分離操作に基づく安定した高可用性クラスタを構築します。
  • Oracle と MySQL の高可用性ソリューションの比較分析
  • MySQL 高可用性ソリューション MMM (MySQL マルチマスター レプリケーション マネージャー)
  • MySQL シリーズ 14 MySQL 高可用性実装

<<:  bashの初期化メカニズムの詳細な説明

>>:  Vue2.x の応答性の簡単な説明と例

推薦する

Vue px to rem 構成の詳細な説明

目次方法1 1. 構成とインストールの手順:方法2方法3要約する方法1 1. 構成とインストールの手...

Jsモジュールパッケージのエクスポートの使用法と違いにはインポートが必要

目次1. Commonjsのエクスポートとrequireの使用1.1 CommonJS エクスポート...

CSS3 弾性拡張ボックスの詳細な説明

使用フレキシブル ボックスはフロントエンドの Web ページ レイアウトで重要な役割を果たしますが、...

MySQL 8.0.13 手動インストールチュートリアル

この記事では、MySQL 8.0.13の手動インストールチュートリアルを参考までに紹介します。具体的...

非常に実用的なTomcat起動スクリプトの実装方法

序文セキュリティ上の理由から、会社が Linux サーバーへのすべてのログインにセキュリティ制限を課...

JavaScript による Web ページ カルーセルの超詳細な実装

目次HTML ページの作成js部分の機能を実装する1. 左ボタンと右ボタン2. 小さな円を動的に生成...

Linux における「!」の知られざる使用法のまとめ

序文実際、Linux では、控えめな「!」が驚くほど多くの用途で使用されています。この記事では、「!...

ボタンをクリックしてテキストを入力ボックスに変換し、保存をクリックしてテキスト実装コードに変換します。

ボタンをクリックしてテキストを入力ボックスに変換し、保存をクリックしてテキスト実装コードに変換します...

OpenLayers 3 のベクターマップソースの読み込みの問題を解決する

1. ベクターマップベクター グラフィックスは直線と曲線を使用してグラフィックスを表します。これらの...

JS 関数のアンチシェイクと関数スロットリングを理解する方法

目次概要1. 関数デバウンス2. 機能スロットリング(スロットル)概要関数アンチシェイクと関数スロッ...

MySql インデックス使用戦略の分析

MySql インデックスインデックスの利点1. 一意のインデックスまたは主キー インデックスを作成す...

gbk utf8 GBK と UTF-8 ウェブページエンコーディングを正しく理解して使用する方法

Web ページ エンコーディングは英語では web page encoding と翻訳され、Web ...

Mysql5.6.36 スクリプトのコンパイル、インストール、初期化のチュートリアル

概要この記事は、centos7.3 上で mysql5.3.6 を自動的にコンパイルしてインストール...

XHTML 入門チュートリアル: XHTML ハイパーリンク

ハイパーリンクはインターネット全体を接続していると言っても過言ではありません。ハイパーリンクは、別の...

jQuery は呼吸カルーセルを実装します

この記事では、ブレッシングカルーセルを実装するためのjQueryの具体的なコードを参考までに共有しま...