MySQL Proxy快速实现读写分离以及负载均衡
1. 安装下载已经编译好的安装包,或者预编译安装包均可,在这里,使用预编译版本。 [@s1.yejr.com ~]# tar zxf mysql-proxy-0.6.
1. 安装
下载已经编译好的安装包,或者预编译安装包均可,在这里,使用预编译版本。
[@s1.yejr.com ~]# tar zxf mysql-proxy-0.6.0-linux-rhas4-x86.tar.gz
[@s1.yejr.com ~]# cd mysql-proxy-0.6.0-linux-rhas4-x86
#可以看到有2个目录
[@s1.yejr.com mysql-proxy-0.6.0-linux-rhas4-x86]# ls
sbin share
[@s1.yejr.com mysql-proxy-0.6.0-linux-rhas4-x86]# mv sbin/mysql-proxy /usr/local/sbin/
[@s1.yejr.com mysql-proxy-0.6.0-linux-rhas4-x86]# ls share
mysql-proxy tutorial-constants.lua tutorial-packets.lua tutorial-rewrite.lua tutorial-warnings.lua
tutorial-basic.lua tutorial-inject.lua tutorial-query-time.lua tutorial-states.lua
#将lua脚本放到/usr/local/share下,以备他用
[@s1.yejr.com mysql-proxy-0.6.0-linux-rhas4-x86]# mv share/mysql-proxy /usr/local/share/
#删除符号连接等垃圾代码
[@s1.yejr.com mysql-proxy-0.6.0-linux-rhas4-x86]# strip /usr/local/sbin/mysql-proxy
2. 启动
编译一下启动管理脚本:
[@s1.yejr.com ~]# vi /etc/init.d/mysql-proxy
#!/bin/sh
export LUA_PATH=/usr/local/share/mysql-proxy/?.lua
mode=$1
if [ -z "$mode" ] ; then
mode="start"
fi
case $mode in
'start')
mysql-proxy --daemon \
--admin-address=:4401 \
--proxy-address=:3307 \
--proxy-backend-addresses=:3306 \
--proxy-read-only-backend-addresses=192.168.133.232:3306 \
--proxy-read-only-backend-addresses=10.10.74.61:3306 \
--proxy-lua-script=/usr/local/share/mysql-proxy/rw-splitting.lua
;;
'stop')
killall mysql-proxy
;;
'restart')
if $0 stop ; then
$0 start
else
echo "retart failed!!!"
exit 1
fi
;;
esac
exit 0
现在解释一下启动脚本:
--daemon 采用daemon方式启动
--admin-address=:4401 指定mysql proxy的管理端口,在这里,表示本机的4401端口
--proxy-address=:3307 指定mysql proxy的监听端口,也可以用 127.0.0.1:3307 表示
--proxy-backend-addresses=:3306 指定mysql主机的端口
--proxy-read-only-backend-addresses=192.168.1.1:3306 指定只读的mysql主机端口
--proxy-read-only-backend-addresses=192.168.1.2:3306 指定另一个只读的mysql主机端口
--proxy-lua-script=/usr/local/share/mysql-proxy/rw-splitting.lua 指定lua脚本,在这里,使用的是rw-splitting脚本,用于读写分离
完整的参数可以运行以下命令查看:
mysql-proxy --help-all
运行以下命令启动/停止/重启mysql proxy:
[@s1.yejr.com ~]# /etc/init.d/mysql-proxy start
[@s1.yejr.com ~]# /etc/init.d/mysql-proxy stop
[@s1.yejr.com ~]# /etc/init.d/mysql-proxy restart
3. 试用
[@s1.yejr.com ~]# mysql -h127.0.0.1 -uroot -P3307
mysql> show processlist;
+-------+------+----------------+------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-------+------+----------------+------+---------+------+-------+------------------+
| 30052 | root | localhost:9656 | NULL | Query | 0 | NULL | show processlist |
+-------+------+----------------+------+---------+------+-------+------------------+
可以看到,产生了一个新连接。
用sysbench测试一下,看会不会挂掉:
[@s1.yejr.com ~]# sysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size=1000000 \
--mysql-socket=/tmp/mysql.sock --mysql-user=root --mysql-db=test prepare
[@s1.yejr.com ~]# sysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size=1000000 \
--mysql-socket=/tmp/mysql.sock --mysql-user=root --mysql-db=test run
.........
.........
Threads fairness:
events (avg/stddev): 10000.0000/0.00
execution time (avg/stddev): 23.0387/0.00
还好,没给大家丢脸,,剩下的测试自己完成吧 :)
4. 其他
mysql proxy还可以实现连接池的功能,这在很多LAMP开发中是软肋,因此,有了mysql proxy,就可以不用再担心连接数超限的问题了。
如果使用rw-splitting.lua脚本的话,最好修改以下2个参数的默认值:
min_idle_connections = 1
max_idle_connections = 3
MySQL Proxy 的详细介绍:请点这里
MySQL Proxy 的下载地址:请点这里
相关阅读:
MySQL Proxy读写分离实战
在CentOS 5.2下安装最新的MySQL Proxy
RHEL5.5下MySQL Proxy 安装
mysql proxy、mysql-mmm实现读写分离高可用性

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック

ReactQueryでデータベースの読み取りと書き込みを分離するにはどうすればよいですか?最新のフロントエンド開発では、データベースの読み取りと書き込みを分離することが、アーキテクチャ設計の重要な考慮事項です。 ReactQuery は、フロントエンド アプリケーションのデータ取得および管理プロセスを最適化できる強力な状態管理ライブラリです。この記事では、ReactQuery を使用してデータベースの読み取りと書き込みの分離を実現する方法と、具体的なコード例を紹介します。 ReactQuery の中心となる概念はクエリとミューテーションです。

MySQL は最も人気のあるデータベースの 1 つであり、アプリケーションで広く使用されています。高い同時実行性と大量のデータの場合、MySQL の読み取りと書き込みの同時実行性能が不十分であるため、MySQL の同時実行性能を向上させるために、読み取りと書き込みの分離が必要な解決策になります。人気のある動的言語として、PHP は MySQL と非常に密接に統合されています。そこでこの記事では、PHP を使用して MySQL の読み取りと書き込みの分離を実現する方法を紹介します。

MySQL 接続の読み取りと書き込みの分離を構成するにはどうすればよいですか? MySQL データベースは最も一般的に使用されるリレーショナル データベースの 1 つであり、その高可用性とパフォーマンスは大規模な Web サイトやアプリケーションにとって非常に重要です。データベースの負荷分散とパフォーマンスを向上させるために、MySQL 接続の読み取りと書き込みの分離を構成できます。読み取り/書き込み分離は、読み取り操作と書き込み操作を異なるデータベース サーバーに割り当てることでデータベースの同時処理能力を向上させるデータベース アーキテクチャ設計パターンです。このようにして、複数のサーバーを最大限に活用できます

Redis は、高性能のインメモリ データベースとして、日常のアプリケーションで高い同時実行性のシナリオに直面しています。これらのニーズに対応するために、Redis はマスター/スレーブ同期と読み取り/書き込み分離の 2 つのメカニズムを提供し、Redis のパフォーマンスと可用性を向上させます。この記事では、Redis のマスター/スレーブ同期と読み書き分離の原理と実装について詳しく紹介します。 1. Redis のマスター/スレーブ同期メカニズム Redis のマスター/スレーブ同期メカニズムは、ある Redis サーバーから別の Redis サーバーにデータを同期して、データのバックアップとロードを実現します。

PHP を使用して MySQL の読み取りと書き込みを分離する利点と課題 Web アプリケーションの規模が拡大し続け、アクセス数が増加するにつれて、データベースの読み取りと書き込みのパフォーマンスが開発者が直面する重要な課題になっています。この問題を解決するために、多くの開発者は MySQL の読み取り/書き込み分離テクノロジを使用してデータベース処理能力を向上させ始めました。この記事では、PHP を使用して MySQL の読み取りと書き込みの分離を実現する方法を検討し、その利点と課題を分析します。 1. MySQL の読み取りと書き込みを分離する利点 負荷分散: 読み取り操作と書き込み操作を別の場所に割り当てることによる

MySQL は、大規模な Web アプリケーションで一般的に使用されるオープンソースのリレーショナル データベース管理システムです。大規模なアプリケーションを開発する場合、読み取りおよび書き込みリクエストが頻繁になりすぎてデータベースが過負荷になり、パフォーマンスが低下することがよくあります。 MySQL のパフォーマンスを向上させるために、読み取りと書き込みの分離テクノロジを使用できます。読み取りと書き込みの分離とは、読み取りリクエストと書き込みリクエストを異なる MySQL サーバーに割り当てて処理することを指し、システムの同時処理能力と応答速度が向上します。具体的には、多くの読み取り操作を行う開発者は、読み取り操作を読み取りに割り当てることができます。

MySQL のマスター/スレーブ レプリケーションを使用して読み取り/書き込み分離アーキテクチャを実装する方法 従来の Web アプリケーションでは、通常、読み取りと書き込みの操作は同じデータベース サーバーに接続されます。アプリケーションが開発され、アクセス量が増加すると、このアーキテクチャはデータベースのパフォーマンスのボトルネックを引き起こしやすくなります。この問題を解決するには、MySQL のマスター/スレーブ レプリケーションを使用して、読み取り/書き込み分離アーキテクチャを実装できます。この記事では、MySQL のマスター/スレーブ レプリケーションを使用して読み取りと書き込みの分離を実現する方法を紹介し、対応するコード例を示します。環境の準備 まず、インストールされていることを確認します

MySQL の読み取りと書き込みの分離と負荷分散を学習するためのテクニックは何ですか? MySQL は、さまざまな Web アプリケーションやエンタープライズ レベルのシステムで広く使用されている、一般的に使用されているリレーショナル データベース管理システムです。アプリケーションの規模が増大するにつれ、データベースの読み取りおよび書き込みの負荷はますます重くなり、データベースのパフォーマンスとスケーラビリティを向上させるためには、読み取りと書き込みの分離と負荷分散が必要な技術的手段となっています。読み取りと書き込みの分離とは、データベースの読み取り効率と容量を向上させるために、読み取り操作と書き込み操作を異なる MySQL サーバーに分離することを指します。負荷分散とは、次の数を指します。
