内容简介: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目前只做到分数据库实例,每个被切分的节点需要保持库表结构一致:
工作原理
服务器端责主从复制,两台负责读、一台负责写,写的操作交给了主服务器,同时同步从服务器。客户端负责读写分离,应用客户端发送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
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安装状态
二、部署读写分离
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 &
三、测试读写分离
1、Client端连接Amoeba
[root@client ~]# mysql -uamoeba -p123 -h192.168.100.74 -P 8066
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;
mysql> stop slave;#清除slave,停止主从同步
mysql> show slave status\G;
[root@slave02 ~]# mysql -uroot -p #登陆slave02服务器
mysql> use db_test;
mysql> show tables;
mysql> stop slave;#清除slave,停止主从同步
mysql> show slave status\G;
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
5、Client执行插入操作
mysql> insert into db_test.student values('4','userDDDDD','write test');
from db_test.student'
from db_test.student'
[root@slave02 ~]# mysql -uroot -p -e 'select * from db_test.student'
以上所述就是小编给大家介绍的《超详细搭建Mysql5.5读写分离》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 提高性能,MySQL 读写分离环境搭建(二)
- 想用数据库“读写分离” 请先明白“读写分离”解决什么问题
- Java 读写锁浅析
- Golang文件读写
- ReentrantReadWriteLock 读写锁解析
- 用Python读写文件
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
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》 这本书的介绍吧!