读写分离mysql-proxy

MySQL读写分离

场景描述:

数据库Master主服务器:192.168.203.138

数据库Slave从服务器:192.168.203.133

MySQL-Proxy调度服务器:192.168.203.134

以下操作,均是在192.168.203.134即MySQL-Proxy调度服务器上进行的。

3.1 MySQL的安装与配置

具体的安装过程与上文相同。

3.2 检查系统所需软件包

通过 rpm -qa | grep name 的方式验证以下软件包是否已全部安装。

gcc* gcc-c++* autoconf* automake* zlib*libxml* ncurses-devel* libmcrypt* libtool* flex* pkgconfig*

libevent* glib*

yum install epel* -y

若缺少相关的软件包,可通过yum -y install方式在线安装,或直接从系统安装光盘中找到并通过rpm -ivh方式安装。

3.3 编译安装lua

MySQL-Proxy的读写分离主要是通过rw-splitting.lua脚本实现的,因此需要安装lua。

lua可通过以下方式获得

从http://www.lua.org/download.html下载源码包

从rpm.pbone.net搜索相关的rpm包

download.fedora.redhat.com/pub/fedora/epel/5/i386/lua-5.1.4-4.el5.i386.rpm

download.fedora.redhat.com/pub/fedora/epel/5/x86_64/lua-5.1.4-4.el5.x86_64.rpm

上面的链接不能链接使用下面地址

wgethttp://110.96.193.10:82/1Q2W3E4R5T6Y7U8I9O0P1Z2X3C4V5B/down1.chinaunix.net/distfiles/lua-5.1.tar.gz

这里我们建议采用源码包进行安装

cd /opt/install

wget http://www.lua.org/ftp/lua-5.1.4.tar.gz

tar zvfx lua-5.1.4.tar.gz

cd lua-5.1.4

vi src/Makefile

在 CFLAGS= -O2 -Wall $(MYCFLAGS) 这一行记录里加上-fPIC,更改为 CFLAGS=-O2 -Wall -fPIC $(MYCFLAGS) 来避免编译过程中出现错误。

make linux

出现系列错误提示解决办法

make linux

在包含自 lua.h:16 的文件中,

从 lua.c:15:

luaconf.h:275:31: 错误:readline/readline.h:没有那个文件或目录

luaconf.h:276:30: 错误:readline/history.h:没有那个文件或目录

lua.c: In function‘pushline’:

lua.c:182: 警告:隐式声明函数‘readline’

lua.c:182: 警告:赋值时将整数赋给指针,未作类型转换

lua.c: In function‘loadline’:

lua.c:210: 警告:隐式声明函数‘add_history’

make[2]: *** [lua.o] 错误 1

make[2]: Leavingdirectory `/data0/software/lua-5.1.4/src’

make[1]: *** [linux] 错误 2

make[1]: Leavingdirectory `/data0/software/lua-5.1.4/src’

make: *** [linux] 错误 2

yum install libtermcap-devel ncurses-devellibevent-devel readline-devel

make install

cp etc/lua.pc /usr/lib/pkgconfig/

exportPKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/lib/pkgconfig

3.4 安装配置MySQL-Proxy

MySQL-Proxy可通过以下网址获得:

http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/

上面地址不能获取地址的话使用下面地址

wgethttp://mirrors.sohu.com/mysql/MySQL-Proxy/mysql-proxy-0.8.4-linux-rhel5-x86-64bit.tar.gz

推荐采用已经编译好的二进制版本,因为采用源码包进行编译时,最新版的MySQL-Proxy对automake,glib以及libevent的版本都有很高的要求,而这些软件包都是系统的基础套件,不建议强行进行更新。

并且这些已经编译好的二进制版本在解压后都在统一的目录内,因此建议选择以下版本:

32位RHEL5平台:

http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/mysql-proxy-0.8.4-linux-rhel5-x86-32bit.tar.gz

64位RHEL5平台:

http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/mysql-proxy-0.8.4-linux-rhel5-x86-64bit.tar.gz

测试平台为RHEL5 32位,因此选择32位的软件包

wgethttp://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/mysql-proxy-0.8.4-linux-rhel5-x86-64bit.tar.gz

tar xzvf mysql-proxy-0.8.4-linux-rhel5-x86-64bit.tar.gz

mv mysql-proxy-0.8.4-linux-rhel5-x86-64bit/opt/mysql-proxy

创建mysql-proxy服务管理脚本

mkdir /opt/mysql-proxy/init.d/

vim mysql-proxy

01     #!/bin/sh

02     #

03     #mysql-proxy This script starts and stops the mysql-proxy daemon

04     #

05     #chkconfig: - 78 30

06     #processname: mysql-proxy

07     #description: mysql-proxy is a proxy daemon to mysql

08

09     #Source function library.

10     ./etc/rc.d/init.d/functions

11

12     #PROXY_PATH=/usr/local/bin

13     PROXY_PATH=/opt/mysql-proxy/bin

14

15     prog="mysql-proxy"

16

17     #Source networking configuration.

18     ./etc/sysconfig/network

19

20     #Check that networking is up.

21     [${NETWORKING} = "no" ] && exit 0

22

23     #Set default mysql-proxy configuration.

24     #PROXY_OPTIONS="--daemon"

25     PROXY_OPTIONS="--proxy-read-only-backend-addresses=192.168.203.133:3306--proxy-backend-addresses=192.168.203.138:3306--proxy-lua-script=/opt/mysql-proxy/scripts/rw-splitting.lua"

26     PROXY_PID=/opt/mysql-proxy/run/mysql-proxy.pid

27

28     #Source mysql-proxy configuration.

29     if[ -f /etc/sysconfig/mysql-proxy ]; then

30             . /etc/sysconfig/mysql-proxy

31     fi

32

33     PATH=$PATH:/usr/bin:/usr/local/bin:$PROXY_PATH

34

35     #By default it‘s all good

36     RETVAL=0

37

38     #See how we were called.

39     case"$1" in

40       start)

41             # Start daemon.

42             echo -n $"Starting $prog: "

43             $NICELEVEL $PROXY_PATH/mysql-proxy$PROXY_OPTIONS --daemon --pid-file=$PROXY_PID --user=mysql --log-level=warning--log-file=/opt/mysql-proxy/log/mysql-proxy.log

44             RETVAL=$?

45             echo

46             if [ $RETVAL = 0 ]; then

47                     touch/var/lock/subsys/mysql-proxy

48             fi

49            ;;

50       stop)

51             # Stop daemons.

52             echo -n $"Stopping $prog: "

53             killproc $prog

54             RETVAL=$?

55             echo

56             if [ $RETVAL = 0 ]; then

57                     rm -f/var/lock/subsys/mysql-proxy

58                     rm -f $PROXY_PID

59             fi

60            ;;

61       restart)

62             $0 stop

63             sleep 3

64             $0 start

65            ;;

66       condrestart)

67            [ -e /var/lock/subsys/mysql-proxy ]&& $0 restart

68           ;;

69       status)

70             status mysql-proxy

71             RETVAL=$?

72            ;;

73       *)

74             echo "Usage: $0{start|stop|restart|status|condrestart}"

75             RETVAL=1

76            ;;

77     esac

78

79     exit$RETVAL

脚本参数详解:

==============================================

PROXY_PATH=/opt/mysql-proxy/bin //定义mysql-proxy服务二进制文件路径

PROXY_OPTIONS="--admin-username=root \//定义内部管理服务器账号

--admin-password=password \ //定义内部管理服务器密码

--proxy-read-only-backend-addresses=192.168.10.131:3306\ //定义后端只读从服务器地址

--proxy-backend-addresses=192.168.10.130:3306\ //定义后端主服务器地址

--admin-lua-script=/opt/mysql-proxy/lib/mysql-proxy/lua/admin.lua\ //定义lua管理脚本路径

--proxy-lua-script=/opt/mysql-proxy/scripts/rw-splitting.lua"\ //定义lua读写分离脚本路径

PROXY_PID=/opt/mysql-proxy/run/mysql-proxy.pid//定义mysql-proxy PID文件路径

$NICELEVEL $PROXY_PATH/mysql-proxy$PROXY_OPTIONS \

--daemon \ //定义以守护进程模式启动

--keepalive \ //使进程在异常关闭后能够自动恢复

--pid-file=$PROXY_PID \ //定义mysql-proxyPID文件路径

--user=mysql \ //以mysql用户身份启动服务

--log-level=warning \ //定义log日志级别,由高到低分别有(error|warning|info|message|debug)

--log-file=/opt/mysql-proxy/log/mysql-proxy.log//定义log日志文件路径

==============================================

cp mysql-proxy /opt/mysql-proxy/init.d/

chmod +x/opt/mysql-proxy/init.d/mysql-proxy

mkdir /opt/mysql-proxy/run

mkdir /opt/mysql-proxy/log

mkdir /opt/mysql-proxy/scripts

配置并使用rw-splitting.lua读写分离脚本

最新的脚本我们可以从最新的mysql-proxy源码包中获取

cd /opt/install

wgethttp://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/mysql-proxy-0.8.4.tar.gz

tar xzvf mysql-proxy-0.8.4.tar.gz

cd mysql-proxy-0.8.4

cp lib/rw-splitting.lua/opt/mysql-proxy/scripts

修改读写分离脚本rw-splitting.lua

修改默认连接,进行快速测试,不修改的话要达到连接数为4时才启用读写分离

vim /opt/mysql-proxy/scripts/rw-splitting.lua

=============================

-- connection pool

if not proxy.global.config.rwsplit then

proxy.global.config.rwsplit = {

min_idle_connections = 1, //默认为4

max_idle_connections = 1, //默认为8

is_debug = false

}

end

=============================

修改完成后,启动mysql-proxy

/opt/mysql-proxy/init.d/mysql-proxy start

时间: 2024-07-28 14:56:48

读写分离mysql-proxy的相关文章

LVS+MYCAT+读写分离+MYSQL主备同步部署手册

LVS+MYCAT+读写分离+MYSQL主备同步部署手册 1          配置MYSQL主备同步…. 2 1.1       测试环境… 2 1.2       配置主数据库… 2 1.2.1         编辑my.cnf文件… 2 1.2.2         重启数据库… 2 1.3       锁定主数据库DDL操作… 2 1.4       主备已有数据同步… 2 1.5       停止从服务… 3 1.6       配置备用数据库… 3 1.6.1         编辑my

【转载】LVS+MYCAT+读写分离+MYSQL主备同步部署手册(邢锋)

By leo | 2015/05/13 0 Comment LVS+MYCAT+读写分离+MYSQL主备同步部署手册 1          配置MYSQL主备同步…. 2 1.1       测试环境… 2 1.2       配置主数据库… 2 1.2.1         编辑my.cnf文件… 2 1.2.2         重启数据库… 2 1.3       锁定主数据库DDL操作… 2 1.4       主备已有数据同步… 2 1.5       停止从服务… 3 1.6      

企业 - mysql 读写分离(proxy)

                                                              MySQL Proxy MySQL Proxy是一个处于你的client端和MySQL server端之间的简单程序,它可以监测.分析或改变它们的通信.它使用灵活,没有限制,常见的用途包括:负载平衡,故障.查询分析,查询过滤和修改等等. MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,

LVS+MYCAT读写分离+MYSQL同步部署手册(第三版)

1      配置MYSQL主备同步 1.1    测试环境 mysql版本:5.6.24: 操作系统内核版本:Linux-3.13-0-32 主数据库IP:192.168.10.3: 主数据库名:db351353: 备用数据库IP:192.168.10.4: 备用数据库名:db351353. 1.2    配置主数据库 1.2.1   编辑my.cnf文件 #服务器唯一ID,一般取IP最后一段 server_id = 3 #启用二进制日志 log_bin=mysql_bin #需要备份的数据库

数据切分——Atlas读写分离Mysql集群的搭建

关于数据切分的原理可以参见博客: http://blog.csdn.net/jhq0113/article/details/44226789 关于Atlas的介绍可以参见博客: http://blog.csdn.net/jhq0113/article/details/44239823 Atlas源代码用C语言编写,它对于Web Server相当于是DB,相对于DB相当于是Client,如果把Atlas的逻辑放到Web Server程序里去处理,这样会大大增加Web Server程序的复杂度,同时

Mysql读写分离-Mysql router

原理:MySQL router根据端口来区分读写,把连接读写端口的所有请求发往master,连接只读端口的所有请求以轮询方式发往多个slave,从而实现读写分离 主:   SQL-Master      192.168.200.101/24 从:   SQL-Slave      192.168.200.102/24,192.168.200.103/24 mysql-router 192.168.200.104/24 使用rpm安装mysql-router rpm -ivh https://de

29_MySQL读写分离 MySQL多实例 、MySQL性能调优

版本:5.7.28 mysql51:192.168.4.51 主mysql52:192.168.4.52 从mysql50:192.168.4.50 客户机 1.实现MySQL读写分离搭建一主一从结构配置maxscale代理服务器测试分离配置 1.1 搭建一主一从结构192.168.4.51 主192.168.4.52 从测试OK 1.2 实现mysql读写分离1.2.1 配置数据读写分离服务器:192.168.4.50]# wget https://downloads.mariadb.com/

mysql-proxy和amoeba 分别实现Mariadb读写分离

1.Mysql-proxy实现读写分离 MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡.对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可.当然,这样proxy机器可能成为单点失效,但完全可以使用多个proxy机器做为冗余,在应用服务器的连接池配置中配置到多个proxy的连

mysql主从复制与读写分离

MySQL主从复制与读写分离 MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过.但在实际的生产环境中,由单台Mysql作为独立的数据库是完全不能满足实际需求的,无论是在安全性,高可用性以及高并发等各个方面. 因此,一般来说都是通过 主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy)来提升数据库的并发负载能力 这样的方案来进行部

MySql之主从复制及读写分离

前言 使用MySQL Proxy和MySQL Replication实现读写分离 MySQL Replication可以将master的数据复制分布到多个slave上,然后可以利用slave来分担master的读压力.那么对于前台应用来说,就要考虑如何将读的压力分布到多个slave上.如果每个应用都需要来实现读写分离的算法,一则成本太高,二来如果slave增加更多的机器,应用就要随之修改.明显的,如果在应用和数据库间加一个专门用于实现读写分离的中间层,则整个系统的架构拥有更好的扩展性.MySQL