MySQL主从复制技术与读写分离技术amoeba应用
MySQL主从复制技术与读写分离技术amoeba应用
前言:眼下在搭建一个人才站点,估计流量会非常大,须要用到分布式数据库技术,MySQL的主从复制+读写分离技术。读写分离技术有官方的MySQL-proxy,阿里巴巴的Amoeba。Amoeba能在阿里巴巴这么大流量的平台投入使用并且执行稳定,Amoeba的性能是非常优越的。相信眼前事实,所以选择了Amoeba。
一、名词解析
1. 主从复制。
将主server上的数据拷贝到从server上,保护数据免受意外的损失。
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. 架构图:
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> |
MySQL主从复制技术与读写分离技术amoeba应用的更多相关文章
- MySQL主从同步、读写分离配置步骤、问题解决笔记
MySQL主从同步.读写分离配置步骤.问题解决笔记 根据要求配置MySQL主从备份.读写分离,结合网上的文档,对搭建的步骤和出现的问题以及解决的过程做了如下笔记: 现在使用的两台服务器已经 ...
- MySQL主从同步和读写分离的配置
主服务器:192.168.1.126 从服务器:192.168.1.163 amoeba代理服务器:192.168.1.237 系统全部是CentOS 6.7 1.配置主从同步 1.1.修改主服务器( ...
- mysql主从同步+mycat读写分离+.NET程序连接mycat代理
背景 最近新项目需要用到mysql数据库,并且由于数据量大的原因,故打算采用1主1从(主数据库负责增.删.改操作:从数据库负责查操作)的数据库架构,在实现主从之后还要实现读写分离的代理,在网上搜寻了很 ...
- mysql主从配置,读写分离
Mysql主从配置,实现读写分离 大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库 ...
- MySQL主从同步、读写分离配置步骤
现在使用的两台服务器已经安装了MySQL,全是rpm包装的,能正常使用. 为了避免不必要的麻烦,主从服务器MySQL版本尽量保持一致; 环境:192.168.0.1 (Master) 192.168. ...
- mysql主从同步加读写分离
首先主从同步,一旦建立,指定了用户,就不能更改了,否则会有错误.1063 Error 'Duplicate entry '%-test-' for key 'PRIMARY'' on query. D ...
- mysql主从库配置读写分离以及备份
1,什么是读写分离?其实就是将数据库分为了主从库,一个主库用于写数据,多个从库完成读数据的操作,主从库之间通过某种机制进行数据的同步,是一种常见的数据库架构.一个组从同步集群,通常被称为是一个“分组” ...
- 面试官你好,我已经掌握了MySQL主从配置和读写分离,你看我还有机会吗?
我是风筝,公众号「古时的风筝」,一个简单的程序员鼓励师. 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在里面. 面试官:我看你简历上写的你们公司数据库是 ...
- 搭建MySQL主从实现Django读写分离
一.MySQL主从搭建 主从配置原理: 主库写日志到 BinLog 从库开个 IO 线程读取主库的 BinLog 日志,并写入 RelayLog 再开一个 SQL 线程,读 RelayLog 日志,回 ...
随机推荐
- oracle结构-内存结构与动态内存管理
内存结构与动态内存管理 内存是影响数据库性能的重要因素. oracle8i使用静态内存管理,即,SGA内是预先在参数中配置好的,数据库启动时就按这些配置来进行内在分配,oracle10g引入了动态内存 ...
- [Oracle] Lob介绍
[Oracle] Lob介绍 像Oracle这种关系型数据库,比较擅长处理结构化的数据,那么对于非结构化的数据,Oracle是怎么处理和存储的呢?Lob (Large Object)是Oracle ...
- day01_13.数组
数组基本语法 <?php $a = array(键1=>值1,键2=>值2); ?> <?php $arr = array(1=>'张三的裤子',2=>'李四 ...
- day01_09.你已学会编程
目前你已经学会编程: 学会变量,运算,控制,你就学会了编程,我擦?真的,假的? 1.打印1-100,自己试试看呗 <?php $num = 1; while($num<=100){ ech ...
- match_parent, wrap_content, 和 fill_parent 区别联系
fill_parent -1 The view should be as big as its parent (minus padding). This constant is deprecat ...
- Django创建
Pycharm里面Django模块安装及项目创建和启动: Pycharm里面Django模块安装(也可以指定安装源): 创建Django项目: 注意切换到合适的目录进行安装 diango-admin ...
- [python 函数学习篇]默认参数
python函数: 默认参数: retries= 这种形式 def ask_ok(prompt, retries=, complaint='Yes or no, please!'): while Tr ...
- Get Sauce(状压DP)
描述 In order to celebrate the 8th anniversary of ZOJ, LCLL goes to a sauce factory to "Get Sauce ...
- Pandas对多列进行升降序排列
df = pd.DataFrame(rows, columns = ["llx", "lly", "urx", "ury" ...
- java EE技术体系——CLF平台API开发注意事项(1)——后端开发
前言:这是一篇帮助小伙伴在本次项目中快速进入到java EE开发的一些说明,为了让同组小伙伴们开发的时候,有个清晰点的思路.昨天给大家演示分享了基本概况,但没有留下文字总结说明,预防后期有人再次问我, ...