ouzhoudijie 发表于 2018-10-2 12:08:35

4.MySQL Proxy

4.1 MySQL读写分离简介
  MySQL-Proxy,是处在你的MySQL数据库客户和服务端之间的程序,它还支持嵌入性脚本语言Lua。这个代理可以用来分析、监控和变换(transform) 通信数据。
  MySQL Proxy最强大的一项功能是实现“读 写分离(Read/Write Splitting)”。基本的原理是让主数据库处理事务性查询,而从数据库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库。
4.2 MySQL环境部署
  实验环境:
  实验环境是沿用第三章实验基础上的:
  主机名
  IP地址
  作用
  MySQL-Master
  192.168.140.128
  MySQL主库服务器
  MySQL-Slave
  192.168.140.129
  MySQL 从库服务器
  MySQL-Proxy
  192.168.140.130
  MySQL 代理服务器
4.2.1 部署安装环境
  # rpm -q libevent glib2 pkgconfig libtool mysql-devel
  # cd /usr/local/src
  # wget http://www.lua.org/ftp/lua-5.1.4.tar.gz
  #
  wget http://gd.tuwien.ac.at/db/mysql/Downloads/MySQL-Proxy/mysql-proxy-0.6.0.tar.gz
  # wget http://www.monkey.org/~provos/libevent-1.4.13-stable.tar.gz
4.2.2 安装lua
  # tar zxvf lua-5.1.4.tar.gz
  # cd lua-5.1.4
  # vi Makefile
  修改:
  INSTALL_TOP= /usr/local/lua
  # make && make linux && make install
  # export LUA_CFLAGS="-I/usr/local/lua/include" LUA_LIBS="-L/usr/local/lua/lib -llua -ldl" LDFLAGS="-L/usr/local/libevent/lib -lm"
  # export CPPFLAGS="-I/usr/local/libevent/include"
  # export CFLAGS="-I/usr/local/libevent/include"
4.2.3 安装libevent
  # tar zxvf libevent-1.4.13-stable.tar.gz
  # cd libevent-1.4.13-stable
  # ./configure --prefix=/usr/local/libevent
  # make && make install
4.2.4 安装MySQL
  # tar zxvf mysql-5.1.47.tar.gz
  # cd mysql-5.1.47
  # ./configure --prefix=/usr/local/mysql --without-server
4.2.5 设置环境变量
  # export LUA_CFLAGS="-I/usr/local/lua/include" LUA_LIBS="-L/usr/local/lua/lib -llua -ldl" LDFLAGS="-L/usr/local/libevent/lib -lm"
  # export CPPFLAGS="-I/usr/local/libevent/include"
  # export CFLAGS="-I/usr/local/libevent/include"
4.2.6 安装MySQL-Proxy
  注意:如果你安装更高版本的mysql-proxy需要升级你的glib。
  # tar zxvf mysql-proxy-0.6.0.tar.gz
  # cd mysql-proxy-0.6.0
  # ./configure --prefix=/usr/local/mysql-proxy --with-mysql=/usr/local/mysql --with-lua
  # make && make install
4.3 MySQL-Proxy配置
  # /usr/local/mysql-proxy/sbin/mysql-proxy --help-all
  Usage:
  mysql-proxy - MySQL Proxy
  Help Options:
  -?, --help
  --help-all
  --help-admin
  --help-proxy
  admin module
  --admin-address=#管理主机监听地址和端口,默认是4041
  proxy-module
  -proxy-address=   #代理主机监听地址和端口,默认是4040
  --proxy-read-only-backend-addresses=   #只读连接时,代理服务器的监听地址及端口。默认4042
  --proxy-backend-addresses=   #连接后端真实服务器时的地址及监听端口,默认是3306
  --proxy-skip-profiling
  --proxy-fix-bug-25371
  --proxy-lua-script=      连接真实服务器的地址及监听端口,默认是3306
  --no-proxy
  Application Options:
  -V, --version
  --daemon
  --pid-file=
  4.4 MySQL Proxy 启动
4.4.1 命令行启动
  # /usr/local/mysql-proxy/sbin/mysql-proxy \
  > --proxy-read-only-backend-addresses=192.168.140.129:3306 \
  > --proxy-backend-addresses=192.168.140.128:3306 \
  > --proxy-lua-script=/usr/local/mysql-proxy/share/mysql-proxy/rw-splitting.lua &
  检测是否开始监听:
  # netstat -ntlp | grep mysql
  tcp      0      0 0.0.0.0:4040          0.0.0.0:*      LISTEN      28739/mysql-proxy
  tcp      0      0 0.0.0.0:4041          0.0.0.0:*      LISTEN      28739/mysql-proxy
4.4.2 脚本启动
  # vi /etc/init.d/mysql-proxy
  #!/bin/bash
  PRODIR=/usr/local/mysql-proxy
  LUA_PATH=$PRODIR/share/mysql-proxy
  start(){
  $PRODIR/sbin/mysql-proxy --proxy-read-only-backend-addresses=192.168.140.129:3306 --proxy-backend-addresses=192.168.140.128:3306 --proxy-lua-script=$LUA_PATH/rw-splitting.lua >>$PRODIR/mysql-proxy.log &
  }
  stop(){
  kill $(pidof mysql-proxy)
  if [ $? -ne 0 ];then
  kill -9 $(pidof mysql-proxy)
  fi
  }
  case "$1" in
  start)
  start
  ;;
  stop)
  stop
  ;;
  restart)
  stop
  start
  ;;
  *)
  echo $"Usage: $0 {start|stop|restart}"
  Esac
  # chmod +x /etc/init.d/mysql-proxy
  # /etc/init.d/mysql-proxy start
4.5 MySQL Proxy 测试
4.5.1 测试环境部署
  在MySQL-Master上创建测试数据库和用户。
  mysql> create database unixhot;
  mysql> GRANT ALL PRIVILEGES ON unixhot.* to proxytest@'%' identified by 'unixhot';
4.5.2 连接测试
  # mysql -h 192.168.140.130 -P 4040 -u proxytest -p
  输入密码即可登录。
  注意:在这里只做简单测试,具体请根据具体应用进行测试。由于目前MySQL Proxy技术还不够成熟,如果想在生产环境部署,请慎用。

页: [1]
查看完整版本: 4.MySQL Proxy