高手问答第 154 期 — 进阶学习,MySQL 高可用该如何选型?

局长 发布于 2017/05/22 15:41
阅读 6K+
收藏 36

OSCHINA 本期高手问答(2017 年 5 月 23 日 — 5 月 29 日)我们请来了@叶金荣@吴炳锡为大家解答 MySQL 高可用方案选型相关的问题。

叶金荣,知数堂培训联合创始人,Oracle MySQL ACE,MySQL 布道师。有多年 MySQL 及系统架构设计经验,擅长 MySQL 企业级应用、数据库设计、优化、故障处理等。

吴炳锡,知数堂联合创始人,MySQL DBA 课程讲师。有多年 MySQL 及系统架构设计及培训教学经验,擅长 MySQL 大规模运维管理优化、高可用方案、多 IDC 架构设计,企业级应用数据库设计等。

MySQL 数据库是目前开源应用最大的关系型数据库,有海量的应用将数据存储在 MySQL 数据库中。MySQL 数据库作为最基础的数据存储服务之一,在整个系统中有着非常重要的地位,存储数据的安全性和可靠性是生产数据库的关注重点,因此要求其具备高可用性是十分有必要的。

在考虑 MySQL 数据库的高可用的架构时,主要要考虑以下几方面:

  • 如果数据库发生了宕机或者意外中断等故障,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据库的故障而中断。
  • 用作备份、只读副本等功能的非主节点的数据应该和主节点的数据实时或者最终保持一致。
  • 当业务发生数据库切换时,切换前后的数据库内容应当一致,不会因为数据缺失或者数据不一致而影响业务。

本期高手问答主要讨论 MySQL 高可用方案的选型以及高可用方案的优缺点。欢迎大家踊跃提问,热烈讨论。

OSChina 高手问答一贯的风格,不欢迎任何与主题无关的讨论和喷子。

下面欢迎大家就 MySQL 高可用方案选型相关的问题向@叶金荣@吴炳锡提问,请直接回帖提问,提问的时候请描述清楚具体的场景,以方便回答。

————————————————分割线————————————————

两位老师上期和大家探讨了 MySQL 开发和运维规范相关的问题,点这里回顾学习~

加载中
1
sundy-li
sundy-li

@叶金荣
Mysql官方 有类似mongodb 分片和副本集的分布式方案吗?
为什么mysql官方不做分布式存储,类似TIDB那种

wubx
wubx
这块官方也在发力,提出来是用X协议+MySQL Innodb Cluster 实现动态的扩容。可能不是你现在看到的MySQL协议处理形式。 请保持对X协议关注。
sundy-li
sundy-li
回复 @encro : 你说的是什么东西啊..
encro
encro
歌莉娅应该算吧
1
叶金荣
叶金荣

引用来自“天心流水”的评论

@叶金荣 跨机房进行数据迁移时,什么样的方案能尽量减少或避免业务的暂停呢?

应提前做好主从复制,或其他类似机制

0
遗失蓝鲸
遗失蓝鲸

@叶金荣  进行分布式开发时,表的ID要怎么设计好呢?

wubx
wubx
@gongweixin 指到点子上了。 这个也要看业务的规模,如果不是一个上亿级用户的系统,很多场景内部的自增也可以搞定。如果为了考虑全局唯一,可以考虑简单的利用Redis Cluster做一个全局叫号服务,也可以。
gongweixin
gongweixin
看具体的场景,常见的方式有:1)外部id生成器 2)给每个数据库划分一个id段 3)使用分布式id生成算法,比如snowflake
0
neou
neou

@叶金荣  用mycat 有什么优缺点?

雷兽
但是在1.3以后 团队里的人发生了分歧 现在mycat那伙人 以那个hp的系统架构师leaderus为首 认为mycat应该分片端节点应该是任意数据库 金先生认为应该是for 唯一数据 才靠谱 结果就分道扬镳了 之后mycat的核心 依旧是金先生的作品上做修改而已 但是牛皮 吹得很大 去听过他们宣传的人 都知道他们是很sb的传销式宣传 最近开始零散地收所谓的社区技术服务费了
雷兽
说的挺到位 全面 mycat其实是个必须针对性场景设计的方案 而且现实里的那个团队 非常业余 我认识mycat原作者 原来阿里的金先生 我对mycat的前世今生有过仔细的了解 mycat1.3是金先生全权从之前他在阿里的作品cobar 开源修正过来的
wubx
wubx
MyCAT可以说功能方面还是比较全的 优点: 支持的拆分规则比较多。 管理方便 缺点: Java开发,性能下降很明显。使用时先测一下能不能满足业务需求(很多场景对性能要求不高,如一般的CRM系统) 非专业团队在维护,对MySQL 5.7及GTID支持不好。 SQL支持上有很多也跳不过去。 连接处理上细节上有待提高。 整体是一个不错的框架。
0
夜行生物
夜行生物

@叶金荣 对于已有系统改造,怎样减小风险?

wubx
wubx
API服务调用规策,服务化,小粒度进展。 有很多情况,把核心服务搞定后,周边的也不用动了:)
0
天心流水
天心流水

@叶金荣 跨机房进行数据迁移时,什么样的方案能尽量减少或避免业务的暂停呢?

wubx
wubx
@天心流水 回复@天心流水 : 其实停机切换和在线切换,你比较一下实质的差别,如果你能把停机切换的数据校验什么的也提前做了,就可以在线切了。
天心流水
天心流水
回复 @wubx : 对于线上业务直接热切靠谱么
wubx
wubx
这个操作现在业界玩的都很专业了,一般都是基于专线或是VPN网络做主从,前提是你的网络靠谱。
0
w
weir2016

我想知道目前开源的用起来比较好的  和 商用的?

wubx
wubx
https://github.com/zhishutech/awesome-tools-cn/wiki/MySQL-%E4%BC%98%E7%A7%80%E5%B7%A5%E5%85%B7%E6%8E%A8%E8%8D%90 看看这个
0
mickelfeng
mickelfeng

@叶金荣  官网说innodb的性能比myisam强,安全性innodb要强些。但是测试myisam  更新,插入速度都强于innodb

wubx
wubx
回复 @有色白水 : 点赞。 另外,也可能是他的Innodb 配置是默认的。所以,呵呵了。 推荐 http://zhishutech.net/my-cnf-wizard.html 这个地方生成一个配置在测。
encro
encro
因为事务
有色白水
这个我回答你就够了,你插入几百万的数据再试试
0
s
seerhan

@叶金荣  MySQL 5.7提供了Group Replication,按历史经验,该功能什么时候能用于线上?

wubx
wubx
目前Oracle MySQL的开发速度及代码质量都相当高。这个也是用到Oracle在线云DB环境中,如果对这个特别有兴趣,可以关注Oracle云中MySQL提供的能力。 如果他们Ok了,就可以用了。
0
万一实现了
万一实现了

@叶金荣 拜读了这篇文章:[MySQL FAQ]系列 — 为什么InnoDB表要建议用自增列做主键

有个疑问:

1、如果表没有使用自增的ID,而是使用的一个varchar(32)类型的字段作为索引,性能是不是会比自增的ID要慢。大概会慢多少?

另外一个问题:

1、有没有好的mysql性能监控工具推荐,我记得mysql自带一个performance_schema库,是不是所有的性能数据都记录在这个里面了。

wubx
wubx
问题1 建议写个Python程序测试一下:) 问题2 MySQL 5.7 引入了Sys库,这个记数器更完整。
gongweixin
gongweixin
问题1,不一定慢,一般情况下会慢,慢很多,自增主键相当于顺序写,而你的varchar(32)如果内容是递增的,也是顺序写,不会慢,如果是随机的uuid,就变成随机写了,这样就会慢很多,但如果写入并发量很大的话,顺序写在最后一个id处会有很大的锁冲突,这个时候随机写可能性能更好
返回顶部
顶部