OneProxy に基づいて MySQL の読み取り/書き込み分離と負荷分散を実装する

OneProxy に基づいて MySQL の読み取り/書き込み分離と負荷分散を実装する

導入

パート1: 冒頭に書いた

OneProxy は、民間ソフトウェアによって完全に独立して開発された分散データ アクセス レイヤーです。MySQL/PostgreSQL クラスターでのシャーディングをサポートする分散データベース ミドルウェアをユーザーが迅速に構築するのに役立ちます。また、SQL ホワイトリスト (アンチ SQL インジェクション) と IP ホワイトリスト機能を備えた SQL ファイアウォール ソフトウェアでもあります。これは、MySQL Proxy と一致するリバース プロトコル出力モードを使用します。これは非常にシンプルで透過的であり、アプリケーションにとって使いやすく、ユーザーが恐れるデータベース フェイルオーバー、読み取り/書き込み分割、水平パーティショニングなどの複雑なソリューションを非常にシンプルで制御可能なものにします。 Libevent メカニズムに基づき、単一インスタンスで 250,000 の SQL 転送機能を実現できます。1 つの OneProxy ノードで MySQL クラスター全体を駆動し、ビジネス開発に貢献できます。

パート2: 環境の紹介

HE1:192.168.1.248 スレーブ1

HE2:192.168.1.249 スレーブ2

HE3:192.168.1.250 マスター

HE4:192.168.1.251 ワンプロキシ

環境構築

パート1: Oneproxyをインストールする

[root@HE4 ~]# tar xvf oneproxy-rhel5-linux64-v5.8.5-ga.tar.gz
[root@HE4 oneproxy]# ls
bin conf demo.sh log oneproxy.service README testadmin.sql testautocommit.sql testproxy.sql trantest.sql

パート2: マスタースレーブ環境の構築

この記事のアーキテクチャは、マスター 1 つとスレーブ 2 つで構成され、HE3 がマスターで、HE1 と HE2 がスレーブです。マスタースレーブの構築はこの記事の焦点では​​ないので、必要に応じて移動できます。

mysqlreplicate を使って MySQL マスタースレーブを素早く構築する方法

パート3: Oneproxyを構成する

ディレクトリ内のデモは初期起動スクリプト、oneproxy.serviceは起動および停止スクリプト、新しいバージョンのoneproxyではconfフォルダ内のproxy.cnfは設定ファイルです。

[root@HE4 oneproxy]# cat demo.sh 
#/bin/bash
#
ONEPROXY_HOME=/root/oneproxy をエクスポートします。
# valgrind --leak-check=full \
 ${ONEPROXY_HOME}/bin/oneproxy --defaults-file=${ONEPROXY_HOME}/conf/proxy.conf

demo.shのONEPROXY_HOMEをoneproxyが解凍されたディレクトリに変更します。

[root@HE4 oneproxy]# cat oneproxy.service 
#!/bin/bash
# chkconfig: -30 21
# 説明: OneProxy サービス。
# ソース関数ライブラリ
. /etc/init.d/functions
# OneProxy 設定
ONEPROXY_HOME=/root/oneproxy
ONEPROXY_SBIN="${ONEPROXY_HOME}/bin/oneproxy"
ONEPROXY_CONF="${ONEPROXY_HOME}/conf/proxy.conf"
ONEPROXY_PID="${ONEPROXY_HOME}/log/oneproxy.pid"
戻り値=0
prog="OneProxy"
始める() {
 echo -n $"$prog を開始しています..."
 デーモン $ONEPROXY_SBIN --defaults-file=$ONEPROXY_CONF
RETVAL=$?
エコー
}
停止() {
 echo -n $"$prog を停止しています..."
[ -e ${ONEPROXY_PID} ]の場合;
デーモンをkill -INT $(cat ${ONEPROXY_PID})
 RETVAL=$?
フィ
エコー
}
再起動(){
 停止
睡眠1
 始める
}
ケース「$1」
 始める)
 始める
 ;;
 停止)
 停止
 ;;
 再起動)
 再起動
 ;;
 *)
 echo $"使用法: $0 {start|stop|restart}"
 戻り値=1
エサック
$RETVALを終了

同時に、oneproxy.service 内の ONEPROXY_HOME を解凍時のディレクトリに変更します。

oneproxyのbinディレクトリに入り、mysqlpwdを使用してパスワードを暗号化します

[root@HE4 oneproxy]# cd bin/

[root@HE4 bin]# ls

mysqlpwd ワンプロキシ

[root@HE4 bin]# ./mysqlpwd マネージャー

1C6D087BA5D2607A27DECB2F2AFE247E911E877A

proxy.cnfの内容を編集する

[root@HE4 conf]# cat proxy.conf 
[ワンプロキシ]
キープアライブ = 1
イベントスレッド = 4
プロキシグループポリシー.2 = テスト:読み取りスレーブ
ログファイル = log/oneproxy.log
pid ファイル = log/oneproxy.pid
lck ファイル = log/oneproxy.lck
プロキシ自動読み取り専用 = 1
プロキシ転送クライアントIP = 1
プロキシトランスデバッグ = 1
プロキシアドレス = :3307
mysql バージョン = 5.7.16
プロキシマスターアドレス.1 = 192.168.1.250:3306@test
プロキシスレーブアドレス.2 = 192.168.1.248:3306@test
プロキシスレーブアドレス.3 = 192.168.1.249:3306@test
プロキシユーザーリスト = sys_admin/1C6D087BA5D2607A27DECB2F2AFE247E911E877A@test
プロキシユーザーグループ = test:sys_admin/1C6D087BA5D2607A27DECB2F2AFE247E911E877A@test
プロキシ部分テンプレート = conf/template.txt
プロキシパートテーブル.1 = conf/part.txt
プロキシパートテーブル.2 = conf/part2.txt
プロキシパーツテーブル.3 = conf/cust1.txt
プロキシ文字セット = utf8_bin
プロキシセキュアクライアント = 127.0.0.1
# プロキシライセンス = 32C54560E06EFF3E
プロキシhttpサーバー = :8080
proxy-httptitle = OneProxy モニター

パート4: Oneproxyを起動する

[root@HE4 oneproxy]# ./demo.sh

[root@HE4 oneproxy]# ./oneproxy.service を再起動します

OneProxy を停止しています...[OK]

OneProxy を起動しています... [ OK ]

テスト

パート 1: Oneproxy ステータスの検証

ブラウザを開いてポート192.168.1.251:8080を開き、oneproxy管理ページを表示します。

ここでは、マスターとスレーブのさまざまなステータス情報を確認できます。

パート2: 負荷分散と読み取り/書き込み分離の検証

[root@HE1 ~]# mysql -usys_admin -pMANAGER -h192.168.1.251 -P3307 -e"@@hostnameを選択します;"
mysql: [警告] コマンドライン インターフェイスでパスワードを使用すると安全でない可能性があります。
+------------+
| @@ホスト名 |
+------------+
| HE1 |
+------------+
[root@HE1 ~]# mysql -usys_admin -pMANAGER -h192.168.1.251 -P3307 -e"@@hostnameを選択します;"
mysql: [警告] コマンドライン インターフェイスでパスワードを使用すると安全でない可能性があります。
+------------+
| @@ホスト名 |
+------------+
| HE2 |
+------------+
[root@HE1 ~]# mysql -usys_admin -pMANAGER -h192.168.1.251 -P3307 -e"@@hostnameを選択します;"
mysql: [警告] コマンドライン インターフェイスでパスワードを使用すると安全でない可能性があります。
+------------+
| @@ホスト名 |
+------------+
| HE1 |
+------------+
[root@HE1 ~]# mysql -usys_admin -pMANAGER -h192.168.1.251 -P3307 -e"@@hostnameを選択します;"
mysql: [警告] コマンドライン インターフェイスでパスワードを使用すると安全でない可能性があります。
+------------+
| @@ホスト名 |
+------------+
| HE2 |
+------------+
[root@HE1 ~]# mysql -usys_admin -pMANAGER -h192.168.1.251 -P3307 -e"@@hostnameを選択します;"
mysql: [警告] コマンドライン インターフェイスでパスワードを使用すると安全でない可能性があります。
+------------+
| @@ホスト名 |
+------------+
| HE1 |
+------------+
[root@HE1 ~]# mysql -usys_admin -pMANAGER -h192.168.1.251 -P3307 -e"begin;select @@hostname;commit;"
mysql: [警告] コマンドライン インターフェイスでパスワードを使用すると安全でない可能性があります。
+------------+
| @@ホスト名 |
+------------+
| HE3 |
+------------+
[root@HE1 ~]# mysql -usys_admin -pMANAGER -h192.168.1.251 -P3307 -e"begin;select @@hostname;commit;"
mysql: [警告] コマンドライン インターフェイスでパスワードを使用すると安全でない可能性があります。
+------------+
| @@ホスト名 |
+------------+
| HE3 |
+------------+

HE1とHE2をロードバランサーとして使用しても問題はなく、HE3を書き込みサーバーとして使用しても問題はないことがわかります。

--要約--

OneProxy は MySQL と連携して、読み取りと書き込みの分離と負荷分散の実験を実現し、成功裏に構築されました。Oneproxy にはデータベースとテーブルのシャーディング機能もあり、今後さらに研究される予定です。著者の能力の限界と記事執筆の急ぎにより、記事には必然的に誤りや不正確な点があります。不適切な点がありましたら、読者の皆様のご批判と訂正を心からお願い申し上げます。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQLデュアルマシンホットスタンバイと負荷分散の実装手順の詳細説明
  • パフォーマンス負荷診断にMySQLシステムデータベースを使用する方法
  • MySQLで負荷分散を実装する方法
  • MySQL のロードバランサーとして nginx を使用する方法
  • mysql+mycat、負荷分散、マスタースレーブレプリケーション、読み取り/書き込み分離操作に基づく安定した高可用性クラスタを構築します。
  • PythonはMySQLの読み書き分離と負荷分散を実装します
  • MySQLの高可用性負荷分散構成を実装するためのKeepalived+HAProxy
  • MySQLのインデックスによって引き起こされるCPU負荷の急増を分析する
  • MYSQLデータベース接続の負荷容量を迅速に増やす方法
  • 負荷分散機能を備えたMySQLサーバクラスタの導入と実装
  • MySQL の CPU 負荷が高い問題のトラブルシューティング

<<:  Vue のすべてのカプセル化方法の簡単な概要

>>:  2つのVirtualBox仮想ネットワークをブリッジするLinuxブリッジメソッドの手順

推薦する

deepin20 で NVIDIA クローズドソース ドライバーをインストールするための詳細な手順

ステップ1: ディープ「グラフィックドライバー」をインストールするdeepin v20にはデフォルト...

MySQL グループレプリケーションの設定手順 (推奨)

MySQL-Group-Replication は、MySQL-5.7.17 で開発された新しい機...

Element-UIの10の驚くべきトリックのまとめ

目次el-scrollbar スクロールバーel-uploadはクリックをシミュレートしますel-s...

Ubuntu で FTP サーバーを構築する方法の詳細な説明 (成功保証)

1. 今日の午後、コースの要件により、Ubuntu で FTP サーバーを設定する実験を行う必要が...

データベースの削除から逃走までの MySQL の徹底分析_上級編 (I) - データ整合性

1. データ整合性の概要1. データ整合性の概要データの冗長性とは、データベース内に重複したデータが...

CSS の複数行テキストがオーバーフローする場合の省略記号の例

複数行のテキストがオーバーフローすると省略記号が表示されますこの記事では 2 つの方法を推奨します。...

Windows 10 の Docker で countly-server を展開して実行するプロセス

私は最近countlyに触れて、慣れてきました。私は、必要に応じてcountlyのクラッシュプラグイ...

Vue でルートをジャンプする方法をご存知ですか?

目次最初の方法: router-link (宣言型ルーティング) 2番目の方法: router.pu...

Ubuntu 20.04 LTSの詳細なインストール履歴

この記事では、USB ブート ディスクの作成とシステムのインストールについて説明します。システム構成...

DockerにRedisをインストールし、パスワードを設定して接続する方法

Redis は分散キャッシュ サービスです。キャッシュは、大規模システムの開発やパフォーマンスの最適...

Vue のリスナーの基本的な使用例

目次序文1. リスナーの基本的な使い方2. リスナー形式3. ページに入るとすぐに監視とディープモニ...

HTML の空リンク href="#" と href="javascript:void(0)" の違い

# には位置情報が含まれます。デフォルトのアンカーは #top で、これは Web ページの上部です...

回転するフリップカードアニメーションの効果を実現するCSS

回転フリップ効果の CSS アニメーション、具体的な内容は次のとおりです。 1. まず2つのボックス...

MySQL テーブル構造を Excel にエクスポートする方法

要件は次のとおりですテーブル構造、フィールドコメント情報、テーブル名などをエクスポートします。これは...

最も完全な 50 の MySQL データベース クエリ演習

このデータベース クエリ ステートメントは、インターネット上の 50 個のデータベース クエリ練習問...