中小企业可参考的数据库架构-mysql篇

引言

数据库在众多互联网公司中应用日益广泛,不同的公司,使用姿势不尽相同,尤其是大公司,各种自研架构,羡煞旁人。但是,作为中小企业,由于分工和团队规模限制,很难实现自研,大多数情况下,使用开源架构。

目前,在互联网公司,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高可用以及应用程序和数据库解耦的目的。我们在生产环境已经使用上述架构,目前很稳定

转载于:https://www.cnblogs.com/405845829qq/p/7831767.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
国家标准行业分类,2017年的数据,有几千条数据,人工在前端添加基本不现实,一般是通过数据库的方式调取,分享给各位猿友。 部分内容展示 -- ---------------------------- -- Table structure for `industrys` -- ---------------------------- DROP TABLE IF EXISTS `industrys`; CREATE TABLE `industrys` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(300) NOT NULL DEFAULT '' COMMENT '行业名称', `parent_id` int(11) NOT NULL DEFAULT '0' COMMENT '父id', `created_at` int(11) DEFAULT NULL, `updated_at` int(11) DEFAULT NULL, `deleted_at` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1046694 DEFAULT CHARSET=utf8 COMMENT='行业表'; -- ---------------------------- -- Records of industrys -- ---------------------------- INSERT INTO `industrys` VALUES ('1', '农业', '0', null, null, null); INSERT INTO `industrys` VALUES ('2', '食品、饮料', '0', null, null, null); INSERT INTO `industrys` VALUES ('3', '服装', '0', null, null, null); INSERT INTO `industrys` VALUES ('4', '纺织、皮革', '0', null, null, null); INSERT INTO `industrys` VALUES ('5', '电工电气', '0', null, null, null); INSERT INTO `industrys` VALUES ('6', '家用电器', '0', null, null, null); INSERT INTO `industrys` VALUES ('7', '数码、电脑', '0', null, null, null); INSERT INTO `industrys` VALUES ('8', '化工', '0', null, null, null); INSERT INTO `industrys` VALUES ('9', '冶金矿产', '0', null, null, null); INSERT INTO `industrys` VALUES ('10', '能源', '0', null, null, null); INSERT INTO `industrys` VALUES ('11', '环保', '0', null, null, null); INSERT INTO `industrys` VALUES ('12', '交通运输', '0', null, null, null);

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值