データベースのパフォーマンス最適化には、一般的にクラスタリングが採用されています。Oracle クラスタ ソフトウェアとハードウェアへの投資は高価です。今日は 1 日かけて、MySQL ベースのクラスタ環境を構築しました。 主なアイデア 簡単に言うと、MySQL マスター スレーブ レプリケーションを実装し、mycat を使用して負荷分散を実現します。 一般的に使用されている読み取り/書き込み分離方法を比較した結果、アクティブなコミュニティと安定したパフォーマンスにより、mycat が推奨されます。 テスト環境 MYSQL バージョン: サーバー バージョン: 5.5.53。WINDWOS インストール パッケージは公式 Web サイトからダウンロードできます。 注意: MySQL バージョンが 5.5 以降であることを確認してください。マスター スレーブ同期の構成方法は、以前のバージョンとは異なります。 Linux の実装の考え方も同様で、my.cnf を変更するだけです。
MySQL マスタースレーブレプリケーションの実装 主な考え方は、A のメイン MySQL がログ記録を開始し、B のスタンバイ MySQL が操作ログを読み取り、同期的に実行することです。 一般的には、マスター スレーブ同期が使用され、マスター マスター同期は推奨されません。 マスターmysqlを構成する 1) my.ini を変更します。 log-bin="C:/Program Files/MySQL/MySQL Server 5.5/log/mysql-bin.log" の適切な場所にログ ディレクトリと mysql-bin.log ファイルを作成する必要があります。 [mysqld] server-id=1 #ホスト識別子、整数ポート=3306 log-bin="C:/Program Files/MySQL/MySQL Server 5.5/log/mysql-bin.log" #このファイルが書き込み可能であることを確認してください read-only=0 #ホスト、読み取りと書き込みの両方が可能です binlog-do-db=sync_test #データベースをバックアップする必要があります。複数行書き込みます binlog-ignore-db=mysql #バックアップする必要のないデータベース、複数行書き込みます 2) MYSQLリモートアクセスを許可する #mysqlコンソールにログイン %home%/binに入り、mysql -uroot -prootを実行します。 #承認。ルートユーザーが IP 範囲 192.168.110.* からマスター mysql にリモート アクセスできるようにします。 mysql> 'root'@'192.168.110.*' に GRANT OPTION 付きで 'root' によって識別される *.* のすべての権限を付与します。 # 有効になります。この操作は非常に重要です! mysql> 権限をフラッシュします。 3) AマスターMySQLデータベースを再起動する %home%/binに入り、mysql -uroot -prootを実行します。 mysql>net stop mysql; mysql>net start mysql; 4) メインのMySQLログのステータスを確認する mysql> マスターステータスを表示します\G; ************************** 1. 行 **************************** ファイル:mysql-bin.000003 ポジション: 107 Binlog_Do_DB: 同期テスト Binlog_Ignore_DB: mysql セット内の 1 行 (0.00 秒) エラー: クエリが指定されていません Bスタンバイmysqlを構成する 1) my.ini を変更します。 log-bin="C:/Program Files/MySQL/MySQL Server 5.5/log/mysql-bin.log" の適切な場所にログ ディレクトリと mysql-bin.log ファイルを作成する必要があります。 [mysqld] # 同期テスト用に追加 server-id=2 #スレーブID log-bin="C:/Program Files/MySQL/MySQL Server 5.5/log/mysql-bin.log" #このファイルが書き込み可能であることを確認してください #master-host="192.168.110.1" #ホストIP #master-user=root #データベースアクセスユーザー名#master-pass=root #データベースアクセスパスワード#master-port=3306 #ホストポート#master-connect-retry=60 #スレーブサーバーがマスターサーバーが切断されていることを検出した場合、再接続するまでの時間差(秒単位) replicate-do-db=sync_test #特定のデータベースのみを複製する replicate-ignore-db=mysql #特定のデータベースを複製しない 2) BスタンバイMySQLデータベースを再起動する %home%/binに入り、mysql -uroot -prootを実行します。 mysql>net stop mysql; mysql>net start mysql; 3) スタンバイ データベース B のデータ ソースを構成し、強調表示された領域の状態が正常かどうかを確認します。 mysql>マスターをmaster_host='192.168.110.1'、master_port='3306'、master_user='root'、master_password='root'に変更します。 mysql>スレーブを起動します。 mysql>スレーブステータスを表示\G; ************************** 1. 行 **************************** Slave_IO_State: マスターからのイベント送信を待機中 マスターホスト: 192.168.110.1 マスターユーザー: ルート マスターポート: 3306 接続再試行: 60 マスターログファイル: mysql-bin.000003 読み取りマスターログ位置: 107 リレーログファイル: wjt-1c698d8a032-relay-bin.00001 リレーログ位置: 253 リレーマスターログファイル: mysql-bin.000003 スレーブIO実行中: はい スレーブSQL実行中: はい Replicate_Do_DB:同期テスト レプリケート_無視_DB: mysql テーブルの複製: 無視テーブルを複製: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: 最終エラー番号: 0 最終エラー: スキップカウンタ: 0 実行マスターログ位置: 107 リレーログスペース: 565 Until_Condition: なし ログファイルまで: ログ位置まで: 0 マスターSSL許可: いいえ マスターSSLCAファイル: マスターSSLCAパス: マスターSSL証明書: マスターSSL暗号: マスターSSLキー: マスターより遅れている秒数: 0 Master_SSL_Verify_Server_Cert: いいえ 最終IOエラー番号: 0 最後のIOエラー: 最終SQLエラー番号: 0 最後のSQLエラー: Replicate_Ignore_Server_Ids: マスターサーバーID: 1 セット内の 1 行 (0.00 秒) エラー: クエリが指定されていません 同期構成の結果を確認する
読み取りと書き込みの分離を実現 主なアイデアは、mycat ミドルウェアを使用して SQL コマンドをバックエンドの MySQL ノードに転送することです。 mycat はデータベースの同期については責任を負いません。 mycatをインストールする mycatとは何ですか?これはデータベース アクセス ミドルウェアと考えることもできますが、アクセス ルーティング、マルチテーブル シャーディング操作などの機能を備えており、f5 や ngnix などの製品に似ています。とにかく非常に強力です。
インストール完了 mycat を設定する 1) server.xml。アクセスユーザーと権限を構成します。強調表示された情報を変更します。ここで、admin と user は mycat にアクセスするユーザーであり、TESTDB は上位レベルのアプリケーションがアクセスするための mycat の仮想データベースです。 <ユーザー名="admin"> <property name="password">管理者</property> <property name="schemas">TESTDB</property> <!-- テーブルレベルの DML 権限設定 --> <!-- <権限チェック="false"> <スキーマ名="TESTDB" dml="0110" > <テーブル名="tb01" dml="0000"></テーブル> <テーブル名="tb02" dml="1111"></テーブル> </スキーマ> </権限> --> </ユーザー> <ユーザー名="ユーザー"> <property name="password">ユーザー</property> <property name="schemas">TESTDB</property> <プロパティ名="readOnly">true</プロパティ> </ユーザー> 2) schema.xml。この部分は理解しにくいので、簡略化して、スキーマ、データノード、データホストの 3 つの主要な構成に分割しました。 <scheme> ノードは、mycat の仮想データベースを TESTDB、balance="1" として定義します。書き込み操作はマシン A にルーティングされ、読み取り操作はマシン B にルーティングされます。 <?xml バージョン="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:スキーマ xmlns:mycat="http://io.mycat/"> <スキーマ名="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"> <!-- ここでは構成がありません。つまり、すべてのテーブルが dn1 ノードに分割されます --> </スキーマ> <dataNode 名="dn1" データホスト="localhost1" データベース="sync_test" /> <dataHost name="localhost1" maxCon="1000" minCon="10" バランス="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>ユーザーを選択()</heartbeat> <!-- 複数の書き込みホストを持つことができます --> <writeHost ホスト="hostM1" url="192.168.110.1:3306" ユーザー="root" パスワード="root"> <!-- 複数の読み取りホストを持つことができます --> <readHost ホスト="hostS2" url="192.168.110.2:3306" ユーザー="root" パスワード="root" /> </writeHost> </データホスト> </mycat:スキーマ> mycatを起動する 1) mycatを起動する
背景情報は次のとおりです。
MyCAT サーバーの起動に成功しました。logs/mycat.log のログを参照してください。# 起動に成功すると、次の情報が表示されます。 注意: ログに「192.168.110.2 が接続されていません」などの情報が含まれている場合は、MySQL サーバー B へのリモート アクセスを許可してください。 #mysqlコンソールにログイン %home%/binに入り、mysql -uroot -prootを実行します。 #承認。ルートユーザーが IP 範囲 192.168.110.* から Bmysql にリモートアクセスできるようにします。 mysql> 'root'@'192.168.110.*' に GRANT OPTION 付きで 'root' によって識別される *.* のすべての権限を付与します。 # 有効にしてください。この操作は非常に重要です。 mysql> 権限をフラッシュします。 読み取りと書き込みの分離をテストする 同期を確認する
BスタンバイMySQLの同期を終了し、読み取り/書き込み分離を確認します。 mysql> スレーブを停止します。 クエリは正常、影響を受けた行は 0 行 (0.00 秒) mysql> スレーブステータスを表示します\G; ************************** 1. 行 **************************** スレーブ_IO_状態: マスターホスト: 192.168.110.1 マスターユーザー: ルート マスターポート: 3306 接続再試行: 60 マスターログファイル: mysql-bin.000003 読み取りマスターログ位置: 478 リレーログファイル: wjt-1c698d8a032-relay-bin.00001 リレーログ位置: 624 リレーマスターログファイル: mysql-bin.000003 スレーブIO実行中: いいえ スレーブSQL実行中: いいえ Replicate_Do_DB:同期テスト レプリケート_無視_DB: mysql テーブルの複製: 無視テーブルを複製: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: 最終エラー番号: 0 最終エラー: スキップカウンタ: 0 実行マスターログポジション: 478 リレーログスペース: 936 Until_Condition: なし ログファイルまで: ログ位置まで: 0 マスターSSL許可: いいえ マスターSSLCAファイル: マスターSSLCAパス: マスターSSL証明書: マスターSSL暗号: マスターSSLキー: マスターより遅れている秒数: NULL Master_SSL_Verify_Server_Cert: いいえ 最終IOエラー番号: 0 最後のIOエラー: 最終SQLエラー番号: 0 最後のSQLエラー: Replicate_Ignore_Server_Ids: マスターサーバーID: 1 セット内の 1 行 (0.00 秒) エラー: クエリが指定されていません 3) navicatを使用してmycatに接続します。操作方法は、物理的なmysqlデータベースに接続する場合と同じです。ユーザーadmin、パスワードadmin、ポート8066
原因: mycat はクエリ sq を B にルーティングするため、読み取り結果セットに矛盾が生じます。 最後に、mycat の使用については、公式 Web サイトの信頼できるガイドを参照してください。デュアルアクティブ デュアルスタンバイ アーキテクチャは後で更新されます。 要約する 以上が、mysql+mycat をベースにした、安定した高可用性のクラスター負荷分散、プライマリとセカンダリのレプリケーション、読み取り/書き込み分離操作の構築についてご紹介したものです。お役に立てれば幸いです。ご質問がございましたら、メッセージを残していただければ、すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。 以下もご興味があるかもしれません:
|
<<: nginx でディレクトリ ホワイトリストと IP ホワイトリストを設定する方法
私が書いた内容が理解できない場合は、インターネット上に理解できるチュートリアルがない可能性があります...
Linux環境変数の設定ソフトウェアのインストールをカスタマイズする場合、多くの場合、環境変数を設定...
システム: Ubuntu 16.04LTS 1\公式サイトからmysql-5.7.18-linux-...
<div class="サイドバー"> <div> &...
JS で関数を定義する 3 つの方法例を挙げて説明しましょう。 <スクリプト> //メソ...
目次導入Tomcatへの接続方法APR と Tomcat ネイティブtomcat で APR を使用...
序文:私は仕事柄、オンラインライブストリーミングの分野に携わっており、ビデオの再生やダウンロードには...
MySQL の全体的なアーキテクチャは、サーバー層とストレージ エンジン層に分かれています。サーバー...
序文: MySQL データベースは、よく使用される集計関数、日付および文字列処理関数など、幅広い関数...
結果:実装コードhtml <link href='https://fonts.goog...
1. Centosイメージを使用してローカルのyumソースをビルドするCentOS をインストール...
1. メディアクエリ方式 /*iPhone X への適応*/ @media 画面のみ、(デバイス幅:...
目次整合性制約整合性制約の定義整合性制約の分類主キー制約単一の主キーと複合主キーの違い主キーフィール...
JDBCデータベースリンクと関連メソッドのカプセル化の詳細な説明MySQL データベースを使用して、...
一般的なNginx構成ではクロスドメインが可能 サーバー{ 11111 を聞いてください。 serv...