あなたはまだそれが別々のコードを読み取り、書き込みを行っている、これはそれをミドルウェアてみてください!

SpringBoot実際の電力供給のアイテムモール(25K +スター)住所:github.com/macrozheng / ...

概要

伝統的なMySQLは読み取り及び書き込み分離方式を動的SQL文の種類に応じてデータ・ソース・コードを切り替えることによって達成され、その後、何ミドルウェアが存在しないことができ、自動的に別読み出し、それを書くのか?ミレーのオープンソースデータベースミドルウェアガイアは、我々は、MySQLのガイア分離を読み書きする方法を詳細に説明します、達成することができます。

ガイア简介

ガイアは、現在広くより多くのビジネスの受注、コミュニティ活動を含め、キビモール本土や海外で使用される中国のR&D研究開発におけるMySQLデータベースミドルウェア・プロトコルのキビの電気の供給、に基づいています。基本的には等ガイアサブライブラリ点テーブル、SQLルーティング、別個のリードおよびライトを備え、前記サブライブラリーサブテーブルルーティングスキーム互換mycatと2つの項目kingshard。

MySQLのマスタースレーブのレプリケーション

:を参照することができますコピーのメインのMySQLからは、MySQLマスタースレーブレプリケーション環境を使用してに頼るガイアの必要性の原則から実践には、MySQLマスタースレーブレプリケーション!

Linuxで直接インストール

道に直接インストールされている現在、公式のLinuxが提供する、ガイアをインストールするには、このメソッドをしましょう。

インストールゴーロケール

ガイアは、囲碁の言語を使用することですので、私たちは、環境のGo言語をインストールする必要があります。

  • インストール囲碁ロケール、ダウンロード:golang.org/dl/

  • ダウンロードした後に完全な抽出物である/mydataディレクトリには、
tar -zxvf go1.13.5.linux-amd64.tar.gz -C /mydata/
复制代码
  • 追加/mydata/go/binPATH変数にディレクトリを:
# 编辑环境变量配置文件
vim /etc/profile
# 在最后一行添加
export GOROOT=mydata/go
export PATH=$PATH:$GOROOT/bin
# 刷新配置文件
source /etc/profile
复制代码
  • インストールが成功したかどうかをテストするには、バージョン番号を表示します。
go version
复制代码
  • Goでは、以下の情報が正常にインストールされたロケールを表して返します。
go version go1.13.5 linux/amd64
复制代码

ガイア安装

ガイアは、インストールパッケージを提供していないので、私たちは、ソースコードの実行可能ファイルをコンパイルするために取得する必要があります。

  • ガイアは、ソースコード、ダウンロードダウンロードzip:ダウンロードアドレスにパッケージgithub.com/XiaoMi/Gaeaを

  • 我々はそれを抽出し、ダウンロードパッケージの良好な圧縮解凍操作、/mydata/gaea/ディレクトリ:

unzip Gaea-master.zip
复制代码
  • 入力し/mydata/gaea/たディレクトリを、使用しmakeたソースコードをコンパイルするためのコマンドを:
make build
复制代码
  • 注意:ネットワークの問題に起因して、それが成功するために何回かしてみてください、コンパイルが失敗したダウンロードするためのいくつかの依存行きます。

  • でコンパイルした後/mydata/gaea/bin、ディレクトリガイア実行可能ファイルを生成しますgaea

  • 我々はビルドされませんのでetcd、ローカル設定ファイルを変更する必要があるので、物流センターを/mydata/gaea/etc/gaea.ini、コンフィギュレーション・タイプを変更しますfile
; 配置类型,目前支持file/etcd两种方式,file方式不支持热加载
config_type=file
复制代码
  • 私たちの主、プロファイルアドレスからデータベース情報を設定するための名前空間の構成ファイルを追加します。/mydata/gaea/etc/file/namespace/mall_namespace_1.json

  • 次のように設定ファイル:
{
    "name": "mall_namespace_1",
    "online": true,
    "read_only": false,
    "allowed_dbs": {
        "mall": true
    },
    "slow_sql_time": "1000",
    "black_sql": [
        ""
    ],
    "allowed_ip": null,
    "slices": [
        {
            "name": "slice-0",
            "user_name": "root",
            "password": "root",
            "master": "192.168.6.132:3307",
            "slaves": ["192.168.6.132:3308"],
            "statistic_slaves": null,
            "capacity": 12,
            "max_capacity": 24,
            "idle_timeout": 60
        }
    ],
    "shard_rules": null,
    "users": [
        {
            "user_name": "macro",
            "password": "123456",
            "namespace": "mall_namespace_1",
            "rw_flag": 2,
            "rw_split": 1,
            "other_property": 0
        }
    ],
    "default_slice": "slice-0",
    "global_sequences": null
}
复制代码

名前空間のプロフィール

名前空間の構成JSON形式、サブテーブル等の設定情報、おこがましいテーブル、例を含んで、実行時に変更することができます。

  • 全体の構成手順:

    フィールド名 フィールドタイプ フィールド意味
    名前 ストリング 名前空間名
    オンライン BOOL オンライン、オフラインで使用するロジックかどうか
    READ_ONLY BOOL 読み取り専用、名前空間レベルかどうか
    allowed_dbs 地図 プロキシを経由してデータベースへのアクセスを許可します
    default_phy_dbs 地図 デフォルトのデータベース名、および1-allowed_dbs
    slow_sql_time ストリング ミリ秒でSQL遅い時間
    black_sql 文字列配列 SQLブラックリスト
    allowed_ip 文字列配列 IPホワイトリスト
    スライス マップ配列 複数の物理からマスタの例として、特定のフィールドマップのスライスのスライス構成を参照することができます
    shard_rules マップ配列 構成データベースは、特定のフィールドを参照して、サブテーブル、特別なテーブルを、分割された断片を構成することができます
    ユーザー マップ配列 ユーザ端末接続ゲーのアプリケーション設定を所望の、ユーザーが特定のフィールド構成を参照することができ
  • スライスの設定:

    フィールド名 フィールドタイプ フィールド意味
    名前 ストリング フラグメント名は、自動的に秩序を生成します
    USER_NAME ストリング データベースのユーザー名
    パスワード ストリング データベースのパスワード
    主人 ストリング プライマリアドレスの例
    奴隷 文字列配列 データベースから住所、複数設定することができます
    statistic_slaves 文字列配列 インスタンスタイプのアドレス一覧から統計
    容量 int型 接続プールの各インスタンスの寸法とgaea_proxy
    max_capacity int型 接続プールgaea_proxy最大サイズの各インスタンス
    IDLE_TIMEOUT int型 バックエンドMySQLの自由な生存期間とのgaea_proxy接続、単位:秒
  • ユーザーの構成:

    フィールド名 フィールドタイプ フィールド意味
    USER_NAME ストリング ユーザーがアクセスするデータベースのプロキシユーザー名、クライアント名
    パスワード ストリング 演技のパスワードデータベース、ユーザー名でクライアントアクセス
    名前空間 ストリング 対応する名前空間
    rw_flag int型 書き込みを識別する、読み取り専用= 1、= 2を読み出します
    rw_split int型 別読み書き場合、読み取りと書き込み非分離= 0、別個の読み出し及び書き込み1 =
    other_property int型 現在、平均的なユーザー= 0、1 =ユーザ統計の例から統計に行くかどうかを識別するために使用されます

ファイル名を指定して実行ドッカーコンテナ

Linuxで直接実行をインストールするための唯一の公式の方法として、ここではサービスとしてドッカー容器内に、操作の代替モードを提供しています。

ミラーは、ドッカーにパッケージ化

ドッカーハブなしパッケージガイアミラーは、我々はどのようにドッキングウィンドウの画像の下にガイアを構築するには、以下の詳細を、自己を構築する必要があります。

  • 次のようにここでは、Dockerfileビルドドッカーミラーを使用し、Dockerfileの内容は以下のとおりです。
# 该镜像需要依赖的基础镜像
FROM golang:latest
# 将当前目录下的gaea源码包复制到docker容器的/go/Gaea-master目录下,对于.tar.gz文件会自动解压
ADD Gaea-master.tar.gz /go/Gaea-master
# 将解压后的源码移动到/go/gaea目录中去
RUN bash -c 'mv /go/Gaea-master/Gaea-master /go/gaea'
# 进入/go/gaea目录
WORKDIR /go/gaea
# 将gaea源码进行打包编译
RUN bash -c 'make build'
# 声明服务运行在13306端口
EXPOSE 13306
# 指定docker容器启动时执行的命令
ENTRYPOINT ["/go/gaea/bin/gaea"]
# 指定维护者的名字
MAINTAINER macrozheng
复制代码
  • ガイアソースに、この私たちのニーズに先立ちへのパケット圧縮.tar.gzドッカーコンテナ内の便利な形式の解凍を使用することができます压缩软件達成するために:

  • ガイアのドッカードッカーイメージを構築するコマンドを使用した後:
docker build -t gaea:1.0.2 .
复制代码
  • 成功したコンソール出力を構築します:

  • ガイア・コンフィギュレーション・ファイルのローカルインストールをコピーし/mydata/gaea-docker/etc/たディレクトリ:
cp -r /mydata/gaea/etc/ /mydata/gaea-docker/etc/
复制代码
  • ガイアを起動するコマンドを使用してドッカーコンテナ:
docker run -p 13306:13306 --name gaea \
-v /mydata/gaea-docker/etc:/go/gaea/etc \
-d gaea:1.0.2
复制代码

テスト別々の読み取りと書き込み

テストのアイデア:インスタンスからプライマリーこのデータの例ではないがある場合はまず、我々はデータの一部を挿入し、ガイアプロキシによってデータベースを操作するために、プライマリインスタンスからコピーを閉じ、そして、書き込み動作の説明は、主なライブラリを取ることです。そして、このデータをせずに、リードコマンドが読むために、ライブラリから行くために、書き込み分離が成功し、ガイアプロキシデータでテーブルを照会。

  • ここにプロキシガイア、注意を払うを介して接続するためのNavicatは、設定、ポートガイアのサービスポートのコンテンツの名前空間ガイアアカウントのパスワードです。

  • Navicatは、ライブラリからの主な図書館で接続され、データを表示するために、この時間は、次の3つのデータベース接続を確立します。

  • することによりstop slave、コマンド閉じmysql-slaveマスターから例のレプリケーションを:

  • よるガイアエージェントtestのデータテーブルを挿入します:

  • 主なライブラリをチェックtestデータテーブルを、データが発見されています。

  • ライブラリーからのビューではtest、テーブルのデータは、我々は、書き込み操作がメインのライブラリを取っていることを証明するデータ見つかりませんでした。

  • で直接表示エージェントtest読み出し動作がライブラリから取っていることを証明するデータを発見していないデータテーブル、。

連動SpringBootで使用

我々のアプリケーションでSpringBootは、私たちは別々の読み取りと書き込みを使用するデータベース・サービスを実現することができるように直接ガイアのプロキシサービスに必要です。したがって、コード内の任意の個別の読み取りと書き込みのロジックを追加することなく、それは非常に便利ではありません!

参考資料

:詳細については、公式ドキュメントを参照してくださいgithub.com/XiaoMi/Gaea

いいえ公共ありません

モールは、プロジェクトで連載フルチュートリアル国民の関心番号取得する最初の時間を。

いいえ公共絵ません

おすすめ

転載: juejin.im/post/5e22b37ee51d454d523be24d