Amoeba在Master/Slave结构下的读写分离测试

Amoeba在Master/Slave结构下的读写分离

MySQL主从复制原理图


MySQL使用3个线程来执行复制功能(其中1个在主服务器上,另两个在从服务器上。

当发出START SLAVE时,从服务器创建一个I/O线程,以连接主服务器并让它发送记录在其二进制日志中的语句。

主服务器创建一个线程将二进制日志中的内容发送到从服务器。该线程可以识别为主服务器上SHOW PROCESSLIST的输出中的Binlog Dump线程。

从服务器I/O线程读取主服务器Binlog Dump线程发送的内容并将该数据拷贝到从服务器数据目录中的本地文件中,即中继日志。第3个线程是SQL线程,是从服务器创建用于读取中继日志并执行日志中包含的更新。

有多个从服务器的主服务器创建为每个当前连接的从服务器创建

一个线程;每个从服务器有自己的I/O和SQL线程

配置MySQL主从复制

MASTER:

#启用Mysql-bin log (记录mysql内部增删改查等对MySQL数据库更新的操作,不记录select)

#vi /etc/my.cnf

server-id       = 1 #server id不能相同

log-bin=mysql-bin

#为从库创建同步账号

mysql> grant replication slave on *.* to ‘rep‘@‘172.16.1.%‘ identified by ‘mirror-0‘;

mysql> flush privileges;

#同步开启主从复制之前的数据(新创建且没有上线的数据库服务器忽略此步骤)

#mysqldump -uroot -pmirror-0 -A -B -x --master-data=1 --single-transaction --events >/opt/4.sql

#mysql -uroot -pmirror-0 -S /data/3307/mysql.sock < /opt/4.sql

 

SLAVE:

#检查server id

#vi /etc/my.cnf

server-id       = 1 #server id不能相同

#创建同步文件

mysql> CHANGE MASTER TO MASTER_HOST=‘172.16.1.8‘,MASTER_PORT=3306,MASTER_USER=‘rep‘,MASTER_PASSWORD=‘mirror-0‘;(MASTER_LOG_FILE=‘mysql-bin.000002‘,MASTER_LOG_POS=2495)#--master-data=2时需要添加后两句

mysql> strat slave;

#查看是否同步成功

mysql> show slave status\G;

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Amoba原理图

软件版本:

JAVA:jdk-6u45-linux-x64-rpm.bin

Amoeba:amoeba-mysql-binary-2.2.0.tar.gz

Amoeba框架是基于Java SE1.5开发的,建议使用Java SE 1.5版本

安装JAVA环境

#添加执行权限

# chmod +x jdk-6u45-linux-x64-rpm.bin

#安装JDK

#./jdk-6u45-linux-x64-rpm.bin

#方便起见,添加一个软链接

#ln -s /usr/java/jdk1.6.0_45/ /usr/java/jdk1.6

#添加环境变量

#vi /etc/profile

export JAVA_HOME=/usr/java/jdk1.6

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

#验证JAVA安装

# java -version

java version "1.6.0_45"

Java(TM) SE Runtime Environment (build 1.6.0_45-b06)

Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)

#在Master上为Amoeba创建用户(之前做了主从,且没有忽略mysql数据库)

mysql> grant all on *.* to [email protected]‘172.16.1.%‘ identified by ‘mirror-0‘;

mkdir /application/amoeba

mv amoeba-mysql-binary-2.2.0.tar.gz /application/amoeba/

#cd /application/amoeba/

#tar xf amoeba-mysql-binary-2.2.0.tar.gz

#编辑配置dbServers.xml

#vi /application/amoeba/conf/dbServers.xml

<dbServer name="abstractServer" abstractive="true">

#此处是一个抽象定义,可以通过其他定义来拓展

<!-- mysql port -->

<property name="port">3306</property>

<!-- mysql schema -->

<property name="schema">test</property>

<!-- mysql user -->

<property name="user">amoeba</property>

<property name="password">mirror-0</property>

#分别定义MySQL(真实的数据库服务器)的端口号、数据库名、用户名以及密码

<dbServer name="server1"  parent="abstractServer">

<factoryConfig>

<!-- mysql ip -->

<property name="ipAddress">172.16.1.8</property>

</factoryConfig>

</dbServer>

<dbServer name="server2"  parent="abstractServer">

<factoryConfig>

<!-- mysql ip -->

<property name="ipAddress">172.16.1.7</property>

</factoryConfig>

</dbServer>

#此处定义你的数据库IP(多说两句,此处的数据库是真实的数据库,即你做主从的数据库)

<dbServer name="master" virtual="true">

<poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">

<!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->

<property name="loadbalance">1</property>

<!-- Separated by commas,such as: server1,server2,server1 -->

<property name="poolNames">server1</property> #该数据库池包含的是server1

</poolConfig>

</dbServer>

#引用官方手册的描述:multiPool(我修改成了master)是一个虚拟的数据库节点,可以将这个节点配置成好几台数据库组成的数据库池。比如上面这个配置中仅配置了一台server1,负载均衡策略为ROUNDROBIN(轮询)。

<dbServer name="slave" virtual="true">

<poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">

<!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->

<property name="loadbalance">1</property>

<!-- Separated by commas,such as: server1,server2,server1 -->

<property name="poolNames">server2</property> #该数据库池包含的是server2,你也可以添加server3,server4.....

</poolConfig>

</dbServer>

#这一节是复制上面我自己定义的数据库池。

#vi /application/amoeba/conf/amoeba.xml

#amoeba.xml主要是配置MySQL对外访问的端口,服务地址以及读写规则,我这里主要列出需要修改的地方

<!-- port -->

<property name="port">3306</property> #为了简便使用修改为3306

<!-- bind ipAddress -->

<property name="ipAddress">172.16.1.4</property> #对外访问的地址,跟nginx proxy一样的理解就好了

<property name="user">root</property>

<property name="password">mirror-0</property>

<property name="defaultPool">master</property>

<property name="writePool">master</property>

<property name="readPool">slave</property>  #读写规则

#需要注意,有些参数是注释了的,请注意去掉注释

#/application/amoeba/bin/amoeba start #启动amoeba

#登录MySQL proxy

$ mysql -uroot -p -h 172.16.1.4

Server version: 5.1.45-mysql-amoeba-proxy-2.2.0 #看到此显示登录成功

测试读写分离

#在master上建表

mysql> create table student( id int(4) not null AUTO_INCREMENT, name char(20) not null, age tinyint(2) NOT NULL default ‘0‘, dept varchar(16) default NULL, primary key(id), KEY index_name (name) );

#在slave上停止主从同步并插入数据

mysql> stop slave;

mysql> insert into test.student(id,name) values(2,‘slave‘);

#确定插入数据

mysql> select * from test.student;

+----+-------+-----+------+

| id | name  | age | dept |

+----+-------+-----+------+

|  2 | slave |   0 | NULL |

+----+-------+-----+------+

#在msater插入数据

mysql> insert into student(id,name) values(1,‘Master‘);

#确定插入数据

mysql> select * from test.student;

+----+--------+-----+------+

| id | name   | age | dept |

+----+--------+-----+------+

|  1 | Master |   0 | NULL |

+----+--------+-----+------+

#登录MySQL proxy(amoeba)

# mysql -uroot -p -h 172.16.1.4

#查询

mysql> select * from test.student;

+----+-------+-----+------+

| id | name  | age | dept |

+----+-------+-----+------+

|  2 | slave |   0 | NULL |

+----+-------+-----+------+

#插入一条数据

mysql> insert into student(id,name) values(3,‘yuyang‘);

#再次查看返回值

mysql> select * from test.student;

+----+-------+-----+------+

| id | name  | age | dept |

+----+-------+-----+------+

|  2 | slave |   0 | NULL |

+----+-------+-----+------+

#在slave上启用主从复制

mysql> start slave;

#查询

mysql> select * from test.student;

+----+--------+-----+------+

| id | name   | age | dept |

+----+--------+-----+------+

|  1 | Master |   0 | NULL |

|  2 | slave  |   0 | NULL |

|  3 | yuyang |   0 | NULL |

+----+--------+-----+------+

至此,amoeba读写分离测试完成。

时间: 2024-11-05 18:29:23

Amoeba在Master/Slave结构下的读写分离测试的相关文章

mysql-proxy读写分离测试

master:192.168.1.207 slave:192.168.1.208 msyql-proxy:192.168.1.206 主从环境搭建:暂略 mysql-proxy搭建: 一.安装lua wget http://www.lua.org/ftp/lua-5.1.4.tar.gz tar zxvf lua-5.1.4.tar.gz cd lua-5.1.4 #vim src/Makefile 将 CFLAGS= -O2 -Wall $(MYCFLAGS) 修改为 CFLAGS= -O2 

linux下mycat读写分离的配置

为什么要配置读写分离,我想我就不需要再赘述了,那么在mycat下如何进行读写分离的配置,配置之后的实际效率又如何呢?我上午根据文档捣鼓和测试了一下,这里做一下记录: 最开始,我们还是要配置mysql本身的主从复制. 首先,配置主服务器: 1.编辑数据库配置文件,/etc/my.cnf 在[mysqld]下加入代码: log-bin=mysql-bin server-id=1 innodb_flush_log_at_trx_commit=1 sync_binlog=1 binlog-do-db=d

Redis Master-Slave 读写分离测试

1 master/slave server 启动 利用默认redis.conf配置文件启动master server,端口6379 . [7304] 29 Aug 09:57:26 - 0 clients connected (0 slaves), 673996 bytes in use [7304] 29 Aug 09:57:31 - DB 0: 15 keys (0 volatile) in 16 slots HT. [7304] 29 Aug 09:57:31 - 0 clients co

Spring+Hibernate框架下Mysql读写分离、主从数据库配置

1. 配置AOP切面类 DataSourceAdvice.java package until; import java.lang.reflect.Method; import org.springframework.aop.AfterReturningAdvice; import org.springframework.aop.MethodBeforeAdvice; import org.springframework.aop.ThrowsAdvice; public class DataSo

Centos7 下 mysql 5.7通过 amoeba 读写分离

Centos7 下 MYSQL 读写分离 mysql介绍 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件.MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提

Mysql的主从复制的读写分离之Amoeba实现

关于读写分离: 读写分离(Read/Write Splitting),基本的原理是让主数据库处理事务性增.改.删.操作(INSERT.UPDATE.DELETE),而从数据库处理SELECT查询操作.数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库. 关于Mysql的读写分离实现大致有三种: 1. 程序修改Mysql操作类 就以程序来完成Mysql的读写操作,如以PHP程序.java程序等解决此需求. 优点:直接和数据库通信,简单快捷的读写分离和随机的方式实现的负载均衡,权限独立分配

MariaDB数据库读写分离实现(二):amoeba的使用

本文接上一篇博客:MariaDB数据库读写分离实现(一):mysql-proxy的使用 http://sohudrgon.blog.51cto.com/3088108/1608605 我们将mysql-proxy停止,在节点node5上安装amoeba,测试实现数据库的读写分离. 一.amoeba的简介     Amoeba for MySQL致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的时候充当query 路由功能,专注分布式数据库 proxy 开发.座落于Clien

Amoeba+Mysql实现数据库读写分离

一.Amoeba 是什么 Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发.座落与Client.DB Server(s)之间.对客户端透明.具有负载均衡.高可用性.sql过滤.读写分离.可路由相关的query到目标数据库.可并发请求多台数据库合并结果. 主要解决: ? 降低 数据切分带来的复杂多数据库结构 ? 提供切分规则并降低 数据切分规则 给应用带来的影响 ? 降低db 与客户端的连接数 ? 读写分离 二.为什么要用Amoeba 目前要实现mysql的主从读写分离,主要有以下

Mysql主从+Amoeba读写分离

一.安装环境 centos6.5 192.168.1.100 Amoeba-mysql centos6.5 192.168.1.101 mysql-主 centos6.5 192.168.1.102 mysql-从 二.Mysql 主从配置 在主MySQL192.168.1.101上配置 Vim /usr/local/mysql/etc/my.cnf server-id       = 1                     主库一定要比从库的数字小 binlog-do-db    = ba