Alibaba Cloud Server で MySQL デュアルマシン ホットスタンバイを手動で実装する 2 つの方法

Alibaba Cloud Server で MySQL デュアルマシン ホットスタンバイを手動で実装する 2 つの方法

1. コンセプト

1. ホットバックアップとバックアップの違い

ホット バックアップは高可用性 (HA) を指し、バックアップはデータ バックアップの一種であるバックアップを指します。これらは 2 つの異なる概念であり、対応する製品も機能面ではまったく異なる 2 つの製品です。ホットバックアップは主に事業継続性を確保するものであり、その実施方法は障害点を転送することです。バックアップの主な目的は、コピーを作成してデータの損失を防ぐことであるため、バックアップではアプリケーションのフェイルオーバーよりもデータの回復に重点が置かれます。

2. ホットスタンバイとは何ですか?

ホットスタンバイとは、広義では、2 台のサーバーを使用して相互にバックアップし、重要なサービスに対して同じサービスを共同で実行することを意味します。サーバーに障害が発生した場合、別のサーバーがサービス タスクを引き継ぐことができるため、システムは自動的に、人間の介入を必要とせずにサービスを継続的に提供できるようになります。

狭義では、ホット スタンバイとは、互いにバックアップし合いながら共同で同じサービスを実行する 2 台のサーバーを使用することです。1 台は稼働サーバー (プライマリ サーバー)、もう 1 台はバックアップ サーバー (スタンバイ サーバー) です。システムが正常な場合、稼働マシンはアプリケーション システムにサービスを提供し、バックアップ マシンは稼働マシンの動作を監視します (通常はハートビート診断を通じて、稼働マシンはバックアップ マシンが正常かどうかも検出します)。稼働マシンが異常になり、アプリケーション システムの動作をサポートできなくなると、バックアップ マシンは稼働マシンの作業を積極的に引き継ぎ、主要なアプリケーション サービスをサポートし続け、システムの中断のない動作を保証します。ホット スタンバイは、IT コア サーバー、ストレージ、ネットワーク ルーティング スイッチの障害に対する高可用性ソリューションです。

さて、Alibaba Cloud Server で MySQL デュアルマシン ホットスタンバイを実装する方法を紹介します。詳細は次のとおりです。

Alibaba Cloud Server はキープアライブ仮想 IP をサポートしていないため、キープアライブを介して MySQL デュアルマシン ホットスタンバイを実装することはできません。 Alibaba Cloud のデュアルマシン ホットスタンバイを実装するには、次の 2 つの方法があります。

1. Alibaba Cloud のクラウド データベースの高度なバージョンを購入します。これにはスレーブ データベースが付属しています。マスター データベースに障害が発生した場合、自動的にスレーブ データベースに切り替わります。

2ここでは主に、MySQL のマスター間同期を実現するために、2 つの Alibaba Cloud サーバーにそれぞれ MySQL をデプロイする 2 番目の方法について説明します。ここではMySQLのマスター間同期については取り上げません。Baiduで自分で検索してください。必要であれば、後で記事を書くかもしれません。 MySQLのマスターマスター同期が実装されていると仮定して、どのように対処するか

springboot が使用されているため、yml ファイルを処理し、複数の人へのメール送信を追加する必要があります。ここで、ホストはスケジュールされたタスクを実行し、必要に応じてバックアップ マシンもそれに応じて実行できます。

dockerでデプロイしたmysqlを使用したため、 docker psを使用してmysqlの状態を確認しました。通常のデプロイであれば、psを使用するか、mysqlに直接ログインして成功しているかどうかを確認できます。

# コーディング: utf8
サブプロセスのインポート
email.mime.text から MIMEText をインポートします
smtplibをインポートする
インポートOS
#ここではJava springbootが使用されているため、スタンバイマシンに切り替える場合は、いくつかのymlファイルを変更する必要がありますYML_PATH = ''
NEW_YML = ''
msg_from = '' # 送信者のメールアドレス passwd = '' # 送信者のメールアドレス認証コードを入力 msg_to = []
check_mysql() を定義します:
 res = subprocess.Popen('docker ps |grep mysql', stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
 stdout、stderr = res.communicate()
 stdoutの場合:
  res_status = subprocess.Popen("docker ps |grep mysql| awk '{print $7}'", stdout=subprocess.PIPE,
          stderr=サブプロセス.PIPE、シェル=True)
  出力、エラー = res_status.communicate()
  out.strip() == "上"の場合:
   「mysql は正常です」と出力します
  それ以外:
   「mysql が壊れています。スタンバイマシンに切り替えてください」と出力します
   フラグ = judge_mysql_string()
   フラグの場合:
    「すでにスタンバイマシンに接続されているため、切り替える必要はありません」と印刷します
   それ以外:
    スイッチ_mysql()
 それ以外:
  「mysql が壊れています。スタンバイマシンに切り替えてください」と出力します
  フラグ = judge_mysql_string()
  フラグの場合:
   「すでにバックアップマシンに接続されているため、切り替える必要はありません」と印刷します
  それ以外:
   スイッチ_mysql()
デフ switch_mysql():
 '---yml をコピー----' を印刷
 サブプロセス.call('cp {} {}'.format(NEW_YML, YML_PATH), shell=True)
 サブプロセスを呼び出す('docker restart tomcat', shell=True)
 件名 = 'mysql ホスト障害'
 info = 'MySQL ホスト障害のため、バックアップ マシンに切り替えられました。ホストの問題を確認し、時間内に修正してください。切り替える必要がある場合は、'\
 コンテンツ = '<html><meta charset="UTF-8"><body><p style="color: red">{}</p> </body></html>'.format(info)
 send_email(件名、内容)
 '----スイッチ終了---' を印刷します
def send_email(件名、内容):
 メッセージ = MIMEText(コンテンツ、'html'、'utf-8')
 msg['件名'] = 件名
 msg['送信元'] = msg_from
 msg['宛先'] = ','.join(msg_to)
 試す:
  s = smtplib.SMTP_SSL("smtp.qq.com", 465)
  s.login(msg_from, パスワード)
  s.sendmail(msg_from, msg_to, msg.as_string())
 except 例外を e として:
  印刷e
 ついに:
  s.quit()
def judge_mysql_string():
 open(os.path.join(YML_PATH, 'application.yml'),'r') を f として実行します:
  res = f.read()
  'your ip' が res: にある場合
   Trueを返す
  それ以外:
   Falseを返す
チェック_mysql()

要約する

上記は、Alibaba Cloud Server で MySQL デュアルマシン ホットスタンバイを手動で実装する 2 つの方法です。お役に立てれば幸いです。ご質問がございましたら、メッセージを残していただければ、すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。
この記事が役に立ったと思われた方は、ぜひ転載していただき、出典を明記してください。ありがとうございます!

以下もご興味があるかもしれません:
  • Alibaba Cloud Server で MySQL デュアルマシン ホットスタンバイを手動で実装する 2 つの方法
  • Alibaba Cloud ECS クラウド サーバー (Linux システム) は、MySQL をインストールした後にリモートで接続できません (落とし穴)
  • Alibaba Cloud ESC サーバー シングルノード MySQL の Docker デプロイメント
  • Alibaba Cloud Server MySQLのパスワードを取得する方法
  • Navicateを使用してAlibaba Cloud Server上のMySQLに接続する
  • MySQL データベースのホットスタンバイにおける問題点の分析
  • Mysqlデータベースデュアルマシンホットスタンバイの構成方法
  • MySQLデュアルマシンホットバックアップの実装手順

<<:  Tomcat プロセスの CPU 使用率が高い場合のトラブルシューティング記録を記録する

>>:  Vue3におけるキーの役割と動作原理についての簡単な説明

推薦する

JavaScriptを使って動的にテーブルを生成するケースの詳しい説明

目次序文実装のアイデア実装コード成果を達成する序文これは、テーブルを動的に追加する例です。[追加] ...

オンラインチャットを実現するVue+sshフレームワーク

この記事では、オンラインチャットを実現するためのVue + sshフレームワークの具体的なコードを参...

Docker コンテナのネットワーク障害に対する 6 つの解決策

Docker コンテナのネットワーク障害に対する 6 つの解決策注: 以下の方法は、コンテナ内のパブ...

プライベートDockerリポジトリであるHarborをインストールするための詳細な手順

Harborのインストールは非常に簡単ですが、Dockerログインで行き詰まってしまいました。このブ...

MySQL8のパスワードを忘れた場合の簡単な解決策

序文MySQL データベースのパスワードを忘れると、データベースに正常にアクセスできなくなり、パスワ...

JSのバイナリファミリーについての簡単な説明

目次概要ブロブBlob の動作BLOB ダウンロード ファイルブロブ画像のローカル表示BLOB ファ...

Nginx の負荷分散構成、ダウンタイム発生時の自動切り替えモード

厳密に言えば、nginx には負荷分散バックエンド ノードのヘルス チェック機能はありませんが、デフ...

HTML 要素の高さ、offsetHeight、clientHeight、scrollTop などの詳細な説明。

要素に関するいくつかの属性フロントエンドの日常的な開発では、一部のページのプロパティを取得または監視...

CSS を使用して同じ親タグの左側と右側に 2 つのボタンを配置する方法

この記事では、主に同じ親タグの左側と右側にある 2 つのボタンの CSS レイアウト方法を紹介し、皆...

MySQL における distinct と group by の違い

簡単に言うと、distinct は重複を削除するために使用され、group by は統計を集計するよ...

ウェブサイト上で flv/MP4 やその他のビデオ ファイルを再生できない問題は、MIME タイプに関連しています。

ウェブサイトを作成している際に、flv や MP4 形式などのビデオ ファイルはローカルでは正常に再...

DockerにRedisをインストールし、パスワードを設定して接続する方法

Redis は分散キャッシュ サービスです。キャッシュは、大規模システムの開発やパフォーマンスの最適...

vue-routerフック関数はルーティングガードを実装します

目次概要グローバルフック関数ルーティング固有のフック関数コンポーネント内のフック関数概要ルートガード...

MySQL 8の新機能である降順インデックスの基礎となる実装の詳細な説明

降順インデックスとは何ですか?インデックスについてはよくご存知かもしれませんが、降順インデックスにつ...

Docker コンテナの uid と gid の詳細な理解

デフォルトでは、コンテナ内のプロセスは root ユーザー権限で実行され、この root ユーザーは...