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

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地址操作系统主要软件网络连接模式
master192.168.100.71CentOS 7.4 x86_64mysql-5.5.24.tar.gzNAT
slave01T192.168.100.72CentOS 7.4 x86_64mysql-5.5.24.tar.gzNAT
slave02192.168.100.73CentOS 7.4 x86_64mysql-5.5.24.tar.gzNAT
amoeba192.168.100.74CentOS 7.4 x86_64jdk-6u14-linux-x64.bin、amoeba-mysql-binary-2.2.0.tar.gzNAT
client192.168.100.75CentOS 7.4 x86_64mysql-5.5.24.tar.gzNAT

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

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读写分离
[root@slave01 ~]# mysql -uroot -p -e 'select 
from db_test.student'
超详细搭建Mysql5.5读写分离
[root@slave02 ~]# mysql -uroot -p -e 'select * from db_test.student'
超详细搭建Mysql5.5读写分离

最后传播一个好消息,云计算已白菜价,云服务器低至不到300元/年。这里有一份云计算优惠活动列表,来不及解释了,赶紧上车!


转自http://blog.51cto.com/11905606/2171394

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL读写分离是指将MySQL的读操作和写操作分别分配到不同的MySQL服务器上进行处理,从而提高数据处理性能。下面是搭建MySQL读写分离的步骤: 1. 准备两台MySQL服务器,一台作为主服务器(写操作),另一台作为从服务器(读操作)。 2. 在主服务器上创建一个新用户并授予读写权限,例如: ``` CREATE USER 'replication'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replication'@'%'; ``` 3. 在主服务器上开启二进制日志,并设置唯一的服务器ID: ``` server-id=1 log-bin=mysql-bin ``` 4. 在从服务器上创建一个新用户并授予只读权限,例如: ``` CREATE USER 'readonly'@'%' IDENTIFIED BY 'password'; GRANT SELECT ON *.* TO 'readonly'@'%'; ``` 5. 在从服务器上设置唯一的服务器ID: ``` server-id=2 ``` 6. 在从服务器上编辑my.cnf文件,添加以下内容: ``` relay-log=slave-relay-bin log-slave-updates=1 read-only=1 ``` 7. 在主服务器上查看二进制日志文件名和位置: ``` SHOW MASTER STATUS; ``` 8. 在从服务器上连接到主服务器并设置复制: ``` CHANGE MASTER TO MASTER_HOST='master_ip_address', MASTER_USER='replication', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.XXX', MASTER_LOG_POS=XXX; ``` 其中,MASTER_HOST为主服务器IP地址,MASTER_USER和MASTER_PASSWORD为步骤2中创建的用户和密码,MASTER_LOG_FILE和MASTER_LOG_POS为步骤7中查看的二进制日志文件名和位置。 9. 开启从服务器的复制进程: ``` START SLAVE; ``` 10. 测试读写分离是否生效,例如在主服务器上执行写操作,然后在从服务器上执行读操作,应该能够看到最新的数据。 以上就是MySQL读写分离搭建步骤,需要注意的是,读写分离只能提高读操作的性能,写操作的性能不会有所改善。同时,读写分离也可能会带来数据不一致的问题,需要进行适当的配置和管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值