Amoeba を使用して MySQL データベースの読み取り/書き込み分離を実装する方法の詳細な説明

Amoeba を使用して MySQL データベースの読み取り/書き込み分離を実装する方法の詳細な説明

MySQL には読み取りと書き込みを分離するアーキテクチャが多数あります。Baidu のそれらのほとんどは、mysql_proxy を使用して実装されています。このプロキシは Lua スクリプト言語に基づいて実装されているため、インターネット上の多くのネットユーザーは、このプロキシは非効率で不安定であり、実稼働環境での使用は推奨されないと述べています。

Amoeba は Alibaba が開発したデータベースの読み書き分離プロジェクトです (読み書き分離はその小さな機能にすぎません)。Java ベースで記述されているため、実行環境に JDK をインストールする必要があります。

事前準備:

1. 2 つのデータベース、1 つのマスターと 1 つのスレーブ、マスター スレーブ同期。

  1. マスター: 172.22.10.237:3306; マスター データベースは書き込み操作を担当します。
  2. スレーブ: 10.4.66.58:3306; スレーブは読み取り操作を担当します。
  3. amoeba: 172.22.10.237:8066 ; メインデータベースが配置されているサーバーに amoeba をインストールしました。もちろん、3 番目のサーバーにインストールすることもできます。

すべてのサーバーのオペレーティング システムは Centos7 です。

2. amoeba が配置されているサーバーに JDK を設定してインストールします。

jdk1.8をインストールしました。

パスは次のとおりです: JAVA_HOME=/usr/local/java/jdk1.8.0_131

上記は自分でビルドして構成する必要があり、マスターとスレーブは正常に動作し、jdk 環境変数を追加します: /etc/profile;

amoeba をインストールする方法は多数あります。ここでは詳細には触れません。私は amoeba-mysql-3.0.5-RC-distribution のインストール パッケージをダウンロードし、解凍して使用しました。

解凍ディレクトリ: /usr/local/amoeba/

明らかに、 conf は設定ファイルであり、 bin は起動プログラムです。

前述のように、amoeba には読み取り/書き込み分離以外にも多くの機能がありますが、読み取り/書き込み分離機能のみを使用する場合は、conf/dbServers.xml、conf/amoeba.xml、bin/launcher の各ファイルのみを構成する必要があります。

conf/dbServers.xml :

 `<property name="port">3306</property> 
       #Amoebaが接続するmysqlデータベースのポートを設定します。デフォルトは3306です。
  <property name="schema">testdb</property> 
      # デフォルトのデータベースを設定します。Amoeba に接続する場合、操作テーブルはデータベース名を明示的に指定する必要があります。つまり、dbname.tablename メソッドを使用します。操作は各バックエンド dbserver にディスパッチされるため、dbname を使用してデフォルトのデータベースを指定することはサポートされていません。
  <プロパティ名="user">test1</プロパティ> 
        #バックエンド データベース サーバーに接続するための amoeba のアカウントとパスワードを設定します。したがって、すべてのバックエンド データベースにこのユーザーを作成し、amoeba サーバーが接続できるように許可する必要があります <property name="password">111111</property>

  <property name="maxActive">500</property> #最大接続数、デフォルトは500
  <property name="maxIdle">500</property> #アイドル接続の最大数<property name="minIdle">1</property> #最新のアイドル接続数<dbServer name="writedb" parent="abstractServer"> #バックエンドの書き込み可能なデータベースを設定します。ここでは writedb と定義します。この名前は任意に付けることができ、後で使用されます<property name="ipAddress">172.22.10.237</property> #バックエンドの書き込み可能な dbserver の IP を設定します

  <dbServer name="slave01" parent="abstractServer"> #バックエンドの読み取り可能なデータベースを設定します <property name="ipAddress">10.4.66.58</property>

   <dbServer name="myslave" virtual="true"> #仮想 dbserver を設定します。これは実際には dbserver グループに相当します。ここでは、読み取り可能なすべてのデータベース IP がグループに入れられ、グループ名は myslave になります。
      <property name="loadbalance">1</property> # スケジューリング アルゴリズムを選択します。1 はレプリケーション バランス、2 は重み、3 は HA を意味します。ここでは 1 を選択します。
      <property name="poolNames">slave01</property> #myslave グループメンバー`

conf/amoeba.xml :

<プロパティ名="ポート">8066</プロパティ> 
       #Amoeba が listen するポートを設定します。デフォルトは 8066 です。
    <プロパティ名="ipAddress">127.0.0.1</プロパティ> 
        # リスニング インターフェイスを構成します。設定されていない場合は、デフォルトですべての IP アドレスがリッスンされます。
        # クライアントが amoeba に接続するために、ここで設定したアカウントを指定します (ここでのアカウントとパスワードは、amoeba がバックエンド データベース サーバーに接続するために使用するパスワードとは関係ありません)
      <プロパティ名="ユーザー">ルート</プロパティ> 
      <プロパティ名="パスワード">123456</プロパティ>

    <property name="defaultPool">myslave</property> 
         # amoeba のデフォルト プールを設定します。ここでは writedb に設定します。
    <property name="writePool">マスター</property> 
         #これら 2 つのオプションはデフォルトで登録解除されており、コメントを解除する必要があります。これらは、以前に定義した 2 つの読み取り/書き込みプールを指定するために使用されます <property name="readPool">slave01</property>

bin/ランチャー:

 # スクリプトを起動し、jdk 環境変数を設定する必要があります。
    # コメントの後に次の行を追加します。
    JAVA_HOME=/usr/local/java/jdk1.8.0_131

launcher は起動スクリプトです。JAVA_HOME が設定されていない場合、/etc/profile で環境変数を設定しても、次のエラーが発生する可能性があります: jdk 環境変数が設定されていません。

設定ファイルもあります: jvm.properties

  #メモリ使用量プロファイル# -Xssパラメータには最小値の要件があり、JVMを起動するには228より大きくなければなりません。
    #改訂:
      JVM_OPTIONS="-server -Xms1024m -Xmx1024m -Xss256k -XX:PermSize=16m -XX:MaxPermSize=96m"

経験豊富なオペレーターは、JDK に関連するものはすべて基本的にメモリ チューニングに関連していることを知っており、Amoeba も例外ではありません。

これで開始できます:

起動後、マシンの 8066 ポートが表示されます。


このとき、ローカル IP のポート 8066 と、設定ファイルに設定されたアカウントとパスワードを使用してデータベースに接続するだけで済みます。書き込まれたデータはマスターに送信され、読み取られたデータはスレーブから読み取られます。

テスト:

マスター データベースを閉じても、引き続き読み取ることができます。表示するには、select コマンドを実行します。

または

スレーブ データベースを閉じても、書き込みは可能です。update コマンドと inster コマンドを実行します。

以下もご興味があるかもしれません:
  • MySQL マスタースレーブ同期、読み取り書き込み分離構成手順
  • MySQL の読み取りと書き込みの分離 (基礎)
  • MySQL で読み取りと書き込みの分離を実装するためのチュートリアル
  • MySQL の読み書き分離(実践版)
  • MySQL マスタースレーブレプリケーション、読み取り/書き込み分離、バックアップとリカバリの詳細な説明
  • MySQL マスタースレーブレプリケーション 読み書き分離の設定方法の詳細説明
  • MySQL マスタースレーブレプリケーションの読み書き分離構造の詳細な説明

<<:  Alibaba Cloud Ubuntu 16.04でpptpdサービスを構築する方法

>>:  JavaScript 関数をよりエレガントにする方法

推薦する

HTML テーブル マークアップ チュートリアル (40): ヘッダーの暗い境界線の色属性 BORDERCOLORDARK

テーブルヘッダーでは、暗い境界線の色を個別に定義できます。基本的な構文<TH 境界線の色を暗く...

MySQLの主キーと外部キーの使用と説明を簡単に説明します

目次1. 外部キー制約外部キーとは何ですか?外部キーを使用する条件:外部キーの定義構文は次のとおりで...

ウェブデザイン研究における XHTML の応用の概要

<br />一般的に、「標準的な Web ページ」のファイル構成は XHTML CSS ...

1 分で Nginx のバージョンをスムーズにアップグレードおよびロールバックする方法

今日は、企業の実際の本番環境でよく遭遇する、Nginx を新しいバージョンにアップグレードし、古いバ...

スライダー間隔コンポーネントのネイティブ js 実装

この記事の例では、スライダー間隔コンポーネントを実装するためのjsの具体的なコードを参考までに共有し...

MySQL の接続数が多すぎるエラーの原因と解決策

目次概要本日正午、開発およびテスト環境の MySQL サービスで接続数が多すぎるというエラーが報告さ...

Reactでaxiosを使用してリクエストを送信する一般的な方法

目次Reactにaxios依存関係をインストールして導入するGETリクエストにaxiosを使用するa...

VMware仮想マシンの起動時に黒い画面が表示される問題を解決する

# VMware ハードディスクの起動優先順位を調整するステップ 1: 電源をオンにすると、BIOS...

React サーバーサイドレンダリング原則の分析と実践

ほとんどの人は、サーバーサイド レンダリング (SSR と呼んでいます) の概念について聞いたことが...

Vue は Tencent Map を統合して API を実装します (デモ付き)

目次執筆の背景プロジェクトの説明事前準備注記執筆の背景以前のプロジェクトではTencent Maps...

Html+CSS 描画三角形アイコン

まずはレンダリングを見てみましょう: XML/HTML コードコンテンツをクリップボードにコピー&l...

WeChatミニプログラムユーザー認証による携帯電話番号の取得(getPhoneNumber)

序文ミニプログラムには、ユーザーを取得するための非常に便利な API があり、getPhoneNum...

MySQL ストアドプロシージャの長所と短所の分析

MySQL バージョン 5.0 ではストアド プロシージャのサポートが開始されました。ストアド プロ...

CSSフローティングとフローティング解除について

フロートの定義要素を通常のドキュメント フローから外し、要素を左また​​は右に近づけます。親要素の端...