精华内容
下载资源
问答
  • 高可用性方案

    2013-03-15 14:21:10
    Linux高可用性方案之Heartbeat安装
  • MySQL数据库高可用性方案 MySQL数据库高可用性方案 MySQL数据库高可用性方案 MySQL数据库高可用性方案
  • Linux下的高可用性方案研究
  • Mysql数据库高可用性方案实践,非常不错,好好实践,很有用
  • 海量数据处理与高可用性方案 海量数据处理与高可用性方案 海量数据处理与高可用性方案
  • 实用文档 MySQL可用方案 1. 概述 随着互联网的发展 数据库的数据量也...能尽快恢复数据库的可用性 尽可 能的减少停机时间保证业务不会因为数据库的故障而中断 2 用作备份 只读副本等功能的非主节点的数据应该和主节点
  • linux高可用性方案

    2011-08-16 13:24:13
    rhel5 高可用集群heartbeat应用方案
  • 随着Linux在关键行业应用的逐渐增多,它必将提供一些原来由IBM和SUN这样的大型商业公司所提供的服务,这些商业公司所提供的服务都有一个关键特性,就是高可用集群。高可用集群是指一组通过硬件和软件连接起来的独立...
  • MySQL高可用方案 MHA

    2018-07-26 09:43:22
    MySQL高可用方案 MHA MySQL高可用方案 MHA MySQL高可用方案 MHA
  • MySQL高可用方案

    2019-11-30 23:24:58
    MySQL高可用方案 MySQL高可用方案 MySQL高可用方案

    最近整理了目前的MySQL高可用方案。

    MySQL 高可用方案包括3大类:

    • 共享存储
    • 同步复制
    • 基于复制的冗余

    下面分别看下每种方案。

    1.共享存储

    共享存储实现了数据库服务器和存储设备的解耦。
    比较典型的是SAN共享存储和DRBD磁盘复制。

    1.1 SAN

    SAN(Storage Area Network)存储如图所示。

    在这里插入图片描述
    SAN共享存储中,如果主库发生宕机,备库可以挂载相同的文件系统,保证主库和备库使用相同的数据。

    1.2 DRBD

    DRBD(Distributed Replicated Block Device)是Linux内核模块实现的块级别的同步复制技术,可以与SAN达到相同的共享存储效果。

    在这里插入图片描述

    2.同步复制

    同步复制的基本原理是,要求数据在集群中所有节点或大多数节点上提交。

    同步复制的数据库高可用方案,主要包括3种:

    • MySQL Cluster
    • Galera Cluster
    • MGR

    2.1 MySQL Cluster

    MySQL Cluster 或NDB Cluster 是MySQL 官方集群部署方案,基于NDB(Network DataBase) 存储引擎的完整的分布式数据库系统。

    在这里插入图片描述

    MySQL cluster主要由3部分组成:

    • SQL 层的 SQL 服务器节点
    • Storage 层的 NDB 数据节点
    • 负责管理各个节点的 Manage 节点

    2.2 Galera Cluster

    Galera Cluster是由第三方公司Codership所研发的一套免费开源的集群高可用性方案,实现了数据零丢失,官网地址为http://galeracluster.com/。其在MySQL InnoDB存储引擎基础上打了wsrep(虚拟全同步复制)补丁,Percona/MariaDB已捆绑在各自的发行版里,即PXC(Percona Xtradb Cluster), MGC(MariaDB Galera Cluster),目前只可在Linux系统下使用。

    Galera Cluster的三个(或多个)节点是对等关系,每个节点均支持写入,集群内部会保证写入数据的一致性与完整性。

    在这里插入图片描述

    2.3 MGR

    MGR, 即MySQL Group Replication(组复制),是MySQL官方推荐的一款高可用集群方案。MGR基于分布式协议Paxos,实现组复制,彻底解决了传统的异步复制和半同步复制中数据一致性无法保证的问题。

    使MySQL的使用领域更加广泛,可以涉足互联网金融行业。

    在这里插入图片描述
    当客户端发起一个更新事务时,该事务先在本地执行。

    执行完成之后,在发起事务的提交之前,会将产生的write set广播到其他节点,集群中节点进行冲突检测。

    如果冲突检测成功,达成一致,组内决定该事务可以提交,其它成员可以应用,否则就回滚。

    最终,所有组内成员以相同的顺序接收同一组事务。因此组内成员以相同的顺序应用相同的修改,保证组内数据强一致性。

    MGR的两种模式:

    • 单主模式
      组复制具有自动选主功能,每次只有一个 Server成员接受更新,其它成员只提供读服务。
    • 多主模式
      所有的Server 成员都可以同时接受更新,没有主从之分,成员角色是完全对等的。

    3.基于复制的冗余

    基于MySQL原生的复制。

    在这里插入图片描述

    复制工作过程包括:

    • 主库将数据更改记录到Binary Log
    • 从库将主库上的二进制日志复制到自己的Relay log
    • 从库读取中继日志,将主库的修改重放到从库上

    基于复制的高可用方案主要包括MMM和MHA。

    3.1 MMM

    MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序。MMM使用Perl语言开发,主要用来监控和管理MySQL Master-Master(双主)复制,虽然叫做双主复制,但是业务上同一时刻只允许对一个主进行写入,另一台备选主上提供部分读服务,以加速在主主切换时刻备选主的预热,可以说MMM这套脚本程序一方面实现了故障切换的功能,另一方面其内部附加的工具脚本也可以实现多个slave的read负载均衡。

    在这里插入图片描述

    3.2 MHA

    MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。

    该软件由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。

    在这里插入图片描述

    4.参考

    10款常见MySQL高可用方案选型解读

    MMM MHA

    展开全文
  • 电力系统管理网关的高可用性方案.pdf
  • MySQL高可用方案大全

    2016-05-17 12:26:18
    Lvs+Keepalived+MySQL 单点写入主主同步高可用方案 Lvs+Keepalived+MySQL 单点写入读负载均衡主主同步高可用方案 Heartbeat高可用MySQL主主同步方案 Heartbeat+DRBD+MySQL高可用方案 MMM高可用MySQL方案
  • 一种基于JAVA的非对称式高可用性方案及其实现,郭勇胜,,本文通过对UDP多组播套接字的研究,提出了一种新的节点高度自治的非对称式可用性(High Availability)方案,该方案突破了以往需要集�
  • 方案拓扑图 主从复制拓扑图 首先必须打开Master端的binary log(bin-log) Slave Master端获取该日志然后再在自己身上完全顺序的执行 优缺点优点:易实施、成本低、经济
  • Mysql高可用方案

    千次阅读 2019-04-26 09:02:04
    本次专题是MySQL高可用方案选型,这个专题想必有很多同学感兴趣。 高可用的意义以及各种不同高可用等级相应的停机时间我就不必多说了,直接进入主题。 可选MySQL高可用方案 MySQL的各种高可用方案,大多是基于...

    本次专题是 MySQL高可用方案选型,这个专题想必有很多同学感兴趣。

    高可用的意义以及各种不同高可用等级相应的停机时间我就不必多说了,直接进入主题。

    可选MySQL高可用方案

    MySQL的各种高可用方案,大多是基于以下几种基础来部署的:

    1. 基于主从复制;

    2. 基于Galera协议;

    3. 基于NDB引擎;

    4. 基于中间件/proxy;

    5. 基于共享存储;

    6. 基于主机高可用;

    在这些可选项中,最常见的就是基于主从复制的方案,其次是基于Galera的方案,我们重点说说这两种方案。其余几种方案在生产上用的并不多,我们只简单说下。

    基于主从复制的高可用方案

    双节点主从 + keepalived/heartbeat

    一般来说,中小型规模的时候,采用这种架构是最省事的。
    两个节点可以采用简单的一主一从模式,或者双主模式,并且放置于同一个VLAN中,在master节点发生故障后,利用keepalived/heartbeat的高可用机制实现快速切换到slave节点。

    在这个方案里,有几个需要注意的地方:

    • 采用keepalived作为高可用方案时,两个节点最好都设置成BACKUP模式,避免因为意外情况下(比如脑裂)相互抢占导致往两个节点写入相同数据而引发冲突;

    • 把两个节点的auto_increment_increment(自增起始值)和auto_increment_offset(自增步长)设成不同值。其目的是为了避免master节点意外宕机时,可能会有部分binlog未能及时复制到slave上被应用,从而会导致slave新写入数据的自增值和原先master上冲突了,因此一开始就使其错开;当然了,如果有合适的容错机制能解决主从自增ID冲突的话,也可以不这么做;

    • slave节点服务器配置不要太差,否则更容易导致复制延迟。作为热备节点的slave服务器,硬件配置不能低于master节点;

    • 如果对延迟问题很敏感的话,可考虑使用MariaDB分支版本,或者直接上线MySQL 5.7最新版本,利用多线程复制的方式可以很大程度降低复制延迟;

    • 对复制延迟特别敏感的另一个备选方案,是采用semi sync replication(就是所谓的半同步复制)或者后面会提到的PXC方案,基本上无延迟,不过事务并发性能会有不小程度的损失,需要综合评估再决定;

    • keepalived的检测机制需要适当完善,不能仅仅只是检查mysqld进程是否存活,或者MySQL服务端口是否可通,还应该进一步做数据写入或者运算的探测,判断响应时间,如果超过设定的阈值,就可以启动切换机制;

    • keepalived最终确定进行切换时,还需要判断slave的延迟程度。需要事先定好规则,以便决定在延迟情况下,采取直接切换或等待何种策略。直接切换可能因为复制延迟有些数据无法查询到而重复写入;

    • keepalived或heartbeat自身都无法解决脑裂的问题,因此在进行服务异常判断时,可以调整判断脚本,通过对第三方节点补充检测来决定是否进行切换,可降低脑裂问题产生的风险。

    双节点主从+keepalived/heartbeat方案架构示意图见下:

    MySQL双节点高可用架构

    图解:MySQL双节点(单向/双向主从复制),采用keepalived实现高可用架构。

    多节点主从+MHA/MMM

    多节点主从,可以采用一主多从,或者双主多从的模式。
    这种模式下,可以采用MHA或MMM来管理整个集群,目前MHA应用的最多,优先推荐MHA,最新的MHA也已支持MySQL 5.6的GTID模式了,是个好消息。
    MHA的优势很明显:

    • 开源,用Perl开发,代码结构清晰,二次开发容易;

    • 方案成熟,故障切换时,MHA会做到较严格的判断,尽量减少数据丢失,保证数据一致性;

    • 提供一个通用框架,可根据自己的情况做自定义开发,尤其是判断和切换操作步骤;

    • 支持binlog server,可提高binlog传送效率,进一步减少数据丢失风险。

    不过MHA也有些限制

    • 需要在各个节点间打通ssh信任,这对某些公司安全制度来说是个挑战,因为如果某个节点被黑客攻破的话,其他节点也会跟着遭殃;

    • 自带提供的脚本还需要进一步补充完善,当然了,一般的使用还是够用的。

    多节点主从+etcd/zookeeper

    在大规模节点环境下,采用keepalived或者MHA作为MySQL的高可用管理还是有些复杂或麻烦。
    首先,这么多节点如果没有采用配置服务来管理,必然杂乱无章,线上切换时很容易误操作。
    在较大规模环境下,建议采用etcd/zookeeper管理集群,可实现快速检测切换,以及便捷的节点管理。

    基于Galera协议的高可用方案

    Galera是Codership提供的多主数据同步复制机制,可以实现多个节点间的数据同步复制以及读写,并且可保障数据库的服务高可用及数据一致性。
    基于Galera的高可用方案主要有MariaDB Galera Cluster和Percona XtraDB Cluster(简称PXC),目前PXC用的会比较多一些。

    PXC的架构示意图见下:

    pxc overview

    (图片源自网络),图解:在底层采用wsrep接口实现数据在多节点间的同步复制。

     

    pxc certification

    (图片源自网络),图解:在PXC中,一次数据写入在各个节点间的验证/回滚流程。

    PXC的优点

    • 服务高可用;

    • 数据同步复制(并发复制),几乎无延迟;

    • 多个可同时读写节点,可实现写扩展,不过最好事先进行分库分表,让各个节点分别写不同的表或者库,避免让galera解决数据冲突;

    • 新节点可以自动部署,部署操作简单;

    • 数据严格一致性,尤其适合电商类应用;

    • 完全兼容MySQL;

    虽然有这么多好处,但也有些局限性:

    • 只支持InnoDB引擎;

    • 所有表都要有主键;

    • 不支持LOCK TABLE等显式锁操作;

    • 锁冲突、死锁问题相对更多;

    • 不支持XA;

    • 集群吞吐量/性能取决于短板;

    • 新加入节点采用SST时代价高;

    • 存在写扩大问题;

    • 如果并发事务量很大的话,建议采用InfiniBand网络,降低网络延迟;

    事实上,采用PXC的主要目的是解决数据的一致性问题,高可用是顺带实现的。因为PXC存在写扩大以及短板效应,并发效率会有较大损失,类似semi sync replication机制。

    其他高可用方案

    • 基于NDB Cluster,由于NDB目前仍有不少缺陷和限制,不建议在生产环境上使用;

    • 基于共享存储,一方面需要不太差的存储设备,另外共享存储可也会成为新的单点,除非采用基于高速网络的分布式存储,类似RDS的应用场景,架构方案就更复杂了,成本也可能更高;

    • 基于中间件(Proxy),现在可靠的Proxy选择并不多,而且没有通用的Proxy,都有有所针对,比如有的专注解决读写分离,有的专注分库分表等等,真正好用的Proxy一般要自行开发;

    • 基于主机高可用,是指采用类似RHCS构建一个高可用集群后,再部署MySQL应用的方案。老实说,我没实际用过,但从侧面了解到这种方案生产上用的并不多,可能也有些局限性所致吧;

    以DBA们的聪明才智,肯定还有其他我不知道的方案,也欢迎同行们间多多交流。

     

     

    从 MySQL+MMM 到 MariaDB+Galera Cluster : 一个高可用性系统改造

    很少有事情比推出高可用性(HA)系统之后便经常看到的系统崩溃更糟糕。对于我们这个Rails运行机的团队来说,这个失效的HA系统是MySQL多主复制管理器(MMM)

    25081034_gj7s.png

    我们已经找寻MMM的替代品有一段时间了,几个月之前,我们转换到了MariaDB + Galera Cluster以寻求高可用的Mysql。

    MMM怎么了,Galera Cluster又有什么特别之处呢?继续阅读!

    MySQL多主机复制 (MMM)基本被打破

    MySQL MMM 是如何工作的:一台安装了MySQL MMM的服务器每十秒种(默认间隔)轮询一次MySQL节点, 来检查其状态。仅其中的一台服务器接收到写入器角色 - 其他的可以拥有阅读器角色。 MMM 维护了一个虚拟IP,这个IP指向拥有写入器角色的节点。

    问题在于轮询:如果MySQL每十分钟轮询,那么如果写入器节点在检查的间歇出现故障怎么办?如果你设置了HA你可能正处理着许多事务 - 在MMM检测到写入器节点不正常之前,可能已经有成千上万的事务失败了。更糟糕的是,如果存在一种内部问题:复制失败在先,事务失败在后,那么你要把写入器角色转到其他节点上吗?但是其他节点不一定符合原始的写入器节点。

    减少轮询间隔到1秒也不能修正这个问题-大型数据库可能在每秒内运行许多事务。

    因此轮询是根本问题,而且超出了根本问题范围。无法控制的MySQL MMM经常产生难以恢复的问题。Baron Swartz在Percona的MySQL大神上对MMM的缺陷有如下描述:

    简要地来说,MMM产生的宕机时间比它要防止的宕机时间更长。因此它是一个低可靠性的工具,不是高可靠性的工具。它可以让你连续几天以7X24小时的工作方式从宕机的机器里提取数据,并放回到服务器上,这只会导致系统真正的非常严重的一塌糊涂。因此,MMM赋予词语"cluset-f__k"新的意义。

    尽管MMM存在缺陷,然而它至少是对MySQL进行高可靠性的一次突破。然而时间改变了一切。甚至MySQL MMM的创建者也说到了要更改的时候了。Baron有关MMM的博客日志有Alexey's的如下评论:

    我是MMM的最初的作者,我完全同意你的意见。每次我试图给集群添加HA的时候,我都会想起MMM,而且需要亲自去尝试,因为我只是不确定这个工具的我所做的配置。而且市场上没有其他软件可以可靠地做这项工作。

    那么,为什么Galera是最好的MySQL HA解决方案呢?

    我们的Galera Cluster设置仍然使用轮询来做健康检测——这比MMM好在哪里呢?

    答案在于主从复制怎样是运作的。对于标准版的MySQL,对master的写操作被记录于一个二进制的日志。Slave会在之后复制二进制日志中的查询。查询在写服务器上运行与在其它节点上运行时刻之间,总是会有一个延迟。它是异步的

    MySQL异步复制有下面的问题:

    • slave服务器的数据集总是落后于master服务器。

    • MySQL复制很慢——它从二进制日志回访事务。

    对于Galera,事务是在它们被提交之前被所有节点确认。如果一个事务在一个节点失败了,那个节点将立刻从群集中移除。换句话说,Galera主从复制是同步的。你 永远也不会丢失事务——没有延迟 (而且Galera的 基于行的复制大约要快5倍速)。

    Galera集群是局内人

    MySQL MMM 是一个局外者—— 对于服务器上实际在发生的事情它是“哑的”。它只做一种检测,而且那就是它所知道的全部该如何反应的事情。

    Galera集群是一个“局内人”,因此对每个节点的内部状态要更机灵,并且不需要人工干预就可以做正确的事情(例如,一个节点同步或未同步,成为一个donor(节点处于为新节点准备或传输集群全量数据状态,对客户端不可用),等等——全部都是自动的)。

    当写入节点失败的时候会发生什么呢?

    由于用一个Galera集群可以写进任意节点,我们还是选择尽量减少潜在的死锁和只在一个节点写入。为此,我们使用HAProxy:我们拥有一个前端供“写入者”节点,另一个前端供读出以供所有节点实现余额查询。“写入者”通过单个节点发送请求,而其他的节点作为备份。

    如果HAProxy检测到“写入者”节点不正常,它立即提拔备份节点中的一个作为“写入者”。MySQL的MMM在这种情况下通常会关掉所有节点之间的通话——HAProxy不会如此。当“写入者”后台更新的时候,我们可能会丢失一部分请求,但它不会导致不一致的数据集通过服务器,这比瘫痪更糟糕。

    我们不会自动修复失败的节点,不过这没有关系。我主要关注点是确保一个正常的节点在执行写入,HAProxy是做这个的。

    修复失效的节点(并让它作为一个新的节点处于在线状态)

    当一个节点在标准的MySQL复制的时候失效,你将在再次进行复制的时候把大量的负载集中在一台服务器上(这台服务器不仅仅要进行读和写,而且还要承接来自innodbbackupex的负载)。

    使用Galera,你可以让其中一个节点离线(因此你至少需要三个节点)。这时这个节点就成为供给者节点-对它的写操作将被阻塞。这个节点就通过rsync传输自身的数据给失效的节点(或者新的节点)。然后,供给者节点和失效节点通过辅助队列运行查询而与其他节点保持同步。

    一旦这两个节点回归到同步状态,HAProxy将自动的标记它们为启动状态,然后把它们添回道前端。

    Galera集群也支持普通的MySQL,因此我们为什么不切换到MariaDB?

    切换到MariaDB的理由既有技术原因也有政治原因:

    • 易于移植:首先,MariaDB是MySQL的随手可得的替代品。从MySQL 5.1移植到MariaDB,只有Galera服务器5.6可以运行。

    • 性能:我们有几个包含索引的在性能方面存在问题的查询,后面通过令人惊讶的移植来”修补“这方面的问题。MariaDB似乎更适合于复杂查询和连接,而Rails上的Ruby也因处理复杂的查询和连接而扬名。MariaDB更适合做查找索引的整个工作,而且正如我前面所说,许多令人烦恼的查询现在已经提速了。我们似乎看不到二者在内存使用上有任何令人吃惊的区别。我期望Galera能更多的使用内存,不过如果这么做了,那么Galera就没有任何值得关注的地方了。

    • 社团:MariaDB有很大的驱动力,而且与MySQL相比增加了更多的功能。Oracle对MySQL未来倾注了大量的心血,而MariaDB看起来也存活了好长时间-甚至谷歌正在切换到MariaDB

    我们会再做一次?

    绝对地。我们没有看到有什么原因不切换到 MariaDB 和 Galera Cluster。

    监控 Galera Cluster

    25081035_S1or.png

    监控 Galera 的一件伟大的事情是它是分层的 - 我们可以很容易地监视栈的每一部分。我们使用 Scout 来监视,那意味着我们仅仅需要去使用下列插件:

    • MariaDB Galera Cluster - 安装在每一个 Galera Cluster 结点上去获取关键指标(本地状态,连通性,等)。

    • HAProxy - 为每一个代理安装(写入器一次,读取器一次)。

    • URL Monitoring - 检测和 HAProxy 检测的相同的状态URL来决定结点的健康。

    TL;DR

    直到最近, MySQL MMM 是添加高可用性到 MySQL 的最好的(但坏了的)途径。Galera Cluster 最终为 MySQL 增加了真实的高可用性,主要多亏同步复制。

     

    MariaDB作为Mysql的一个分支,在开源项目中已经广泛使用,例如大热的openstack,所以,为了保证服务的高可用性,同时提高系统的负载能力,集群部署是必不可少的。

    MariaDB Galera Cluster 介绍

    MariaDB集群是MariaDB同步多主机集群。它仅支持XtraDB/ InnoDB存储引擎(虽然有对MyISAM实验支持 - 看wsrep_replicate_myisam系统变量)。

    主要功能:

    • 同步复制

    • 真正的multi-master,即所有节点可以同时读写数据库

    • 自动的节点成员控制,失效节点自动被清除

    • 新节点加入数据自动复制

    • 真正的并行复制,行级

    • 用户可以直接连接集群,使用感受上与MySQL完全一致

    优势:

    • 因为是多主,所以不存在Slavelag(延迟)

    • 不存在丢失事务的情况

    • 同时具有读和写的扩展能力

    • 更小的客户端延迟

    • 节点间数据是同步的,而Master/Slave模式是异步的,不同slave上的binlog可能是不同的

    技术:

    Galera集群的复制功能基于Galeralibrary实现,为了让MySQL与Galera library通讯,特别针对MySQL开发了wsrep API。

    Galera插件保证集群同步数据,保持数据的一致性,靠的就是可认证的复制,工作原理如下图: 

    当客户端发出一个commit的指令,在事务被提交之前,所有对数据库的更改都会被 write-set 收集起来,并且将write-set 纪录的内容发送给其他节点。

    write-set 将在每个节点进行认证测试,测试结果决定着节点是否应用write-set更改数据。

    如果认证测试失败,节点将丢弃 write-set ;如果认证测试成功,则事务提交。

    1 安装环境准备

    安装MariaDB集群至少需要3台服务器(如果只有两台的话需要特殊配置,请参照官方文档

    在这里,我列出试验机器的配置:

    操作系统版本:centos7

    node4:10.128.20.16 node5:10.128.20.17 node6:10.128.20.18

    以第一行为例,node4为 hostname ,10.128.20.16为 ip ,在三台机器修改 /etc/hosts 文件,我的文件如下:

    10.128.20.16 node4
    10.128.20.17 node5
    10.128.20.18 node6

    为了保证节点间相互通信,需要禁用防火墙设置(如果需要防火墙,则参照官方网站增加防火墙信息设置)

    在三个节点分别执行命令:

    systemctl stop firewalld

    然后将 /etc/sysconfig/selinux 的 selinux 设置成 disabled ,这样初始化环境就完成了。

    2 安装 MariaDB Galera Cluster

    [root@node4 ~]# yum install -y mariadb mariadb-galera-server mariadb-galera-common galera rsync
    [root@node5 ~]# yum install -y mariadb mariadb-galera-server mariadb-galera-common galera rsync
    [root@node6 ~]# yum install -y mariadb mariadb-galera-server mariadb-galera-common galera rsync

    3 配置 MariaDB Galera Cluster

    初始化数据库服务,只在一个节点进行

    [root@node4 mariadb]# systemctl start mariadb
    [root@node4 mariadb]# mysql_secure_installation
    
    NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
          SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
    
    In order to log into MariaDB to secure it, we'll need the current
    password for the root user.  If you've just installed MariaDB, and
    you haven't set the root password yet, the password will be blank,
    so you should just press enter here.
    
    Enter current password for root (enter for none):
    OK, successfully used password, moving on...
    
    Setting the root password ensures that nobody can log into the MariaDB
    root user without the proper authorisation.
    
    Set root password? [Y/n]
    New password:
    Re-enter new password:
    Password updated successfully!
    Reloading privilege tables..
     ... Success!
    
    
    By default, a MariaDB installation has an anonymous user, allowing anyone
    to log into MariaDB without having to have a user account created for
    them.  This is intended only for testing, and to make the installation
    go a bit smoother.  You should remove them before moving into a
    production environment.
    
    Remove anonymous users? [Y/n] n
     ... skipping.
    
    Normally, root should only be allowed to connect from 'localhost'.  This
    ensures that someone cannot guess at the root password from the network.
    
    Disallow root login remotely? [Y/n] y
     ... Success!
    
    By default, MariaDB comes with a database named 'test' that anyone can
    access.  This is also intended only for testing, and should be removed
    before moving into a production environment.
    
    Remove test database and access to it? [Y/n] n
     ... skipping.
    
    Reloading the privilege tables will ensure that all changes made so far
    will take effect immediately.
    
    Reload privilege tables now? [Y/n] y
     ... Success!
    
    Cleaning up...
    
    All done!  If you've completed all of the above steps, your MariaDB
    installation should now be secure.
    
    Thanks for using MariaDB!

    关闭数据库,修改 /etc/my.cnf.d/galera.cnf

    [root@node4 mariadb]# systemctl stop mariadb
    [root@node4 ~]# vim /etc/my.cnf.d/galera.cnf

    修改以下内容:

    [mysqld]
    ......
    wsrep_provider = /usr/lib64/galera/libgalera_smm.so
    wsrep_cluster_address = "gcomm://node4,node5,node6"
    wsrep_node_name = node4
    wsrep_node_address=10.128.20.16
    #wsrep_provider_options="socket.ssl_key=/etc/pki/galera/galera.key; socket.ssl_cert=/etc/pki/galera/galera.crt;"

    提示:如果不用ssl的方式认证的话,请把 wsrep_provider_options 注释掉。

    将此文件复制到node5、node6,注意要把 wsrep_node_name 和 wsrep_node_address 改成相应节点的 hostname 和ip。

    4 启动 MariaDB Galera Cluster 服务

    [root@node4 ~]# /usr/libexec/mysqld --wsrep-new-cluster --user=root &

    观察日志:

    [root@node4 ~]# tail -f /var/log/mariadb/mariadb.log
    
    150701 19:54:17 [Note] WSREP: wsrep_load(): loading provider library 'none'
    150701 19:54:17 [Note] /usr/libexec/mysqld: ready for connections.
    Version: '5.5.40-MariaDB-wsrep'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MariaDB Server, wsrep_25.11.r4026

    出现 ready for connections ,证明我们启动成功,继续启动其他节点:

    [root@node5 ~]# systemctl start mariadb
    [root@node6 ~]# systemctl start mariadb

    可以查看 /var/log/mariadb/mariadb.log,在日志可以看到节点均加入了集群中。

    警告:--wsrep-new-cluster 这个参数只能在初始化集群使用,且只能在一个节点使用。

    5 查看集群状态

    我们可以关注几个关键的参数:

    wsrep_connected = on 链接已开启

    wsrep_local_index = 1 在集群中的索引值

    wsrep_cluster_size =3 集群中节点的数量

    wsrep_incoming_addresses = 10.128.20.17:3306,10.128.20.16:3306,10.128.20.18:3306 集群中节点的访问地址

    6 验证数据同步

    我们在 node4 上新建数据库 galera_test ,然后在 node5 和 node6 上查询,如果可以查询到 galera_test 这个库,说明数据同步成功,集群运行正常。

    [root@node4 ~]# mysql  -uroot  -proot  -e  "create database galera_test"
    [root@node5 ~]# mysql  -uroot  -proot  -e  "show databases"
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | galera_test        |
    | mysql              |
    | performance_schema |
    +--------------------+
    [root@node6 ~]# mysql  -uroot  -proot  -e  "show databases"
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | galera_test        |
    | mysql              |
    | performance_schema |
    +--------------------+

    至此,我们的 MariaDB Galera Cluster 已经成功部署。

     

    https://www.cnblogs.com/robbinluobo/p/8294782.html

    展开全文
  • 阿里mysql 高可用方案

    2018-06-21 16:15:57
    阿里mysql 高可用方案, 内部包含了阿里TMHA的实现细节。
  • 亲手搭建得server2016及sqlserver2016高可用方案,供大家使用,按照步骤肯定是能成功得。
  • MySQL高可用性方案.doc

    2020-03-27 00:54:02
    播思通讯技术北京有限公司 PAGE8 / NUMPAGES16 MySQL高可用 基于MySQL双主的Heartbeat V1.1初步测试版 播思通讯技术北京有限公司 2012年04月27日 目 录 TOC \o "1-3" \h \z \u 一 安装环境说明 3 1. 节点组成和IP...
  • 随着 Harbor 被越来越多地部署在生产环境下,Harbor 的高可用性成为用户关注的热点。对于一些大中型企业用户,如果只有单实例的 Harbor,则一旦发生故障,其从开发到交付的流水线就可能被迫停止,无法满足可用需求...


    随着 Harbor 被越来越多地部署在生产环境下,Harbor 的高可用性成为用户关注的热点。对于一些大中型企业用户,如果只有单实例的 Harbor,则一旦发生故障,其从开发到交付的流水线就可能被迫停止,无法满足高可用需求。

    本文提供基于 Harbor 的不同安装方式高可用方案,目标是移除单点故障,提高系统的高可用性。其中,基于 Harbor Helm Chart 的高可用方案为官方验证过的方案,基于多 Kubernetes 集群和基于离线安装包的高可用方案为参考方案。

    1. 基于 Harbor Helm Chart 的高可用方案

    Kubernetes 平台具有自愈(self-healing)能力,当容器崩溃或无响应时,可自动重启容器,必要时可把容器从失效的节点调度到正常的节点。本方案通过 Helm 部署 Harbor Helm Chart 到 Kubernetes 集群来实现高可用,确保每个Harbor 组件都有多于一个副本运行在 Kubernetes 集群中,当某个 Harbor 容器不可用时,Harbor 服务依然可正常使用。

    为实现 Harbor 在 Kubernetes 集群中的高可用,Harbor 的大部分组件都是无状态组件。有状态组件的状态信息被保存在共享存储而非内存中。这样一来,在 Kubernetes 集群中只需配置组件的副本个数,即可借助Kubernetes平台实现高可用。

    ◎ Kubernetes平台通过协调调度(Reconciliation Loop)机制使Harbor各组件达到期望的副本数,从而实现服务的高可用。

    ◎ PostgreSQL、Redis 集群实现数据的高可用性、一致性和前端会话(session)的共享。

    ◎ 共享数据存储实现 Artifact 数据的一致性。
    图片

    多Kubernetes集群的高可用架构

    上述介绍了使用 Harbor Helm Chart 在单个Kubernetes集群中搭建 Harbor 高可用环境的方案,其中实现了 Harbor 服务的高可用,但服务的整体可用性还是受到其运行所依赖的 Kubernetes 集群可用性的影响,如果集群崩溃,则会导致服务的不可用。在某些生产环境下会对可用性有更高的要求,因而基于多数据中心部署的多 Kubernetes 集群的高可用方案尤为重要。下面是在多个跨数据中心的 Kubernetes 集群上构建 Harbor 高可用环境的参考方案。

    图片
    上图可以看到,Harbor 在两个数据中心分别拥有独立的数据和内容存储。在两个数据中心之间配置了 Harbor 自带的远程复制功能,实现了对 Artifact (制品) 数据的复制(如镜像复制)。也就是说,在两个 Kubernetes 集群的数据存储上,通过远程复制来保证 Artifact 的一致性。而对于两个数据中心之间的PostgreSQL 和 Redis 的数据一致性,这里需要用户基于不同类型的数据中心提供自己的数据备份方案,目的是保持两个数据中心的 PostgreSQL 和 Redis 数据的一致性。

    本方案使用了 Harbor 主从(Active-Standby)模式,由于采用了镜像等 Artifact 远程复制,在数据同步上有一定的延时,在实际使用中需要留意对应用的影响。对实时性要求不高的用户,可参考此方案搭建跨数据中心多 Kubernetes 集群的高可用方案。

    注意:在多次安装过程中都需要保证 values.yml 配置项 core.secretName 和core.xsrfKey 的值相同,其他配置项可根据不同数据中心的需求自行配置。

    关于core.secretName 和 core.xsrfKey 值相同的具体原因,详见下文关于多 Harbor 实例之间需要共享的文件或者配置部分的内容。

    2. 基于离线安装包的高可用方案

    基于Kubernetes集群搭建的高可用架构是 Harbor 官方提供的方案。但用户可能出于某种原因无法部署独立的 Kubernetes 集群,更希望创建基于 Harbor 离线安装包的高可用方案。基于 Harbor 离线安装包搭建高可用系统是一项复杂的任务,需要用户具有高可用的相关技术基础,并深入了解 Harbor 的架构和配置。本节介绍的两种常规模式仅为参考方案,主要说明基于离线安装包实现高可用时,用户需要解决的问题和需要注意的地方。建议先阅读本章的其他内容,理解 Harbor 的安装及部署方式,在此基础上再结合各自的实际生产情况进行修改并实施。

    (1)基于共享服务的高可用方案

    此方案的基本思想是多个 Harbor 实例共享 PostgreSQL、Redis 及存储,通过负载均衡器实现多台服务器提供 Harbor 服务。
    图片
    重要配置:多个 Harbor 实例需要适当的配置才能工作,下面介绍相关原理,实际中用户可以灵活运用。

    a)关于负载均衡器的设置

    需要设置每个 Harbor 实例的配置文件的 external_url 项,把该项地址指定为负载均衡器的地址。通过该项指定负载均衡器的地址后,Harbor 将不再使用配置文件中的 hostname 作为访问地址。客户端( Docker 和浏览器等)通过 external_url 提供的地址(即负载均衡器的地址)访问后端服务的API。

    如果不设置该值,则客户端会依据 hostname 的地址来访问后端服务的API,负载均衡在这里并没有起到作用。也就是说,服务访问并没有通过负载均衡直接到达后端,当后端地址不被外部识别时(如有NAT或防火墙等情况),服务访问还会失败。

    如果 Harbor 实例使用了 HTTPS,特别是自持证书时,需要配置负载均衡器信任其后端每个 Harbor 实例的证书。同时,需要将负载均衡器的证书放置于每个Harbor实例中,其位置为 harbor.yml 配置项中 data_volume 指定路径下的 “ca_download” 文件夹中,该文件夹需要手动创建。这样,用户从任意 Harbor 实例的UI下载的证书就是负载均衡器的证书,如图所示。
    图片
    b)外置数据库的配置

    用户需要自行创建 PostgreSQL 共享实例或者集群,并将其信息配置到每个 Harbor 实例外置的数据库配置项中。注意:外置 PostgreSQL 数据库需要预先为Harbor Core、Clair、Notary Server及Notary Signer组件分别创建空数据库 registry、clair、notary_server 及 notary_singer ,并将创建的数据库信息配置到相应组件外置的数据库信息部分。Harbor 在启动时,会自动创建对应数据库的数据库表。

    c)外置Redis的配置

    用户需要自行创建Redis共享实例或者集群,并将其信息配置到每个 Harbor 实例外置的Redis配置项中。

    d)外置存储的配置

    用户需要提供本地或云端共享存储,并将其信息配置到每个 Harbor 实例的外置存储配置项中。

    e)多个 Harbor 实例之间需要共享的文件或者配置

    基于离线安装包安装的高可用方案需要保证以下文件在多个实例之间的一致性。同时,由于这些文件是在各个 Harbor 实例的安装过程中默认生成的,所以需要用户手动复制这些文件来保证一致性。

    private_key.pem和root.crt文件

    Harbor在客户端认证流程中提供了证书和私钥文件供 Distribution 创建和校验请求中的Bearer token。在多实例 Harbor 的高可用方案中,多实例之间需要做到任何一个实例创建的Bearer token都可被其他实例识别并校验,也就是说,所有实例都需要使用相同的 private_key.pem 和 root.crt 文件。

    如果多实例 Harbor 之间的这两个文件不同,在认证过程中就可能发生随机性的成功或失败。失败的原因是请求被负载均衡器转发到非创建该Bearer token的实例中,该实例无法解析非自身创建的token,从而导致认证失败。

    private_key.pem文件位于harbor.yml配置项data_volume 指定路径的“secret/core”子目录下。root.crt 文件位于 harbor.yml 配置项 data_volume 指定路径的“secret/registry”子目录下。

    csrf_key

    为防止跨站攻击(Cross Site Request Forgery),Harbor 启用了 csrf 的 token 校验。Harbor 会生成一个随机数作为 csrf 的 token 附加在 cookie 中,用户提交请求时,客户端会从 cookie 中提取这个随机数,并将其作为 csrf 的 token 一并提交。Harbor 会依据这个值是否为空或者无效来拒绝该访问请求。那么,多实例之间需要做到任何一个实例创建的 token 都可被其他任意实例成功校验,也就是需要统一各个实例的 csrf token 私钥值。

    该配置位于 Harbor 安装目录下的“common/config/core/env”文件中,用户需要把一个 Harbor 实例的值手动复制到其他实例上,使该值在所有实例上保持一致。

    注意:手动修改以上文件或配置时,均需要通过 docker-compose 重启 Harbor 实例以使配置生效。另外,如果后续要使用 Harbor 安装包中的 prepare 脚本,则需要重复上述手动复制过程。

    (2)基于复制策略的高可用方案

    此方案的基本思想是多个 Harbor 实例使用 Harbor 原生的远程复制功能实现Artifact 的一致性,通过负载均衡器实现多台服务器提供单一的 Harbor 服务。
    图片
    方案(2)与方案(1)不同的是,在安装 Harbor 实例时不需要指定外置的 PostgreSQL、Redis 及存储,每个实例都使用自己独立的存储。Harbor 的多实例之间通过远程复制功能实现 Artifact 数据的一致性。关于 PostgreSQL 和 Redis 的数据一致性问题,需要用户自行实现数据同步的解决方案。基于复制的多实例解决方案,其实时性不如基于共享存储的方案,但相比之下搭建更为简单,用户使用 Harbor 离线安装包提供的 PostgreSQL、Redis 即可。

    更多 Harbor 高可用方案的使用说明,请参考新书《Harbor权威指南》。

    展开全文
  • CDC高可用方案.docx

    2021-04-10 17:15:39
    CDC高可用方案
  • 本地高可用性解决方案-IBM打造更可靠的存储系统 IBM STG July 2007 主要内容 存储高可用性与业务连续性的关系 存储高可用性解决方案 存储可用系统和灾备系统之间的配合与转换 成功案例 主要内容 存储高可用性与...

    本地高可用性解决方案-IBM

    打造更高可靠的存储系统 IBM STG July 2007 主要内容 存储高可用性与业务连续性的关系 存储高可用性解决方案 存储高可用系统和灾备系统之间的配合与转换 成功案例 主要内容 存储高可用性与业务连续性的关系 存储高可用性解决方案 存储高可用系统和灾备系统之间的配合与转换 成功案例 本地高可用性是保障业务连续性的最基本环节 本地高可用性和灾难备份之间的关系 为什么要建设存储高可用系统 “高可靠性”和“高可用性”是两个不同的概念 系统的整体可用性,往往取决于它最薄弱的环节。例如: 相比主机系统来讲,存储系统受损坏的几率更高 (机械部件、微码变更、数据丢失等) 相比主机系统来讲,存储系统承担的作用更加重要 解决存储的“硬件疲劳”和“软件异常”问题 主要内容 存储高可用性与业务连续性的关系 存储高可用性解决方案 存储高可用系统和灾备系统之间的配合与转换 成功案例 各类可用性实现方式概览 解决方案一的特点 100%持续可用性 不需要切换操作,实现和管理简单 双磁盘写,对性能影响轻微 投资少,LVM是p系列主机AIX中的缺省技术,不需要额外的软件购买费用。只需少量的实施费用 IBM是唯一能够同时提供LVM镜像和磁盘复制的厂商 技术成熟 解决方案二的特点 数据零丢失,切换快捷 不受主机平台限制,对服务器透明 技术成熟,众多成功案例 实施简单、管理方便 未来容易改造成三站式业务连续性方案 异构存储解决方案的特点 不受主机平台限制 不受存储平台限制 可以在现有SAN结构上平滑改造 额外的业务价值 无缝的在线数据迁移 多个磁盘空间利用率均衡化 减少功能软件购买成本 主要内容 存储高可用性与业务连续性的关系 存储高可用性解决方案 存储高可用系统和灾备系统之间的配合与转换 成功案例 覆盖范围比较 不同层次业务连续性的相关定义与概念 转换模式示例:3站式业务连续性方案 For customers with an absolute requirement for constant access to data IBM Metro/Global Mirror for the DS8000 offers 3-site disaster recovery/backup support as a generally available function A three-site, cascading remote copy solution using the IBM System Storage DS8000 Uses separately priced IBM Metro Mirror, IBM Global Mirror, and IBM FlashCopy? functions Benefits Designed to maintain a consistent and re-startable copy of the data at the remote site, with minimal impact to applications at the local site Designed to allow data consistency to be managed across multiple machines configured in a single session, with data currency at the remote site lagging behind the local site by as little as 3 to 5 seconds Designed to support failover / failback modes for efficient resynchronization, with incremental resync of changes in event of loss of any of sites (Includes site A to C resync for DS8000) Solution can help reduce load on site A in comparison to multi-target (non-cascaded) 3-site mirroring solutions Advantaged in requiring less network bandwidth and therefore lower cost than offerings from competing vendors 主要内容 存储高可用性与业务连续性的关系 存储高可用性解决方案 存储高可用系统和灾备系统之间的配合与转换 成功案例 总结 – 选择IBM

    展开全文
  • 主要针对MySQL数据库的高可用方案进行详细总结,高可用架构对于互联网服务基本是标,本文是对各种方案的总结,感兴趣的小伙伴们可以参考一下
  • 并发,扩展,高可用方案汇总并发,扩展,高可用方案汇总扩展解决方案高性能解决方案高可用解决方案 并发,扩展,高可用方案汇总 扩展解决方案 性能解决方案 高可用解决方案 ...
  • Kubernetes集群高可用方案

    千次阅读 2016-04-05 09:23:37
    Kubernetes作为容器应用的管理中心,通过对Pod的数量进行监控,并且根据主机或容器失效的状态将新的Pod调度到其他Node上,实现了应用层的可用性。针对Kubernetes集群,可用性...1.etcd高可用性方案etcd在整个Ku...
  • 我们在考虑MySQL数据库的可用的架构时,主要要考虑如下几方面:如果数据库发生了宕机或者意外中断等故障,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据库的故障而中断。用作备份、只读...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 704,949
精华内容 281,979
关键字:

高可用方案