引言

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

目前,在互联网公司,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篇的更多相关文章

  1. 数据库【mysql篇】学习笔记

    Windows服务 -- 启动MySQL    net start mysql-- 创建Windows服务    sc create mysql binPath= mysqld_bin_path(注意 ...

  2. 数据库之mysql篇(1)—— 数据库管理系统简介/mysql的安装、配置

    说mysql之前,还是先说说数据库. 什么是数据库: 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后 ...

  3. 数据库之mysql篇(3)—— mysql创建/修改数据表/操作表数据

    创建数据表:create table 数据表名 1.创建表规范 create table 表名( 列名   数据类型    是否为空   自动排序/默认值  主键/外键/唯一键, 列名   数据类型 ...

  4. 数据库之mysql篇(6)—— mysql常用函数函数/自定义函数

    常用函数 运算函数 我相信你都能看懂,所以以上的不再做过多解释 然后还有个,前面漏掉的between and: 意指10是否在0到20之间,如果是返回1,否则返回0 日期函数 这个要稍微注意一下参数, ...

  5. 数据库之mysql篇(5)—— 【转载】mysql练习题

    原帖地址:http://www.cnblogs.com/wupeiqi/articles/5748496.html 范例数据sql: /* Navicat Premium Data Transfer ...

  6. 数据库之mysql篇(4)—— navicat操作mysql

    navicat 1.简介: navicat是一个软件,旗下针对不同数据库有不同的软件版本,支持以下数据库,还是挺厉害的: 这里我采用navicat for mysql版本.实现图形化的操作mysql, ...

  7. 数据库之mysql篇(2)—— mysql常识引入/用户授权

    常识引入 1.概念: 数据库:本质上是一个文件夹 1)查看本机所有数据库:show databases; 结束符:分号[:],一切数据行的结尾都以分号作为结束 2)创建数据库:create  数据库名 ...

  8. 数据库【mysql篇】典型的一些练习题目

    班级表 class 学生表student 老师表 teacher 课程表course 成绩表 score 准备数据 创建数据库 create database tang_test charset='u ...

  9. 数据库高可用架构(MySQL、Oracle、MongoDB、Redis)

    一.MySQL MySQL小型高可用架构 方案:MySQL双主.主从 + Keepalived主从自动切换   服务器资源:两台PC Server 优点:架构简单,节省资源 缺点:无法线性扩展,主从失 ...

随机推荐

  1. Java基础学习总结(92)——Java编码规范之排版、注释及命名

    为使开发人员养成良好的开发习惯,编写可读性强.易维护的程序,结合以往资料,现整理Java编码规范,将之作为开发人员的参照依据. 一.排版 1.相对独立的程序块之间必须加空行 下列情况应该使用一个空行: ...

  2. CentOS 中 YUM 安装桌面环境

    CentOS 作为服务器的操作系统是很常见的,但是因为需要稳定而没有很时髦的更新,所以很少做为桌面环境.在服务器上通常不需要安装桌面环境,最小化地安装 CentOS(也就是 minimal CentO ...

  3. 任务查询系统(bzoj 3932)

    Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si ...

  4. 汕头市赛srm10 T2

    n个数,分组,数Ai要在至少含有Ai个数的组,求最多分多少组. 方法一:大的数应该尽量跟大的在一起,这样才能让小的出现很多很多组,所以从大到小排序,给当前序列中最大的数x分x个数.代码如下: #inc ...

  5. jQuery的切换函数(hover,toggle)

    1.hover:(鼠标悬停与离开事件) 一个模仿悬停事件(鼠标移动到一个对象上面及移出这个对象)的方法.这是一个自定义的方法,它为频繁使用的任务提供了一种“保持在其中”的状态. 当鼠标移动到一个匹配的 ...

  6. [Bzoj4566][Haoi2016]找相同字符(广义后缀自动机)

    4566: [Haoi2016]找相同字符 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 861  Solved: 495[Submit][Statu ...

  7. 登录页面练习servlet

    登录练习: 1创建登录页面 创建servlet进行登录页面请求 2点击登录完成操作 浏览器发送请求到服务器(用户信息+其他数据 )3服务器调用对应的servlet进行处理 设置响应编码格式 获取请求信 ...

  8. PHP移植

    1. 首先交叉编译zlib. CC=arm-linux-gcc ./configure --sahred --prefix=/usr/local/arm/3.4.1/arm-linux make&am ...

  9. http://www.doframe.com/jetoolweb/index.html

    http://www.doframe.com/jetoolweb/index.html http://www.doframe.com/jetoolweb/html/tasks/orders.html# ...

  10. kvm虚拟化学习笔记(一)之kvm虚拟化环境安装

    平时一直玩RHEL/CentOS/OEL系列的操作,玩虚拟化也是采这一类系统,kvm在RHEL6系列操作系统支持比较好,本文采用采用OEL6.3操作系统,网上所有文章都说KVM比xen简单,我怎么感觉 ...