集群架构方案:
方案一:主从架构
方案二:分布式存储+主从
为什么要用mysql集群?
方案一:主从架构
避免单点故障,维护了高可用性
方案二:分布式存储+主从架构
分库分表,提高系统性能;
避免单点故障,维护高可用性;
mysql集群落地技术:
保证主从数据库数据的一致性;
监控所有节点,确保单点故障快速切换;
水平扩展:
方案一:主从
当数据量不大的时候用用2台服务器,一个master和一个slave;
方案二:分布式存储+主从
当数据量不大的时候用用2台服务器,一个master和一个slave;
当数据量大的时候用4台服务器,两个master,分别对应一个slave;
当数据量再大的时候,继续扩展,2^n
水平扩展是否可逆?
减少服务器的数量
水平扩展怎么实现呢?
如何保证主从数据库数据的一致性呢?
两个方案:半同步复制和异步复制
如何判定master节点不可用,会有啥问题?
1.根据内部协议;
2.连接超时;
再判断上有啥问题;split-brain(脑裂问题)
mysql事务原则: acid:
原子性,隔离型,持久性,一致性,
我考虑的关于断电问题,这是mysql内部问题,
mysql 内部的问题让myql内部来解决;
保证mysql错误和开发错误的一致性,这是mysql内部要解决的问题;
开发者要考虑的问题是:集群方案的选型;
我们开发要解决的问题:为非就是保证mysql错误和开发中的错误保持一致,当开发中接收到错误,mysql一定就是这个错误,并且mysql内部要保证数据的正确性。
读写分离:
方案一:主从
主节点负责写操作,从节点负责读操作;
mysql二进制日志:
主要用于数据库恢复和主从复制,以及审计(audit)操作。
mysql架构:
mysql并行操作:
mysql 事务隔离等级默认是避免不可重复读
,但是存在幻读
的可能;
mysql内部维护了并发控制,内部维护了线程队列,
共享锁,多个线程可以同时读数据;
独占锁,写数据,阻塞读数据,优先执行写数据,并且写锁是互斥的;
java客户端只需要创建数据库连接池就行,