快乐学习
前程无忧、中华英才非你莫属!

Day11-MySQL架构实战-MHA+OneProxy 实现高可用的分库分表

一、OneProxy简介

OneProxy,集连接池、负载均衡、分库分表、SQL防火墙等功能于一身的数据库中间件!

http://www.onexsoft.cn/zh/oneproxy.html

二、安装配置

mysqlpwd

# ./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上执行:

  1. 在一个事务里的SQL(begin;select;commit;)

  2. 增加注释/*master*/,如select /*master*/ salary from money where name = &apos;张三&apos;;

  3. 不支持slave的读取权重功能

OneProxy读写分离接入限制:

1、不支持预编译语句Prepared Statement、不支持Bind、Execute调用接口,如图(11)、图(12):

                   图(11)

图(12)

2、不支持 use命令切换数据库

3、默认禁止 CALL, PREPARE, EXECUTE, DEALLOCATE 命令,不

支持存储过程和函数

打赏
赞(0) 打赏
未经允许不得转载:同乐学堂 » Day11-MySQL架构实战-MHA+OneProxy 实现高可用的分库分表

特别的技术,给特别的你!

联系QQ:1071235258QQ群:710045715

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

error: Sorry,暂时内容不可复制!