当前位置 : 主页 > 编程语言 > java >

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

来源:互联网 收集:自由互联 发布时间:2023-09-14
这个是目前公司某产品Server端MySql分布式架构总结(内容总结自wiki),该产品同时使用了Mysql和MongoDB。 本篇Blog只做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


故障切换).但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上(垂直扩展?)。


不断更新中...

上一篇:Java动态代理详解
下一篇:没有了
网友评论