您的位置:首页 > 数据库 > MySQL

Mysql主从复制及读写分离的实现

2013-12-08 14:02 676 查看
Mysql 5.6 基于GTID的主从复制及使用Amoeba配置读写分离
一、简介二、Mysql主从配置三、读写分离配置一、Amoeba简介Amoeba(变形虫)项目,该开源框架于2008年开始发布一款 Amoeba for Mysql软件。这个软件致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的 时候充当SQL路由功能,专注于分布式数据库代理层(Database Proxy)开发。座落与 Client、DB Server(s)之间,对客户端透明。具有负载均衡、高可用性、SQL 过滤、读写分离、可路由相关的到目标数据库、可并发请求多台数据库合并结果。 通过Amoeba你能够完成多数据源的高可用、负载均衡、数据切片的功能,目前Amoeba已在很多企业的生产线上面使用Amoeba优缺点优点:1、降低 数据切分带来的复杂多数据库结构2、提高系统整体可用性3、提供切分规则并降低 数据切分规则 给应用带来的影响4、降低db 与客户端的连接数5、可以直接实现读写分离及负载均衡效果,而不用修改代码缺点:
1、不支持事务与存储过程
2、暂不支持分库分表,amoeba目前只做到分数据库实例3、不适合从amoeba导数据的场景或者对大数据量查询的query并不合适(比如一次请求返回10w以上甚至更多数据的场合)目前要实现mysql的主从读写分离,主要有以下几种方案:1.通过mysql-proxy来实现,由于mysql-proxy的主从读写分离是通过lua脚本来实现,目前lua的脚本的开发跟不上节奏,而写没有完美现成脚本,因此导致用于生产环境的话风险比较大,据网上很多人说mysql-proxy的性能不高。2.利用阿里巴巴的开源项目Amoeba来实现,具有负载均衡、高可用性、sql过滤、读写分离、可路由相关的query到目标数据库,并且安装配置非常简单。Mysql GTID
Mysql 5.6的新特性之一,加入了全局事务性ID(GTID:Global Transactions Identifier)来强化数据库的主备一致性,故障恢复,以及容错能力;也使得复制功能的配置、监控及管理变得更加易于实现,且更加健壮二、Mysql主从配置1、环境介绍:两台Mysql数据库实现主从配置,172.16.14.2主机为Master;172.16.14.3为Slave结构图

2、在Master服务器上安装并配置Mysql
3、在Slave服务器上安装Mysql与在Master服务器上安装方法相同,这里不在介绍,而在Slave服务器上安装Mysql有两个参数与Master服务器不同;如下
4、在Master服务器上为Slave创建复制用户并测试连接
5、启动从节点的复制线程
6、在Master服务器创建数据库查看Slave服务器是否更新
至此Mysql 5.6 基于GTID的复制已经完成,下面将介绍如何基于Mysql的主从复制架构做读写分离三、读写分离配置1、基于前面做的Mysql主从架构,然后在前端加一台服务器,用于实现Mysql的读写分离,IP地址为:172.16.14.1;由于Amoeba是java程序所研发,所以需要先安装JDK程序
2、安装JDK
3、安装Amoeba
3.5 Amoeba总共有7个配置文件,分别如下:配置文件位于conf目录下,执行文件位于bin目录下,解压后发现bin目录下的启动文件没有可执行权限,请执行:chmod -R +x /usr/local/amoeba/bin/Amoeba主配置文件($AMOEBA_HOME/conf/amoeba.xml),用来配置Amoeba服务的基本参数,如Amoeba主机地址、端口、认证方式、用于连接的用户名、密码、线程数、超时时间、其他配置文件的位置等。数据库服务器配置文件($AMOEBA_HOME/conf/dbServers.xml),用来存储和配置Amoeba所代理的数据库服务器的信息,如:主机IP、端口、用户名、密码等。切分规则配置文件($AMOEBA_HOME/conf/rule.xml),用来配置切分规则。数据库函数配置文件($AMOEBA_HOME/conf/functionMap.xml),用来配置数据库函数的处理方法,Amoeba将使用该配置文件中的方法解析数据库函数。切分规则函数配置文件($AMOEBA_HOME/conf/ruleFunctionMap.xml),用来配置切分规则中使用的用户自定义函数的处理方法。访问规则配置文件($AMOEBA_HOME/conf/access_list.conf),用来授权或禁止某些服务器IP访问Amoeba。日志规格配置文件($AMOEBA_HOME/conf/log4j.xml),用来配置Amoeba输出日志的级别和方式。
4、授权Mysql用户,用于实现前端Amoeba连接,由于上面授权的主从复制帐号不能同步"mysql"数据库,所以用户名也无法同步,要在两台数据库上同时授权,用户名密码保持一致
5、配置Amoeba
6.修改log4j.xml 取消日志文件生成(太大了,磁盘很容易满)<paramname="file"value="${amoeba.home}/logs/project.log"/>
改成
<paramname="file" value="<![CDATA[${amoeba.home}/logs/project.log>/dev/null]]>"/>
7:性能优化,打开bin/amoebaDEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss128k"
改成
DEFAULT_OPTS="-server -Xms512m -Xmx512m -Xmn100m -Xss1204k"8、启动amoeba服务并连接测试
[root@amoeba ~]
# amoeba start &

或者
nohup /usr/local/amoeba/bin/amoeba start 2>&1 >/dev/null &


9、连接到amoeba代理服务器,执行插入与查询操作,分别在后端两台服务器上抓包,查看是否实现读写分离


由上图可见,抓包的结果实现了读写分离的效果到此,Mysql基于GTID的主从复制及Mysql的读写分离已完成。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: