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 のインストールと設定方法のグラフィックチュートリアル
<TD> タグの属性は、テーブル内のセルのプロパティを設定するために使用されます。表 &...
フォームの送信方法をまとめると次のようになります。 1. 送信ボタンを使用して送信します。送信ボタン...
この記事ではMySQL 5.7.16のインストールと設定方法を記録します。具体的な内容は以下のとおり...
この記事では、参考までに、簡単な計算機能を実装するためのJavaScriptの具体的なコードを紹介し...
Vue $http get および post リクエストのクロスドメイン問題まずconfig/ind...
<br />これは、Steven D が書いた Web フロントエンド開発デザインの基本...
JavaScriptをクリックすると画像の形状が変わります(変形の応用)。参考までに具体的な内容は...
マウス効果では、setTimeout を使用して固定時間にノードを生成し、ノードを削除し、生成された...
1. mysql tar ファイルをダウンロードします。参考: 2. インストールパッケージがあるデ...
コアコード <!DOCTYPE html> <html lang="ja...
序文最近、私は夜に時間を取って「CSS World」という本を読んでいます。この本は非常に興味深く、...
Windows Server 2008R2を忘れた場合の対処方法サーバーの数が多すぎる、サーバーが多...
この記事では、タイムライン効果を実現するためのvue+swiperの具体的なコードを参考までに共有し...
序文:私はずっと、SQL 文がどのように、どのような順序で実行されるのかを知りたいと思っていました。...
序文良い習慣はすべて宝物です。この記事は、SQL の後悔の治療法、SQL パフォーマンスの最適化、S...