Centos5.6下MySQL Proxy 0.8.2のインストールとテスト

38825 ワード

MySQL Proxyはこのような中間層エージェントであり、簡単に言えば、MySQL Proxyはフロントアプリケーションの接続要求をバックグラウンドのデータベースに転送する接続プールであり、luaスクリプトを使用することで複雑な接続制御とフィルタリングを実現し、読み書き分離と負荷バランスを実現することができる.アプリケーションにとってMySQL Proxyは完全に透明であり、アプリケーションはMySQL Proxyのリスニングポートに接続するだけでよい.もちろん、このようにproxyマシンは単一の失効となる可能性がありますが、複数のproxyマシンを冗長に使用して、アプリケーションサーバの接続プール構成で複数のproxyの接続パラメータに構成すれば十分です.MySQL Proxyのより強力な機能は「読み書き分離」を実現することであり、基本原理はプライマリ・データベースにトランザクション・クエリーを処理させ、ライブラリからSELECTクエリーを処理させることである.データベース・レプリケーションは、トランザクション・クエリーによる変更をクラスタ内のスレーブ・ライブラリに同期するために使用されます.MysqlのM-S構造を生成した後,読み書き分離を実現するためにはMysql Proxyを用いる必要がある.現在、Mysql Proxyのバージョンは0.8.2です.
MySQl Proxyが現在使用している生産環境:
一、现実の多くの応用环境はこのようにです:プログラム开発の初期に计画がなくて、プログラムの読み書きデータはすべて1つのIPインタフェースだけを提供して、后期は圧力が耐えられないため、会社は后のシステムアーキテクチャ/DBAに会社のデータベースアーキテクチャを変更することを要求して、このようにプログラムの上で実现するのは比较的に困难で、だからこの中间层に加えて実现します.
二、中小規模のサイト、特に頻繁に読むサイトをお勧めします.大手サイトやポータル型のサイトであれば、読み書き分離は開発面から実現することをお勧めします.
三、MySQL Proxy 0.8.0以上のバージョンを採用することをお勧めします.以前は多くのBUGを修正しました.安定性もいいです.
一、MySQL Proxy 0.8.2のインストール手順は以下の通りです.
まずmysqlからcom公式アドレスhttp://dev.mysql.com/downloads/mysql-proxy/ソースパッケージを/usr/local/src/ディレクトリにダウンロードし、最新のMySQL Proxy 0を採用することをお勧めします.8.2バージョン、Mysql Proxy 0.8.2インストール前に前提条件があり、以下の通りである.
libevent 1.x以上glib 2 2.6.0以上lua 5.1.x以上pkg-config libtool 1.5以上MySQL 5.0.x以上の開発ライブラリ
サーバOS:Centos 5.6 x86_64
1.インストールの進捗を速めるために、必要なライブラリをyumでインストールし、pkg-config、libtool、Mysql開発ライブラリを解決することができます.mysql-proxyは実際に本機でmysqlインスタンスを実行する必要はありませんので、ここでyumでインストールします.コマンドは以下の通りです.

  
  
  
  
  1. yum -y install gcc gcc-c++ autoconf mysql-devel libtool pkgconfig ncurses ncurses-devel 

2.libeventはlibevent-2.0.13バージョンをインストールし、ここからダウンロードできます.
http://monkey.org/~provos/libevent-2.0.13-stable.tar.gz
次のコマンドを実行してインストールします.

  
  
  
  
  1. tar xvf libevent-2.0.13-stable.tar.gz  
  2. cd libevent-2.0.13-stable  
  3. ./configure  
  4. make && make install 

3.glib 2 glib-2.18.4版をインストールします.ここからダウンロードできます.
http://ftp.gnome.org/pub/gnome/sources/glib/2.18/glib-2.18.4.tar.gz
次のコマンドを実行してインストールします.

  
  
  
  
  1. tar xvf glib-2.18.4.tar.gz  
  2. cd glib-2.18.4  
  3. ./configure  
  4. make && make install 

4.luaは5.1.4バージョンをインストールし、インストールする前にreadline 6.1をインストールする必要があります.そうしないと、ヘッダファイルが不足しているとエラーが発生します.
readline 6.1ダウンロード:
ftp://ftp.cwru.edu/pub/bash/readline-6.1.tar.gz
次のコマンドを実行してインストールします.

  
  
  
  
  1. tar xvf readline-6.1.tar.gz     
  2. cd readline-6.1  
  3. ./configure  
  4. make && make install 

ダイナミックリンクライブラリをシステムで共有するためにldconfigを使用します.

  
  
  
  
  1. ldconfig -v 

このオプションを使用するとldconfigには、スキャン中のディレクトリと検索したダイナミックリンクライブラリ、および作成した接続の名前が表示されます.
5.lua 5.1.4をインストールし、そのダウンロードアドレスはhttp://www.lua.org/ftp/lua-5.1.4.tar.gz.

  
  
  
  
  1. cd /usr/local/src  
  2. tar xvf lua-5.1.4.tar.gz  
  3. cd lua-5.1.4 

#64ビットシステム、CFLAGSに-fPICを追加する必要があります.vimでsrc/Makefileファイルを編集し、コードを修正します.以下のようにします.

  
  
  
  
  1. CFLAGS= -O2 -Wall -fPIC $(MYCFLAGS) 

次のコマンドでインストールを続行します.

  
  
  
  
  1. make linux  
  2. make install 

6.pkg-config環境変数を設定し、コマンドは以下の通りです.

  
  
  
  
  1. cp etc/lua.pc /usr/local/lib/pkgconfig/   
  2. export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig 

7.以上の操作でベースファイルのインストールが完了し、次はMySQL Proxy 0である.8.2インストール、ダウンロード後、以下のコマンドを実行する.

  
  
  
  
  1. tar xvf mysql-proxy-0.8.2.tar.gz  
  2. cd mysql-proxy-0.8.2  
  3. ./configure –prefix=/usr/local/mysql-proxy  
  4. make && make install  
  5. cp lib/rw-splitting.lua /usr/local/lib/  
  6. cp lib/admin.lua /usr/local/lib/ 

二、ここまでMySQL-proxyは基本的にインストールが完了しました.次はMySQL Proxy 0です.8.2のテストと構成.
MySQL Proxy環境設定の説明
Master MySQLサーバ:192.168.2.1117
Slave MySQLサーバ:192.168.192.168.2.1115
MySQL Proxyサーバ:192.168.2.1112
1.mysql-proxyオプションの説明mysql-proxy-help-allでヘルプオプションを表示することもできます.コマンドは次のとおりです.

  
  
  
  
  1. mysql-proxy --help-all 

管理機能オプション:

  
  
  
  
  1. --admin-address=host:port  mysqo-proxy , 4041;  
  2. --admin-username=<string> username to allow to log in  
  3. --admin-password=<string> password to allow to log in  
  4. --admin-lua-script=<filename> script to execute by the admin plugin 

エージェント機能オプション:
-P,--proxy-address=はmysql-proxyサーバ側のリスニングポートで、デフォルトは4040で、開発者がコードを書くのに便利な3306に変更することをお勧めします.-r,--proxy-read-only-backend-addresses=読み取り専用Slaveのアドレスとポート、デフォルトは設定されていません.-b,--proxy-backend-addresses=リモートMasterアドレスとポートは、failoverとload balanceとして複数設定できます.デフォルトは127.0.0.1:3306です.--proxy-skip-profilingクエリー分析機能をオフにします.デフォルトはオンです.--proxy-fix-bug-25371修正mysqlのlibmysqlバージョンが5.1.12より大きい25371番bug;s,--proxy-lua-script=mysql-proxyの実行と設定を制御するLuaスクリプトを指定します.このスクリプトは、新しい接続とスクリプトが変更されるたびに再呼び出されます.
その他のオプション:
--defaults-file=プロファイルは、mysql-proxyのパラメータ情報をプロファイルに入れることができます.8.2、便利です.--daemon mysql-proxyはデーモンプロセスで実行されます.--pid-file=file mysql-proxyのPIDファイルを格納するパスを設定します.--keepalive try to restart the proxy if it crashed、接続起動プロセスを維持するには2つあります.1つのプロセスは2つのプロセスを監視するために使用されます.2つのプロセスが死んだら自動的にproxyを再起動します.これは新版MySQL Proxyの増加したKeepalived機能で、以前MySQL Proxyが死にやすいバグを修正しました.この機能を開くことをお勧めします.
完全なmysql-proxyプロファイルは次のとおりです.

  
  
  
  
  1. [mysql-proxy]  
  2. admin-username=root  
  3. admin-password=123456  
  4. admin-lua-script=/usr/local/lib/admin.lua  
  5. proxy-read-only-backend-addresses=192.168.2.115  
  6. proxy-backend-addresses=192.168.2.117  
  7. proxy-lua-script=/usr/local/lib/rw-splitting.lua  
  8. log-file=/var/log/mysql-proxy.log  
  9. log-level=debug  
  10. daemon=true 
  11. keepalive=true 

2.ユーザーにMaster/Slaveでテストユーザーを作成することを許可する.これからクライアントが送信するSQLはすべてmysql-proxyサーバーを通じて転送されるので、mysql-proxyサーバーからMySQLマスターライブラリにログインできることを確保し、マスターとMySQLマシンから以下のように実行する.

  
  
  
  
  1. mysql> grant all privileges on *.* to 'test'@'192.168.2.117' identified by 'test' with  grant option;  
  2. mysql> grant all privileges on *.* to 'test'@'192.168.2.115' identified by 'test' with  grant option; 

3.このステップを完了するとMySQL Proxy 0にアクセスできます.8.2でテストを行いました.コマンドは以下の通りです.

  
  
  
  
  1. /usr/local/mysql-proxy/bin/mysql-proxy -P 192.168.2.112:3306 --defaults-file=/etc/mysql-proxy.cnf  

MySQL Proxyのログを監視します.MySQL Proxyが正常に起動したことを示す文字があります(117と115のmysqlプログラムを正常に起動することに注意してください).2012-03-13 14:05:38:(message)added read-only backend:192.168.2.1115 2012-03-13 16:14:56:(message)proxy-plugin.c.1508: connect(192.168.2.115:3306) failed: Connection refused. Retrying with different backend. 2012-03-14 13:58:23: (message) chassis-unix-daemon.c:136: [angel] we try to keep PID=2399 alive 2012-03-14 13:58:23: (debug) chassis-unix-daemon.c:157: waiting for 2399 2012-03-14 13:58:23: (debug) chassis-unix-daemon.c:121: we are the child: 2399 2012-03-14 13:58:23: (message) mysql-proxy 0.8.2 started 2012-03-14 13:58:23: (debug) max open file-descriptors = 1024 2012-03-14 13:58:23: (message) proxy listening on port 192.168.2.112:3306 2012-03-14 13:58:23: (message) added read/write backend: 192.168.2.117 2012-03-14 13:58:23: (message) added read-only backend: 192.168.2.115
MySQLクライアントをもっと開くと、MySQL Proxy 0が見つかります.8.2簡単にLuaスクリプトを利用して読み書き分離機能を実現しましたが、テストを行う前に心配していた問題の一つは、メインマスターが故障でサービスを停止した場合、MySQL Proxyはスレーブからデータを書くのではないかということです.これにより、主従データが異なることになります.実際、192.168.2.1117のMySQLを停止したとき、MySQL Proxy 0が発見されました.8.2直接データを書くことは許されません.
三、MySQL Proxy 0.8.2テストで発生した問題.1.リード/ライト分離Luaスクリプトを修正し、テストを容易にすることができます.Luaスクリプトのデフォルトの最小4つから最大8つ以上のクライアント接続でリード/ライト分離が実現されます(これはmysql-proxyがクライアント接続を検出し、接続がmin_idle_connectionsプリセット値を超えていない場合、リード/ライト分離は行われません.つまり、クエリー操作がMasterに発生するためです).最小1個最大2個に変更し、vimで/usr/local/lib/rw-splittingを修正します.luaスクリプト、変更内容は以下の通りです.

  
  
  
  
  1. if not proxy.global.config.rwsplit then  
  2.         proxy.global.config.rwsplit = {  
  3.                 min_idle_connections = 1,  
  4.                 max_idle_connections = 2,  
  5.  
  6.                 is_debug = false 
  7.         }  
  8. end 

2.MySQL Proxy0.8.2起動後、私たちが見たウェブサイトのページはすべて文字化けしているので、私たちはデータベースからのプロファイルmyをマスターします.cnfは、この問題を回避するために次のコードを追加します.

  
  
  
  
  1. [mysqld]  
  2. skip-character-set-client-handshake  
  3. init-connect='SET NAMES utf8' 
  4. default-character-set=utf8 

3.プロファイルの権限の問題
プロファイルの形式で起動することをお勧めします.プロファイルは660権限でなければ起動できません.そうしないと起動できません.複数のSlaveがある場合、proxy-read-only-backend-addressesパラメータは、カンマで区切られたIP:Portスレーブリストを複数構成できます.
なお、以前のMySQL Proxyのバージョンではこのような問題があったが、新版のMySQL Proxy 0.8.2これらのバグは基本的に修正されています.MySQLが公式に発売した製品です.また、Amoebaに比べてMySQL Proxyはトランザクションをサポートしています.本番環境では、コードが固定されており、変更できない中小規模のWebサイトに使用してみることができます.