MYSQL集群介绍

mysql-proxy

MySQLProxy是一个处于你的client端和MySQLserver端之间的简单程序,它可以监测、分析或改变它们的通信。它使用灵活,没有限制,常见的用途包括:负载平衡,故障、查询分析,查询过滤和修改等等。[1]

MySQLProxy就是这么一个中间层代理,简单的说,MySQLProxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用来说,MySQLProxy是完全透明的,应用则只需要连接到MySQLProxy的监听端口即可。当然,这样proxy机器可能成为单点失效,但完全可以使用多个proxy机器做为冗余,在应用服务器的连接池配置中配置到多个proxy的连接参数即可。

MySQLProxy更强大的一项功能是实现“读写分离”,基本原理是让主数据库处理事务性查询,让从库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从库。  

附mysql-proxy的所有语法命令:

$mysql-proxy--help-all

Usage:

mysql-proxy[OPTION...]-MySQLProxy

HelpOptions:

-?,--helpShowhelpoptions

--help-allShowallhelpoptions

--help-adminShowoptionsfortheadmin-module

--help-proxyShowoptionsfortheproxy-module

adminmodule

--admin-address=<host:port>listeningaddress:portofinternaladmin-server(default::4041)

proxy-module

--proxy-address=<host:port>listeningaddress:portoftheproxy-server(default::4040)

--proxy-read-only-backend-addresses=<host:port>address:portoftheremoteslave-server(default:notset)

--proxy-backend-addresses=<host:port>address:portoftheremotebackend-servers(default:127.0.0.1:3306)

--proxy-skip-profilingdisablesprofilingofqueries(default:enabled)

--proxy-fix-bug-25371fixbug#25371(mysqld>5.1.12)forolderlibmysqlversions

--proxy-lua-script=<file>filenameoftheluascript(default:notset)

--no-proxyDon'tstartproxy-server

ApplicationOptions:

-V,--versionShowversion

--daemonStartindaemon-mode

--pid-file=<file>PIDfileincasewearestartedasdaemon

amoeba

概述

Amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy。它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库上执行。基于此可以实现负载均衡、读写分离、高可用性等需求。与MySQL官方的MySQLProxy相比,作者强调的是amoeba配置的方便(基于XML的配置文件,用SQLJEP语法书写规则,比基于lua脚本的MySQLProxy简单)。

Amoeba相当于一个SQL请求的路由器,目的是为负载均衡、读写分离、高可用性提供机制,而不是完全实现它们。用户需要结合使用MySQL的Replication等机制来实现副本同步等功能。amoeba对底层数据库连接管理和路由实现也采用了可插拨的机制,第三方可以开发更高级的策略类来替代作者的实现。这个程序总体上比较符合KISS的思想。

优势

Amoeba主要解决以下问题:

a).数据切分后复杂数据源整合

b).提供数据切分规则并降低数据切分规则给数据库带来的影响

c).降低数据库与客户端连接

d).读写分离路由

f).支持分库,分表,事务

不足

a)、目前还不支持事务b)、暂时不支持存储过程(近期会支持)

c)、不适合从amoeba导数据的场景或者对大数据量查询的query并不合适(比如一次请求返回10w以上甚至更多数据的场合)

d)、暂时不支持分库分表,amoeba目前只做到分数据库实例,每个被切分的节点需要保持库表结构一致:

Amoeba:阿米巴原虫

haproxy

简介

HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。

HAProxy实现了一种事件驱动,单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space)实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以使每个CPU时间片(Cycle)做更多的工作。[1]

安装

tarzxvfhaproxy-1.4.8.tar.gz

cdhaproxy-1.4.8

uname-a//查看linux内核版本

makeTARGET=linux26PREFIX=/usr/local/haproxy

makeinstallPREFIX=/usr/local/haproxy

配置

配置HAProxySession亲缘性的三种方式

haproxy负载均衡保持客户端和服务器Session亲缘性的三种方式:

1用户IP识别

haroxy将用户IP经过hash计算后指定到固定的真实服务器上(类似于nginx的IPhash指令)

配置指令balancesource

2cookie识别

haproxy将WEB服务端发送给客户端的cookie中插入(或添加加前缀)haproxy定义的后端的服务器COOKIEID。

配置指令例举cookieSESSION_COOKIEinsertindirectnocache

用firebug可以观察到用户的请求头的cookie里有类似"Cookiejsessionid=0bc588656ca05ecf7588c65f9be214f5;SESSION_COOKIE=app1"SESSION_COOKIE=app1就是haproxy添加的内容

3session识别

haproxy将后端服务器产生的session和后端服务器标识存在haproxy中的一张表里。客户端请求时先查询这张表。

配置指令例举appsessionJSESSIONIDlen64timeout5hrequest-learn

配置举例:

#vi/usr/local/haproxy/haproxy.cfg

backendCOOKIE_srv

modehttp

cookieSESSION_COOKIEinsertindirectnocache

serverREALsrv_70184.82.239.70:80cookie11checkinter1500rise3fall3weight1

serverREALsrv_120220.162.237.120:80cookie12checkinter1500rise3fall3weight1

backendSOURCE_srv

modehttp

balancesource

serverREALsrv_70184.82.239.70:80cookie11checkinter1500rise3fall3weight1

serverREALsrv_120220.162.237.120:80cookie12checkinter1500rise3fall3weight1

backendAPPSESSION_srv

modehttp

appsessionJSESSIONIDlen64timeout5hrequest-learn

serverREALsrv_70184.82.239.70:80cookie11checkinter1500rise3fall3weight1

serverREALsrv_120220.162.237.120:80cookie12checkinter1500rise3fall3weight1[2]

启动

#启动haproxy

/usr/local/haproxy/haproxy-f/usr/local/haproxy/haproxy.cfg

#查看是否启动

[zhangy@BlackGhosthaproxy]$ps-e|grephaproxy

4859?00:00:00haproxy

4860?00:00:00haproxy

测试

[root@BlackGhosthaproxy]#/usr/local/bin/webbench-c100-t30http://localhost:1080/phpinfo.php

说明

HAProxy监听的端口是1080,代理192.168.18.2:10000,127.0.0.1:10000

统计监听的是8888端口http://localhost:8888/haproxy-stats

相关推荐