MySQL读写分离

MySQL读写分离原理
  • 只再主服务器上写,只在从服务器上读
  • 主数据库处理事务性查询,从数据库处理SELECT查询
  • 数据库复制用于将事务性查询的变更同步到集群中的从数据库
  • 读写分离方案
    基于程序代码内部实现
    基于中间代理层实现
    MySQL-Proxy
    Amoeba (功能:1、实现读写分离 2、隐藏数据库真实IP)
读写分离实现方式

常见的读写分离分为一下两种

  • 基于程序代码内部实现
    在代码中根据select、insert 进行路由分类,这类方法也是目前生产环境应用最广泛的
    优点是性能比较好,因为在程序代码中实现,不需要增加额外的设备为硬件开支;缺点是需要开发人员来实现,运维人员无从下手
    但是并不是所有的应用都适合在程序代码中实现读写分离,像一些大型负责的Java应用,如果在程序代码中实现读写分离对代码改动就比较大
  • 基于中间代理层实现
    代理一般位于客户端和服务器之间,代理服务器接到客户端请求后通过判断后转发到后端数据库,有以下代表性程序。
    (1)MySQI-Proxy。MySQI-Proxy 为MysQ开源项目,通过其自带的1ua脚本进行sor判断。
    (2) Atlas是由奇虎360的web平台部基础架构团队开发维护的一个基于MysQ协议的数据中间层项目。它是在mysql-proxy0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性。360内部使用Atlas运行的mysql业务,每天承载的读写请求数达几十亿条。支持事物以及存储过程。
    ( 3) Amoeba。由陈思儒开发,作者曾就职于阿里巴巴。该程序由Java语言进行开发,阿里巴巴将其用于生产环境。但是它不支持事务和存储过程。
  • Amoeba:是一个以Mysql为底层数据存储,并对应提供MySQI协议接口的proxy(代理),外号变形虫读取请求发送给从服务器是,采用轮询调度算法
    amoeba使用的java语言编写,配置文件为xmlamoeba主要负责对外的一个代理工
    访问这个IP时,发送的请求为"写"请求,则会转给主服务器
    当发送的请求为"读"时,会通过调度转发给从服务器,使用轮询算法,轮流分配给两台从服务器amoeba可以视为调度器,如果主服务器挂掉(单点故障),则会有MHA解决这个问题
搭建MySQL读写分离
  • 安装Java环境
    因为Amoeba基于是jdk1.5开发的,所以官方推荐使用jdk1.5或1.6版本,高版本不建议使用。
    将jdk-6u14-linux-x64.bin和 amoeba-mysql-binary-2.2.0.tar.gz.0 上传到/opt目录下
[root@amoeba opt]#cd /opt
[root@amoeba opt]#cp jdk-6u14-linux-x64.bin /usr/local/
[root@amoeba opt]#cd /usr/local
[root@amoeba local]#chmod +x jdk-6u14-linux-x64.bin
[root@amoeba local]#./jdk-6u14-linux-x64.bin      出现more ,按空格  然后yes 回车
[root@amoeba local]#mv jdk1.6.0_14/  jdk1.6
  • 添加环境变量
[root@amoeba local]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin
export AMOEBA_HOME=/usr/local/amoeba
export PATH=$PATH:$AMOEBA_HOME/bin

在这里插入图片描述

  • 加载、查看版本
[root@amoeba local]# source /etc/profile
[root@amoeba local]# java -version

在这里插入图片描述

  • 安装Amoeba软件
[root@amoeba local]# mkdir /usr/local/amoeba
[root@amoeba local]# cd /opt
[root@amoeba opt]# tar zxf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeb
[root@amoeba opt]# /usr/local/amoeba/bin/amoeba

已安装成功
在这里插入图片描述

  • 配置Amoeba读写分离,两个slave读负载均衡
    先在Master,Slave1,Slave2的myswl上开放权限给Amoeba访问
grant all on *.* to 'test'@'192.168.112.%' identified by '123.com';
flush privileges;
  • 再回到amoeba服务器配置amoeba服务
[root@amoeba opt]# cd /usr/local/amoeba/conf
  • 修改配置文件
[root@amoeba conf]# vim /usr/local/amoeba/conf/amoeba.xml

#以下配置的是第三个账户(客户端找amoeba的用户身份)
#30行修改账户名(这里是数据库访问amoeba服务器时使用的账号)
amoeba
#32行修改账户密码(这里是数据库访问amoeba服务器时使用账号时用的密码)123123
#115行修改默认池
<propertyname=“defaultPoo1”>master
#117行取消注释
//取消下面的注释符号–>,改到这里
#118-119修改"读池"和"写池"
118 <propertyname=“writePool”>master119 <propertyname=“readPool”>slaves
在这里插入图片描述

在这里插入图片描述

  • 修改数据库配置文件
[root@amoeba conf]# vim dbServers.xml
 #23行将text修改为mysql (5,6)
mysql schema:Mysql所有数据库信息(show databases)
<property name="schema" >mysql</property>
#26行,amoeba访问三台mysq1数据库的账户和密码(账户为test)
<property name="user">test</property>
#29行,修改访问数据库的密码
<property name="password">123.com</property>
#45行,修改数据库主服务器名/地址
<dbServer name="master" parent="abstractServer">#48行,修改master服务器ip
<property name="ipAddress">192.168.80.3</property>
#52行修改从服务器名
<dbServer name="server1"parent="abstractServer">
#55行修改从服务器地址
<property name="ipAddress">192.168.80.3</property>
#复制52-57行,粘贴,添加第二台服务器名
<dbServer name="slave2" parent="abstractServer">#修改第二台服务器IP
<property name="ipAddress">192.168.80.4</property>
#66行,修改多个服务器池(multiPoo1)的名称(修改为slaves)<dbServer name="slaves"virtual-"true">
#72行,添加两个从服务器的服务器名(slave1 slave2)<property
name="poolNames">slave1,slave2</property>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 启动
[root@amoeba conf]# /usr/local/amoeba/bin/amoeba start
  • 另开一个终端,查看是否开启成功
    在这里插入图片描述
    测试:打开一个client端
    下载mariadb 客户端
[root@client ~]# yum -y install mariadb

远程登录amoeba服务器

[root@client ~]# mysql -u amoeba -p123123 -h 192.168.112.140 -P 8066
  • 测试一
    amoeba服务器是否关联后端mysql
    客户端进入数据库创建表,在三台mysql服务器中查看是否由此表(amoeba关联)

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值