中小企业可参考的数据库架构-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高可用以及应用程序和数据库解耦的目的。我们在生产环境已经使用上述架构,目前很稳定
中小企业可参考的数据库架构-mysql篇的更多相关文章
- 数据库【mysql篇】学习笔记
Windows服务 -- 启动MySQL net start mysql-- 创建Windows服务 sc create mysql binPath= mysqld_bin_path(注意 ...
- 数据库之mysql篇(1)—— 数据库管理系统简介/mysql的安装、配置
说mysql之前,还是先说说数据库. 什么是数据库: 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后 ...
- 数据库之mysql篇(3)—— mysql创建/修改数据表/操作表数据
创建数据表:create table 数据表名 1.创建表规范 create table 表名( 列名 数据类型 是否为空 自动排序/默认值 主键/外键/唯一键, 列名 数据类型 ...
- 数据库之mysql篇(6)—— mysql常用函数函数/自定义函数
常用函数 运算函数 我相信你都能看懂,所以以上的不再做过多解释 然后还有个,前面漏掉的between and: 意指10是否在0到20之间,如果是返回1,否则返回0 日期函数 这个要稍微注意一下参数, ...
- 数据库之mysql篇(5)—— 【转载】mysql练习题
原帖地址:http://www.cnblogs.com/wupeiqi/articles/5748496.html 范例数据sql: /* Navicat Premium Data Transfer ...
- 数据库之mysql篇(4)—— navicat操作mysql
navicat 1.简介: navicat是一个软件,旗下针对不同数据库有不同的软件版本,支持以下数据库,还是挺厉害的: 这里我采用navicat for mysql版本.实现图形化的操作mysql, ...
- 数据库之mysql篇(2)—— mysql常识引入/用户授权
常识引入 1.概念: 数据库:本质上是一个文件夹 1)查看本机所有数据库:show databases; 结束符:分号[:],一切数据行的结尾都以分号作为结束 2)创建数据库:create 数据库名 ...
- 数据库【mysql篇】典型的一些练习题目
班级表 class 学生表student 老师表 teacher 课程表course 成绩表 score 准备数据 创建数据库 create database tang_test charset='u ...
- 数据库高可用架构(MySQL、Oracle、MongoDB、Redis)
一.MySQL MySQL小型高可用架构 方案:MySQL双主.主从 + Keepalived主从自动切换 服务器资源:两台PC Server 优点:架构简单,节省资源 缺点:无法线性扩展,主从失 ...
随机推荐
- ELK的简单安装使用
ELK ELK是什么? Elasticsearch LogStash Kibana 1,简单的安装 我采用的是本地window环境: 下载的包如下: 首先安装的是jdk8,安装完成之后,设 ...
- [luoguP1866]滑动窗口(单调队列)
传送门 可以搞2个单调队列. 然后,然后就没有然后了. # include <iostream> # include <cstdio> # include <cstrin ...
- 洛谷P3973 - [TJOI2015]线性代数
Portal Description 给定一个\(n\times n\)的矩阵\(B\)和一个\(1×n\)的矩阵\(C\).求出一个\(1×n\)的01矩阵\(A\),使得\(D=(A×B-C)×A ...
- 转载:shell脚本之前的基础知识
转载地址:http://www.92csz.com/study/linux/12.htm 第十二章 学习 shell脚本之前的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果 ...
- 潘多拉的盒子(bzoj 1194)
Description Input 第一行是一个正整数S,表示宝盒上咒语机的个数,(1≤S≤50).文件以下分为S块,每一块描述一个咒语机,按照咒语机0,咒语机1„„咒语机S-1的顺序描述.每一块的格 ...
- poj1459多源多汇最大流问题
/*基本构图题,多源多汇,添加一个源点和一个汇点,所有源点都来自这个源点,同理,所有汇点 都汇于这个汇点,dinic第二战,本来应该1A的,犯了一个低级错误!while(scanf("%d) ...
- python学习之-- random模块
random模块random.random():随机打印一个小数random.randint(1,10):随机打印1-10之间的任意数字(包括1和10)random.randrange(1,10):随 ...
- 洛谷——P3225 [HNOI2012]矿场搭建
P3225 [HNOI2012]矿场搭建 题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤 ...
- css三大布局
标准流: 从左到右,从上到下块级元素独占一行,行内元素碰到父盒子边缘换行 浮动: 特点 1 元素浮动之后不占据原来的位置(脱标),变成立体,下面可以有东西,只影响下面的 2 浮动的盒子在一行上显示 3 ...
- CDI Services *Decoretions *Intercepters * Scope * EL\(Sp EL) *Eventmodel
1.Decorators装饰器综述 拦截器是一种强大的方法在应用程序捕捉运行方法和解耦.拦截器可以拦截任何java类型的调用. 这使得拦截器适合解决事务管理,安全性,以及日记记录. 本质上说,拦截 ...