开发者社区> 技术小阿哥> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

OneProxy并发查询

简介:
+关注继续查看

1、OneProxy安装

[root@redhat Desktop]# mv oneproxy-rhel6-linux64-v5.7-ga.tar.gz/usr/local

[root@redhat Desktop]# cd /usr/local/

[root@redhat local]# tar zxvf oneproxy-rhel6-linux64-v5.7-ga.tar.gz

[root@redhat local]# cd oneproxy/

[root@redhat oneproxy]# cat demo.sh

#/bin/bash

#

exportONEPROXY_HOME=/data/oneproxy

#valgrind --leak-check=full --show-reachable=yes \

${ONEPROXY_HOME}/oneproxy--keepalive --proxy-address=:3307 \

  --vip-address=192.168.1.120/eth0:0 \

  --proxy-master-addresses=192.168.1.20:3306@server1 \

  --proxy-slave-addresses=192.168.1.119:3306@server1 \

  --proxy-user-list=test/1378F6CC3A8E8A43CA388193FBED5405982FBBD3@test \

  --proxy-part-tables=${ONEPROXY_HOME}/part.txt\

  --proxy-charset=gbk_chinese_ci \

  --event-threads=4--proxy-group-security=server1:0 \

  --log-file=${ONEPROXY_HOME}/oneproxy.log \

  --pid-file=${ONEPROXY_HOME}/oneproxy.pid

修改相关语句

[root@redhat oneproxy]# cat demo.sh

#/bin/bash

#

export ONEPROXY_HOME=/usr/local/oneproxy

#valgrind --leak-check=full --show-reachable=yes \

${ONEPROXY_HOME}/oneproxy--keepalive --proxy-address=:3307 \

  --vip-address=192.168.1.120/eth0:0 \

  --proxy-master-addresses=192.168.1.128:3306@data1 \

  --proxy-master-addresses=192.168.1.132:3306@data2\

  --proxy-user-list=test/1378F6CC3A8E8A43CA388193FBED5405982FBBD3@test \

  --proxy-part-tables=${ONEPROXY_HOME}/hashpart.txt \

  --proxy-charset=gbk_chinese_ci \

  --proxy-group-security=server1:0 \

  --proxy-group-policy=data1:master-only\

  --proxy-group-policy=data2:master-only \

  --log-file=${ONEPROXY_HOME}/oneproxy.log \

  --pid-file=${ONEPROXY_HOME}/oneproxy.pid

注释:

A) --proxy-user-list=test/1378F6CC3A8E8A43CA388193FBED5405982FBBD3@test其中第一个test为连接proxy的用户名,该用户名也是用来连接后端数据库的用户名;1378F6CC3A8E8A43CA388193FBED5405982FBBD3为test用户的加密口令;最后一个test为各个数据库节点中的test数据库。

B)口令加密。启动OneProxy之后,进入管理端口,然后键入passwd<string>

# mysql -uadmin -h 127.0.0.1 -P4041 -pOneProxy

mysql> passwd test;

+------+------------------------------------------+

| TEXT | PASSWORD                                 |

+------+------------------------------------------+

| test | 1378F6CC3A8E8A43CA388193FBED5405982FBBD3 |

+------+------------------------------------------+

1 row in set (0.00 sec)

C) 分表文件hashpart.txt 

[root@redhatoneproxy]# cat hashpart.txt

[

  {

       "table" :"bigtable",

       "pkey" : "id",

       "type" : "int",

       "method" : "hash",

       "partitions": 256,

       "groups":["data1","data2"]

  }

]

其中table:拆分的表;pkey:分表列;type:分表列类型,目前支持的类型为int和char;method:分区方法,目前支持hash,range,list,global

4)安装数据节点,并赋予用户相应权限。

A)MySQL安装(安装步骤略)

B)权限分配

登录到各个底层数据库所在的linux主机上,运行如下命令:

mysql-uroot -p -e "grant all privileges on *.* to test@'%' identified by 'test'"

5)启动

sh ./demo.sh

6)检查后端数据库节点状态 

进入管理端口(默认端口为4041 

mysql -uadmin -h 127.0.0.1 -P4041 -pOneProxy 

然后键入 

list backend;  

wKiom1X5JZLi7nawAAK7uWszmQg875.jpg

status这一栏为UP,表示集群正常。 

7)创建表 

登录OneProxy的转发端口 mysql-h<OneProxyIP> -P3307 -utest –ptest

注意:端口3307需要打开

C:\Users\jing>mysql -h192.168.1.120 -P3307 -utest-ptest 

DDL语句:

CREATE TABLE `bigtable` (

`id` bigint(20) NOT NULL,

`start` datetime DEFAULT NULL,

`icol3` int(11) DEFAULT NULL COMMENT ' 1-10 ',

`icol4` int(11) DEFAULT NULL COMMENT ' 1-100 ',

`icol5` int(11) DEFAULT NULL COMMENT ' 1-1000 ',

`icol6` int(11) DEFAULT NULL,

`vcol7` varchar(20) DEFAULT NULL,

`vcol8` varchar(20) DEFAULT NULL,

`vcol9` varchar(30) DEFAULT NULL,

`vcol10` varchar(20) DEFAULT NULL,

 PRIMARY KEY (`id`) ) ;

执行这个语句,会看到报错: 

ERROR 1044 (42000): Access denied due to securitypolicy, DDL disabled or DML restricted!

解释:由于OneProxy为了安全起见,默认是禁止DDL语句的。

解决办法:从OneProxy管理端口,运行如下命令

C:\Users\jing>mysql -h192.168.1.120 -P4041-uadmin -pOneProxy -e "set gaccess data1:master-only"

C:\Users\jing>mysql -h192.168.1.120 -P4041-uadmin -pOneProxy -e "set gaccess data2:master-only"

再次登录到OneProxy的转发端口,运行DDL命令即可成功。

经过上面的步骤之后,256个表就在2个底层数据库中创建好了,分别为bigtable_0 , bigtable_1.....bigtable_255。

2、OneProxy测试

2.1、order by排序测试

2.1.1插入测试数据       

在redhat(192.168.1.128)主机下的test数据库下的表bigtable_0插入测试数据

wKiom1X45mPAsVB6AAThPli40A0671.jpg

在master(192.168.1.132)主机下的test数据库下的表bigtable_1插入测试数据

wKioL1X46ImQr1AVAAYLSo9FbRs941.jpg

测试排序结果

CMD下连接上vip地址

C:\Users\jing> mysql -h192.168.1.120 -P3307 -utest -ptest

2.1.2、没有使用oreder by排序的情况

使用order by排序的情况(使用id号进行排序):

wKioL1X46HujKWUHAAWZzph9BQ4698.jpg

id号是主键,不同的表有相同的id号也不会发生冲突

wKiom1X45iLgehVdAAaemsaS5JE279.jpg

icol3


wKioL1X46EyQTPW2AAW1T2JksCg477.jpg  

2.2、group by分组测试

wKiom1X45cHBGc7TAADQTvkDAMc977.jpg

2.3、已经建好的两个表,OneProxy实现并发查询

  已经建好的两个表(不通过OneProxy进行分库分表),OneProxy要实现并发查询,对表名的格式有要求,表名后缀必须以“_0”、“_1”……结尾。可以通过建立视图的方法(相当于给原来的表建立一个表别名)来解决这个问题。

测试过程:

1)在主机为192.168.1.128 apex_db库下,有一个表名为apex_tb,给表名apex_tb建立一个视图apex_tb_0, 

wKioL1X45-KhdboaAAFX380IS74383.jpg

2)在主机为192.168.1.132 apex_db库下,有一个表名为apex_tb,给表名apex_tb建立一个视图apex_tb_1

wKiom1X45ZvghtxmAAG27NjvBZM754.jpg

3)通过以上的操作OneProxy就可以并发查询已经建好的两个表(要求表结构相同)。2.4、存储过程测试结论:不支持存储过程

wKiom1X45XiAgek2AADxeteIY9A893.jpg

可以建立存储过程,但是不能用call进行调用。




本文转自 corasql 51CTO博客,原文链接:http://blog.51cto.com/corasql/1695380,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用 Haproxy + Nginx 实现高可用
Haproxy 是目前比较流行的一种集群调度工具,同类集群调度器工具有很多,如 LVS 和 Nginx。相比较而言,LVS 性能最好,但是搭建相对复杂;Nginx 的 upstream 模块虽然支持集群功能,但是对集群节点健康检查功能不强,性能没有 Haproxy 好。
68 0
Nginx Proxy Cache原理和最佳实践(下)
Nginx Proxy Cache原理和最佳实践
108 0
haproxy
监听所有80端口转发到8080 global daemon maxconn 25600 defaults mode http timeout connect 5000ms timeout client 50000ms timeout server 50...
1036 0
haproxy
http://www.igvita.com/2008/05/13/load-balancing-qos-with-haproxy/ ...
498 0
13688
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载