超详细搭建Mysql5.5读写分离
2018-09-06 21:14
706 查看
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目前只做到分数据库实例,每个被切分的节点需要保持库表结构一致:
工作原理
![](http://i2.51cto.com/images/blog/201809/06/3b403f9d79dee9abdc683f5779477a15.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
服务器端责主从复制,两台负责读、一台负责写,写的操作交给了主服务器,同时同步从服务器。客户端负责读写分离,应用客户端发送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
![](http://i2.51cto.com/images/blog/201809/06/cfcac3e179d2ee6f63fcf6a7317ce759.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
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安装状态
![](http://i2.51cto.com/images/blog/201809/06/28bccb2daa841a68b3d344b62e03191f.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
二、部署读写分离
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 &![](http://i2.51cto.com/images/blog/201809/06/1917927d34708c5cacfc11ffaf438227.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
三、测试读写分离
1、Client端连接Amoeba
[root@client ~]# mysql -uamoeba -p123 -h192.168.100.74 -P 8066![](http://i2.51cto.com/images/blog/201809/06/9d17591454876aa33052e652aca95091.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
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;
![](http://i2.51cto.com/images/blog/201809/06/5de6b8ba8f131eb4406e730f8e476a7b.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
mysql> stop slave;#清除slave,停止主从同步
mysql> show slave status\G;
![](http://i2.51cto.com/images/blog/201809/06/bbc73b44e344baaa8e785f79a6d7cf6d.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
[root@slave02 ~]# mysql -uroot -p #登陆slave02服务器
mysql> use db_test;
mysql> show tables;
![](http://i2.51cto.com/images/blog/201809/06/70cbe0a35c5b628419e3e63b2c02059e.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
mysql> stop slave;#清除slave,停止主从同步
mysql> show slave status\G;
![](http://i2.51cto.com/images/blog/201809/06/73af9dbbfa714913849b0564adc74a8c.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
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![](http://i2.51cto.com/images/blog/201809/06/0f932c8b2b34768475251ede72f35a92.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
5、Client执行插入操作
mysql> insert into db_test.student values('4','userDDDDD','write test');[root@master ~]# mysql -uroot -p -e 'select from db_test.student'
![](http://i2.51cto.com/images/blog/201809/06/03d2d4ad7462a8a586847308ae26e21d.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
[root@slave01 ~]# mysql -uroot -p -e 'select from db_test.student'
![](http://i2.51cto.com/images/blog/201809/06/c0a5036afbcbac0175f5892bf6e0413c.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
[root@slave02 ~]# mysql -uroot -p -e 'select * from db_test.student'
![](http://i2.51cto.com/images/blog/201809/06/fb34ee587df62e6a3b1e71d73078f6bd.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
相关文章推荐
- 超详细搭建Mysql5.5主从复制
- 数据切分——Atlas读写分离Mysql集群的搭建
- [3]PHP开发环境搭配之MySql5.5安装详细说明
- mysql同步复制搭建方法指南详细步骤
- Ubuntu 14.04 LAMP搭建(Apache 2.47+MySQL 5.5+PHP5.5)
- Ubuntu 14.04 LAMP搭建(Apache 2.47+MySQL 5.5+PHP5.5)
- centos 5.5 安装mysql 5.5 全程详细记录 RPM方式安装
- [置顶] 阿里云ECS服务器搭建Nginx+PHP+MySql+Redis环境详细步骤(CentOS7环境)
- Centos5.5搭建nginx + python + django +memcached+ mysql +fastcgi 环境
- MySQL读写分离介绍及搭建
- centos 5.5 安装mysql 5.5 全程详细记录 RPM方式安装
- Ubuntu10下MySQL搭建Amoeba_读写分离
- centos搭建Nginx+PHP+MySql+Redis环境详细步骤(CentOS7环境)
- MySQL5.5读写分离之mysql-proxy
- windows7下手工搭建Apache2.2 php5.3 Mysql5.5开发环境
- 数据切分——Atlas读写分离Mysql集群的搭建
- mysql 数据库集群搭建:(四)pacemaker管理三台maxscale集群,搭建mariadb读写分离中间层集群
- centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数据库读写分离 双主搭建 mysql.history 第二十九节课
- mysql同步复制搭建方法指南详细步骤
- 利用mycat实现基于mysql5.5主从复制的读写分离