DevOps学院

DevOps学院

中国新一代IT在线教育平台
运维知识体系

运维知识体系

运维知识体系总结,持续更新,欢迎转载。
缓存知识体系

缓存知识体系

运维知识体系之缓存,分层多级缓存体系。
速云科技

速云科技

DevOps咨询、企业内训、落地解决方案。

mysql数据库跨机房高可用的开源方案推荐

回复

MySQLhuhaikui2018 发起了问题 • 1 人关注 • 0 个回复 • 245 次浏览 • 2018-10-05 11:53 • 来自相关话题

求一款SQL自动备份恢复带邮件功能的工具

MySQLz836441256 回复了问题 • 3 人关注 • 2 个回复 • 1320 次浏览 • 2017-12-07 18:47 • 来自相关话题

mysql 5.6(阿里云RDS)内存使用率持续增长

MySQLz836441256 回复了问题 • 3 人关注 • 2 个回复 • 1811 次浏览 • 2017-12-07 18:45 • 来自相关话题

NEWSQL为什么这么火,这种新的数据库优缺点是什么?适合什么类型的业务

回复

MySQL咖啡 回复了问题 • 1 人关注 • 1 个回复 • 1227 次浏览 • 2017-08-16 16:42 • 来自相关话题

MySQL DAL(Data Access Layer)中间件总结

MySQL赵班长 发表了文章 • 1 个评论 • 2265 次浏览 • 2016-12-10 13:53 • 来自相关话题

        DAL是数据访问层的英文缩写,即为数据访问层(Data Access Layer)。用在这里可能不是特别恰当,因为本文主要介绍MySQL访问的中间件,不过也是属于DAL的范畴。本文不会去高可用相关的知识,主要聚焦于MySQL的横向扩展。 ...查看全部
        DAL是数据访问层的英文缩写,即为数据访问层(Data Access Layer)。用在这里可能不是特别恰当,因为本文主要介绍MySQL访问的中间件,不过也是属于DAL的范畴。本文不会去高可用相关的知识,主要聚焦于MySQL的横向扩展。
       我们知道最简单的一种扩展是MySQL 主从复制,通过1主多从来实现读的性能扩展,但是这样的扩展不仅仅有局限性,而且写入的问题并没有解决。目前市场上用三类解决方案:
       1.客户端分片(推荐)
    程序客户端进行分库分表。也就是直接在程序里面进行数据库和表的拆分,例如用户表。根据用户的UID,例如13678789,根据最后一位,可以拆分为0-9共10个数据库,把尾号是0的存入db_user_0数据库,尾号是1的存入db_user_1数据库,select的时候也是一样。然后根据倒数第二位,可以拆分为0-9共10张表,根据倒数第二的尾号写入相应的表中。例如13678789这个UID的信息,写入db_user_9数据库的table_user_8的表中。
    
 2.各种数据成中间件:
 
  2.1 MySQL-Proxy(不强烈推荐)

      先说MySQL自己的,MySQL Proxy: 是处在你的MySQL数据库客户和服务端之间的程序,它还支持嵌入性脚本语言Lua。这个代理可以用来分析、监控和变换(transform) 通信数据。
mysql-proxy.jpg

    MySQL Proxy最强大的一项功能是实现“读写分离(Read/Write Splitting)”。基本的原理是让主数据库处理事务性查询,而从数据库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库。

mysql-proxy2.png


    2.2  Atlas(不强烈推荐)

    Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。目前该项目在360公司内部得到了广泛应用,很多MySQL业务已经接入了Atlas平台,每天承载的读写请求数达几十亿条。同时,有超过50家公司在生产环境中部署了Atlas,超过800人已加入了我们的开发者交流群,并且这些数字还在不断增加。

atlas.jpg


主要功能:
  1. 读写分离
  2. 从库负载均衡
  3.  IP过滤
  4. 自动分表
  5. DBA可平滑上下线DB
  6. 自动摘除宕机的DB

     简单的说是在MySQL Proxy的基础上做了二次开发,并支持了自动分表的特性。但是仅支持非常有限的rang进行分表。目前有先的分支Atlas Sharding来实现更多的功能。

具体的功能清看Github,非常详细
https://github.com/Qihoo360/Atlas/blob/master/README_ZH.md

    2.3 Cobar(不强烈推荐)

      Cobar是阿里巴巴开源的一个,提供关系型数据库(MySQL)分布式服务的中间件,它可以让传统的数据库得到良好的线性扩展,并看上去还是一个数据库,对应用保持透明。

  • 产品在阿里巴巴稳定运行3年以上。

  • 接管了3000+个MySQL数据库的schema。

  • 集群日处理在线SQL请求50亿次以上。

  • 集群日处理在线数据流量TB级别以上。



cobar.jpg


详情:https://github.com/alibaba/cobar/wiki

2.4 MyCAT(不强烈推荐)

     MyCAT基于阿里开源的Cobar产品而研发的,目前社区相对比较活跃,功能也是最多的一个MySQL中间件,

    什么是MYCAT

  • 一个彻底开源的,面向企业应用开发的大数据库集群

  • 支持事务、ACID、可以替代MySQL的加强版数据库

  • 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群

  • 一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server

  • 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品

  • 一个新颖的数据库中间件产品


mycat.png


3.MySQL 集群

   3.1 MySQL Cluster(强烈不推荐)
      MySQL Cluster 是 MySQL 适合于分布式计算环境的高实用、高冗余版本。它采用了NDB Cluster 存储引擎,允许在1个 Cluster 中运行多个MySQL服务器。几乎无应用案例,不推荐。

mysql-cluster.png


    3.2 Percona XtraDB Cluster方案(推荐)

    Percona XtraDB Cluster简称PXCPercona Xtradb Cluster的实现是在原mysql代码上通过Galera包将不同的mysql实例连接起来,实现了multi-master的集群架构。
pxc.png

    上图中有三个实例,组成了一个集群,而这三个节点与普通的主从架构不同,它们都可以作为主节点,三个节点是对等的,这种一般称为multi-master架构,当有客户端要写入或者读取数据时,随便连接哪个实例都是一样的,读到的数据是相同的,写入某一个节点之后,集群自己会将新数据同步到其它节点上面,这种架构不共享任何数据,是一种高冗余架构。

    以上为个人生产经验,不代表产品本身的相关利益,不过还好了,都是开源的,大家可以根据自身情况选择。你会发现并没有强烈推荐的方案,主要是大家要考虑自身业务的情况进行选择,例如核心业务。连主从切换都不推荐自动,而是手动,宁愿业务不能访问,也不能出现自动主从切换导致数据丢失。
 

使用TiDB为Zabbix构建分布式MySQL数据库支持

MySQL赵班长 发表了文章 • 0 个评论 • 2758 次浏览 • 2016-10-27 11:13 • 来自相关话题

     当我们在生产上部署Zabbix进行企业级监控后,随着监控规模的扩大和时间的变化,MySQL逐渐会成为Zabbix的瓶颈,很多大的企业开始着手进行MySQL表分区、数据清理与优化,甚至来实现Zabbix数据库的分库分表。这些都让运维管理的复杂度大大增加 ...查看全部
     当我们在生产上部署Zabbix进行企业级监控后,随着监控规模的扩大和时间的变化,MySQL逐渐会成为Zabbix的瓶颈,很多大的企业开始着手进行MySQL表分区、数据清理与优化,甚至来实现Zabbix数据库的分库分表。这些都让运维管理的复杂度大大增加。
     当Zabbix遇上Tidb,一段美好的故事,就此展开!

TiDB介绍
    TiDB 是一个分布式 NewSQL 数据库。支持水平扩展、高可用、ACID 事务、SQL 等特性。同时 TiDB 还支持 MySQL 语法和 MySQL 协议。
    TiDB项目地址:https://github.com/pingcap/tidb  
   
由PingCAP公司开发并开源:https://github.com/pingcap/tidb
    对于熟悉Codis的小伙伴们来说,就更好解释了,就是当初豌豆荚开发Codis的团队出来创业组建的。
   
TiDB项目架构:
architecture.png


TiDB部署
    详细的内容请看github上的中文手册。来了解并部署TiDB。
https://github.com/pingcap/docs-cn

TiDB在Zabbix使用中授权注意事项
      
这里不会去介绍Zabbix Server的安装步骤,有几个注意事项需要说明下。
        1.注意:在Tidb授权的时候,不能直接使用grant授权并设置密码。应该使用下面的方式。
MySQL [(none)]> create user 'zabbix'@'192.168.99.0/255.255.255.0' identified by 'zabbix';
Query OK, 1 row affected (0.00 sec)

MySQL [(none)]> grant all on zabbix.* to 'zabbix'@'192.168.99.0/255.255.255.0';
Query OK, 2 rows affected (0.01 sec)


注意:TiDB 支持对用户授权,这里只是支持授权语法,并且记录在系统表中。但是实际上只对 DropTable 语句进行权限检查,对其他的语句并不会做权限检查。实现用户授权主要是为了兼容已有的 MySQL 业务。 请参考:https://github.com/pingcap/docs-cn/blob/master/faq.md


  2.TiDB在创建Zabbix表结构的时候会比较慢
    当我们初始化安装创建Zabbix表结构的时候,会发现卡住迟迟不动,这主要是TiDB的设计方式,为了数据的一致性和业务不受影响,DDL操作会比较慢。
zcat create.sql.gz | mysql -h 192.168.99.x -P 4000 -uzabbix -pzabbix zabbix


官方是这么介绍的:TiDB 实现了 Google F1 的在线 Schema 变更算法(具体参见 F1 论文 和我们的一篇 Blog)。 一般情况下,DDL 并不是一个频繁的操作,我们首先要保证的是数据的一致性以及线上业务不受影响。一个完整的 DDL 过程会有 2 到 5 个阶段(取决于语句类型),每个阶段至少会执行 2*lease 时间,假设 lease 设为 1分钟,对于 Drop Table 语句(需要两个阶段),会执行 2*2*1 = 4 分钟。除此之外,DDL 的时间还取决其他的条件,比如做 Add Index 操作时,表中已有的数据量是影响 DDL 时间的主要因素。我们也了解过 Google 内部在 F1 上是如何做 DDL,一般是提交给 DBA,DBA 再通过专用的工具执行,执行的时间会很长。


    耐心的等待着哦!如果不放心,可以use zabbix;show tables;看看表是不是在不停的增长!喝杯咖啡吧,这可能是一个漫长的过程。

TiDB运维技术交流QQ群:

  • 群名称:TiDB技术交流群

  • 群   号:463640808



QQ截图20161027105616.jpg

        近期我也在不停的测试TiDB,并持续给官方进行反馈,有兴趣的小伙伴环境,加入一起交流TiDB在生产环境中的使用经验。
 

MySQL基于复制的架构方案

MySQL运维社区编辑 发表了文章 • 2 个评论 • 1533 次浏览 • 2016-10-24 14:12 • 来自相关话题

    MySQL复制是一个非常简单而有方便进行架构扩展的功能,可以说是运维必备,我们通过对主从进行不同的组合,可以满足我们相应的需求。 分享目录: 一主一从,高可用一主一从,读写分离一主多从,读写分离一主多从,负载均衡主 ...查看全部
    MySQL复制是一个非常简单而有方便进行架构扩展的功能,可以说是运维必备,我们通过对主从进行不同的组合,可以满足我们相应的需求。

分享目录:
  • 一主一从,高可用
  • 一主一从,读写分离
  • 一主多从,读写分离
  • 一主多从,负载均衡
  • 主主复制,双写
  • 主主复制,单写
  • 双主双从

1.一主一从,高可用

1.png

架构说明:最传统的一主一从,如果主库发生故障,手动将从库提升为主库,从库仅用于故障恢复。

2.一主一从,读写分离

2.png

架构说明:还是一主一从,在客户端实现读写分离,不过需要注意主从延时的情况。小技巧:在写比较度的表上可以在Master不建立索引,而在Slave端来建立索引。

3.一主多从,读写分离

3.png

架构说明:和一主一从类似,在读请求比较多的情况下,可以增加MySQL从节点。


小技巧:可以在客户端实现多个从节点的轮询和权重的设置。



4.一主多从,负载均衡

4.png

架构说明:在对读需求场景比较多的情况下,为了不频繁的对客户端进行配置变更,可以在从库前端放置负载均衡。不过在slave比较多的时候。主从复制也会给MySQLMaster带来一些性能上和带宽上的压力。


小技巧:给Slave分配不同的角色。例如之前公众号文章说的延迟从库、灾备从库、数据仓库等。


5.主主复制,双写

5.png

架构说明:主主复制其实就是MySQL的双向复制,两台机器互为主从,双主可以同时写,不过要处理好自增ID重复问题,例如设置使用奇偶插入 。
6.主主复制,单写

6.png

架构说明:还是主主复制,不过这次单写,也就是双主当主从。既可以保证写的高可用,又可以保证读的高可用。


小技巧:这个是两台机器的最佳方案哦。



7. 双主双从

7.png


架构说明:在主主复制,单写的时候。如果一个主宕机,那么就读写另外一个主。可读的节点就剩下了一个。对于读需求比较多的业务可能会有问题,那么双主双从就可以解决这个问题。


小技巧:复杂的架构带的肯定是运维的难题哦。


好了,基于复制的扩展先写到这里,其实也可以使用MySQL Proxy替代客户端做的读写分离,不过一直没有生产使用过。今天北京天气不错,该出去转转了。如果觉得可以读,请转发和关注哦。

趁现在,关注我们         
牛人并不可怕,可怕的是牛人比我们还努力!关注“运维社区(微信ID:cloud-oaas)”公众号,每天利用空闲时间阅读一篇技术原创干货,满满的小幸福。
8.jpg


 

监控MySQL的时候监控用户应该怎么授权?

MySQL赵班长 发表了文章 • 0 个评论 • 1743 次浏览 • 2016-06-29 13:41 • 来自相关话题

    在我们监控MySQL的时候,需要连接到MySQL数据库,但是在进行用户授权的时候,要遵循权限最小化的原则,分配最简单够用的权限即可,下面是我给生产MySQL的监控用户授权。    mysql> grant select,process ...查看全部
    在我们监控MySQL的时候,需要连接到MySQL数据库,但是在进行用户授权的时候,要遵循权限最小化的原则,分配最简单够用的权限即可,下面是我给生产MySQL的监控用户授权。
   
mysql> grant select,process,replication client on *.* to monitor@'192.168.1.11' identified by 'monitor@xx';

mysql> flush privileges;

  • process通过这个权限,用户可以执行SHOW PROCESSLIST和KILL命令。默认情况下,每个用户都可以执行SHOW PROCESSLIST命令,但是只能查询本用户的进程。
  • replication client拥有此权限可以查询master server、slave server状态。

MySQL彻底清除slave信息

MySQL赵班长 发表了文章 • 0 个评论 • 1750 次浏览 • 2016-06-29 12:56 • 来自相关话题

     在我们的MySQL,Master和Slave进行主从切换的时候,Slave成功升级为主库,那么这个时候就需要彻底清理从库的信息,不然监控系统会认为这台服务器是Slave,而且会报主从同步失败。     其实非常的简单,只需要以下两步: ...查看全部
     在我们的MySQL,Master和Slave进行主从切换的时候,Slave成功升级为主库,那么这个时候就需要彻底清理从库的信息,不然监控系统会认为这台服务器是Slave,而且会报主从同步失败。
    其实非常的简单,只需要以下两步:
   
stop slave;
reset slave all;


RESET SLAVE ALL是清除从库的同步复制信息、包括连接信息和二进制文件名、位置。
从库上执行这个命令后,使用show slave status将不会有输出。