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 のインストールと設定方法のグラフィックチュートリアル
Windows 2008 Serverのサブドメインを親ドメインに参加させると、「ドメインは既に存...
目次序文1. データベースの基礎知識1. データベースとは何ですか? 2. データベースの分類3. ...
この記事では、Excelテーブルプラグインを導入するVueの具体的なコードを参考までに共有します。具...
目次JavaScript のインポート1. 内部ラベル2. 外部紹介基本的な構文データ型番号弦ブール...
目次ブートオプションコマンドラインパラメータの長い形式と短い形式設定ファイル構成グループシステム変数...
目次デバウンススロットル要約するデバウンス定義: スクロール イベントなど、短時間に連続してトリガー...
目次システムアップデート構成Windows Update サーバーの変更自動更新を有効にして許可する...
定義と使用方法:コンポーネントのテンプレートでスロットタグの定義を使用します。デフォルトの表示値は、...
目次01 CM 02 エントリーポイント03 ワークディレクトリ04 環境05 ユーザー06巻07 ...
目次特徴利点インストールとコマンド設定ファイルプロキシモードとリバースプロキシ構成フォワードプロキシ...
これは公式のスクリーンショットです。MySQL 5.7 をインストールすると、デフォルトのパスワード...
MySQL メモリ テーブルと一時テーブルの使用メモリテーブル: セッション 1 $ mysql -...
1. はじめにまず、1 台のマシンで複数のインスタンスを使用する理由という質問に答える必要があります...
目次必要コアアイデアReactでスロットを実装する2つの方法必要コンポーネントを自分で書きました。コ...
目次1. 書き込み可能: 書き込み可能2. 列挙可能: 列挙可能3. 設定可能: 設定可能オブジェク...