`

公司某产品MySql分布式架构总结

 
阅读更多

这个是目前公司某产品Server端MySql分布式架构总结(内容总结自wiki),该产品同时使用了Mysql和MongoDB。

本篇Blog只做Mysql分布式架构的介绍。
----------------------------------------------------
一、共4台Linux服务器A\B\C\D
A master with slave B
C master with slave D
每台机器都启动8个mysql实例,由mysqld_multi管理(每台机器使用端口3301-3308)。
注:单机启动多个mysql的好处是(引用网上其它资料)
1、充分利用单机的计算能力。
2、可以有效的分配不同的逻辑到不同的mysql提高数据库并行处理能力。
3、单机也可以方便的实现主从备份。
二、部署Amoeba
1、Amoeba将在C和D部署两个配置完全相同的实例,可以互为failover(故障切换).但Amoeba本身不会检查另一个amoeba的生存状态。
2、Amoeba占用8066端口,应用可以把Amoeba当作虚拟mysql访问。
部分表的访问,会根据userId进行水平分区,并根据是读是写做读写分离。
账号设备表永远访问A0实例(即A机3301端口的实例)。
同时,不支持shard的命令会分发到default数据库,目前设置为A0。
3、Amoeba支持配置自动加载,但是加载顺序等有一定问题,建议重启amoeba。
4、目前读请求是分发到虚拟读节点,将会2/3的概率分到对应的slave,1/3分到master。Amoeba支持虚拟节点中的真实节点的failover和故障检测。
5、在对shard表(水平分区)进行操作时,使用mysql console可以像使用正常mysql一样进行普通读写操作,但是对于一些特殊操作可能会有问题。如:
(1)select … where accountId in()会出错;
(2)select count * 如果where子句中没有对accountId指定唯一值,会返回多个列;
(3)update,delete指令没有指定唯一accountId,会返回多列的结果等;
(4)另外所有transaction(事务)命令都不予支持,会转发到default数据库上去。
6、用户账号系统的数据库直接放在了A0上(垂直扩展?)。
不断更新中...
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics