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 の応答性の簡単な説明と例

推薦する

よく理解しましたかタグ 定義方法 使用方法

序文:今日、「<!DOCTYPE> タグを注意深く理解しましたか?」と尋ねられました。私...

JS の原価と基準価額の問題に関する簡単な分析

プリミティブ値 -> プリミティブ型Number String Boolean undefin...

Vue.jsクラウドストレージで画像アップロード機能を実現

序文ヒント:以下はこの記事の主な内容です。以下のケースを参考にしてください。 1. オブジェクトスト...

インスタンス化されたオブジェクトパラメータによるMySQLクエリ例の説明

この記事では、オブジェクト パラメータをインスタンス化して MySQL でデータをクエリする方法を紹...

複数の Docker コンテナが同じポート番号を持たない場合の解決策

背景Dockerでは、同じイメージを使用して4つのコンテナを作成します。ネットワークはブリッジモード...

ファイアウォールの iptables 戦略を使用して Linux サーバー上のポートを転送する方法

2つの異なるサーバー間の転送ポート転送を有効にするまず、デフォルトでは無効になっている IP 転送機...

Reactのコンポーネント作成方法のまとめ

目次1. 関数を使用してコンポーネントを作成する2. クラスを使用してコンポーネントを作成する3. ...

MySQL DEFINER の使用方法の詳細な説明

目次序文: 1.DEFINERの簡単な紹介2. いくつかの注意点要約:序文: MySQL データベー...

Vue で debouce の手ぶれ補正機能を使用する方法

目次1. 手ぶれ補正機能2. Vueでdebouceの手ぶれ補正機能を使用する1. 手ぶれ補正機能2...

Webデザインチュートリアル(3):デザインの手順と考え方

<br />前のチュートリアル:Webデザインチュートリアル(2):模倣と盗作について。...

MySQLのよくある間違い

NULL 値によると、MySQL の NULL 値は単にデータがないことを意味します。NULL 値は...

Mysql の追加、削除、変更、クエリステートメントのシンプルな実装

Mysql の追加、削除、変更、クエリステートメントのシンプルな実装追加されたレコード: テーブル名...

MySQL INT型の完全な分析

序文: Integer は MySQL で最もよく使用されるフィールド型の 1 つで、通常は整数を格...

WeChatアプレット開発によりホームページポップアップボックスアクティビティガイダンス機能が実現

目次1. 需要2. データベース設計3.Javaバックグラウンド構成の実装4. WeChatアプレッ...

MySQL パスワード変更方法の概要

MySQL 5.7 より前のバージョンのパスワードを変更する方法:方法1: SET PASSWORD...