MySQL读写分离之One Proxy

本文介绍了如何配置和测试MySQL读写分离的解决方案——One Proxy。详细阐述了One Proxy的配置步骤,包括设置线程数、代理服务器信息、数据库访问策略等,并提供了测试方法,确保在主从数据库故障时仍能正常运行。

一、配置准备

1、Innodb Cluster +Rounter 集群+Keepalived 配置(略)见上文

2、环境说明:

MySQL Router VIP地址:192.168.2.100

MySQL Router 写入端口:6446

MySQL Router 读取端口:6447

One Proxy1 信息:

IP:192.168.2.109

主机名:rdc-manager1

One Proxy2 信息:

IP:192.168.2.110

主机名:rdc-manager2

One Proxy VIP 192.168.2.98

二、配置

1、下载One Proxy

wget http://www.onexsoft.com/software/oneproxy-rhel6-linux64-v6.2.0-ga.tar.gz

2、解压安装One Proxy

tar -zvxf oneproxy-rhel6-linux64-v6.2.0-ga.tar.gz 
mv oneproxy-rhel6-linux64-v6.2.0-ga /usr/local/oneproxy

3、配置oneproxy(rdc-manager1)

cd /usr/local/oneproxy
vim conf/proxy.conf
[oneproxy]
event-threads              = 1
proxy-license              = A2FF461456A67F28,D2F6A5AD70C9042D
proxy-httpserver           = 0.0.0.0:8080
proxy-security-level       = 0
proxy-auto-readonly        = 0
proxy-slave-addresses.1    = 192.168.2.100:6447@default
proxy-master-addresses.2   = 192.168.2.100:6446@default
# proxy-slave-addresses.3  = ...

proxy-group-policy         = default:read_slave
proxy-user-list            = default:root/9D7E55EAF8912CCBF32069443FAC452794F8941B@rdc_manager

remote-address.1           = 192.168.2.110:4041
vip-address                = 192.168.2.98/ens33:vip

proxy-part-template        = conf/template.txt
proxy-part-tables          = conf/part.txt

proxy-sequence-group       = default
proxy-sequence.1           = seq1
network-blocking           = 0
4、配置oneproxy(rdc-manager2)
[oneproxy]
event-threads              = 1
proxy-license              = A2FF461456A67F28,D2F6A5AD70C9042D
proxy-httpserver           = 0.0.0.0:8080

proxy-security-level       = 0

proxy-auto-readonly        = 0
proxy-slave-addresses.1    = 192.168.2.100:6447@default
proxy-master-addresses.2   = 192.168.2.100:6446@default
# proxy-slave-addresses.3  = ...

proxy-group-policy         = default:read_slave
proxy-database             = rdc_manager
proxy-user-list            = default:root/9D7E55EAF8912CCBF32069443FAC452794F8941B@rdc_manager
remote-address.1           = 192.168.2.109:4041
vip-address                = 192.168.2.98/ens33:vip
proxy-part-template        = conf/template.txt
proxy-part-tables          = conf/part.txt

proxy-sequence-group       = default
proxy-sequence.1           = seq1
network-blocking           = 0

5、主要参数说明:

envent-threads                                # 指定线程数,默认为8,建议为CPU的processor数量

proxy-httpserver                             # web监控页面地址和端口

proxy-security-level                        # 

proxy-slave-addresses.1                #

proxy-master-addresses.2             # 服务器地址端口号及所属集群

proxy-database                              #  设置oneproxy访问的默认数据,默认为test库

proxy-user-list                                 # <user:passwd@dbname> 注意密码位置需要使用bin目录下的mysqlpwd加密

remote-address.1                            # <host:port>  设置其它节点的管理接口IP和管理端口

vip-address                                     # <ip/dev>   多节点HA环境下,设置提供服务的VIP地址以及VIP绑定的dev

proxy-group-policy                        # 设定读写分离策略

设定在一个group中,数据库的读写分离策略,

支持一主多从场景的策略

master_only:读写都在master

read_failover:读写都在master,当master挂掉的时候读切到slaves

read_slave:写在master,读在所有slaves

read_balance:写在master,读从master以及slaves走

big_slave:写以及简单查询走master,复杂查询走slaves

big_balance:写及简单查询走master,复杂查询走master及slaves

更多内容参考链接

6、修改oneproxy.service脚本

ONEPROXY_HOME=/usr/local/oneproxy

6、可以使用如下选项来定制应用程序或用户对数据库的访问等级。

  1. proxy-security-level, 在整个Proxy上设置安全访问等级。
  2. proxy-group-security,对某一个MySQL集群设置安全访问等级。
  3. proxy-table-security,对某张表(根据表名)设置安全访问等级。

对于安全访问等级,则使用不同的比特位来表示不同的访问权限。

  1. 任何非零值(通常为“1”)将会禁止DDL语句(Create / Alter / Drop / Truncate / Rename)的执行,这是默认行为(proxy-group-security选项的默认值为“1”)。
  2. 值“2”强制查询/更新/删除语句有一个明显的Where条件,比如“select * from tab”将会被禁止执行,而“select * from tab where 1=1”则会被允许执行。
  3. 值“4”将会禁止Delete语句的执行,以避免应用程序或用户误删除数据。
  4. 值“8”将会禁止所有的DDL语句,将变成只读状态,可以布署OneProxy来当作自助查询系统。

三、测试

1、连接MySQL Router读写端口创建相关表

mysql -uroot -p -h 192.168.2.100 -P 6446
CREATE TABLE changwei ( Id int NOT NULL PRIMARY KEY, Name varchar(255) NOT NULL, Age int, City varchar(255) );

2、创建批量插入和查询脚本

#!/bin/bash
#
COMMANT="mysql -u root -p123456 -h 192.168.2.98 -P 3307"
#
#read Total_Number <a.log
read Total_Number <a.log
#
COUNT=$2
#
V=$Total_Number
#
sql_delete (){
for ((i=$Total_Number;i>$[Total_Number-COUNT-1];i--))
do
    $COMMANT <<EOF 2>/dev/null
SELECT * FROM changwei WHERE Id=$i;
select @@hostname;
DELETE FROM changwei WHERE Id=$i;
EOF
sleep 2
done
echo $i >a.log
}
#
#
#
sql_add (){
for ((i=$[Total_Number - 1];i<$[Total_Number+COUNT];i++))
do
    $COMMANT <<EOF 2>/dev/null
SELECT * FROM changwei WHERE Id=$i;
select @@hostname;
INSERT INTO changwei VALUES($V,'test$V',$V,'lizhi');
EOF
V=$[V+1]
sleep 2
done
echo $i >a.log

}
case $1 in
    delete)
    sql_delete
    ;;
    add)
    sql_add
    ;;
    *)
    echo "Usage (delete|add)"
    ;;
esac

3、执行脚本期间可以随机停掉主从数据库,看脚本是否正常执行

./changwei.sh add 200

四、其它MySQL中间件介绍

参考链接


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值