如何实现mysql读写分离 :
通常来说有两种方式: master<--->master (前读,后写) |
1,应用程序层实现 /\
2,中间件层实现 slave slave
应用层实现:
应用层实现是指在应用程序内部及连接器中实现读写分离。
例如:
com.mysql.jdbc.replicationdriver
mysqlnd_ms
优点:
程序内部实现读写分离,安装即可使用
减少部署难度。
访问压力在一定级别以下,性能很好。
缺点:
架构一旦调整,代码要更这变, 不够灵活。
难以实现高级应用,如自动分库,分表
无法适用于更大型的应用场景。
中间件层实现:
中间件层实现是指外部中间件程序实现读写分离
mysql-proxy
amoeba
TDDL(TAObao)
CObar(alibaba)
Atlas(qihoo360)
优点:
架构设计上更加灵活、
可在程序上实现一些高级控制,failover,流量控制
依靠一些技术可以实现mysql性能提升,如连接池
对业务代码侵入性少
缺点:
需要有一定的开发实力和运维团队的支持
什么是Amoeba?
Amoeba 2008发布的第一款开源框架
amoeba for mysql,致力于mysql分布式数据库代理层
它主要在应用层访问mysql的时候充当sql路由功能,专注于分布式数据库代理层,坐落于client,DBserver之间,对客户端透明
具有负载均衡,高可用,sql过滤,读写分离,可路由相到目标数据库,可并发请求多台数据库合并结果
通过amoeba您能够完成数据源的高可用,负载均衡,数据切换功能,
目前amoeba目前不支持事务
1,安装amoeba基于Java开发,首先安装jdk
2,安装amoeba .
3,配置amoeba 在proxy 代理层的amoeba服务器上
vim amoeba.xml
<property name="authenticator">
<bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator">
<property name="user">tube</property>
<property name="password">tube</property>
vim vim dbServers.xml
<property name="port">3306</property>
<!-- mysql schema -->
<property name="schema">viewdb</property>
<!-- mysql user -->
<property name="user">tube</property>
<!-- mysql password -->
<property name="password">123456</property>
<dbServer name="server1" parent="abstractServer">
<factoryConfig>
<!-- mysql ip -->
<property name="ipAddress">192.168.20.238</property>
</factoryConfig>
</dbServer>
<dbServer name="server2" parent="abstractServer">
<factoryConfig>
<!-- mysql ip -->
<property name="ipAd dress">192.168.20.237</property>
</factoryConfig>
</dbServer>
4,在后端服务器授权amoeba访问mysql服务器 ,此时授权的是dbServe.xml 里的user
mysql> grant all on rwdb.* to [email protected] identified by ‘123456‘
mysql>flush privileges;
5, vim amoeba.xml
property name="defaultPool">server1</property>
<!-- --> 默认注释,现在打开
<property name="writePool">server1</property>
<property name="readPool">server2</property>
<!-- -->
<property name="needParse">true</property>
6,vim /bin/amoeba
DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss256k" 将最后的值改为大于160K
7,运行amoeba
cd /usr/bin/amoeba/bin
./amoeba start &
./amoeba stop