MySQL主从复制技术与读写分离技术amoeba应用

时间:2021-11-11 03:29:18

MySQL主从复制技术与读写分离技术amoeba应用

前言:眼下在搭建一个人才站点,估计流量会非常大,须要用到分布式数据库技术,MySQL的主从复制+读写分离技术。读写分离技术有官方的MySQL-proxy,阿里巴巴的Amoeba。Amoeba能在阿里巴巴这么大流量的平台投入使用并且执行稳定,Amoeba的性能是非常优越的。相信眼前事实,所以选择了Amoeba。

一、名词解析

1. 主从复制。

将主server上的数据拷贝到从server上,保护数据免受意外的损失。

MySQL主从复制技术与读写分离技术amoeba应用

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGp1bmNvbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

2.Amoeba

Amoeba(变形虫)项目,专注分布式数据库 proxy 开发。座落与Client、DB Server(s)之间。

对client透明。具有负载均衡、高可用性、sql过滤、读写分离、可路由相关的query到目标数据库、可并发请求多台数据库合并结果。

二、环境资料

如果amoeba的前提条件:

1. 实验环境:

System: CentOS release 6.5

JDK: jdk-6u35-linux-x64.bin

Mysql版本号:   5.5.38

Amoeba版本号: amoeba-mysql-3.0.5-RC-distribution

2. 架构图:

MySQL主从复制技术与读写分离技术amoeba应用

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGp1bmNvbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

三、架设MySQL的主从复制server

1. 主服务器Master server数据库配置:

我的mysql 安装在/usr/local/mysql

#vi /etc/my.cnf

设置 server-id = 1 ,此值不能和从数据库的一样

在my.cnf末尾加入例如以下语句,表示哪些库不同步:

binlog-ignore-db=mysql #每一个不同步的库写一行

#service mysqld restart

接着分配一个数据库账号给Slave Server 和 Amoeba Server:

#mysql -uroot -p123456

mysql> flush privileges;

mysql> show master status;

mysql> show master status;

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

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

| mysql-bin.000028 |      107 |              | mysql            |

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

1 row in set (0.01 sec)

记录File的mysql-bin.000028 与 Position的107 ,等会要用到。

2. 从服务器Slave server数据库配置:

#vi /etc/my.cnf

replicate-do-db=test

replicate-ignore-db=mysql

replicate-ignore-db=persondb

#service mysqld restart

#mysql -uroot -p123456

’;

mysql> CHANGE MASTER TO

-> Master_Host=192.168.1.106,

-> Master_User=idc719comslave,

-> Master_Password=123456,

-> Master_Port=3306,

-> Master_Log_File=mysql-bin.000028,

-> Master_Log_File=107;

mysql> start slave;

mysql> show slave status\G;

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.1.106

Master_User: idc719comslave

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000028

Read_Master_Log_Pos: 107

Relay_Log_File: slaveserver1-relay-bin.000016

Relay_Log_Pos: 253

Relay_Master_Log_File: mysql-bin.000028

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB: test

Replicate_Ignore_DB: mysql

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 107

Relay_Log_Space: 416

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:

Replicate_Ignore_Server_Ids:

Master_Server_Id: 1

1 row in set (0.00 sec)

看到Slave_IO_State: Waiting for master to send event 表示成功了!

假设不成功, 比方

Last_IO_Errno: 2003

、Last_IO_Error: error connecting to master 'idc719comslave@192.168.1.106:3306' - retry-time: 60  retries: 86400

是主server开了防火墙,或者用户password错误!

三、架设 Amoeba server

1. 安装JDK

Amoeba是java编写的,执行须要JDK环境,能够通过#echo $JAVA_HOME看是否安装配置了JDK,假设没有。參考例如以下方法:

下载软件包

uname -r 检查系统内核信息

mkdir -p /tmp/src && cd /tmp/src

x86_64 请下载

wget http://docs.minunix.com/web/jdk-6u35-linux-x64.bin

i386系列 请下载

wget http://docs.minunix.com/web/jdk-6u35-linux-i586.bin

注:作者系统为X86_64 ,所以以x86_64 演示,步骤都一样的!

安装必备组件信息:

yum -y install glibc*

下载完毕之后,改动文件属性,赋予可运行权限,然后运行程序予以安装:

chmod +x  jdk-6u35-linux-x64.bin

./jdk-6u35-linux-x64.bin

注:此处可能会出现下面问题:

/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory

此问题是由于您没有安装glibc-* ,仅仅须要安装glibc 就可以解决,

yum -y install glibc*

安装完毕之后,运行下列命令:

#cp -rf jdk1.6.0_35 /usr/local/jdk

#vim /etc/profile.d/java.sh \\\输入下列内容

JAVA_HOME="/usr/local/jdk"

CLASS_PATH="$JAVA_HOME/lib:$JAVA_HOME/jre/lib"

PATH=".:$PATH:$JAVA_HOME/bin"

export JAVA_HOME

###保存退出,并运行以下的命令使配置生效

#source /etc/profile.d/java.sh

#java -version \\\检查java版本号

2.安装Amoeba

下载页面:http://sourceforge.net/projects/amoeba/?

source=directory

下载后。解压 #unzip amoeba-mysql-3.0.5-RC-distribution.zip -d /usr/local/

#cd /usr/local

#mv amoeba-mysql-3.0.5-RC-distribution amoeba

#cd amoeba

#ls

benchmark  bin  conf  jvm.properties  lib  logs

#cd conf

#vim amoeba.xml

查找例如以下字段并改动红色的部分,各自是port、amoeba主机的ip。用户password,和读写server的别名,其余字段默认就能够

</property>

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

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

</property>

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

<property name="readPool">server2</property>

#vim dbServers.xml

红色部分为改动的地方

<?

xml version="1.0" encoding="gbk"?>

<!DOCTYPE amoeba:dbServers SYSTEM "dbserver.dtd">

<amoeba:dbServers xmlns:amoeba="http://amoeba.meidusa.com/">

<!--

Each dbServer needs to be configured into a Pool,

If you need to configure multiple dbServer with load balancing that can be simplified by the following configuration:

add attribute with name virtual = "true" in dbServer, but the configuration does not allow the element with name factoryConfig

such as 'multiPool' dbServer

-->

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

<factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">

<property name="connectionManager">${defaultManager}</property>

<property name="sendBufferSize">64</property>

<property name="receiveBufferSize">128</property>

<!-- mysql port -->

</property>

<!-- mysql schema -->

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

<!-- mysql user -->

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

</property>

</factoryConfig>

<poolConfig class="com.meidusa.toolkit.common.poolable.PoolableObjectPool">

<property name="maxActive">500</property>

<property name="maxIdle">500</property>

<property name="minIdle">10</property>

<property name="minEvictableIdleTimeMillis">600000</property>

<property name="timeBetweenEvictionRunsMillis">600000</property>

<property name="testOnBorrow">true</property>

<property name="testOnReturn">true</property>

<property name="testWhileIdle">true</property>

</poolConfig>

</dbServer>

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

<factoryConfig>

<!-- mysql ip -->

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

</factoryConfig>

</dbServer>

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

<factoryConfig>

<!-- mysql ip -->

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

</factoryConfig>

</dbServer>

<dbServer name="multiPool" 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>

</poolConfig>

</dbServer>

</amoeba:dbServers>

文字出自:http://blog.csdn.net/ljuncong

MySQL主从复制技术与读写分离技术amoeba应用的更多相关文章

  1. MySQL主从同步、读写分离配置步骤、问题解决笔记

    MySQL主从同步.读写分离配置步骤.问题解决笔记 根据要求配置MySQL主从备份.读写分离,结合网上的文档,对搭建的步骤和出现的问题以及解决的过程做了如下笔记:       现在使用的两台服务器已经 ...

  2. MySQL主从同步和读写分离的配置

    主服务器:192.168.1.126 从服务器:192.168.1.163 amoeba代理服务器:192.168.1.237 系统全部是CentOS 6.7 1.配置主从同步 1.1.修改主服务器( ...

  3. mysql主从同步&plus;mycat读写分离&plus;&period;NET程序连接mycat代理

    背景 最近新项目需要用到mysql数据库,并且由于数据量大的原因,故打算采用1主1从(主数据库负责增.删.改操作:从数据库负责查操作)的数据库架构,在实现主从之后还要实现读写分离的代理,在网上搜寻了很 ...

  4. mysql主从配置,读写分离

    Mysql主从配置,实现读写分离 大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库 ...

  5. MySQL主从同步、读写分离配置步骤

    现在使用的两台服务器已经安装了MySQL,全是rpm包装的,能正常使用. 为了避免不必要的麻烦,主从服务器MySQL版本尽量保持一致; 环境:192.168.0.1 (Master) 192.168. ...

  6. mysql主从同步加读写分离

    首先主从同步,一旦建立,指定了用户,就不能更改了,否则会有错误.1063 Error 'Duplicate entry '%-test-' for key 'PRIMARY'' on query. D ...

  7. mysql主从库配置读写分离以及备份

    1,什么是读写分离?其实就是将数据库分为了主从库,一个主库用于写数据,多个从库完成读数据的操作,主从库之间通过某种机制进行数据的同步,是一种常见的数据库架构.一个组从同步集群,通常被称为是一个“分组” ...

  8. 面试官你好,我已经掌握了MySQL主从配置和读写分离,你看我还有机会吗?

    我是风筝,公众号「古时的风筝」,一个简单的程序员鼓励师. 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在里面. 面试官:我看你简历上写的你们公司数据库是 ...

  9. 搭建MySQL主从实现Django读写分离

    一.MySQL主从搭建 主从配置原理: 主库写日志到 BinLog 从库开个 IO 线程读取主库的 BinLog 日志,并写入 RelayLog 再开一个 SQL 线程,读 RelayLog 日志,回 ...

随机推荐

  1. JavaWeb中读取文件资源的路径问题

    在做javaweb开发的时候,我们可能会需要从本地硬盘上读取某一个文件资源,或者修改某一个文件,这个时候就需要先找到这个文件,然后用FileInputStrem等文件字节.字符流来将这个文件读取到内存 ...

  2. Operand forms

    Operand forms Computer Systems A Programmer's Perspective Second Edition

  3. cf&lpar;&num;div1 B&period; Dreamoon and Sets&rpar;&lpar;数论&rpar;

    B. Dreamoon and Sets time limit per test 1 second memory limit per test 256 megabytes input standard ...

  4. What is a Windows USB device path and how is it formatted&quest;

    http://community.silabs.com/t5/Interface-Knowledge-Base/Windows-USB-Device-Path/ta-p/114059 Windows ...

  5. hdu2049&period;java

    hdu 2049 不容易系列之(4)——考新郎 (组合+错排) 国庆期间,省城HZ刚刚举行了一场盛大的集体婚礼,为了使婚礼进行的丰富一些,司仪临时想出了有一个有意思的节目,叫做"考新郎&qu ...

  6. 自定义HtmlHelper方法

    原文:http://www.cnblogs.com/wenjiang/archive/2013/03/30/2990854.html HtmlHelper方法是ASP.NET MVC中非常强大的特性, ...

  7. Spring中的WebDataBinder浅析

    Spring可以自动封装Bean,也就是说可以前台通过SpringMVC传递过来的属性值会自动对应到对象中的属性并封装成javaBean,但是只能是基本数据类型(int,String等).如果传递过来 ...

  8. r语言之生成规则序列,规则序列函数及用法

    在生成序列时,“:”的优先级最高 (1)从1到20的整数序列: > 1:20 [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 (2) ...

  9. 【SSH2(理论&plus;实践)】--Hibernate步步(一个)

    前几个博客讨论SSH2该框架Struts,它代表层,集成封装.和使用WebWork作为核心处理,依赖映射是它的处理核心.在使用时需要Struts.xml配置相应Action和Interceptor够完 ...

  10. DataGridView一些常用操作

    SqlConnection conn = new SqlConnection('Server=(local);DataBase=test;User=sa;Pwd=sa'); SqlDataAdapte ...