OneProxy使用手册--致力于打造透明的数据层
介绍
#/bin/bash
#
export ONEPROXY_HOME=/usr/local/oneproxy/
# valgrind --leak-check=full \
${ONEPROXY_HOME}/bin/oneproxy --defaults-file=${ONEPROXY_HOME}/conf/proxy.conf
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[oneproxy]
keepalive = 1
event-threads = 4
log-file = log/oneproxy.log
pid-file = log/oneproxy.pid
lck-file = log/oneproxy.lck
mysql-version = 5.6.27
proxy-address = :3307
proxy-master-addresses.1 = 10.0.0.10:3306@A
proxy-slave-addresses.1 = 10.0.0.11:3306@A
proxy-master-addresses.2 = 10.0.0.12:3306@B
proxy-slave-addresses.2 = 10.0.0.13:3306@B
proxy-user-list = test/1378F6CC3A8E8A43CA388193FBED5405982FBBD3@test
proxy-part-template = conf/template.txt
proxy-part-tables.1 = conf/part.txt
proxy-part-tables.2 = conf/part2.txt
proxy-charset = gbk_chinese_ci
proxy-group-policy.1 = A:master-only
proxy-group-policy.2 = B:master-only
proxy-table-map.1=X:B
proxy-table-map.2=Y:A
proxy-table-map.3=Z:A
proxy-secure-client = 127.0.0.1
proxy-sequence.1 = default
#remote-address = 192.168.1.119:4041
#vip-address = 192.168.1.120/eth0:0
[oneproxy]
keepalive = 1
event-threads = 4
log-file = log/oneproxy.log
pid-file = log/oneproxy.pid
lck-file = log/oneproxy.lck
mysql-version = 5.6.27
proxy-address = :3307
proxy-master-addresses.1 = 10.0.0.10:3306@A
proxy-slave-addresses.1 = 10.0.0.11:3306@A
proxy-master-addresses.2 = 10.0.0.12:3306@B
proxy-slave-addresses.2 = 10.0.0.13:3306@B
proxy-master-addresses.3 = 10.0.0.14:3306@C
proxy-slave-addresses.4 = 10.0.0.15:3306@C
proxy-user-list = test/1378F6CC3A8E8A43CA388193FBED5405982FBBD3@test
proxy-part-tables.1 = conf/part.txt
proxy-charset = gbk_chinese_ci
proxy-group-policy.1 = A:master-only
proxy-group-policy.2 = B:master-only
proxy-group-policy.3 = C:master-only
proxy-table-map.2=Y:A
proxy-table-map.3=Z:A
proxy-secure-client = 127.0.0.1
proxy-sequence.1 = default
#remote-address = 192.168.1.119:4041
#vip-address = 192.168.1.120/eth0:0
[
{
"table" : "X",
"pkey" : "id",
"type" : "char",
"method" : "crc32",
"partitions" :
[
{ "suffix" : "_00", "group": "B" },
{ "suffix" : "_01", "group": "B" },
{ "suffix" : "_02", "group": "C" },
{ "suffix" : "_03", "group": "C"}
]
}
]
[oneproxy]
keepalive = 1
event-threads = 4
log-file = log/oneproxy.log
pid-file = log/oneproxy.pid
lck-file = log/oneproxy.lck
mysql-version = 5.6.27
proxy-address = :3307
proxy-master-addresses.1 = 10.0.0.10:3306@A
proxy-slave-addresses.1 = 10.0.0.11:3306@A
proxy-user-list = test/1378F6CC3A8E8A43CA388193FBED5405982FBBD3@test
proxy-charset = gbk_chinese_ci
proxy-group-policy.1 = A:read_failover
proxy-secure-client = 127.0.0.1
proxy-sequence.1 = default
#remote-address = 192.168.1.119:4041
#vip-address = 192.168.1.120/eth0:0
[oneproxy]
keepalive = 1
event-threads = 4
log-file = log/oneproxy.log
pid-file = log/oneproxy.pid
lck-file = log/oneproxy.lck
mysql-version = 5.6.27
proxy-address = :3307
proxy-master-addresses.1 = 10.0.0.10:3306@A
proxy-slave-addresses.1 = 10.0.0.11:3306@A
proxy-user-list = test/1378F6CC3A8E8A43CA388193FBED5405982FBBD3@test
proxy-charset = gbk_chinese_ci
proxy-group-policy.1 = A:read_slave
proxy-secure-client = 127.0.0.1
proxy-sequence.1 = default
#remote-address = 192.168.1.119:4041
#vip-address = 192.168.1.120/eth0:0
[oneproxy]
keepalive = 1
event-threads = 4
log-file = log/oneproxy.log
pid-file = log/oneproxy.pid
lck-file = log/oneproxy.lck
mysql-version = 5.6.27
proxy-address = :3307
proxy-master-addresses.1 = 10.0.0.10:3306@A
proxy-slave-addresses.1 = 10.0.0.11:3306@A
proxy-user-list = test/1378F6CC3A8E8A43CA388193FBED5405982FBBD3@test
proxy-charset = gbk_chinese_ci
proxy-group-policy.1 = A:read_balance
proxy-secure-client = 127.0.0.1
proxy-sequence.1 = default
#remote-address = 192.168.1.119:4041
#vip-address = 192.168.1.120/eth0:0
[oneproxy]
keepalive = 1
event-threads = 4
log-file = log/oneproxy.log
pid-file = log/oneproxy.pid
lck-file = log/oneproxy.lck
mysql-version = 5.6.27
proxy-address = :3307
proxy-master-addresses.1 = 10.0.0.10:3306@A
proxy-master-addresses.2 = 10.0.0.11:3306@A
proxy-master-addresses.3 = 10.0.0.12:3306@A
proxy-user-list = test/1378F6CC3A8E8A43CA388193FBED5405982FBBD3@test
proxy-charset = gbk_chinese_ci
proxy-group-policy.1 = A:write_other
proxy-secure-client = 127.0.0.1
proxy-sequence.1 = default
#remote-address = 192.168.1.119:4041
#vip-address = 192.168.1.120/eth0:0
[oneproxy]
keepalive = 1
event-threads = 4
log-file = log/oneproxy.log
pid-file = log/oneproxy.pid
lck-file = log/oneproxy.lck
mysql-version = 5.6.27
proxy-address = :3307
proxy-master-addresses.1 = 10.0.0.10:3306@A
proxy-master-addresses.2 = 10.0.0.11:3306@A
proxy-master-addresses.3 = 10.0.0.12:3306@A
proxy-user-list = test/1378F6CC3A8E8A43CA388193FBED5405982FBBD3@test
proxy-charset = gbk_chinese_ci
proxy-group-policy.1 = A:write_balance
proxy-secure-client = 127.0.0.1
proxy-sequence.1 = default
#remote-address = 192.168.1.119:4041
#vip-address = 192.168.1.120/eth0:0
FAQ
1、口令加密
此时可以启动oneproxy
cd /usr/local/oneproxy
sh ./demo.sh
进入管理端口,然后键入passwd <string>。
mysql -uadmin -pOneProxy -P4041 --protocol=TCP passwd test |
输出为:
1378F6CC3A8E8A43CA388193FBED5405982FBBD3
OneProxy提供了目前两种管理功能。
第一,提供了查看配置信息(例如后端 DB情况等)与系统的动态变化信息(例如OneProxy与后端数据库建立的连接变化等)。
命令 | 描述 | 例子 |
LIST HELP | 列出所有命令 | list help |
LIST BACKEND | 列出所有后端数据库 | list backend |
LIST GROUP | 列出所有的server group,具体含义请参考重要概念 | list group |
LIST POOL | 列出OneProxy与每个后端数据库建立的连接池大小与连接池配置 | list pool |
LIST QUEUE | 列出每个队列里到达的请求数量与已处理完成的请求 | list queue |
LIST THREADS | 列出每个线程处理过的请求数 | list threads |
LIST TABLEMAP | 列出table与server group的对应关系 | list tablemap |
LIST USERS | 列出用户 | list users |
LIST SQLSTATS | 列出执行过的SQL统计 | list sqlstats [hash] |
LIST SQLTEXT | 列出执行过的SQL与hashcode的对应关系 | list sqltext [hash] |
SET MASTER | 指定某后端DB为写库 | set master '192.168.1.119:3306' |
SET SLAVE | 指定某后端DB为读库 | set slave '192.168.1.119:3306' |
SET OFFLINE | 下线指定的后端数据库 | set offline '192.168.1.119:3306' |
SET ONLINE | 上线指定的后端数据库 | set online '192.168.1.119:3306' |
SET GPOLICY | 指定server group的策略。
预定义策略,0 代表由 Lua Script 来决定,默认为 Master Only; 1 代表 Read Failover; 2 代表Read/Write Split(Master 节点不参与读操作); 3 代表双 Master 结构,或者是 XtraDB Cluster结构,即多主对等的方式; 4 代表 Read/WriteSplit(Master 节点共同参与读操作); 5 代表读写随机。 |
set gpolicy default 1 |
SET GMASTER | 针对XtraDB Cluster,指定某个编号的数据库为写库 | set gmaster default 1 |
SET GACCESS |
指定server group允许的sql类型。0:无任何限制,缺省值; 1:禁止 DDL 操作; |
set gaccess default 1 |
SET POOLMIN | 设置OneProxy与后端数据库连接池的最少连接数 | set poolmin '192.168.1.119:3306' 5 |
SET POOLMAX |
设置OneProxy与后端数据库连接池的最大连接数, 实际的连接数可以超过这个数值, |
set poolmax '192.168.1.119:3306' 300 |
SET SQLSTATS | 打开、关闭或者清空SQL统计 | set sqlstats {on|off|clear} |
MAP | 把某个表归属给某个server group | map my_test1_0 default |
UNMAP | 删除表与server group的映射关系 | unmap my_test1_0 |
SUSPEND | 让event process停止指定秒数 | suspend 10 |
SHUTDOWN | 关闭proxy | shutdown force |
参数名 |
含义 |
proxy-address |
Proxy Server自身监听地址 |
proxy-master-addresses |
Master节点地址(可写入节点) |
proxy-slave-addresses |
Slave节点地址(可读取节点) |
proxy-user-list |
Proxy用户列表(用户名:口令) |
proxy-table-map |
为某张表指定“Server Group” |
proxy-sql-review |
为某张表指定Where条件中必须的列 |
proxy-database |
Proxy对应的后端数据库,默认: test |
proxy-charset |
Proxy字符集,默认:utf8_general_ci |
proxy-lua-script |
Proxy功能脚本(非常重要) |
proxy-group-policy |
预定义策略,0代表由Lua Script来决定,默认为Master Only;1代表Read Failover;2代表Read/Write Split(Master节点不参与读操作);3代表双Master结构,或者是XtraDB Cluster结构,即多主对等的方式;4代表Read/Write Split(Master节点共同参与读操作);5代表读写随机。 |
proxy-security-level |
安全级别,0默认值,1禁止DDL,2禁止不带条件的查询语句,3只允许SELECT。 |
proxy-group-security |
为特定Server Group设置安全级别。 安全级别,0默认值,1禁止DDL,2禁止不带条件的查询语句,3只允许SELECT。 |
event-threads |
并发线程数,最大允许48个线程。 |
解释
A) --proxy-master-addresses
重命名了MySQL Proxy里的参数(proxy-backend-addresses),觉得这个名字更容易记,所有允许写操作的Master节点。格式如下:
格式:ip:port@groupname
其中“groupname”指的是“Server Group”的名字,如果不指定,则默认为“default”。
B) --proxy-slave-addresses
重命名了MySQL Proxy里的参数(proxy-read-only-backend-addresses),觉得这个名字更容易记,所有允许只读操作的Slave节点。格式如下:
格式:ip:port@groupname
其中“groupname”指的是“Server Group”的名字,如果不指定,则默认为“default”。
C) --proxy-user-list
OneProxy止前接管了客户端的登录验证,即客户端在登录验证时不再需要和后端的MySQL数据库通信了,这就要求OneProxy必须有一个完整的用户列表,用来验证客户端登录,可以通过这个参数来指定允许访问的用户名和口令列表,所有后端的数据库都必须存在同样用户名和口令的登录账号。
可以用“bin/mysqlhash”来生成加密后的口令,例如:
[root@ANYSQLSRV1 oneproxy]# bin/mysqlhash test
A94A8FE5CCB19BA61C4C0873D391E987982FBBD3
然后在命令行参数里指定这个用户名和口令:
--proxy-user-list=test:A94A8FE5CCB19BA61C4C0873D391E987982FBBD3
如果有多个用户需要指定,多次指定此选项即可。也可以指定用户连接后端MySQL时的默认数据库,如果不指定,则连接到“proxy-database”指定的默认数据库。指定的格式如下:
--proxy-user-list=username:password@default_db
要求OneProxy后端所有的数据库都有同名用户、同名的数据库,及相应的访问权限,在OneProxy端并不支持改变一个会话的默认后端数据库,即传统的“USE”命令在OneProxy里有其他的含义。
D) --proxy-database
OneProxy基于现有连接池机制的考虑,并不支持切换数据库的功能,通过OneProxy连接的会话,只能对应到此参数指定的数据库里,“use”命令在OneProxy中也是被禁用的,原因是现有的代码里每一次获得连接池中的连接后,都会多发一个“use”命令,在高并发环境中会影响性能(后续版本将会对此作出改进),这是在使用OneProxy时需要注意的地方。
此选项默认值是“test”,这个库在默认安装时都会创建好的。
E) --proxy-charset
通过OneProxy来管理多个数据库时,要求所有的数据库字符集是一致的,同样是基于现有连接池机制的考虑,可以选的值在README文件里有,默认值是“utf8_general_ci”,为了防止连接池中不同的连接出现不同的设置,“set”命令在OneProxy里也是不生效的。
F) --proxy-group-policy
使用OneProxy时可以透时地对下层的数据架构做改造,可以通过Lua脚本来实现的,出于对性能及便捷性(许多人不是很懂Lua)的考虑,将简单的Failover及读写分离的方案固化到OneProxy里,使用C语言来实现,即不需要写任何Lua代码也可以透明地使用Failover和读写分离方案了。指定格式:
--proxy-group-policy=<servergroup>:<policy_value>
对于复杂的分库分表,则还需要编写Lua脚本来实现,在“lua”子目录下有一个示例脚本“oneproxy.lua”就是用来做分库分表的。其中“servergroup”表示针对哪个“Server Group”进行设置。
此选项可以设置的“policy_value”值有:
0
默认值,什么也不做,依赖于Lua脚本来实现。
1
Read Failover功能,对于读操作,首先从Master读取,如果Master不可用,则从Slave端读取。
2
Read/Write Split功能,对于读操作,首先从Slave读取,如果Slave端不可用,则从Master端读取。除非所有的Slave都不可用,否则Master不参与读操作。
3
针对XtraDB Cluster群集环境的Read/Write Split功能,从集群中固定地选择一台作为写入节点,其他的节点作为读节点;如果选中的写入节点不可用,则重新选一台作为写入节点,其他可用的节点继续提供读,这个策略提供了写入节点的自动漂移,在双Master节点上也可以设置成这种策略。
4
Read/Write Split功能,对于读操作,从Master和Slave中随机选一台进行查询操作,写入操作则从在Master上进行。
5
随机读写功能,对于读操作,从Master和Slave中随机选一台进行查询操作,写入操作则是随机选一台Master进行操作。
后续会继续内置更多的策略进去,以及不断优化已有的策略,为大家透明地做MySQL架构改造而努力。
G) --proxy-security-level
安全级别,提升安全性,默认值为0,即没有任何设置。设成1禁止通过OneProxy来做DDL操作;设置为2则必须要有Where条件;设置为3只允许只读的操作。
H) --proxy-group-security
可针对某一个“Server Group”来指定安全级别,指定格式:
--proxy-group-policy=<servergroup>:<policy_value>
安全级别,提升安全性,默认值为0,即没有任何设置。设成1禁止通过OneProxy来做DDL操作;设置为2则必须要有Where条件;设置为3只允许只读的操作。
I) --event-threads
这个参数本身的意义没有变化,但内部的实现经过大幅优化,使得单个OneProxy实例可以支持20万以上的QPS转发。在已知的数据库Proxy中,OneProxy的转发能力一直是第一,此选项允许设置的最大值是48。
数十万的转发能力表示由OneProxy本身引起的时延增加基本可以忽略,这一点是OneProxy相对于MySQL Proxy而言的一个重大进步,解决了MySQL Proxy的并发处理能力。
通常这个值可以设为CPU Core数量的两倍,用8C或16C配备万兆网卡的机器来跑OneProxy可以达到最好的效果。
OneProxy使用手册--致力于打造透明的数据层的更多相关文章
- 微信事业群WXG成立 致力于打造微信大平台
今天,微信之父张小龙带领微信团队成立微信事业群(WeiXin Group,简称WXG),致力于打造微信大平台,由他们负责微信基础平台.微信开放平台.微信支付拓展.O2O等微信延伸业务的发展,并包括邮箱 ...
- Oracle中的带参数的视图--我们致力于打造人力资源软件
创建包和包体 create or replace package pkg_pv is procedure set_pv(pv varchar2); function get_pv return var ...
- jQuery WIN 7透明弹出层效果
jQuery WIN 7透明弹出层效果,点击可以弹出一个透明层的jquery特效,插件可以调弹出框的宽度和高度,很不错的一个弹出层插件. 适用浏览器:IE8.360.FireFox.Chrome.Sa ...
- Turtle Online:致力于打造超接地气的PC前端架构,组件+API,快速搭建前端开发
架构创作初衷 每当新开一个项目时,都会绞尽脑汁去考虑采用哪种框架:requirejs/seajs.jquery/zepto.backbone.easeUI/Bootstrap/AngularJS……, ...
- Mysql完全手册(笔记二,使用数据与性能优化)
一.使用数据 1.使用变量 MySQL也可以让我们以用户自定义的变量来存储select查询的结果,以便在将来select查询中使用.它们只会在客户会话期间存在,但是它们提供一个方便有效的方法来连接查询 ...
- 未来科技城 x 奇点云打造「企业数据大脑」,助力1.3万家企业服务
“当前,政府数字化和数字政府建设已成为一种趋势.一种必然,并且有了一条水到渠成式的实现路径.” 上升为国家战略的数字中国建设加速了”智慧政务“的生动实践,杭州未来科技城的「企业数据大脑」就是一个典型. ...
- 面经手册 · 第4篇《HashMap数据插入、查找、删除、遍历,源码分析》
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 在上一章节我们讲解并用数据验证了,HashMap中的,散列表的实现.扰动函数.负载因 ...
- NGK乘势而上打造生态所,建立全方位的区块链生态系统
当金融理财变成了生活的一部分,购买金融衍生品的眼光成为了影响生活质量重要组成部分.这是一个不缺少黄金的年代,一夜间实现财务自由的故事每天都在上演,但是由于太多人缺少发现黄金的眼睛,只能被财富和机遇拒之 ...
- 【转】 FineBI:自助式BI工具打造业务分析的“快与准”
如今的企业经营方式,业务对于数据分析有极大的需求,但却苦于没有数据以及工具的有效支持,业务分析仍就依赖于IT报表制作.而IT方不断地按业务需求去调研.确认业务逻辑,然后取数做报表,其中还要忍受业务的需 ...
随机推荐
- js实现元素边框闪烁功能
<body> <input type="text" value="test" onclick="flash(this)"& ...
- 为Python添加默认模块搜索路径
方法一:函数添加1 import sys2 查看sys.path3 添加sys.path.append("c:\\") 方法二:修改环境变量w用户可以修改系统环境变量PYTHONP ...
- Win8.1系统下搭建IIS8.5+php-5.6运行环境教程
本文是在window 8.1 的IIS8.5 中搭建php环境 步骤: 1.下载php-5.6程序包 ,官网地址为:http://windows.php.net/download/ 注意要下载 ...
- Xcode关闭ARC
开启了ARC则不能显示调用dealloc/retain/release等手动内存管理操作,所以很多情况下需要关闭. Xcode中有两种途径可以关闭ARC. 1.创建项目时将ARC选项的勾取消掉. 2. ...
- css基本知识
WANGJUN59451 css基本知识 1.CSS 简介 CSS 指层叠样式表 (Cascading Style Sheets),是一种用来表现 HTML 文档样式的语言,样式定义如何显示 HT ...
- [SAP ABAP开发技术总结]程序自己以JOB方式运行
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- hdu 1086(计算几何入门题——计算线段交点个数)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1086 You can Solve a Geometry Problem too Time Limit: 2 ...
- webview页面和壳通信的库(精简版)
// PG精简版 (function() { var PG = { iosBridge: null, callbackId: 0, callbacks: [], commandQueue: [], c ...
- git学习笔记01-git最基本的工作原理分布式
git学习的网站 http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 --廖雪峰老师 ...
- Java Abstract class and Interface
Abstract Class 在定义class的时候必须有abstract 关键字 抽象方法必须有abstract关键字. 可以有已经实现的方法. 可以定义static final 的常量. 可以实现 ...