`
zhxh1987200
  • 浏览: 2396 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

最近学习mysql集群的体会

阅读更多
        作为程序员,前段时间学习了下mysql的集群方案,对高可用,负载均衡有了一定认识,现在写写自己的看法,大家多交流,提高水平~
        高可用,负载均衡是实际生产中,mysql及其他所有数据库都需要保证的,两者又是相辅相成的。
        先说说高可用,对mysql而言,有主主,主从,多主多从等架构方案,对应不同的架构,对应有不同的HA方案。这里需要针对mysql主备,主从分别描述。
        主备方案,一般是某个主机作为热备,并没有被使用,主主之间又互为主从,两者进行数据同步。在使用时,不需要实现读写分离。
        常用的主备高可用方案有keepalived,heartbeat 两种,这两种方案使用的场景很多,对于别的需要实现主备的服务而言,也是可行的。
        keepalived,配置比较简单,使用的vrrp协议方式,虚拟路由冗余协议 (Virtual Router Redundancy Protocol,简称VRRP),提供的是4层的负载均衡,能通过编写脚本实现对mysql服务的监控,再配合虚拟IP使用,检测到一台主机down之后,能迅速切换到另一台主机。
        heartbeat是linux的ha方案,配置较复杂,是基于主机或网络的高可用方式,一旦其无法检测到主服务器的“心跳”则自动接管主服务器的资源。但是如果配置不当,会产生“split-brain”,即两个节点同时认为自已是唯一处于活动状态的服务器从而出现争用资源的情况,如VIP(虚拟IP)争用。keepalived则能够很好地解决这个问题。一般是lvs的高可用建议用keepavlived,业务的高可用用heartbeat。
        对于mysql主从,一般是结合多主多从使用较多,相应的高可用方案有mysql-mmm,mysql-mha方案比较常用。
        mysql-mmm(Master-Master Replication Manager for MySQL),高可用方案,同时也是读写分离方案,优点:部署简单,稳定性比较好;缺点:如果两台master挂掉,slave不会自动的升级到master,整个集群只能读不能写数据。
        mysql-mha(mysql-master-ha),有以下特点:主服务器的自动监控和故障转移,交互式主服务器故障转,非交互式的主故障转移,在线切换主服务器。相比mmm方案,mha方案的优缺点,优点:可以自动同步差异的日志,可以自己写故障转移的脚本,比较灵活;缺点:如果故障转移了需要重新修改配置文件,重新启动masterha_manager服务(这点比较不好)。
        对于mysql负载均衡方案,主要有LVS,haproxy方案,nginx也是可行的。
        LVS,通过vrrp协议进行数据包转发的,提供的是4层的负载均衡。特点是效率高,只要机器网卡抗的住就不是问题。
        haproxy,可以提供4层或7层的数据转发服务,能做到7层的好处是可以根据服务所处的状态等进行负载。
        Nginx,工作在网络的7层,也常作为web服务的负载均衡服务器,且支持插件安装,也很好地开源了,能根据各自的业务,编写相应的插件,如控制nginx负载路由的规则的等。但是,这些方案本身也是存在单点故障的,故还需要实现负载均衡方案本身的高可用。
        一般实现负载均衡,和负载均衡服务本身的高可用的组合是:
                LVS+keepalived (都是通过vrrp协议来实现的)
                haproxy+heartbeat
                nginx+heartbeat
        高可用,负载均衡是生产环境中,几乎所有服务都需要满足的,针对mysql有些特殊的地方,如实现读写分离,分库分表等。 目前常用的能够实现读写分离的方案有mysql-proxy,amoeba等。
        mysql-proxy提供MySQL协议接口(非JDBC),主从结构,可以负载平衡,读写分离,failover等,lua语法复杂,不支持大数据量的分库分表。
        Amoeba,相当于一个SQL请求的路由器, 目的是为负载均衡、读写分离、高可用性提供机制,而不是完全实现它们。
        Amoeba主要解决以下问题:
                a). 数据切分后复杂数据源整合;
                b). 提供数据切分规则并降低数据切分规则给数据库带来的影响;
                c). 降低数据库与客户端连接;
                d). 读写分离路由;
                f).支持分库,分表,事务。
        不足:
                a)、目前还不支持事务;
                b)、暂时不支持存储过程(近期会支持);
                c)、不适合从amoeba导数据的场景或者对大数据量查询的query并不合适(比如一次请求返回10w以上甚至更多数据的场合);
                d)、暂时不支持分库分表。
        amoeba目前只做到分数据库实例,每个被切分的节点需要保持库表结构一致。淘宝的TDDL(这个比较复杂,但功能很强大)。amoeba在使用时,可以理解是实现sql层面的读写分离。mysql-mmm方案可以对外提供一个读VIP,一个写VIP,至于读命令或写命令怎么分配到哪台机器是该方案实现的,但是用户的一条sql语句发过来了,怎么将对应的sql进行分析,将读相关操作给读VIP,写相关操作给写VIP,这是amoeba需要处理的了。
        总之,这些方案只有配合使用,才能很好的实现mysql的高可用,负载均衡,如:使用mysql-mmm+ameoba+keepalived方案,其中mysql-mmm是mysql的高可用方案,ameoba是读写分离方案,keepalived保证ameoba的高可用。当然还得根据各自的业务需要,主机数量等因素,来进行权衡。
分享到:
评论

相关推荐

    Spring + Ibatis 与mysql集群集成

    本教程将深入探讨如何将Spring、Ibatis框架与MySQL集群集成,以实现高效、可靠的数据库操作。 首先,让我们了解Spring和Ibatis。Spring是一个全面的Java应用开发框架,它提供了依赖注入、面向切面编程、事务管理等...

    mysql集群搭建教程

    MYSQL集群搭建教程 MYSQL集群搭建是指将多个MYSQL服务器组合成一个集群,以提高数据库的高可用性和负载能力。本文将详细介绍MYSQL集群的搭建过程。 Knowledge Point 1: MYSQL集群架构 MYSQL集群架构主要包括管理...

    centos7搭建mysql集群

    ### CentOS 7 搭建 MySQL 集群详解 #### 一、概述 随着业务规模的扩大,单一数据库服务器往往难以满足高并发、大数据量的需求。为了提高系统的可用性和性能,采用 MySQL 集群成为一种常见的解决方案。本文将详细...

    mysql集群环境搭建.docx

    MySQL 集群环境搭建 MySQL 集群环境搭建是指将多台服务器组合成一个高性能、可靠的数据库系统,以实现高可用性和高性能。该系统可以分担客户的访问压力,自动进行数据分区和负载均衡,实现线性数据库扩展。 1. ...

    mysql集群配置教程

    MySQL集群配置教程旨在帮助初学者理解并实现MySQL集群的搭建,让数据库的高可用性和负载均衡成为可能。...学习和实践MySQL集群配置,不仅可以提升数据库管理技能,还能为企业的数据安全和性能提供有力保障。

    Linux MySQL集群环境搭建

    "Linux MySQL集群环境搭建" 在Linux系统下,MySQL集群的搭建是一个复杂的过程,它需要oroughly了解MySQL集群的概念、架构和配置。在本文中,我们将详细介绍MySQL集群的概念、架构、环境配置、安装和配置MySQL集群...

    mysql集群的一种方案

    MySQL集群是一种分布式数据库解决方案,旨在提高数据的可用性、可扩展性和容错性。在本方案中,我们将探讨MySQL集群的构建、工作原理以及其在实际应用中的优势和挑战。 一、MySQL集群概述 MySQL集群(MySQL ...

    linux mysql集群

    Linux MySQL 集群安装和配置 本文将向您讲述如何安装和配置一个基于 Linux 的 MySQL 集群,实现高可用性和负载均衡。我们将介绍如何在 3 台服务器上安装和配置 MySQL 集群,包括 Server1、Server2 和 Server3,其中...

    mysql集群方案对比

    - 缺点:与标准MySQL可能存在差异,可能需要额外的学习和维护成本。 5. **MariaDB Cluster (Galera-based)** - 原理:与Galera Cluster类似,但作为MariaDB的一部分,提供额外的功能和优化。 - 优点:与MySQL...

    mysql集群-中文版

    标题:“mysql集群-中文版” 描述:“高可用的mysql集群的讲解,简单明了,通俗易懂,希望大家喜欢。” 知识点: 1. MySQL集群的定义和重要性:MySQL集群是一种高性能、高可用性的数据库解决方案,它允许多个MySQL...

    MySQL集群评估手册.pdf

    MySQL集群是一种高性能、高可用性的数据库集群技术,它通过将多个MySQL数据库实例组成一个集群来提供数据的冗余和故障转移能力。在评估MySQL集群的实施之前,了解其架构、组件以及它们之间的交互是非常必要的。 ...

    MySQL集群配置与使用(Windows环境)

    Windows环境下MySQL集群的搭建,使用了三个节点,第一个节点作为管理节点,第二个节点作为数据节点A和SQL节点A,第三个节点作为数据节点B和SQL节点B。 此外,还演示了如何使用图形化客户端管理MySQL集群,新建数据库...

    mysql集群解决方案

    MySQL集群解决方案旨在提高数据库系统的高可用性和负载均衡,以应对日益增长的网络服务需求。MySQL作为世界上最流行的开源数据库,因其开源、免费、跨平台、多语言支持和高效等特点而备受青睐。然而,MySQL在某些...

    linux安装mysql集群

    在Linux环境中安装MySQL集群是一项复杂但重要的任务...为了深入了解和操作MySQL集群,建议阅读官方文档,学习如何配置复制、故障切换、性能优化等相关知识。同时,不断关注MySQL的新版本和更新,以保持集群的最佳状态。

    centos7部署mysql集群1

    在本篇中,我们将深入探讨如何在CentOS7环境下部署MySQL集群,具体为1个管理节点加2个数据节点和2个SQL节点的配置。首先,我们从环境清理和准备工作开始,然后逐步进行软件安装、配置以及启动服务。 1. **环境清理...

    MYSQL集群测试

    在进行MYSQL集群测试时,涉及的知识点相当广泛,主要包括以下几个方面: 1. 测试工具介绍:文档提到了mysqlslap、sysbench、supersmack等工具,这些都是用于测试MYSQL性能的工具。 - mysqlslap是一个用于模拟多...

    MYSQL 集群

    MYSQL 集群 MYSQL 集群是大型网站架构的设计方案的核心组件之一,旨在提高数据库的高可用性和可扩展性。在本文中,我们将详细介绍 MYSQL 集群的配置和实现过程。 在开始之前,我们需要了解 MYSQL 集群的基本概念。...

    MySQL-集群最佳解决方案

    MySQL集群最佳解决方案的知识点主要包括MySQL的高可用性解决方案、MySQL复制技术、MySQL集群技术和第三方合作伙伴提供的解决方案。下面将详细阐述这些知识点。 1. MySQL的高可用性解决方案 高可用性(High ...

Global site tag (gtag.js) - Google Analytics