11. MGR技术架构及数据同步、认证机制 | 深入浅出MGR

深入解析MySQL MGR原理 它能够在多节点间保持数据的一致性,自动处理故障转移和数据修复,适应多种工作模式,并提供了一系列性能优化手段,适用于对数据一致性和服务可用性有严格要求的场景。Paxos引擎在此基础上实现分布式一致性算法,确保在任何给定时刻,组内只有一个节点能提交某个事务,并确保所有节点最终对事务的执行达成一致。:节点定期或在事件触发时向组内其他节点报告自己的状态,包括事务执行进度、健康状况等,以便其他节点了解整个组的全局状态。:在部分节点发生故障时,剩余健康节点能够继续服务,并在故障节点恢复后协助其追赶上组的最新状态。 阅读详情
  • GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。
  • GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。

[toc]

本文简单介绍下MGR的整体技术架构概况,事务同步过程,事务认证机制等关键知识点。

1. MGR架构

再来看一遍MGR的架构图:

file

从上图可知,MGR工作时,主要涉及到以下三层:

  1. Server层:负责处理用户请求,接收用户事务,返回结果等。
  2. MGR处理层:接收来自Server层的事务请求,处理Paxos层返回消息。
  3. Paxos层:将所有消息进行全局排队,然后发送给MGR处理层。

MGR是以Plugin(插件)的方式集成到MySQL中,可以简单灵活部署,它在MySQL进行事务处理、Binlog传输和持久化等逻辑处理时,预埋了一些(Hook)钩子,在钩子上注册函数处理MGR相关逻辑。

以用户提交事务为例:

  1. 用户线程发出commit,请求提交事务,处在Server层。
  2. Server层调用MGR处理层,将事务信息通过Paxos层进行同步,用户线程等待。
  3. MGR处理层处理Paxos同步后的消息,唤醒用户线程,返回到Server层。

在上面的架构图中,可以看到有以下几个模块:

  1. Capture,负责跟踪本节点的事务。
  2. Applier,负责执行远程事务(在其他节点产生的事务)。
  3. Recovery,负责故障恢复时,选择donor节点,catch up binlog等。
  4. Replication Protocol Logics,消息封装、接收XCom返回的消息、发送本节点消息给XCom、事务认证(冲突检测)等。
  5. GCE,在GCS层具体实现XCom(XCom是eXtended COMmunications的缩写,是Paxos协议在MySQL里的具体实现,在有些文章中看到Paxos和XCom可以认为是同一个意思)。

MGR集群由DB1、DB2、DB3三个节点构成,则对于DB1来说,DB2、DB3上产生的事务就是远程事务,而DB1上产生的事务则是本地事务。

2. 事务数据同步、认证过程

用户发起事务请求,在MGR层的简化流程是下面这样的:

  1. 事务写binlog前先进入到MGR层。
  2. 将事务封装后通过Paxos一致性协议进行全局排序,发送给MGR各个节点。
  3. 在各节点上进行认证该事务。
  4. 认证通过后本地节点写Binlog完成提交,认证失败则回滚事务。
  5. 其他远程节点上把该事务写relay log,后续再并行回放。

P.S,事务认证过程也叫做冲突检测,是同一个意思。

下图展示了事务在MGR的流转过程:

file

下面介绍MGR工作流程中的一些关键点。

2.1 事务处理合法性判断

首先,需要先判断该事务是否需要交由MGR处理以及MGR当前是否可以处理事务。

如果事务已经属于group_replication_applier 或 group_replication_recovery channel,说明该事务已经被本节点或其他节点的MGR模块处理过,无需再进入MGR层。

如果事务进入MGR层,就先初始化事务GTID信息,这里要分为两种情况。通常,进入MGR的新事务还未产生GTID,表明该事务是在本节点第一次执行;另一种是已经有GTID,这说明该事务是通过主从复制通道进入MGR的,比如该节点同时是一个主从复制的Slave节点。对于第一种情况,会在完成事务认证(冲突检测)后分配GTID。

2.2 事务消息中都包含哪些信息

将待认证事务封装到消息中,主要包含以下几个信息:

  1. 事务节点的server_uuid。
  2. 事务执行时节点的gtid_executed和事务快照版本号。
  3. 执行事务的thread_id。
  4. 事务gtid是否已经分配。
  5. 事务修改的记录集的主键列表writeset。

2.3 事务认证流程几个关键点

事务在每个节点上都需要进行认证,不管是本地事务还是远程事务。

事务在MGR中进行认证前,会先进行全局排序,形成共识(consensus)。事务全局排序时是基于round robin的方式分配到对应的消息轮次,所以即便是不同节点同时修改同一条记录的事务,经过全局排序后,也就有了先后顺序。

事务认证有几个要点:

  1. 不同节点同时更新同一行数据(根据主键判定)才有可能产生冲突。
  2. 不同节点同时更新不同数据行时,不会产生冲突。
  3. 目前还不支持DDL的冲突检测。
  4. 不同节点同时更新同一行(主键值相同)产生的事务,进行全局排序后,会得到不同的序号。

事务认证不是简单的对比,会先判断是否为本地事务(本节点产生的事务),事务是否已分配了gtid等多种情形分别进行不同的处理。

  1. 将事务消息中的server_uuid和本地节点的server_uuid对比,以确定是否为本地事务。
  2. 将事务消息中的gtid_executed和本地认证数据库对比,判断是否合法事务。
  3. 从本地认证数据库中获取待认证事务更新的每个主键的版本信息,与待认证事务的快照版本进行一一比对,只有待认证事务的快照版本不是本地认证数据库中对应主键版本的子集时,事务才能够判定为认证通过。

2.4 事务认证数据库清理

再来看下事务认证数据库里的数据什么时候可以被清理,怎么清理的,以及MGR里经典的60s性能抖动问题。

  • 什么时候可以被清理,认证通过且已被各个节点都提交的事务可以被清理。先获取集群中各个节点的gtid_executed信息并取交集,再将数据库中每条主键记录的版本跟该交集进行对比,若主键版本是该交集的子集,那么后续事务的认证一定用不到该主键版本信息,可以被安全清理掉。
  • 如何清理,MGR的每个节点维护一个后台线程,该线程每隔60s(硬编码,目前无法调整)清理事务,所以当待清理事务特别多的时候,可能会出现性能抖动问题(这个问题在GreatSQL中解决了,不复存在)。

从上述的清理机制可见,使用MGR时应该注意几点:

  • 多使用小事务,避免事务堵塞。当事务中包含大量记录时,每60s的定时任务可能无法清理完毕,造成性能抖动。
  • 流控机制是以事务为单位进行统计和限速的,有大事务时显然不合理(GreatSQL中优化了流控算法,除了事务数,还考虑事务大小,以及主从节点的延迟情况,更为有效)。
  • 不要在业务高峰期执行DDL。因为大表DDL时,也可能引发事务认证数据库暴涨的问题。因为Online DDL期间DML的事务无法被清理,可能会把内存爆掉。

3. 多数派原则

不同于PXC要求所有节点都必须达成一致,MGR采用多数派原则。也就是说,在一个MGR集群里,只要达成多数派一致(存活节点数超过一半),事务还是可以正常写入的。此外,MGR最高可支持9个节点,因此不同节点数和最多可容忍故障节点数的关系如下表所示:

总节点数多数派节点数最大容忍故障节点数
110
220
321
431
532
642
743
853
954

4. 启用MGR的一些先决条件

想要启用MGR,需要先满足几个先决条件: 01. 每个节点都必须启用binlog,而且使用row格式。 02. 每个节点都要启用binlog转储,即 log_slave_updates=1 或 log_replica_updates=1。 03. 每个节点的 server_id 及 server_uuid 不能相同。 04. 在8.0.20之前,要求 binlog_checksum=NONE,但是从8.0.20后,可以设置 binlog_checksum=CRC32。 05. 要求启用 GTID,即设置 gtid_mode=ON。 06. 要求 master_info_repository=TABLE 及 relay_log_info_repository=TABLE,不过从MySQL 8.0.23开始,这两个选项已经默认设置TABLE,因此无需再单独设置。 07. 所有节点上的表名大小写参数 lower_case_table_names 设置要求一致。 08. 只支持InnoDB表,其余表虽然也能创建,但无法同步数据(Primary节点上写入数据时会报错)。 09. 必须要有主键,如果没有主键(或者可以被选中作为聚集索引的辅助索引),则写入数据时会报错。 10. 建议启用writeset模式,即设置以下几个参数 - slave_parallel_type = LOGICAL_CLOCK - slave_parallel_workers = N,N>0,可以设置为逻辑CPU数的2倍 - binlog_transaction_dependency_tracking = WRITESET - slave_preserve_commit_order = 1 - slave_checkpoint_period = 2

5. 小结

本文介绍了MGR的整体技术架构概况,事务同步过程,事务认证机制等内容,使用MGR时需要注意的一些约束条件以及关键点。

参考资料、文档

MySQL 8.0 Reference Manual

https://dev.mysql.com/doc/refman/8.0/en/group-replication.html

数据库内核开发 - 温正湖

https://www.zhihu.com/column/c_206071340

Group Replication原理 - 宋利兵

https://mp.weixin.qq.com/s/LFJtdpISVi45qv9Wksv19Q

深入浅出MGR专栏

01.MGR简介

02.组复制技术架构

03.安装部署MGR集群

04.利用MySQL Shell安装部署MGR集群

05.MGR管理维护

06.MGR状态监控

07.利用MySQL Router构建读写分离MGR集群

08.利用Ansible快速构建MGR

09.利用Docker快速构建MGR

  1. 选主算法、多版本兼容性及滚动升级

专栏地址:https://gitee.com/GreatSQL/GreatSQL-Doc/tree/master/deep-dive-mgr

免责声明

因个人水平有限,专栏中难免存在错漏之处,请勿直接复制文档中的命令、方法直接应用于线上生产环境。请读者们务必先充分理解并在测试环境验证通过后方可正式实施,避免造成生产环境的破坏或损害。

Enjoy GreatSQL :)

本文由博客一文多发平台 OpenWrite 发布!

mysql mgr 体系结构图_【mysql数据库】MGR架构及原理 一、MGR架构原理简介状态机复制MGR本质上一个状态机复制的集群。在状态机复制的架构中,数据库被当做一个状态机。每一次写操作都会导致数据库的状态变化。为了创建一个高可用的数据库集群,有一个组件,即事务分发器,将这些操作按照同样的顺序发送到多个初始状态一致的数据库上,让这些数据库执行同样的操作。因为初始状态相同,每次执行的操作也相同,所以每次状态变化后各个数据库上的数据保持一致。分布式的状态机复制事... 阅读详情

相关推荐

什么是MGR高可用(完整版)

文章介绍了MGR的组复制技术架构、单主和多主模式、节点管理、故障检测、容错机制

2201_75878485的博客 2078

Mysql MGR搭建

也就是说,虽然系统分配了大量的内存给mysqld,但其实际上并不需要用到那么多内存,内存可能产生了碎片,内存没有及时GC。它是一个通用的malloc 实现,侧重于减少内存碎片和提升高并发场景下内存的分配效率,其目标是能够替代malloc。系统中查看mysqld已用内存量远远超出了innodb_buffer_pool_size配置的数倍之多。另外在问题发生时,查看mysqld中的连接数仅500多,且大部分连接为sleep状态。所以,尝试将mysqld的内存管理器改为使用 jemalloc 来提升内存效能。

qq_41270538的博客 2287

MySQL Group Replication(MGR)企业级实战笔记(Docker / 物理机通用)

传统主从复制的问题:主库写,从库读延迟不可避免主库挂了需要人工切换可能丢数据不具备强一致性MGR(MySQL Group Replication)提供:强一致性(Paxos 协议)自动选主自动故障切换所有节点平等内置冲突检测自动成员管理。

dreams_dream的博客 1039

MYSQL--架构--MGR--理论--02--架构

MYSQL–架构–MGR–理论–02–架构 1、架构图 1.1、主要组成 APIs接口层 组件层 复制协议模块层 GCS API+Paxos 引擎层 1.2、事务进入 MGR 层内部处理过程 应用发来的事务从 MySQL Server 经过 MGR 的 APIs接口层 分发到组件层。 组件层去 处理 事务相关信息,然后经过复制协议层进行事务传输,最后经过 GCS API+Paxos 引擎层保证事务在各个节点数据最终一致性 2、单主模式(single-primary mode) 2.1、介绍

zhou920786312的博客 825

PD虚拟机安装CentOS7后必做的Parallels Tools配置指南(附常见错误解决)

本文详细指导在Mac的Parallels Desktop虚拟机中安装CentOS 7后如何高效配置Parallels Tools,包括环境准备、镜像挂载、依赖问题解决及性能优化。特别针对常见错误如挂载失败、依赖缺失等提供实用解决方案,帮助用户实现主机与虚拟机间的无缝交互和显示优化。

weixin_29288313的博客 302

松灵机器人——ROS下的CAN通讯调试(内含所需调用包,都是操作步骤)

松灵机器人——ROS下的CAN通讯调试(都是操作步骤) 1 代码包地址 scout_ros package:https://github.com/westonrobot/scout_ros.git ugv_sdk-main package:https://github.com/westonrobot/ugv_sdk webots package:https://cyberbotics.com/ 2 硬件准备 2.1 SCOUT MINI 小白车 + 尾部航空插头 + CAN_TO_USB适配器

weixin_48924581的博客 1万+

mysql实战之mgr集群

MGR 是一个新的高可用与高扩展的方案,集群中的任何节点数据都是一样的,可以实现任何节点都可以写入,实现了真正意义上的多主。

qq_62789440的博客 3105

双目相机测距原理

普通双目相机具有如下特点:左右两个相机位于同一平面(光轴平行),且相机参数(焦距f)一致。其原理图如下:如图所示,P点为相应的物体位置,CL和CR为左右相机光心位置,PL和PR分别为左相机和右相机拍摄的P点成像结果。f为相机焦距,Z为物体距相机的深度距离,b为左右相机基线距离根据几何关系有:则相应的深度信息计算公式为:(1)其中XL-XR为视差。其余在两侧的情况同样可以用几何关系分析得到该表达式(1),即对于普通双目相机测距可以直接通过公式(1)得到深度结果。

doudou2weiwei的博客 4544

mgr未同步 mysql_MySQL MGR成员管理与故障恢复实现

MySQL Group Replication(MGR)框架让MySQL具备了自动主从切换和故障恢复能力,举single primary(单主)模式为例,primary作为主节点对外提供读写服务,是唯一的可写节点,其他节点均为secondary节点,可提供读服务。在传统的master-slave主从复制模式下,如果master发生了crash,MySQL DBA需要手动将slave升级为新mast...

weixin_39624094的博客 269

微信小程序URL Link全解析:从生成原理到实战应用(附Java代码)

本文深入解析微信小程序URL Link的生成原理与实战应用。URL Link是微信官方提供的智能路由协议,通过中间页实现外部链接安全跳转至小程序指定页面。文章详细阐述了其权限模型、环境版本差异及跳转机制,并提供了包含令牌管理、异常处理和性能优化的健壮Java实现方案,助力开发者构建高可用的链接生成服务。

weixin_29327525的博客 1217

某勾网之登录过程逆向

拉勾网的登录过程逆向,包含请求头(X-S-HEADER、X-K-HEADER、X-SS-REQ-HEADER等) 以及 请求参数/返回数据的加解密。

shanf7921的博客 3万+

MySQL 5.7.44 高可用MGR集群【多主<>单主】模式切换测试

用于监控MySQL主从复制的连接状态。‌ 在MGR中,group_replication_applier负责处理从捐赠者节点接收到的二进制日志中的事务数据,并将其应用到本地的数据库中,确保数据的一致性和同步‌。具体来说,该表记录了复制应用器的配置信息,包括但不限于应用器的线程数、应用器的执行策略等。具体来说,该表记录了复制应用器的配置信息,包括但不限于应用器的线程数、应用器的执行策略等。‌ 该表提供了关于复制过程中协调器应用线程的详细状态,包括正在执行的事务、等待的事务以及应用线程的相关错误信息等‌12。

as526605799的博客 1227

FPGA+CUYSB3014实现USB3.0功能

CYUSB3014是赛普拉斯在近几年推出的新一代USB3.0的外设控制器,可以解决USB2.0带宽限制,或者单独开发USB协议和驱动的难题。赛普拉斯将CYUSB3014简称为EZ-USB FX3,具有高度的灵活特性,开发人员只需要下载FX3的固件库,就能使用USB3.0的功能。目前在一些电子产品中,使用主控器加PHY芯片最流行的方式是用FPGA+FX3这种搭配来实现USB3.0接口。......

D_Katter的博客 7065

2021-11-15

互联网大厂面试:MySQL高可用设计 文章目录互联网大厂面试:MySQL高可用设计前言一、数据一致性二、集群架构1.单主多从模式2.多主多从模式三、数据同步与一致性数据同步冲突检测四、适用场景1.弹性复制2.高可用分片3.替代主从复制4.高可用方案五、全面分析框架缺陷事物一致性流监机制1.流控机制的功能2.基本机制3.基本队列4.流控过程总结 前言 本次实践高可用,是基于MGR上的实践,目前很多互联网公司实践高可用都有一套框架,比如这次阿里就在MGR基础上实践MySQL高可用的,MGR是具备强大的分布式协

qq_43645280的博客 454

Data+AI━━数仓建模的智能进化之路!

Data+AI━━数仓建模的智能进化之路!

ith321的博客 1745

【AI智能体】Codex 生成高质量电商套图实战操作详解

Codex 生成高质量电商套图实战操作详解

congge 4525

故障分析 | mysql mgr 多主数据不能更新案例浅析

作者:付祥 现居珠海,主要负责 Oracle、MySQL、mongoDB 和 Redis 维护工作。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 1.故障现象 一套运行快两年的MGR三节点多主环境(5.7.25),在节点1成功导入一批数据后,开发反馈程序修改这批数据报错,报错信息如下: update match_equip set name = ?, type = ?, equips = ?,score = ? where id = ? and .

ActionTech的博客 1270

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Ceph Manager Daemon(ceph-mgr)完全指南:架构、部署、运维与模块开发

Ceph Manager(ceph-mgr)是 Ceph 集群中负责监控、协调与管理的外部接口守护进程,自 Luminous(12.x)起成为集群正常运转的必备组件。本文以 [doc/mgr/index.rst](https://link.gitcode.com/i/c97478132fe165c468e802aa82b3f530) 及其展开的管理员指南、模块开发指南为骨架,结合 [src/mgr

gitblog_00638的博客 675

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

GreatSQL高可用架构揭秘:MGR集群从0到1搭建实战教程

GreatSQL作为一款开源免费数据库,凭借高可用、高性能、高兼容、高安全四大特性,已成为金融级应用场景的理想选择,也是MySQL与Percona Server for MySQL的完美替代方案。本文将带你从0到1亲手搭建一套基于MGR(MySQL Group Replication,组复制)的GreatSQL高可用集群,让你彻底掌握生产级数据库高可用架构的核心玩法。 ## 为什么选择Great

gitblog_00264的博客 138

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

mysql组复制跨机房_MySQL组复制MGR(三)– 组复制监控

MySQL组复制MGR(三)– 组复制监控如果MySQL启用了性能监控数据库performance_schema,则在搭建组复制的时候会创建2个表:performance_schema.replication_group_membersperformance_schema.replication_group_member_stats这些performance_schema里面的表也显示组复制的信息...

weixin_35890512的博客 362

Ubuntu 24下MySQL 8.0.36 MGR组复制部署实战

数据库高可用是生产环境的刚需,传统主从复制存在复制延迟和脑裂风险,难以满足强一致要求。MySQL Group Replication(MGR)通过组通信与共识协议,在事务提交时进行写集认证,确保各节点数据一致。其中单主模式可自动故障转移,适用于大多数业务场景。在Ubuntu 24上部署MySQL 8.0.36的MGR,需要严格配置GTID、binlog格式、组复制种子等参数,并处理防火墙、时间同步等基础环境问题。从MGR原理出发,逐步讲解三节点组复制的手工搭建过程,包括复制账号、分布式恢复、成员加入验证及常

weixin_30074763的博客 98

MySQL MGR实现分析 - 成员管理与故障恢复实现

此文已由作者温正湖授权网易云社区发布。欢迎访问网易云社区,了解更多网易技术产品运营经验。MySQL Group Replication(MGR)框架让MySQL具备了自动主从切换和故障恢复能力,举single primary(单主)模式为例,primary作为主节点对外提供读写服务,是唯一的可写节点,其他节点均为secondary节点,可提供读服务。在传统的master-slave主从复制模式下,...

weixin_30291791的博客 121

mysql 冲突检测_MYSQL MGR 学习,冲突检测,certification

certification介绍certification的作用为MYSQL多MASTER时,事务的冲突检测,也是MGR与之前的半同步复制的主要区别,在commit,写binlog之前加入了certify步骤(冲突检测),解决多MASTER时,可能导致数据不一致的问题。我们考虑下面3个事务,T1,T2,T3,同时更新id=1 and c=0的记录, 如果在单库上执行由innodb完成事务冲突处理,事...

weixin_31128057的博客 766

Ubuntu 22.04 MySQL 8.0 MGR组复制集群搭建与高可用实战

分布式系统环境下,数据库高可用架构是保障业务连续性的基石。主从复制虽然简单,但故障切换与数据一致性难以兼顾。MySQL Group Replication(MGR)基于Paxos协议实现组内事务共识,将多节点数据一致性提升到新的高度。通过GTID全局事务标识与冲突检测机制,MGR能够自动完成成员管理、故障检测与主角色切换,显著降低运维人工干预成本。在业务实践中,MGR常用于替代传统主从复制,构建MySQL 8.0环境下的高可用集群。本文以Ubuntu 22.04为操作系统,详细讲解MySQL 8.0.45

weixin_30984001的博客 62

MySQL MGR单主集群部署指南:从参数配置到踩坑实战

在数据库高可用架构设计中,MySQL主从复制是常见方案,但其故障转移依赖外部脚本,存在延迟与脑裂风险。而基于Paxos协议的MySQL Group Replication(MGR)通过组内成员自动投票,实现故障自动感知与主节点推举,从底层解决了传统主从的决策困境。单主模式作为MGR最常用的形态,同一时刻仅一个节点可写,兼顾数据一致性与部署简洁性,适合读多写少、需要快速搭建高可用的业务场景。本文从环境规划、my.cnf核心参数解析、节点引导与加入流程,到33061端口遗漏、GTID不干净、大事务拖垮集群等真实

weixin_34237941的博客 312

Ubuntu 22.04上MySQL 8.0.45 MGR高可用集群搭建实战

数据库高可用是生产环境的核心诉求,传统主从复制在主库故障时面临数据丢失和人工切换的困境。MySQL Group Replication(MGR)基于Paxos协议与组通信机制,通过GTID和行级写集合冲突检测实现节点间数据强一致,并支持自动选主与故障切换,成为MySQL原生高可用方案的优选。适用于中小团队对读写分离要求不高但必须保证业务连续性的场景。在Ubuntu 22.04上部署MySQL 8.0.45 MGR单主模式,涉及基础环境准备、核心参数配置、节点引导与加入、故障切换验证等关键环节,过程中存在诸多

weixin_29234423的博客 79
上一篇: RPM方式安装GreatSQL 8.0.25-16
下一篇: Prometheus+Grafana+钉钉部署一个单机的MySQL监控告警系统
GreatSQL社区
博客等级 码龄5年 1210粉丝 390原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值