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を導入する際の問題

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

推薦する

表示または可視性によってHTML要素を非表示にする

場合によっては、特定の条件に基づいて Web ページ内の HTML 要素を表示するか非表示にするかを...

Mysql5.7.18 のインストールとマスタースレーブレプリケーションの詳細なグラフィック説明

CentOS6.7にmysql5.7.18をインストールする 1. /usr/localディレクトリ...

Vueは双方向データバインディングを実装します

この記事の例では、双方向データバインディングを実装するためのVueの具体的なコードを参考までに共有し...

Centos 7 mysql-8.0.19-1.el7.x86_64.rpm-bundle.tar の簡単な分析

Baiduクラウドディスク:リンク: https://pan.baidu.com/s/1hv5rUW...

HTML ページでコンテンツの選択、コピー、右クリックを防止する方法の詳細な説明

時には、Web ページに掲載されているコンテンツが悪意のある人物に盗用されるのを望まないため、Web...

MySQL データベースの型変換のための CAST 関数と CONVERT 関数の説明

MySQL のCAST()およびCONVERT()関数を使用すると、ある型の値を取得し、別の型の値を...

H5ゲームをnginxサーバーにデプロイする方法の詳細な説明

自己学習型ゲーム開発の道において、最も充実した瞬間は、自分でミニゲームを作り、友達と共有して試しにプ...

データベース接続プール Druid の使用手順

総合的なパフォーマンス、信頼性、安定性、スケーラビリティ、使いやすさなどの要素に基づいて、最適なデー...

CSSでカスタムフォント(font-face)を導入する方法の詳細な説明

なぜこれを使ったのか?それはポスターを作ることから始まりました。それは嵐の夜でした。 。 。さて、無...

Dockerでk8sをデプロイする方法

K8s k8s はクラスターです。クラスターには複数の名前空間があります。名前空間の下には複数のポッ...

動的なデジタル時計を実装するJavaScript

この記事では、JavaScriptで動的なデジタル時計を実装するための具体的なコードを参考までに紹介...

MySqlデータベースの基礎知識のまとめ

目次基本的なデータベース操作2) データベースを表示する3) データベースを選択する4) データベー...

CSSは半透明の境界と複数の境界のシーン分析を実現します

シナリオ 1:半透明の境界線を実現するには: CSS スタイルのデフォルトの動作により、背景色はコン...

Linux ファイルシステムの説明: ext4 以降

今日は、ext3 や他の以前のファイル システムとの違いを含め、ext4 の歴史について説明します。...

さまざまなネットワーク画像形式におけるPNGの利点の詳細な説明

BMP は、ハードウェア デバイスに依存せず、広く使用されている画像ファイル形式です。ビットマップ保...