Java教程
数据库高可用和身份切换的关键--如何解决数据库经常宕机问题
本文主要是介绍数据库高可用和身份切换的关键--如何解决数据库经常宕机问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
切换,保业务还是保数据
如何进行身份切换
停止备库同步
配置主库复制从库
可靠性优先策略
检查B库的seconds_behind_master,不能过大
A库只读readonly = true
检查B库的seconds_behind_master = 0
B库关只读,readonly = false
B库停止复制A库,A库开始复制B库
可靠性优先策略
数据无丢失
有几秒的时间两个数据库均不可写
若一开始未检查seconds_behind_master, 不可用时间无法控制
可用性优先策略
取消等待数据一致的过程
A库只读,B库关只读
B库停止复制A库,A库开始复制B库
可用性优先策略
系统没有不可写的时间
若切换时还有未重放的relay log
可能造成数据不一致错误
总结:
普通业务执行时,尽量用可靠性优先策略
日志、流水等不太需要数据可靠性的,用可用性优先策略
数据库切换了,业务怎么办
业务切换至新地址
业务预留接口,通知新的数据库地址
使用微服务框架,通知业务
使用内部DNS,通过域名连接
自己搭建coredns
vip漂移
使用keepalived进行自动vip漂移
使用代理
使用haproxy等代理组件,将转发地址切换至新库
使用dble时的主备切换
使用dble等分库分表中间件,将数据分片地址切换至新库
总结
业务切换至新地址,不影响性能,业务可能不支持
使用内部DNS,方便,但是需要多于的硬件资源
vip便宜:自动漂移,需要多余的ip资源
使用代理:自动更新,需要多余的资源
dble: 客户端无感知,需要被动通知
如何实现自动主从切换
keepalived
常见的高可用组件
可以检测节点状态
自动执行切换脚本
还有vip漂移功能
使用keepalived进行身份切换+vip自动漂移
MHA (master high availability)
常用的mysql高可用组件
支持GTID
binlog来不及传送时会尝试登录A库传送binlog
不能自动漂移vip
MHA
从宕机崩溃的master抢救未传送的binlog
等待slave执行中继日志,追赶master
在slave执行从master抢救出来的binlog
提升一个slave为新的master
使用其它slave连接新的master进行复制
自研高可用组件
完全自主控制
研发代价高
总结
keepalived也可以自动切换身份,但是并不完善
MHA是较为完善的mysql自动身份切换工具
若有更高级的mysql管理需求,可以二次开发MHA或者自己开发高可用中间件
MHA实战
MHA与dble联动
高可用了,集群为什么还会挂
总结
dble的单点问题可能造成数据库系统无法使用
dble变为多节点后,数据协调可以使用zookeeper
多节点dble可以使用keepalived提供统一vip,或者使用负载均衡
至此,我们的三高分分布式数据库系统已经初具规模
本章总结
切换策略
普通业务执行时,尽量用可靠性优先策略
日志、流水等不太需要数据可靠性的,可用可用性优先策略
如何切换业务
业务切换至新地址,不影响性能,业务可能不支持
使用内部DNS,方便,需要多余的硬件资源
vip漂移:自动漂移,需要vip资源,像keepalived
使用代理组件:自动更新,需要多余资源
dble:客户端无感知,需要被动通知
如何自动切换数据库身份
keepalived也可以自动切换身份,但是不完善
MHA是较为完善的mysql身份自动切换工具
二次开发MHA或者开发高可用中间件
最后一个单点问题
dble单点问题可能造成数据库系统无法使用
dble变为多节点后,数据协调可以使用zookeeper
对节点dble可以使用keepalived提供统一vip,或者使用负载均衡
这篇关于数据库高可用和身份切换的关键--如何解决数据库经常宕机问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
您可能喜欢
Springboot应用的多环境打包入门
11-23
Springboot应用的生产发布入门教程
11-23
Python编程入门指南
11-23
Java创业入门:从零开始的编程之旅
11-23
Java创业入门:新手必读的Java编程与创业指南
11-23
Java对接阿里云智能语音服务入门详解
11-23
Java对接阿里云智能语音服务入门教程
11-23
JAVA对接阿里云智能语音服务入门教程
11-23
Java副业入门:初学者的简单教程
11-23
JAVA副业入门:初学者的实战指南
11-23
JAVA项目部署入门:新手必读指南
11-23
Java项目部署入门:新手必看指南
11-23
Java项目部署入门:新手必读指南
11-23
Java项目开发入门:新手必读指南
11-23
JAVA项目开发入门:从零开始的实用教程
11-23
栏目导航
前端开发
HTML5教程
CSS教程
Javascript
jQuery教程
AJAX教程
Node.js教程
XML教程
正则表达式
后端开发
Go教程
C/C++教程
消息队列MQ
Net Core教程
Asp.net教程
Java教程
PHP教程
移动端开发
微信公众号开发
小程序开发
Swift教程
IOS教程
Kotlin教程
Android开发
数据库
Redis教程
MongoDB教程
PostgreSQL教程
Oracle教程
MariaDB教程
SqLite教程
MySql教程
SqlServer教程
服务器运维
Kubernetes
Docker容器
linux shell
Nginx教程
网站安全
PowerShell教程
Linux教程
人工智能
TensorFlow教程
Python教程
机器学习
人工智能学习
区块链
区块链技术
游戏开发
游戏编程
Unity3D教程
网站运营
网站策划
网站优化
建站知识
大数据/云计算
云计算
Hadoop教程
软件工程
软件/开发工具使用
Git教程
资讯