超详细搭建Mysql5.5读写分离

栏目: 数据库 · Mysql · 发布时间: 7年前

内容简介:Amoeba(变形虫)项目,该开源框架于2008年 开始发布一款 Amoeba for Mysql软件。这个软件致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的 时候充当SQL路由功能,专注于分布式数据库代理层(Database Proxy)开发。座落与 Client、DB Server(s)之间,对客户端透明。具有负载均衡、高可用性、SQL 过滤、读写分离、可路由相关的到目标数据库、可并发请求多台数据库合并结果。 通过Amoeba你能够完成多数据源的高可用、负载均衡、数据切片的功

Amoeba简介

Amoeba(变形虫)项目,该开源框架于2008年 开始发布一款 Amoeba for Mysql软件。这个软件致力于 MySQL 的分布式数据库前端代理层,它主要在应用层访问MySQL的 时候充当 SQL 路由功能,专注于分布式数据库代理层(Database Proxy)开发。座落与 Client、DB Server(s)之间,对客户端透明。具有负载均衡、高可用性、SQL 过滤、读写分离、可路由相关的到目标数据库、可并发请求多台数据库合并结果。 通过Amoeba你能够完成多数据源的高可用、负载均衡、数据切片的功能,目前Amoeba已在很多 企业的生产线上面使用。

Amoeba优势

Amoeba主要解决以下问题:

数据切分后复杂数据源整合

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

降低数据库与客户端连接

读写分离路由

Amoeba不足

目前还不支持事务

暂时不支持存储过程

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

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

工作原理

超详细搭建Mysql5.5读写分离 服务器端责主从复制,两台负责读、一台负责写,写的操作交给了主服务器,同时同步从服务器。客户端负责读写分离,应用客户端发送SQL的请求(包含了读写)发给代理层Amoeba,Amoeba读写分流,分开了,最关键的是Amoeba,相当于路由,打开两道门,一个读,一个写。

搭建思路

  • 主从同步验证
  • 验证允许Amoeba访问数据库
  • 允许客户端访问Amoeba

读写分离实现方式

基于程序代码内部实现

在代码中根据select、insert进行路由分类(select、insert各写入对应的服务器),这类方法目前生产环境应用最广泛。优点是性能较好,因为在程序代码中实现,不需要增加额外的设备作为硬件开支

基于中间代理层实现

代理一般位于客户端和服务器端之间,代理服务器接到客户端请求后通过判断后转发到后端数据库

MySQL-Proxy

Amoeba

实验环境

主机名称 IP地址 操作系统 主要软件 网络连接模式
master 192.168.100.71 CentOS 7.4 x86_64 mysql-5.5.24.tar.gz NAT
slave01 T192.168.100.72 CentOS 7.4 x86_64 mysql-5.5.24.tar.gz NAT
slave02 192.168.100.73 CentOS 7.4 x86_64 mysql-5.5.24.tar.gz NAT
amoeba 192.168.100.74 CentOS 7.4 x86_64 jdk-6u14-linux-x64.bin、amoeba-mysql-binary-2.2.0.tar.gz NAT
client 192.168.100.75 CentOS 7.4 x86_64 mysql-5.5.24.tar.gz NAT

注意:读写分离是建立在主从同步之上,详细主从同步搭建可以查看我的博文,两篇文章是连在一起,可以供大家参考

http://blog.51cto.com/11905606/2170903

搭建步骤

一、安装部署Amoeba

1、安装 Java 环境

[root@amoeba ~]# chmod +x jdk-6u14-linux-x64.bin #赋予执行权限

[root@amoeba ~]# ./jdk-6u14-linux-x64.bin #执行jdk,一路回车,输入yes

[root@amoeba ~]# mv jdk1.6.0_14/ /usr/local/jdk #将解压缩包剪切到其他位置

[root@amoeba ~]# vim /etc/profile #配置系统环境变量

末行添加:
export JAVA_HOME=/usr/local/jdk
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 ~]# source /etc/profile #重新读取系统环境变量配置文件

[root@amoeba ~]# java -version

超详细搭建Mysql5.5读写分离

2、安装并配置Amoeba软件

[root@amoeba ~]# mkdir /usr/local/amoeba #创建amoeba安装目录

[root@amoeba ~]# tar -zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/ #解压amoeba软件

[root@amoeba ~]# chmod 755 /usr/local/amoeba/ -R #递归修改权限

[root@amoeba ~]# /usr/local/amoeba/bin/amoeba #查看amoeba安装状态

超详细搭建Mysql5.5读写分离

二、部署读写分离

1、主、从三台服务器授权Amoeba访问权限

mysql> grant all on *.* to 'admin'@'192.168.100.%' identified by '123';

mysql> flush privileges;

2、编辑Amoeba主配置文件

[root@amoeba ~]# cd /usr/local/amoeba/conf/

[root@amoeba conf]# vim amoeba.xml

认证器元素标签,客户端通过认证器设置的账号密码,进行认证,连接amoeba
 <property name="authenticator"> #约27行左右
 <property name="user">amoeba</property>  #约30行左右,设置客户端连接amoeba的账户
 <property name="password">123</property> #32行左右,设置客户端连接amoeba的密码

设置mysql群集
 <property name="defaultPool">master</property> #约115行,编辑,设置默认地址池
 <property name="writePool">master</property>   #约118行,关闭注释,写池子
 <property name="readPool">slaves</property>    #约119行,关闭注释,读池子
 注意这里定义的池子还要在dbServer.xml数据库配置文件中再次引用定义

3、编辑Amoeba数据库配置文件

[root@amoeba conf]# vim dbServers.xml

添加连接数据库配置
<dbServer name="abstractServer" abstractive="true"> #约13行,找到此标签
<property name="user">admin</property> #约26行,编辑连接数据库账户
<property name="password">123</property> #约29行左右,打开注释,编辑连接数据库账户密码

 添加三台数据库服务器
<dbServer name="master"  parent="abstractServer"> #45行左右,指定master服务器        
          <factoryConfig>
             <property name="ipAddress">192.168.100.71</property> #指定主服务器IP地址
        </factoryConfig>
 </dbServer>

 <dbServer name="slave1"  parent="abstractServer"> #45行左右,编辑指定slave01服务器
        <factoryConfig>
             <property name="ipAddress">192.168.100.72</property> #指定01从服务器IP地址
        </factoryConfig>
 </dbServer>

 <dbServer name="slave2"  parent="abstractServer"> #添加slave02服务器
        <factoryConfig>
             <property name="ipAddress">192.168.100.73</property> #指定从02服务器IP地址
        </factoryConfig>
 </dbServer>

设置mysql群集
 <dbServer name="slaves" virtual="true"> #约65行,找到群集标签,设置群集名称slaves
    <property name="loadbalance">1</property> #负载均衡策略。"1"代表轮询;"2"代表加权轮询;"3"代表高可用
    <property name="poolNames">slave1,slave2</property> #定义集群池成员
 ……

4、启动Amoeba

[root@amoeba ~]# /usr/local/amoeba/bin/amoeba start &

超详细搭建Mysql5.5读写分离

三、测试读写分离

1、Client端连接Amoeba

[root@client ~]# mysql -uamoeba -p123 -h192.168.100.74 -P 8066

超详细搭建Mysql5.5读写分离

2、在Master上创建一个表,同步到各从服务器上以及关闭各从服务器的Slave功能

[root@master ~]# mysql -uroot -p123 #登陆master服务器

mysql> use db_test;

mysql> create table student(id int(10),name varchar(10),address varchar(20))ENGINE=InnoDB DEFAULT CHARSET=utf8;

[root@slave01 ~]# mysql -uroot -p #登陆slave01服务器

mysql> use db_test;

mysql> show tables;

超详细搭建Mysql5.5读写分离

mysql> stop slave;#清除slave,停止主从同步

mysql> show slave status\G;

超详细搭建Mysql5.5读写分离

[root@slave02 ~]# mysql -uroot -p #登陆slave02服务器

mysql> use db_test;

mysql> show tables;

超详细搭建Mysql5.5读写分离

mysql> stop slave;#清除slave,停止主从同步

mysql> show slave status\G;

超详细搭建Mysql5.5读写分离

3、三台服务器分别插入测试数据

mysql> use db_test;

mysql> insert into student values('1',' userAAAAA ','this is master');# master服务器添加数据

mysql> use db_test;

mysql> insert into student values('2',' userBBBBB ','this is slave_1');# slave01服务器添加数据

mysql> use db_test;

mysql> insert into student values('3',' userCCCCC ','this is slave_2');# slave02服务器添加数据

4、Client查询相应数据

[root@client ~]# mysql -uamoeba -p123 -h192.168.100.74 -P 8066 #连接Amoeba

超详细搭建Mysql5.5读写分离

5、Client执行插入操作

mysql> insert into db_test.student values('4','userDDDDD','write test');

[root@master ~]# mysql -uroot -p -e 'select

from db_test.student'

超详细搭建Mysql5.5读写分离
from db_test.student'
超详细搭建Mysql5.5读写分离

[root@slave02 ~]# mysql -uroot -p -e 'select * from db_test.student'

超详细搭建Mysql5.5读写分离

以上所述就是小编给大家介绍的《超详细搭建Mysql5.5读写分离》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Web Development Recipes

Web Development Recipes

Brian P. Hogan、Chris Warren、Mike Weber、Chris Johnson、Aaron Godin / Pragmatic Bookshelf / 2012-1-22 / USD 35.00

You'll see a full spectrum of cutting-edge web development techniques, from UI and eye candy recipes to solutions for data analysis, testing, and web hosting. Make buttons and content stand out with s......一起来看看 《Web Development Recipes》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

随机密码生成器
随机密码生成器

多种字符组合密码

SHA 加密
SHA 加密

SHA 加密工具