MySQL シリーズ 14 MySQL 高可用性実装

MySQL シリーズ 14 MySQL 高可用性実装

1. 内閣府

マスターノードを監視することで、他のスレーブノードへの自動フェイルオーバーを実現できます。スレーブノードを新しいマスターノードに昇格させるには、マスタースレーブレプリケーションに基づいて、クライアントの協力も必要です。現在、MHA は主に 1 マスター複数スレーブアーキテクチャをサポートしています。MHA を構築するには、レプリケーションクラスターに少なくとも 3 つのデータベースサーバー (1 つのマスターと 2 つのスレーブ) が必要です。つまり、1 つはマスターとして機能し、1 つはスタンバイマスターとして機能し、もう 1 つはスレーブとして機能します。

1. MHAの動作原理

  • クラッシュしたマスターからのバイナリログイベントの保存
  • 最新のアップデートでスレーブを識別する
  • 差分リレーログを他のスレーブに適用する
  • マスターから保存されたバイナリログイベントを適用する
  • 奴隷を新しい主人に昇格させる

2. MHAソフトウェア

MHA ソフトウェアは、マネージャー ツールキットとノード ツールキットの 2 つの部分で構成されています。

マネージャー ツールキットには主に次のツールが含まれています。

masterha_check_ssh MHA の SSH 設定をチェックしますmasterha_check_repl MySQL レプリケーションのステータスをチェックしますmasterha_manger MHA を起動しますmasterha_check_status 現在実行中の MHA のステータスをチェックしますmasterha_master_monitor マスターがダウンしていないかどうかをチェックしますmasterha_master_switch フェイルオーバー (自動または手動)masterha_conf_host 設定されたサーバー情報を追加または削除します

ノード ツールキット: これらのツールは通常、MHA マネージャー スクリプトによってトリガーされ、人間による操作は必要ありません。

save_binary_logs はマスターのバイナリ ログを保存してコピーします。apply_diff_relay_logs は差分リレー ログ イベントを識別し、差分イベントを他のスレーブに適用します。filter_mysqlbinlog は不要な ROLLBACK イベントを削除します (MHA はこのツールを使用しなくなりました)。purge_relay_logs はリレー ログをクリアします (SQL スレッドをブロックしません)。

ヒント: ハードウェアの損傷やマスター データベースのダウンタイムによるデータ損失を最小限に抑えるために、MHA を構成する際に MySQL 5.5 の半同期レプリケーションを構成することをお勧めします。

カスタム拡張機能:

secondary_check_script: 複数のネットワーク ルートを介してマスターの可用性を確認しますmaster_ip_ailover_script: アプリケーションが使用するマスター IP を更新しますshutdown_script: マスター ノードを強制的にシャットダウンしますreport_script: レポートを送信しますinit_conf_load_script: 初期構成パラメータをロードしますmaster_ip_online_change_script: マスター ノードの IP アドレスを更新します

ダウンロードアドレス: https://code.google.com/archive/p/mysql-master-ha/downloads

3. MHAの実施

環境: キー認証に基づきます。https://www.cnblogs.com/L-dongf/p/9058265.html を参照してください。時刻を同期する必要があります。実行: ntpdate cn.pool.ntp.org

1) マネージャーノード

[root@manager ~]# yum install mha4mysql-manager-0.56-0.el6.noarch.rpm mha4mysql-node-0.56-0.el6.noarch.rpm -y #mha ソフトウェアをインストールします [root@manager ~]# scp mha4mysql-node-0.56-0.el6.noarch.rpm 192.168.0.7:
[root@manager ~]# scp mha4mysql-node-0.56-0.el6.noarch.rpm 192.168.0.8:
[root@manager ~]# scp mha4mysql-node-0.56-0.el6.noarch.rpm 192.168.0.9:
[root@manager ~]# mkdir /etc/mha/
[root@manager ~]# vim /etc/mha/cluster1.cnf
[サーバーのデフォルト]
ユーザー=mhauser
パスワード=mhapass
マネージャーワークディレクトリ=/data/mastermha/cluster1/
マネージャログ=/data/mastermha/cluster1/manager.log
リモートワークディレクトリ=/data/mastermha/cluster1/
ssh_user=ルート
repl_user=リプラスユーザー
repl_password=再パスワード
ping_interval=1 #1秒ごとにチェック [server1]
ホスト名=192.168.0.7
candidate_master=1 #マスターノードになることができる [server2]
ホスト名=192.168.0.8
candidate_master=1 #マスターノードになれる [server3]
ホスト名=192.168.0.9
[root@manager ~]# masterha_check_ssh --conf=/etc/mha/cluster1.cnf #sshキー環境を確認します。すべてのSSH接続テストが正常に合格しました。
[root@manager ~]# masterha_check_repl --conf=/etc/mha/cluster1.cnf #MySQL ステータスを確認します。MySQL レプリケーションの健全性は正常です。
[root@manager ~]# yum インストール画面 -y
[root@manager ~]# screen -S mha #mha はフォアグラウンドで動作するプロセスであり、ターミナルを使用してリアルタイムで検出することはできません [root@manager ~]# masterha_manager --conf=/etc/mha/cluster1.cnf #監視を開始します

2) マスターノード

[root@master ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm -y #ノードパッケージをインストールします [root@master ~]# vim /etc/my.cnf
[mysqld]
サーバーID=1
ログビン
binlog_format=行
スキップ名解決
[root@master ~]# systemctl mariadbを起動します
MariaDB [(なし)]> GRANT REPLICATION SLAVE ON *.* TO repluser@'192.168.0.%' IDENTIFIED BY 'replpass'; #マスタースレーブレプリケーションアカウントを作成します。このアカウントは、マスターに切り替える任意のノードに対して作成できます。MariaDB [(なし)]> SHOW MASTER LOGS;
+--------------------+------------+
| ログ名 | ファイルサイズ |
+--------------------+------------+
| mariadb-bin.000001 | 401 |
+--------------------+------------+
MariaDB [(なし)]> GRANT ALL ON *.* TO mhauser@'192.168.0.%' IDENTIFIED BY 'mhapass'; #mha管理ユーザーを作成し、すべてのノードがこのアカウントを同期していることを確認します

3) スレーブノード

[root@slave ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm -y
[root@slave ~]# vim /etc/my.cnf
[mysqld]
読み取り専用=1
ログビン
binlog_format=行
サーバーID=2
リレーログパージ=0
スキップ名解決=1
[root@slave ~]# systemctl mariadbを起動します
MariaDB [(なし)]> 'replpass' によって識別される repluser@'192.168.0.%' に *.* のレプリケーション スレーブを許可します。
MariaDB [(なし)]> マスターを変更する
    -> MASTER_HOST='192.168.0.7', #マスターノードは0.7
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='replpass',
    -> マスターポート=3306、
    -> MASTER_LOG_FILE='mariadb-bin.000001',
    -> MASTER_LOG_POS=401、
    -> MASTER_CONNECT_RETRY=10;
MariaDB [(なし)]> START SLAVE;

4) スレーブ2ノード

[root@slave2 ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm -y
[root@slave2 ~]# vim /etc/my.cnf
[mysqld]
サーバーID=3
読み取り専用=1
リレーログパージ=0
スキップ名解決=1
[root@slave2 ~]# systemctl mariadbを起動します
MariaDB [(なし)]> マスターを変更する
    -> MASTER_HOST='192.168.0.7',
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='replpass',
    -> マスターポート=3306、
    -> MASTER_LOG_FILE='mariadb-bin.000001',
    -> MASTER_LOG_POS=401、
    -> MASTER_CONNECT_RETRY=10;
MariaDB [(なし)]> START SLAVE;

4) テスト

マスターサービスが停止する場合: [root@master ~]# systemctl stop mariadb

MariaDB [(none)]> SHOW SLAVE STATUS\G コマンドをスレーブ 2 で実行し、Master_Server_Id: 2 を確認します。

説明: 切り替えに成功しました

4. MHAモニタリングがオンラインに復帰

障害が発生したマスターを修復してオンラインに戻し、現在のマスターノードのスレーブになるように手動で構成します [root@master ~]# systemctl start mariadb
MariaDB [(なし)]> マスターを変更する
    -> MASTER_HOST='192.168.0.8', #マスターホストは0.8
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='replpass',
    -> マスターポート=3306、
    -> MASTER_LOG_FILE='mariadb-bin.000001',
    -> MASTER_LOG_POS=482、
    -> MASTER_CONNECT_RETRY=10;
MariaDB [(なし)]> START SLAVE;
管理ノード:
[root@manager ~]# スクリーン -S mha
[root@manager ~]# masterha_manager --conf=/etc/mha/cluster1.cnf #監視を再開する

2. ガレラクラスター

Galera Cluster: Galera プラグインを統合した MySQL クラスターは、データ共有がなく冗長性が高い新しいタイプの高可用性ソリューションです。現在、Galera Cluster には、Percona Xtradb Cluster と MariaDB Cluster の 2 つのバージョンがあります。Galera 自体はマルチマスター機能を備えており、マルチマスター クラスター アーキテクチャを採用しています。堅牢で、データの一貫性、整合性、高パフォーマンスにおいて優れたパフォーマンスを発揮する高可用性ソリューションです。

3 つのノードがクラスターを形成します。一般的なマスター スレーブ アーキテクチャとは異なり、これらはすべてマスター ノードになることができます。3 つのノードは同等であり、マルチマスター アーキテクチャと呼ばれます。クライアントがデータを書き込むか読み取る場合、どのインスタンスに接続するかは関係ありません。読み取られるデータは同じです。特定のノードに書き込んだ後、クラスターは新しいデータを他のノードに同期します。このアーキテクチャはデータを共有せず、冗長性の高いアーキテクチャです。

特性:

  • マルチマスター アーキテクチャ: 読み取りデータと書き込みデータが常に最新の状態に保たれる、真のマルチポイント読み取り/書き込みクラスター。
  • 同期レプリケーション: データはクラスター内の異なるノード間で遅延なく同期されます。データベースに障害が発生しても、データは失われません。
  • 同時レプリケーション: スレーブ ノードからデータを適用する場合、並列実行がサポートされ、パフォーマンスが向上します。
  • 障害切り替え: データベース障害が発生した場合、マルチポイント書き込みをサポートしているため、切り替えが容易です。
  • ホット プラグ: サービス中にデータベースがクラッシュした場合、監視プログラムがそれを十分早く検出する限り、ダウンタイムは非常に短くなります。ノード障害が発生しても、ノード自体はクラスターにほとんど影響を与えません。
  • 自動ノードクローン作成: 新しいノードを追加したり、メンテナンスのためにシャットダウンしたりするときに、増分データや基本データを手動でバックアップする必要はありません。Galera Cluster はオンライン ノード データを自動的に取得し、クラスターは最終的に一貫性を保ちます。

動作原理:

公式ドキュメントを参照してください:

http://galeracluster.com/documentation-webpages/galera-documentation.pdf

http://galeracluster.com/documentation-webpages/index.html

https://mariadb.com/kb/en/mariadb/getting-started-with-mariadb-galera-cluster/

少なくとも 3 つのノードが必要です。mariadb-server パッケージをインストールできません。特定のパッケージをインストールする必要があります。

Galera Clusterの実装

清華大学オープンソースミラーソース: https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-5.5.60/yum/centos7-amd64/

# vim /etc/yum.repos.d/mariadb_galera_server.repo
[マリアdb]
名前=mariadb_galera_server.repo
ベースURL=https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-5.5.60/yum/centos7-amd64/
gpgcheck=0
# yum で MariaDB-Galera-server をインストールします -y

1)mysql-1

[root@mysql-1 ~]# vim /etc/my.cnf.d/server.cnf
[ガレラ]
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://192.168.0.7,19​​2.168.0.8,192.168.0.9" #ここですべてのIPを定義します binlog_format=row
デフォルトストレージエンジン=InnoDB
innodb_autoinc_lock_mode=2
バインドアドレス=0.0.0.0
wsrep_cluster_name = 'my_wsrep_cluster'
wsrep_node_name = 'node1'
wsrep_node_address = '192.168.0.7'

2) MySQL 2 の場合

[root@mysql-2 ~]# vim /etc/my.cnf.d/server.cnf
[ガレラ]
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://192.168.0.7,19​​2.168.0.8,192.168.0.9"
binlog_format=行
デフォルトストレージエンジン=InnoDB
innodb_autoinc_lock_mode=2
バインドアドレス=0.0.0.0
wsrep_cluster_name = 'my_wsrep_cluster'
wsrep_node_name = 'node2'
wsrep_node_address = '192.168.0.8'

3) MySQL 3.0

[root@mysql-3 ~]# vim /etc/my.cnf.d/server.cnf
[ガレラ]
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://192.168.0.7,19​​2.168.0.8,192.168.0.9"
binlog_format=行
デフォルトストレージエンジン=InnoDB
innodb_autoinc_lock_mode=2
バインドアドレス=0.0.0.0
wsrep_cluster_name = 'my_wsrep_cluster'
wsrep_node_name = 'node3'
wsrep_node_address = '192.168.0.9'

4) 開始

[root@mysql-1 ~]# /etc/init.d/mysql start --wsrep-new-cluster #最初の起動時にこのパラメータを追加します [root@mysql-2 ~]# /etc/init.d/mysql start #後続のサービスは直接起動できます [root@mysql-3 ~]# /etc/init.d/mysql start

5) テスト

いずれかのノードでデータベースを操作すると、他のノードも同期して操作します。同じレコードを同時に操作した場合、1 つのノードのみが成功します。

6) 作業状況を確認する

MariaDB [(なし)]> 'wsrep_%' のような変数を表示\G
MariaDB [(なし)]> SHOW STATUS LIKE 'wsrep_%'\G
MariaDB [(なし)]> SHOW STATUS LIKE 'wsrep_cluster_size';
+--------------------+-------+
| 変数名 | 値 |
+--------------------+-------+
| wsrep_cluster_size | 3 | #クラスター内にオンラインのノードが 3 つあります+--------------------+-------+

これで、MySQL シリーズ 14: MySQL 高可用性実装に関する記事は終了です。MySQL 高可用性実装の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

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

<<:  さまざまなブラウザに対応するためにCSSで指定フォント@font-faceを導入する際の問題

>>:  空のパスがページのパフォーマンスに与える影響に対する解決策

推薦する

Linux運用保守ツールSupervisor(プロセス管理ツール)のインストールと使用

1. はじめにSupervisor は Python で開発された汎用プロセス管理プログラムです。通...

BT Baota Panel php7.3 および php7.4 が ZipArchive をサポートしない問題の解決方法

Baota PanelのPHP7.3バージョンがZipArchiveをサポートしていないため、プログ...

HTML テーブル セルの幅と高さを設定する方法

Web ページを作成するときに、テーブルの幅が揃っていないという問題に遭遇することがよくあります。 ...

MySQL 5.6.23 のインストールと設定環境変数のチュートリアル

この記事では、MySQL 5.6.23のインストールと設定のチュートリアルを参考までに紹介します。具...

TSで最も一般的な宣言マージ(インターフェースマージ)

目次1. マージインターフェース1.1 非関数メンバー1.2 関数メンバー序文:今日お話ししたいのは...

Alipay の Java 決済インターフェースを開発するための詳細な手順

目次最初のステップステップ2ステップ3ステップ4 Alipay 決済インターフェースへの接続に関する...

CSS3 で translate と transition を使用する方法

translate と transition は非常に強力で、習得するのは不可能だといつも感じていま...

VMware12.0 インストール Ubuntu14.04 LTS チュートリアル

私は、デスクトップ バージョンとサーバー バージョンの両方で、仮想マシンにさまざまなイメージを何度も...

Docker ビルド kubectl イメージ実装手順

プログラムサービスがgitlab ci/cdと統合されたk8sを使用してデプロイされている場合、gi...

MySQL の詳細な単一テーブルの追加、削除、変更、クエリの CRUD ステートメント

MySQL の追加、削除、変更、クエリステートメント1. 練習シートを作成するここでの練習表は3つの...

MySQL は対応するクライアント プロセスにどのように接続しますか?

質問特定の MySQL 接続について、それがどのクライアント プロセスからのものであるかをどのように...

Dockerデータストレージのバインドマウントの詳細な説明

この記事を読む前に、Volumes について予備知識を身に付けておいてください。詳細については、こち...

MySQL の連結で複数の一重引用符と三重引用符を使用する際の問題

文字列を動的に連結する場合、文字連結を使用することが多いです。次のような連結の引用符の意味がわかりま...

Ubuntu 16.04 に nvidia ドライバー + CUDA + cuDNN をインストールする詳細なチュートリアル

準備1. GPUがCUDAをサポートしているかどうかを確認するlspci | grep -i nvi...