OneProxy并发查询

OneProxy并发查询

1、OneProxy安装

[[email protected] Desktop]# mv oneproxy-rhel6-linux64-v5.7-ga.tar.gz/usr/local

[[email protected] Desktop]# cd /usr/local/

[[email protected] local]# tar zxvf oneproxy-rhel6-linux64-v5.7-ga.tar.gz

[[email protected] local]# cd oneproxy/

[[email protected] 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:[email protected] \

--proxy-slave-addresses=192.168.1.119:[email protected] \

--proxy-user-list=test/[email protected] \

--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

修改相关语句

[[email protected] 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:[email protected] \

--proxy-master-addresses=192.168.1.132:[email protected]\

--proxy-user-list=test/[email protected] \

--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/[email protected]其中第一个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

[[email protected]]# 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 [email protected]‘%‘ identified by ‘test‘"

5)启动

sh ./demo.sh

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

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

mysql -uadmin -h 127.0.0.1 -P4041 -pOneProxy

然后键入

list backend;

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插入测试数据

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

测试排序结果

CMD下连接上vip地址

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

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

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

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

2.1.3、使用order by排序的情况(使用icol3号进行排序)

  

2.2、group by分组测试

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

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

测试过程:

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

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

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

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

时间: 2024-10-26 21:58:12

OneProxy并发查询的相关文章

应对Memcached缓存失效,导致高并发查询DB的几种思路

原文地址: http://blog.csdn.net/hengyunabc/article/details/20735701 当Memcached缓存失效时,容易出现高并发的查询DB,导致DB压力骤然上升. 这篇blog主要是探讨如何在缓存将要失效时,及时地更新缓存,而不是如何在缓存失效之后,如何防止高并发的DB查询. 个人认为,当缓存将要失效时,及时地把新的数据刷到memcached里,这个是解决缓存失效瞬间高并发查DB的最好方法.那么如何及时地知道缓存将要失效? 解决这个问题有几种思路: 比

应对Memcached缓存失效,导致高并发查询DB的四种思路(l转)

当Memcached缓存失效时,容易出现高并发的查询DB,导致DB压力骤然上升. 这篇blog主要是探讨如何在缓存将要失效时,及时地更新缓存,而不是如何在缓存失效之后,如何防止高并发的DB查询. 解决这个问题有四种思路: 比如一个key是aaa,失效时间是30s. 1.定期从DB里查询数据,再刷到memcached里 这种方法有个缺点是,有些业务的key可能是变化的,不确定的. 而且不好界定哪些数据是应该查询出来放到缓存中的,难以区分冷热数据. 2.当缓存取到为null时,加锁去查询DB,只允许

四、基于HTTPS协议的12306抢票软件设计与实现--水平DNS并发查询分享

一.基于HTTPS协议的12306抢票软件设计与实现--实现效果 二.基于HTTPS协议的12306抢票软件设计与实现--相关接口以及数据格式 三.基于HTTPS协议的12306抢票软件设计与实现--垂直查询效果分享 哎,又过春节了,同志们又要抢票回家了,这票卖的可真快啊,瞬间的功夫就没有票了,一票难求啊! 这两天闲着没事,刚好又要抢春节的票了.就把原来写的抢票软件给打开试了一下,发现居然不能查票了.于是就又改了一下. 事实上是改了两下,一是:让原来的程序能够用起来(适应新接口),而是加上了水平

应对Memcache缓存失效,导致高并发查询DB

当Memcached缓存失效时,容易出现高并发的查询DB,导致DB压力骤然上升. 这篇blog主要是探讨如何在缓存将要失效时,及时地更新缓存,而不是如何在缓存失效之后,如何防止高并发的DB查询. 解决这个问题有四种思路: 比如一个key是aaa,失效时间是30s. 1.定期从DB里查询数据,再刷到memcached里 这种方法有个缺点是,有些业务的key可能是变化的,不确定的. 而且不好界定哪些数据是应该查询出来放到缓存中的,难以区分冷热数据. 2.当缓存取到为null时,加锁去查询DB,只允许

MES案例研究1 - 大表并发查询

某工厂是生产数码产品金属外壳的,每天近100万件的产量,随着圣诞节的临近,客户订单大量增加,但是生产却跟不上,经初步分析,发现问题发生在激光雕刻二维码的工位,由于镭雕机从MES取号的时间太长,造成生产的瓶颈. 该厂MES的主要功能是做生产追溯,包括:生产过程记录.关键工位检查.质量问题收集等. 在镭雕工位,客户端程序要从MES中查询得到对应机型的最小序列号,然后传给镭雕机. 查询SQL的核心逻辑为: SELECT MIN(serial_number) FROM t_product_history

利用Gearman实现并发查询(Multi-Query)

这个样例是想从数据库查询出几个结果集,一般的做法是,一个接一个的发送查询,然后汇总结果进行输出. 以下我们利用Gearman的gearman_client_run_tasks实现并发的查询,gearman_client_run_tasks接口能够一次性的提交多个任务,然后在callback函数中异步的处理结果. PHP的示比例如以下: The client: <?php $client = new GearmanClient(); $client->addServer(); // initia

java并发查询数据

并发服务 package com.springboot_android.thread; import com.project_entity.bean.DeviceRecrodBean; import com.springboot_android.dao.DeviceRecrodDao; import java.util.*; import java.util.concurrent.Callable; /** * 历史数据,多线程处理 */ public class ThreadCall impl

多线程并发查询mysql数据库中的数据

用10个一次拉2吨的卡车代替1个一次拉10吨的卡车.前提是有资源折腾,比如线程池,多核cpu,也要考虑线程的切换代价.把java服务器和数据库服务器综合利用起来,传统的方式是java服务器发送一条指令给数据库就坐等喝茶拿结果,数据库累个半死才出结果,而且出力不讨好,嫌干活慢,现在也要让java服务器也要干点事,这样大家都心里比较平衡点. List<CompletableFuture<List<TimesAndAmount>>> allStationsTimesAmoun

查询信息的服务器 客户端设立 支持并发多线程

设计并开发一个服务器程序,该服务器能够提供交通违章.主要城市天气.邮政编码的查询.如果用户在查询时输入#JT#川A 12345,则表示用户需要查询的是车牌号为川A 12345的汽车的所有违章信息:如果用户在查询时输入#TQ#成都,则表示用户需要查询的是成都的天气:如果用户在查询时输入#YB#成都,则表示用户需要查询的是成都的邮政编码.请为每项功能至少提供三项可以查询的内容,并将服务器设计成能够支持并发查询的多线程服务器. package com.lovo.exam2;import java.io