时间:2021-07-01 10:21:17 帮助过:17人阅读
引言
数据库在众多互联网公司中应用日益广泛,不同的公司,使用姿势不尽相同,尤其是大公司,各种自研架构,羡煞旁人。但是,作为中小企业,由于分工和团队规模限制,很难实现自研,大多数情况下,使用开源架构。
目前,在互联网公司,mysql+redis+mongodb几乎已经成为标配,在各自场景中,得到广泛应用。本文主要介绍以上mysql数据库的常用架构。
Mysql架构
Mysql数据库作为最流行的开源关系型数据库,在互联网公司应用非常广泛。目前,mysql版本分支众多,笔者建议可以考虑使用percona server或者mariadb。本文以percona server5.6为例,可参考的高可用架构如下:
图1
如上图所示,应用程序通过QConf获取到MHA VIP,MHA实现mysql主库高可用,mysql架构为主从复制架构,可以是一主一从,也可以是一主多从。
QConf是奇虎360开源的配置/服务中心中间件,尤其是服务中心功能,非常适合用于数据库和应用程序解耦。Qconf github地址:
https://github.com/Qihoo360/QConf
目前,Qconf发展已经十分稳定,几乎不需要二次开发,可以放心使用。
QConf提供了丰富的SDK,涵盖Java、Php、Python、Go等,作为DBA,可以使用PHP或者Python调用QConf API,管理QConf节点,十分方便。本文以PHP为例,
zk="<zookeeper集群>"
service_path=/db/mysql/vip_3306;
service_mysql="10.11.12.13:3306";
【注册MHA VIP服务】
$qzk = newQConfZK("$zk");
$qzk->serviceAdd($service_path,$service_mysql, QCONF_STATUS_UP);
【注销QConf节点】
$qzk->serviceDelete($service_path,$service_mysql);
【客户端访问QConf】
迁移:客户端需要部署相应的SDK
$qconf_val =QConf::getHost($service_mysql);
结果如下:
string(15)"10.11.12.13:3306"
很明显,客户端使用QConf十分简单
说明:QConf依赖zookeeper集群,建议生产环境zookeeper集群成员为5个,这样可以保证,在2个节点同时宕机情况下,zookeeper服务依然可用。
MHA架构
MHA作为mysql最为流行的高可用方案之一,架构图如下:
图2
如图所示,MHA架构简单清晰。
在master和slave上需要部署MHA node节点,在管理机器上需要部署MHA manager节点和node节点。MHA要求root账号SSH互通,所以,需要保证服务器处于安全模式下,否则,存在很大的安全隐患。为了避免MHA因为网络抖动导致的误切换,建议修改重试策略,笔者设置为2s探测一次,探测60次。如果要启用MHA自动切换模式,需要启动masterha_manager监控进程。
读写分离
如果希望mysql主从读写分离,那么可以参考如下架构:
图3
如上图所示,和图1相比,增加了一层proxy,此处的proxy可以是奇虎360开源的Atlas或者美团点评二次开发的dbproxy,
奇虎360 Atlas github:
https://github.com/Qihoo360/Atlas
美团点评 dbproxy github:
https://github.com/Meituan-Dianping/DBProxy
这两款中间件支持读写自动分离、从库负载均衡、从库故障自动上下线、安全控制等等,比较成熟稳定。
总结
对于普通业务,可以使用图1所示架构,简单稳定;如果需要读写分离,可以考虑图3架构。对于大多数中小型公司,以上架构均可参考使用,达到mysql高可用以及应用程序和数据库解耦的目的。我们在生产环境已经使用上述架构,目前很稳定
中小企业可参考的数据库架构-mysql篇
标签:程序 http 避免 架构 成员 技术分享 关系型数据库 生产环境 账号