以上,整个章节,介绍了复制。
这里通过一个例子,看一下如何通过复制手段,实现一个最简单的高可用的架构。
一、通过复制手段,实现一个最简单的高可用架构
1.1 主-主复制架构
对于小公司:比如就那么几个人,又开发、又测试、又运维,是很常用。
- 优点:身份不需要切换
图:
其中一个节点:可读可写;
另外一个节点:必须只读。
1.2 遇到故障时吗,如何容灾
如果上节中的左边主库A,突然挂了。
那就:关掉右边主库B的只读,让业务应用在上面可以就读又写。
经过后期抢修,左边主库A可以使用了,那么就可以将其作为只读。仍然是双主架构。
1.3 示例
左边:主库A 右边:主库B
1.
因为之前,右边已经是在复制左边了:所以,接下来的操作是:将左边去复制右边:
- 为了避免,在复制别的无关的库,所以最好习惯性的先停止备库功能:
- 配置库A,的主库是库B
- 启动备库
2.显示下左库的从库状态
左边:主库A 右边:主库B
3.显示下右库的从库状态
4.将右库设置为只读
配置文件中加个配置项即可
1.4 易导致的问题:3个
1.5 数据冲突:如果不小心两主都是读写
因为必须一个库是:读写;另一个库是:只读。如果后者不是只读,而是跟前者一样都是读写,那么就会导致数据冲突。
解决:
- 方案1:两边都写也可以,得需要一些分布式id的框架,确保两边id不重复
- 方案2:只一个主,另一个是只读
1.6 客户端切换:后续介绍
客户端连接的是MySQL A,怎么让它自动的去连接MySQL B呢?
切换:后续会研究
1.7 循环赋值:GTID能天然避免
左边:主库A 右边:主库B
两者互相复制。
- 因为每个事务,都有一个全局唯一的ID。库A上执行了这个事务,传送给库B,库B重放结束了,又传回给库A:“这个事务号我已经执行过了啊”
Comments | NOTHING