基本原則は、マスター データベースにトランザクションの追加、変更、削除操作 (INSERT、UPDATE、DELETE) を処理させ、スレーブ データベースに SELECT クエリ操作を処理させることです。データベース レプリケーションは、トランザクション操作によって発生した変更をクラスター内のスレーブ データベースに同期するために使用されます。プログラムが大量のデータベースを使用し、更新が少なく、クエリが多い場合は、読み取りと書き込みの分離機能が考慮されます。データベースの「書き込み」操作 (MySQL に 100,00 個のデータを書き込むには 3 分かかる場合があります) には比較的時間がかかりますが、データベースの「読み取り」操作 (読み取りには 5 秒しかかからない場合があります) があるためです。 MySQL からの 100,00 個のデータ) は比較的高速です。したがって、読み取りと書き込みを分離することで、データベースへの書き込み時にクエリ効率に影響を与える問題を解決できます。
読み取りと書き込みの分離を実装するにはさまざまな方法がありますが、今日は Mycat を使用します。
Mycat による読み取り/書き込み分離の実現: Mycat が提供する読み取り/書き込み分離機能を使用して複数のデータベースを接続し、データ ソースは Mycat に接続するだけで済みます。開発者にとっては、データベース (実際にはデータベースの Mycat ミドルウェア) に接続されたままであり、さまざまなビジネスに応じて異なるライブラリを選択する必要がないため、冗長なコードは発生しません。
Mycatの紹介
インターネットの発展に伴い、データの規模も GB、TB、PB と指数関数的に増加しました。データに対するさまざまな操作はますます難しくなり、従来のリレーショナル データベースでは、高速なクエリとデータの挿入のニーズを満たすことができなくなりました。このとき、NoSQL の登場により、この危機は一時的に解決されました。データのセキュリティ、トランザクションのサポート、および複雑なクエリのサポートを削減することにより、パフォーマンスが向上します。ただし、トランザクションおよびセキュリティ インジケーターが絶対に必要なシナリオなど、NoSQL が使用シナリオに対応できない場合があります。現時点では、引き続きリレーショナル データベースを使用する必要があります。リレーショナル データベースを使用して大容量ストレージの問題を解決するにはどうすればよいですか? このとき、クエリのパフォーマンスを向上させるために、1つのデータベースのデータを複数のデータベースに分散して保存するデータベースクラスタが必要となり、この問題に対処するために登場したのがMycatです。Mycat は現在、Java 言語をベースにした最も人気のあるオープン ソース データベース ミドルウェアで、MySQL プロトコルを実装したサーバーであり、そのコア機能はサブデータベースとサブテーブルです。データベースのマスタ・スレーブモードと連携し、リード・ライト分離機能も実現できます。Mycat は、従来のデータベースと新しい分散データ ウェアハウスを組み合わせた新世代のエンタープライズ レベルのデータベース製品で、大量のデータベース データを保存し、クエリのパフォーマンスを向上させることができます。
上の写真に示すように
Mycat は、MySQL 通信プロトコルを使用して MySQL サーバーをシミュレートし、スキーマ (データベース)、テーブル (データ テーブル)、およびユーザー (ユーザー) の完全な論理モデルを確立し、この論理モデルのセットをバックエンド ストレージ ノードにマッピングします。 DataNode (MySQL インスタンス) このように、MySQL を使用できるすべてのクライアントとプログラミング言語は、新しいクライアント プロトコルを開発することなく、Mycat を MySQL サーバーとして使用できます。
基本的な準備
IP | CPU名 | ノード |
192.168.200.10 | mysql1 | グループ |
192.168.200.20 | mysql2 | グループ |
192.168.200.30 | 私の猫 | ホスト |
1. 3 つのクラスター サーバーのホストを構成します (ホスト IP マッピング)。
vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.200.10 mysql1
192.168.200.20 mysql2
192.168.200.30 mycat
2. データベース クラスターは、MariaDB データベース サービスをインストールし、クラスター仮想マシンの Yum インストール ソース ファイルを構成し、提供された gpmall-repo ファイルを使用して mycat 仮想マシンの /opt ディレクトリにアップロードし、ローカル Yum を設定する必要があります。ソース。
mkdir /opt/centos
mount /dev/cdrom /opt/centos/
mv /etc/yum.repos.d/* /media/
vi /etc/yum.repos.d/local.repo
[centos]
name=centos
baseurl=file:///opt/centos
gpgcheck=0
enabled=1
[mariadb]
name=mariadb
baseurl=file:///opt/gpmall-repo
gpgcheck=0
enabled=1
4.Mycat は Java で開発されているため、JDK 環境をインストールする必要があります (Mycat ミドルウェア サービスをデプロイするには、JDK 1.7 以降のバージョンの JDK ソフトウェア環境をデプロイする必要があります。ここでは、JDK 1.8 バージョンをデプロイします)。
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
5. ファイアウォールをオフにする (ルールを変更する)
iptables -F
iptables -X
iptables -Z
iptables-save #保存防火墙规则
2. Mycat 読み取り/書き込み分離ミドルウェア サービスを展開する
1. Mycat サービス (バイナリ パッケージ) をインストールします。
バイナリ パッケージを /root ディレクトリにアップロードし、/usr/local に解凍して、最後に解凍された Mycat ディレクトリにアクセス許可を付与します。
tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C
/usr/local
chmod -R 777 /usr/local/mycat/
Mycat システム変数をシステム変数ファイルに追加して有効にします。
echo export MYCAT_HOME=/usr/local/mycat/ >> /etc/profile
source /etc/profile
2. Mycatのロジックライブラリ編集ファイルを編集する
Mycat サービスの読み取りと書き込みの分離を構成する schema.xml 構成ファイルは、/usr/local/mycat/conf/ ディレクトリにあります。ユーザーが対応する MariaDB データベースを管理できるように、ファイル内に論理ライブラリを定義できます。 Mycat サービスを介した論理ライブラリ。ここで論理ライブラリ スキーマを定義し、名前は USERDB です。この論理ライブラリに対応するデータベース データベース USERDB は test です (マスター/スレーブ データベースのデプロイ時にすでにインストールされています)。データベース書き込みノードをマスター ノード mysql1 として設定します。データベースを設定します。ノードをスレーブ ノード mysql2 として読み取ります。
vi /usr/local/mycat/conf/schema.xml
注: IP は実際の IP アドレスに変更する必要があります。
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
8
<schema name="USERDB" checkSQLschema="true" sqlMaxLimit="100"
dataNode="dn1"></schema>
<dataNode name="dn1" dataHost="localhost1" database="test" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="3" dbType="mysql"
dbDriver="native" writeType="0" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="192.168.200.10:3306" user="root"
password="000000">
<readHost host="hostS1" url="192.168.200.20:3306" user="root"
password="000000" />
</writeHost>
</dataHost>
</mycat:schema>
コードの説明:
⚫ sqlMaxLimit: デフォルトのクエリ番号を設定します。
⚫ データベース: 実際のデータベース名です。
⚫ Balance="0": 読み取り/書き込み分離メカニズムは有効になっておらず、すべての読み取り操作は現在利用可能な writeHost に送信されます。
⚫ Balance="1": すべての readHost とスタンバイ writeHost が select ステートメントのロード バランシングに参加します。簡単に言うと、デュアルマスター デュアルスレーブ モード (M1->S1、M2->S2、および M1 と M2) の場合相互にアクティブとスタンバイです))、通常の状況では、M2、S1、および S2 はすべて select ステートメントのロード バランシングに参加します。
⚫ Balance="2": すべての読み取り操作は writeHost と readhost にランダムに分散されます。
⚫balance="3": すべての読み取りリクエストは、実行のために WriterHost に対応する readhost にランダムに分散されます。writerHost は読み取りプレッシャーに耐えません。balance=3 は 1.4 以降のバージョンでのみ使用可能で、1.3 では使用できないことに注意してください。バージョン。
⚫ writeType="0": すべての書き込み操作は、最初に設定された writeHost に送信されます。最初の writeHost が失敗した場合は、2 番目に残っている writeHost に切り替える必要があります。再起動後に切り替えられたものが優先されます。切り替えは次の形式で記録されます。構成ファイル。dnindex.properties。
⚫ writeType="1": すべての書き込み操作は、設定された writeHost にランダムに送信されます。
3. 設定ファイルの権限を変更します。
chown root:root /usr/local/mycat/conf/schema.xml
4.mycatのアクセスユーザーを編集する
/usr/local/mycat/conf/ ディレクトリー内のserver.xml ファイルを変更し、root ユーザーのアクセス・パスワードとデータベースを変更し、パスワードを 000000 に設定し、論理ライブラリーを使用して USERDB として Mycat にアクセスします。
vi /usr/local/mycat/conf/server.xml
構成ファイルの最後に次を追加します。
<user name="root">
<property name="password">000000</property>
<property name="schemas">USERDB</property>
次に、次の行を削除します。
<user name="user">
<property name="password">user</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
</user>
1 つの root を構成し、2 つの root ユーザーの存在が許可されていないため、最初の root 構成も削除する必要があります。追加された構成は </mycat:server> に書き込む必要があります。
最後に保存して終了します
5.最後にMycatサービスを開始します
/bin/bash /usr/local/mycat/bin/mycat start
ポート 9066 および 8066 が表示され、起動は成功します。
3. データベースクラスタサービスの読み書き分離機能を確認する
1 Mycat サービスを使用してデータベース情報をクエリする
yum install -y MariaDB-client
2. Mycat 仮想マシン上で mysql コマンドを使用して、Mycat サービスの論理ライブラリ USERDB を表示します。Mycat 10 の論理ライブラリ USERDB はデータベース テストに対応しているため (マスター/スレーブ データベースのデプロイ時にすでにインストールされています)、テーブルを表示できます。ライブラリ内に作成された会社。
mysql -h127.0.0.1 -P8066 -uroot -p000000
show databases;
use USERDB #更改数据库
show tables;
select * from company;
3. Mycat サービスを使用してテーブル データを追加します (Mycat ノード)
Mycat 仮想マシンで mysql コマンドを使用して、データ (2、「バスケットボール」、「usa」) を会社テーブルに追加します。追加が完了したら、テーブル情報を表示します。
insert into company values(2,"bastetball","usa");
select * from company;
(3) Mycat サービスがデータベースの読み取り操作と書き込み操作を分離していることを確認します。
Mycat 仮想マシン ノードで mysql コマンドを使用して、ポート 9066 を介してデータベースの読み取り操作と書き込み操作の分離情報をクエリします。すべての書き込み操作 WRITE_LOAD は mysql1 メイン データベース ノード上で行われ、すべての読み取り操作 READ_LOAD は mysql2 メイン データベース ノード上で行われることがわかります。データベースの読み取りおよび書き込み操作が mysql1 ノードと mysql2 ノードに分離されていることがわかります。
mysql -h127.0.0.1 -P9066 -uroot -p000000 -e 'show @@datasource;'
Mycat の読み取りと書き込みの分離が完了しました。