1. はじめに 以前のプログラム アーキテクチャは次の形式になります。 プログラムのサイズが大きくなると、複数のバックグラウンド サービス インスタンスに拡張する可能性がありますが、データベースはまだ 1 つしかないため、システムのボトルネックは依然としてデータベースにあります。そのため、今回の主なタスクはデータベースの拡張です。主な形式は、複数のデータベース インスタンスを拡張し、読み取りと書き込みの分離を実現し、一部の書き込みタスクをメイン データベースに割り当て、サブ データベースを読み取りタスクに使用するというものです。これによりシステムのパフォーマンスが向上します。 変更されたアーキテクチャは次のとおりです。 2. 建設前の環境 今回は環境構築にDockerを使用し、MySQLのバージョンは5.7.13を使用しています。 docker pull mysql:5.7.13 全体的な構造は次のとおりです。
まず、これらのノードを個別に起動し、異なるポートにマップします。このマシンのデータベース接続ツールを使用して接続し、正常に起動および接続されているかどうかをテストします。 docker run -p 3307:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.13 docker run -p 3308:3306 --name mysql-slave1 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.13 docker run -p 3309:3306 --name mysql-slave2 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.13 ここでは、マスター ノード (mysql-master) をポート その後、 これらのノードにそれぞれ入り、構成ファイルを編集します。 docker exec -it mysql-master /bin/bash コンテナに入るには名前を使用しますが、ID に応じて選択することもできます。つまり、 mv ソース.リスト ソース.リスト.bak 次に、次のコマンドを使用して新しいファイルを作成し、その内容を入力します。 echo deb http://mirrors.aliyun.com/ubuntu/ xenial メイン 制限付き宇宙 マルチバース > ソースリスト 次に 3. マスタースレーブ構成を実行する マスターノードの構成 マスターノードコンテナに入った後、 このファイルを編集し、 [mysqld] ... ... ## 一意の番号 server-id=101 ## これは重要な設定項目です log-bin=mysql-bin 設定が完了したら、設定を有効にするために MySQL サービスを再起動する必要があります。再起動するには、 スレーブ構成 マスターノードと同様に、 [mysqld] ... ... ## 一意の番号 server-id=103 ## 選択してください。このノードを他のノードのマスターノードとして使用する必要がある場合は、# log-bin=mysql-bin を追加する必要があります。 マスターノードとスレーブノードのリンク マスターノード マスターノードコンテナでMySQL MySQLに入ったら、 ここから、 スレーブノード MySQLに入り、次のコマンドを実行します。 マスターを、master_host='***'、master_port=3306、master_user='root'、master_password='123456'、master_log_file='****'、master_log_pos= *** に変更します。 これらのパラメータがそれぞれ何を意味するのか説明してください。 master_host: マスター ノードの IP アドレス。このマシンで次のコマンドを使用して、コンテナーの IP アドレスを表示できます。 docker examine --format='{{.NetworkSettings.IPAddress}}' コンテナ名 | コンテナ ID master_port: 外部にマップされたポート番号ではなく、mysql のポート番号 master_user: mysqlのユーザー。権限が必要です。私は直接rootを使用しましたが、新しいユーザーを作成して使用することもできます。 master_password: 同期に使用するMySQLアカウントのパスワード master_log_file: 同期に使用されるファイル、つまりマスターノードからクエリされたファイル。ここでは master_log_pos: バイナリログファイルの同期を開始する位置。マスターノードからクエリされた位置です。私の場合は 先ほどのコマンドを実行した後、MySQL ターミナルで ここで構成情報を確認すると、2 つの属性 起動に失敗した場合は、ネットワークが接続されているかどうか、同期に使用した mysql パスワードが正しいかどうか、同期ファイルの名前と場所が正しいかどうかを確認できます。 テスト マスター データベースに新しいデータベースを作成できます。スレーブ データベースにこのデータベースが存在する場合、マスターとスレーブの同期が完了したことを意味します。 4. カスケード構成 別のバックアップ ノードを追加し、このノードをスレーブ 1 ノードからバックアップします。つまり、スレーブ 1 ノードはバックアップ ノードのマスター ノードとして機能します。これにより、マスター -> スレーブ -> バックアップのカスケード関係が形成されます。 私はもともと上記の手順に従い、それをスレーブの log-bin=mysql-slave-bin #区別するためにファイル名を変更しました 次にバックアップノードで実行します マスターを、master_host='***'、master_user='root'、master_password='123456'、master_port=3306、master_log_file='****'、master_log_pos= *** に変更します。 コマンドは、対応するスレーブ ノードの IP およびその他の属性に置き換えられます。それは機能しないことが判明しました。プライマリノードが変更されても、バックアップノードは変更されません。 そこで調査してみると、スレーブノードのbinlogファイルには変更された情報の記録がなく、バックアップノードはこのファイルの変更を監視しているのと同等であることがわかりました。このファイルが変更されていなければ、バックアップノードには変更がないことになります。これをもう少し詳しく説明しましょう。MySQL の binlog はすべての変更を記録するので、理論的にはいつでも binlog を使用してデータベースの内容を復元できます。 したがって、マスター ノードが変更された後にスレーブ ノードの binlog ログをどのように記録するかが問題になります。 可能です。マスターノードが変更されると、スレーブノードとバックアップノードも変更されます。バックアップノードのデータはスレーブノードからバックアップされます。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: MySQL 8.0.17 のインストールと設定方法のグラフィックチュートリアル
一般的な Dockerfile 命令の紹介命令説明するから新しいイメージが構築される基となるイメージ...
目次序文jQuery 以外の場合は何を使うのでしょうか? DOMとイベントAJAX リクエスト要約す...
この記事の例では、マウスに従ってボールを動かすjsの具体的なコードを参考までに共有しています。具体的...
1. インストール1. ダウンロードMySQLをダウンロードするには、MySQL公式サイトhttp:...
目次1. v-on指令1. 基本的な使い方2. 糖衣構文3. イベントパラメータ4. イベント修飾子...
React コンポーネントのライフサイクル機能とは何ですか?ライフサイクル関数は、ES6 構文クラス...
上はシステム時間、下はハードウェア時間です。ここでは変更を加えているので、同じくらいの速さになってい...
タイトルの通り、高さは既知で、左と右の列の幅は 300 ピクセル、中央は適応型です。弾性ボックス自体...
超初心者の私は、MySQL を学び始めたばかりで、インストール プロセス中に多くの問題に遭遇しました...
Linux システムでは、chmod コマンドと chown コマンドの両方を使用して権限を設定でき...
1. 概要Docker のイメージはレイヤーで設計されています。各レイヤーは「レイヤー」と呼ばれます...
前回の記事では、Promise を使用して小さなプログラム wx.request をカプセル化する実...
目次Node.js の公式紹介Node.jsのコア開発言語ウェブ上の JavaScript と No...
ユニアプリコード <テンプレート> <表示> <image v-for...
目次1 概念上の区別2 事例紹介3 クエリパフォーマンス4 アップデートのパフォーマンス4.1 記憶...