OneProxy是由原支付宝首席架构师楼方鑫开发,目前由楼方鑫创立的杭州平民软件公司(@平民架构)提供技术支持。它保留了MySQL-Proxy 0.8.4官方版本上其协议处理和软件框架,然后对软件做了大量优化,极大增强了系统的并发能力
oneProxy 功能
- 读写分离
- 高可用
- 主从服务器延时检测
- 动态扩容
- 性能统计
- 连接池
OneProxy常用参数说明
–user=<user>
以指定的用户运行oneproxy
–pid-file=<file>
指定oneproxy的进程pid文件路径
–log-level=(error|warning|info|message|debug)
指定oneproxy的日志输出级别
–log-file=<file>
指定日志文件的路径
–keepalive
开启进程守护,当oneproxy进程挂掉后重启oneproxy
–max-open-files
显示指定oneproxy的最大文件句柄数,默认Soft Limit为32768,Hard Limit为系统指定的大小
–event-threads
指定oneproxy的线程数,默认为8,建议为CPU的processor数量
–max-idle-time
在连接池中的连接最大空闲时间,指oneproxy与backends之间的连接,数据库中interactive_timeout的值要大于(max-idle-time+10),max-idle-time最大值为1800秒
–proxy-address=<host:port>
设定oneproxy提供服务的监听端口,在单机环境下,可指定监听IP及端口;在高可用环境下可忽略IP,例如–proxy-address=:3306
–proxy-user-list=<user:passwd@dbname>
设定在当前group中访问dbname的用户名和密码,其中密码是经过管理接口中passwd进行加密的字符串。建议在管理接口中使用passwd ‘password’;密码需用引号引起来,否则在使用特殊字符时密码会被截断
–proxy-database=<dbname>
设置通过oneproxy访问的默认数据库,默认为test库
–mysql-version=<version>
指定后端数据库的版本号,默认为5.5.18,此处主要是防止高版本的JDBC驱动连接oneproxy时,JAVA应用日志里出现“Caused by: java.sql.SQLException: Unknown system variable ‘tx_read_only’”的错误导致应用无法启动。
–proxy-connect-timeout=<number>
设定oneproxy与后端建立连接的超时时间,默认为2秒
–proxy-read-timeout=<number>
设定oneproxy对后端进行读操作的超时时间,默认8小时
–proxy-write-timeout=<number>
设定oneproxy对后端进行写操作的超时时间,默认8小时
–admin-address=<host:port>
设定oneproxy管理接口的监听地址及端口
–admin-username=<string>
设定允许访问管理接口的用户名
–admin-password=<string>
设定允许访问管理接口的用户登陆密码
–proxy-license=<license>
针对企业版的注册码
–proxy-charset=<charset>
读写分离
–proxy-master-addresses=<host:port@servergroup>
设定MySQL主服务器的地址、端口号及所属集群,例如
–proxy-master-addresses=172.16.4.1:3306@cisco
–proxy-slave-addresses=<host:port@servergroup>
设定MySQL从服务器的地址、端口号及所属集群,例如
–proxy-slave-addresses=172.16.4.2:3306@cisco
–proxy-group-policy=<groupname:policy>
设定在一个group中,数据库的读写分离策略,当前oneproxy支持12种读写分离策略
支持一主多从场景的策略
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
数据分片场景的策略
write_shard:多组master的shard环境中,读写在任意master
read_shard:一组多从的shard环境中,写在master,读走其他节点
Percona XtraDB Cluster/MariaDB Galera Cluster环境
write_balance
write_other
write_failover
双主环境
read_other
主从延迟检测
–proxy-replication-check
开启oneproxy的主从延迟精确检测功能,默认会在test库中创建一张表。原理类似pt-heartbeat
–proxy-group-slavedelay=<servergroup:seconds>
设定在一个group中的slave,在检测到复制延迟到达设置的值之后,自动剔除该节点,在延迟小于设定值时动态加入服务
–repadmin-username=<string>
设置用于主从检测的用户名
–repadmin-password=<string>
设置用于主从检测的用户名密码
高可用
–vip-address=<ip/dev>
在多节点HA环境下,设置提供服务的VIP地址以及VIP绑定的dev
–remote-address=<host:port>
设定在HA环境下,设置其他节点的管理接口IP和管理端口
–proxy-server-id=<number>
设置oneproxy的ID
性能抓取
–proxy-trans-debug
开启是否事务调试功能,帮助架构师、DBA分析在业务运行时的各个表之间所关联的query和trx的关系
–proxy-log-sqlerror
开启记录sql error
–proxy-sql-debug
开启sql debug功能