暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

OneProxy for Mysql

超凡技术栈 2017-12-23
650

点击蓝字关注这个神奇的公众号~


OneProxy部署MySQL数据库的读写分离

一、简介     

   OneProxy平民软件完全自主开发的分布式数据访问层,帮助用户在MySQL/PostgreSQL集群上快速搭建支持分库分表的分布式数据库中间件,也是一款具有SQL白名单(防SQL注入)及IP白名单功能的SQL防火墙软件。采用与MySQL Proxy一致的反向协议输出模式,对应用非常简单和透明易用,让用户畏惧的数据库故障切换(Failover)、读写分离(Read/Write Split)、分库分表(Horizontal Partitioning)等复杂方案变得极其简单可控!基于Libevent机制实现,单个实例可以实现25万的SQL转发能力,用一个OneProxy节点可以带动整个MySQL集群,为业务发展贡献一份力量。

OneProxy功能:

透明连接池、自动故障切换、透明读写分离、水平分库分表、结果集合并、并行查询支持、安全控制和SQL审计、SQL防火墙、性能统计信息、高可用机制、分布式Sequence、SQL关联度分析、敏感数据识别、事务监控、大数据分析、MyCAT分片兼容、多种集群策略、支持图形客户端

超高性能

OneProxy for MySQL使用C&C++语言开发,充分发挥高性能的异步网络事件编程框架(libevent)优势,历经168小时的高压内存泄漏测试,做到零内存泄露,并使用jemalloc来优化内存分配,单个OneProxy实例可支持高达40W的QPS/TPS。

OneProxy for MySQL内置高效的SQL分析器,解析一条SQL的平均时间为100微秒,基本做到无时延的请求转发,无须担心代理层的性能和时延消耗;固定可调节的工作进程的模式,可以在任何机器上发挥优异的性能, 充分利用CPU和万兆网络资源,实现100万QPS转发。

如图所示,在256个并发的情况下,和直连MySQL有同等的QPS能力,达到无损转发。使用透明连接池的功能,具备MySQL企业版连接池效果,提升后端数据库的处理能力,让应用无限扩容,无须担心后端MySQL连接数。

透明集群

OneProxy for MySQL可在协议层实现对应用透明的读写分离路由,实现读操作的无限扩展,并可实时监控主备之间的复制时延,并与MHA PXC MGR等多种高可用集群技术配合,实现实现应用对后端无感知的高可用。

OneProxy for MySQL可以透明分析SQL语句,根据Where条件中的值在协议层实现分库分表路由,实现写操作的灵活扩展,并实时监控后端数据库的运行状态,根据既定的集群策略进行故障切换,应用无须知道后端运行状态和节点规模。

OneProxy for MySQL支持跨分片的多结果集合操作,例如排序、汇总、分页等等,可让应用无须知道后端节点的规模数,实现对应用透明的扩容和缩容,搭建对应用透明的数据库集群。

安全审计

OneProxy for MySQL可以对不安全的登录和访问请求进实时拦截,可以根据SQL请求的类型进行灵活处理,比如禁止DDL语句、不允许数据删除命令等; 可以根据请求的IP地址进行拦截,对登录者身份进行额外的身份验证(基于不可逆的算法)。

OneProxy for MySQL完全接管应用的登录验证工作,可以实现前后端的密码分离,应用只配置登录OneProxy的密码,而真正登录数据库的密码只需配置在OneProxy上,以防止黑客从应用机器上获取密码。

OneProxy for MySQL可对每一个SQL请求进行实时检查和拦截,可以动态配置黑白SQL名单进行SQL特征检查,以杜绝SQL注入式攻击。通过丰富的实时访问统计数据,以及记录所有的SQL错误操作,可以快速发现试探性的黑客行为。

流量分析

OneProxy for MySQL可实时分析SQL和结果集的流量,与数据库后端的性能视图相比,OneProxy知道SQL语句的来源IP地址、会话及事务上下文,有更多的维度可展示数据,具有更强的结果呈现能力。

根据IP维度的统计,可以快速了解不同应用的数据库交互情况,包括应用访问具体表的情况、SQL执行信息、事务的性能数据,也可了解不同应用使用数据库的交集,实现数据架构的快速优化。

根据事务维度的统计,可以快速了解不同事务和数据库交互情况,包括事务的执行频率、总体执行时间、纯SQL的执行时间、DML操作所占的时间,高效进行性能优化,并可轻松分析事务之间的关联,推动业务数据模型的优化。

稳定可靠

OneProxy for MySQL历经168小时(数百亿次SQL)高压测试,并且对公众用户开放Binary进行试用,数百个用户使用同一个OneProxy版本进行丰富的业务场景验证,造就了OneProxy稳定可靠的品质。

OneProxy for MySQL内置高可用机制,即有实现进程级的重起机制,也有跨机器之间的HA/VIP机制(可实现三节点,用类Paxos机制实现多点选主),也可与Haproxy LVS Zookeeper配合实现多活架构,以确保OneProxy的高可用。

OneProxy for MySQL可与多种高可用架构(如MHA、 Percoan XTraDB Cluster、 MySQL Group Replication等)进行协同工作,实现故障的快速发现、隔离或切换,确保业务层稳定可靠。

一、实验环境

二、实验步骤

部署前准备工作

1、编辑/etc/hosts文件

#vi etc/hosts

2、关闭selinux

#vi etc/selinux/config

3、关闭防火墙

#systemctl    stop   firewalld

#systemctl    disable firewalld

二、安装MySQL,并构建主从

#rpm  -e  mariadb-libs   --nodeps

#tar zxf  mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz  -C /usr/local/

#cd  /usr/local/

#mv  mysql-5.7.18-linux-glibc2.5-x86_64   mysql

#groupadd  mysql

# useradd  -r  -g   mysql  -s  /bin/false  mysql

#vim  /etc/my.cnf

#mkdir  /usr/local/mysql/data

# chown  -R  mysql:mysql  /usr/local/mysql/

# chmod  755   /usr/local/mysql/data/

# /usr/local/mysql/bin/mysqld  --initialize

#cp /usr/local/mysql/support-files/mysql.server  /etc/init.d/mysqld

#echo "export  PATH=$PATH:/usr/local/mysql/bin"  >> /etc/profile

# source  /etc/profile

#cat /usr/local/mysql/data/mysql.err  | grep password  | awk -F localhost:  ‘{print $2}’ gn1:E%cjP3x9

#chown -R mysql:mysql   /usr/local/mysql/

#service   mysqld  start

#mysql  -u  root  -p’gn1:E%cjP3x9’

mysql>alter   user  root@localhost  identified  by ‘123456’;

#mysql  -u   root  -p123456

搭建主从同步

master1执行:

1、编辑主配置文件

#vi    /etc/my.cnf

#service mysqld  restart    重启服务

2、授权账户

3、查看master状态

slave1,slave2执行:


#service mysqld  restart   重启服务


启动slave,并查看状态


在master1上执行:

在slave1,slave2上执行:


由上述结果看主从同步没问题,下面配置读写分离。

在oneproxy主机执行:

安装OneProxy中间件

http://www.onexsoft.com/zh/oneproxy-read-traffic-scaleout.html  官方文档读写分离

1、安装OneProxy

#tar  zxf   oneproxy-rhel5-linux64-v6.1.0-ga.tar.gz

#mv  oneproxy  /usr/local/oneproxy

#cd   /usr/local/oneproxy

#cp /usr/local/oneproxy/oneproxy.service /etc/init.d/oneproxy

2、修改服务文件

#vi  /etc/init.d/oneproxy

ONEPROXY_HOME=/date/oneproxy          默认

修改为:oneproxy的安装目录

ONEPROXY_HOME=/usr/local/oneproxy

3、编辑启动demo.sh文件

#vi demo.sh

export ONEPROXY_HOME=/date/oneproxy   默认

修改为:oneproxy安装目录

#chmod +x /etc/init.d/oneproxy   给执行权限

#chmod +x demo.sh给执行权限

#chkconfig --add oneproxy   添加为系统服务

#chkconfig  oneproxy  on 开机自启动

4、进入oneproxy中的bin目录,使用mysqlpwd对密码进行加密

5、修改主配置文件

#vi   /usr/local/oneproxy/conf/proxy.conf

[oneproxy]

#proxy-license              = A2FF461456A67F28,D2F6A5AD70C9042D

keepalive                  = 1 //自动检查和重起OneProxy服务

event-threads              = 4

proxy-httpserver           = :8080//登录web界面的地址及端口(不写即为本机地址)

proxy-adress               = :3307//Proxy Server第一个监听地址以及端口

mysql-version              = 5.7.18//mysql 的版本

proxy-auto-readonly        = 1//自动调整节点类型,简化主从切换!

proxy-forward-clientip     = 1

proxy-trans-debug          = 1

其中@后面是“Server Group”的名字,如果不指定,则默认为“default”

proxy-master-addresses.1   = 192.168.126.128:3306@servermaster节点(可写入)

proxy-slave-addresses.2    = 192.168.126.129:3306@serverslave1节点(可读取)

proxy-slave-addresses.3    = 192.168.126.130:3306@server   slave2节点(可读取)

# proxy-slave-addresses.3  = ...

proxy-group-policy         = server:read_slave

proxy组列表,中间密钥是执行./mysqlpwd 123 生成的密钥

proxy-user-list            = test/956C97523BADD23B6091B09E332A77B5CBDBBEEF@server

admin-address.1            = 192.168.126.131:4041//proxy管理地址及端口

log-file                   = log/oneproxy.log

pid-file                   = log/oneproxy.pid

lck-file                   = log/oneproxy.lck

proxy-part-template      = conf/template.txt

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

proxy-part-tables.2      = conf/part2.txt

proxy-part-tables.3      = conf/cust1.txt

proxy-charset            = utf8_bin//支持的字符集

proxy-secure-client = 127.0.0.1

proxy-httptitle = OneProxy Monitor//web界面的密码OneProxy

在master1执行

授权用户

在oneproxy执行:

启动oneproxy服务

#./demo.sh

#service   oneproxy start

查看端口

登陆oneproxy web界面

用户名:admin

密码:OneProxy

http://192.168.126.131:8080

交互界面查看状态

负载均衡

读写分离

此时master是126.129

停掉master1;

再次查看 可见还能插入数据;

此时master1已宕掉,master还是由slave1:192.168.126.129担任

停掉slave1:192.168.126.129

此时已经切换到master1:192.168.126.128做master

总结:

由此可见OneProxy相当厉害,无论哪一个宕掉都可以进行自动切换,都可以作为主以及从服务器,起到了负载均衡及读写分离。增加了用户的体验。减少了运维工作,不用担心宕机而至于用户不能写入。同时减轻了主服务器压力。



文章转载自超凡技术栈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论