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 のインストールと設定方法のグラフィックチュートリアル
目次序文1. wgetを使用して単一のファイルをダウンロードする2. wget -Oを使用してダウン...
目次1. Set()+Array.from() を使用する2. 2層ループ+アレイ接合方式の使用3....
少なくとも 5 冊のベストセラー書籍の順序なしリストを含む HTML ページを作成します。各書籍の前...
ORM とは何ですか? ORM は Object Relational Mapping の略で、オブ...
目次Axios リクエストQs処理データ分析Vantアップロードファイル形式完全なコードこの記事では...
目次配列分割代入オブジェクトの分解代入分割割り当ての適用変数の値の交換関数から複数の値を返すマップ構...
序文パブリック IP を持つ本番 VPS の場合、必要なポートのみが開かれ、IP とポートを制御する...
目次1. 部分文字列() 2. サブストラクチャ() 3.インデックス() 4.最後のインデックス(...
この記事では、VMware Workstation14 ProにUbuntu 16.04をインストー...
著者: Guan Changlong は、Aikesheng の配送サービス部門の DBA です。主...
RGBカラーテーブル色英語名RGB 16色雪255 250 250 #FFFAFAゴーストホワイト2...
以前、Ubuntu 16.04 に MySQL をスムーズにインストールしました。今回、Ubuntu...
この記事では、Vueを使用して虫眼鏡付きの検索ボックスを実装する方法を紹介します。具体的な内容は次の...
この記事では、携帯電話のカメラとアルバムにアクセスするためのVueの具体的なコードを参考までに共有し...