一、OneProxy简介
OneProxy,集连接池、负载均衡、分库分表、SQL防火墙等功能于一身的数据库中间件!
http://www.onexsoft.cn/zh/oneproxy.html
二、安装配置
# ./mysqlpwd 123456
9D7E55EAF8912CCBF32069443FAC452794F8941B
# 这里是对密码123456做加密
5、配置OneProxy服务
# cat start.sh
#/bin/bash
export ONEPROXY_HOME=/root/oneproxy ${ONEPROXY_HOME}/oneproxy --keepalive --proxy-address=:3317 \ --proxy-master-addresses=192.168.1.60:3306@test \ --proxy-slave-addresses=192.168.1.61:3306@test \ --proxy-slave-addresses=192.168.1.62:3306@test \ --repadmin-username=repl \ --repadmin-password=066C934D687741280278A1F2409BA9FD6EF94541 \ --proxy-replication-check \ --proxy-group-slavedelay=test:5 \ --proxy-group-policy=test:read-slave \ --proxy-user-list=admin/9D7E55EAF8912CCBF32069443FAC452794F8941B@test \ --admin-address=:4041 \ --event-threads=4 --proxy-group-security=test:0 \ --log-file=${ONEPROXY_HOME}/oneproxy.log \ --pid-file=${ONEPROXY_HOME}/oneproxy.pid |
参数解释:
<span style="font-size:14pt"--<keepalive 如果oneproxy进程宕了,自动重启
<span style="font-size:14pt"--<proxy-address 定义前端JAVA、PHP程序连接的端口,这里是3317
<span style="font-size:14pt"--<proxy-master-addresses 定义主库的IP地址:端口:组名(可以随便定义,主要是为了分库分表后的路由分组)
<span style="font-size:14pt"--<proxy-slave-addresses 定义从库的IP地址:端口:组名(需要和主库的组名一致)
<span style="font-size:14pt"--<repadmin-username 同步复制的用户名,这里是repl
<span style="font-size:14pt"--<repadmin-password 同步复制的密码,这里通过mysqlpwd工具加密
<span style="font-size:14pt"--<proxy-replication-check 开启同步复制延迟检测,这里的实现方式跟MaxScale一样,更新一张表,对比时间戳差值。如果不开启这个参数,默认是以Seconds_Behind_Master为依准
151126 2:22:34 294 Query BEGIN
294 Query REPLACE INTO test.oneproxy_replication_check VALUES (1, UNIX_TIMESTAMP(NOW())) 294 Query COMMIT /* implicit, from Xid_log_event */ 240 Query SHOW MASTER STATUS 240 Query SHOW SLAVE STATUS 240 Query SELECT id, col2 FROM test.oneproxy_replication_check where id = 1 |
<span style="font-size:14pt"--<proxy-group-slavedelay 设置延迟多少秒不转发请求,这里为5秒,test是组名
<span style="font-size:14pt"--<proxy-group-policy 设置读写分离的策略,总共支持8种策略:
重点4个策略:
read_slave:读在从库上,当从库都发生宕机、或者同步延迟,把请求强制走主库
read_balance:读在主库和从库上
big_slave:复杂SQL,如count(*),group by,join等查询访问从库
big_balance:同理read_balance
<span style="font-size:14pt"--<proxy-user-list 定义前端JAVA、PHP程序连接的用户名、密码、数据库名
<span style="font-size:14pt"--<admin-address 定义OneProxy后台管理端口
<span style="font-size:14pt"--<proxy-group-security 可针对某一个Server Group来指定安全级别,默认值为0,即没有任何设置。设成1禁止通过OneProxy来做DDL操作;设置为2则必须要有Where条件;设置为3只允许只读的操作。
<span style="font-size:14pt"--<event-threads 设置并发线程数,最大允许48个线程,不要超过CPU的核数
6、启动服务
/bin/bash start.sh
前端PHP/JAVA程序接入事项:
以下情况,select查询将会在master上执行:
-
在一个事务里的SQL(begin;select;commit;)
-
增加注释/*master*/,如select /*master*/ salary from money where name = '张三';
-
不支持slave的读取权重功能
OneProxy读写分离接入限制:
1、不支持预编译语句Prepared Statement、不支持Bind、Execute调用接口,如图(11)、图(12):
图(11)
图(12)
2、不支持 use命令切换数据库
3、默认禁止 CALL, PREPARE, EXECUTE, DEALLOCATE 命令,不
支持存储过程和函数