MySQL Cluster集群探索与实践

MySQL集群Cluster (1)架构图。 阅读详情

MySQL集群是一种在无共享架构(SNA,Share Nothing Architecture)系统里应用内存数据库集群的技术。这种无共享的架构可以使得系统使用低廉的硬件获取高的可扩展性。

MySQL集群是一种分布式设计,目标是要达到没有任何单点故障点。因此,任何组成部分都应该拥有自己的内存和磁盘。任何共享存储方案如网络共享,网络文件系统和SAN设备是不推荐或不支持的。通过这种冗余设计,MySQL声称数据的可用度可以达到99.999%。

实际上,MySQL集群是把一个叫做NDB的内存集群存储引擎集成与标准的MySQL服务器集成。它包含一组计算机,每个都跑一个或者多个进程,这可能包括一个MySQL服务器,一个数据节点,一个管理服务器和一个专有的一个数据访问程序。它们之间的关系如下图所示:

存储引擎

MySQL Cluster 使用了一个专用的基于内存的存储引擎,这样做的好处是速度快, 没有磁盘I/O的瓶颈,但是由于是基于内存的,所以数据库的规模受系统总内存的限制, 如果运行NDB的MySQL服务器一定要内存够大,比如4G, 8G, 甚至16G。NDB引擎是分布式的,它可以配置在多台服务器上来实现数据的可靠性和扩展性,理论上 通过配置2台NDB的存储节点就能实现整个数据库集群的冗余性和解决单点故障问题。

该存储引擎有下列弊端:

  • 基于内存,数据库的规模受集群总内存的大小限制
  • 基于内存,断电后数据可能会有数据丢失,这点还需要通过测试验证。
  • 多个节点通过网络实现通讯和数据同步、查询等操作,因此整体性受网络速度影响,
  • 因此速度也比较慢

当然也有它的优点:

  • 多个节点之间可以分布在不同的地理位置,因此也是一个实现分布式数据库的方案。
  • 扩展性很好,增加节点即可实现数据库集群的扩展。
  • 冗余性很好,多个节点上都有完整的数据库数据,因此任何一个节点宕机都不会造成服务中断。
  • 实现高可用性的成本比较低,不象传统的高可用方案一样需要共享的存储设备和专用的软件才能实现,NDB 只要有足够的内存就能实现。

体系结构

MySQL Cluster 由3个不同功能的服务构成,每个服务由一个专用的守护进程提供,一项 服务也叫做一个节点,下面来介绍每个节点的功能。

The management (MGM) node

管理节点,用来实现整个集群的管理,理论上一般只启动一个,而且宕机也不影响 cluster 的服务,这个进程只在cluster 启动以及节点加入集群时起作用, 所以这个节点不是很需要冗余,理论上通过一台服务器提供服务就可以了。

通过 ndb_mgmd 命令启动,使用 config.ini 配置文件

The storage or database (DB) node:

数据库节点,用来存储数据,可以和管理节点(MGM) , 用户端节点(API) 可以处在 不同的机器上,也可以在同一个机器上面,集群中至少要有一个DB节点,2个以上 时就能实现集群的高可用保证,DB节点增加时,集群的处理速度会变慢。

通过 ndbd 命令启动,第一次创建好cluster DB 节点时,需要使用 –init参数初始化。

例如: bin/ndbd –ndb-connectstring=ndb_mgmd.mysqlcluster.net –initial

The client (API) node:

客户端节点,通过他实现 cluster DB 的访问,这个节点也就是普通的 mysqld 进程, 需要在配置文件中配置ndbcluster 指令打开 NDB Cluster storage engine 存储引擎,增加 API 节点会提高整个集群的并发访问速度和整体的吞吐量,该节点 可以部署在Web应用服务器上,也可以部署在专用的服务器上,也开以和DB部署在 同一台服务器上。

通过 mysqld_safe 命令启动,

这3类节点可以分布在不同的主机上,比如 DB 可以是多台专用的服务器,也可以 每个DB都有一个API,当然也可以把API分布在Web前端的服务器上去,通常来说, API越多cluster的性能会越好。

Mysql集群探索与实践

1. 准备好3台机器,从官网下载最新的mysql集群版本,此处用到mysql-cluster-gpl-7.1.5.tar.gz源码包, 配置并安装,记得加上

–with-plugins=innobase,ndbcluster (innobase可选)

3台机器分别是192.168.207.153,192.168.208.3,192.168.208.9,具体分配如下

管理节点(ndb_mgmd):192.168.207.153

数据节点(ndbd): 192.168.208.3

数据节点(ndbd): 192.168.208.9

SQL节点(mysqld): 192.168.208.3

SQL节点(mysqld): 192.168.208.9

2. 在mysql目录下新建mysql-cluster文件夹,切换到mysql-cluster,新建config.ini

[NDBD DEFAULT]
NoOfReplicas=2       #备份,副本,这样的话2台数据节点的数据就会同步
DataMemory=200M
IndexMemory=100M
[TCP DEFAULT]
portnumber=2202
[NDB_MGMD]   #管理节点
id=1
hostname=192.168.207.153
datadir=/home/taozi/mysql/mysql-cluster
[NDBD]    #数据节点
id=2
hostname=192.168.208.3
datadir=/home/taozi/mysql/data
[NDBD]   #数据节点
id=3
hostname=192.168.208.9
datadir=/home/taozi/mysql/data
[MySQLD]   #sql节点
id=4
hostname=192.168.208.3
[MySQLD]    #sql节点
id=5
hostname=192.168.208.9
[MySQLD]     #sql节点
id=6

3. 在管理节点服务器上启动管理节点服务 (如果不存在ndb_mgmd那么要从libexec下面复制过来)

~/mysql/bin/ndb_mgmd -f ~/mysql/mysql-cluster/config.ini

4. 进入2台数据节点服务器,分别启动数据节点服务

~/mysql/bin/ndbd     (第一次启动使用  ~/mysql/bin/ndbd --initial)

5. 最后分别进入sql节点服务器,修改my.cnf,加入

[MYSQL_CLUSTER]
ndb-connectstring=192.168.207.153
[MYSQLD]
ndbcluster
ndb-connectstring=192.168.207.153

启动mysql服务

/home/taozi/mysql/bin/mysqld_safe --ledir=/home/taozi/mysql/bin /
--log-error=/home/taozi/mysql/data/t.err --datadir=/home/taozi/mysql/data /
--socket=/home/taozi/mysql/tmp/mysql.sock --pid-file=/home/taozi/mysql/data/mysqld.pid &

6. 此时回到管理节点

~/mysql/bin/ndb_mgm -e show

可以看到显示如下

[taozi@search153 mysql]$ ./show.sh
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=2    @192.168.208.3  (mysql-5.1.47 ndb-7.1.5, Nodegroup: 0, Master)
id=3    @192.168.208.9  (mysql-5.1.47 ndb-7.1.5, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1    @192.168.207.153  (mysql-5.1.47 ndb-7.1.5)
[mysqld(API)]   3 node(s)
id=4    @192.168.208.3  (mysql-5.1.47 ndb-7.1.5)
id=5    @192.168.208.9  (mysql-5.1.47 ndb-7.1.5)
id=6 (not connected, accepting connect from any host)

7. 进入sql节点,在test数据库创建表

CREATE TABLE `t1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=ndbcluster  DEFAULT CHARSET=gbk

切换到2台数据节点服务器~/mysql/data/ndb_2_fs和~/mysql/data/ndb_3_fs看看,

或者直接去数据库查,数据已经同步了!

8. 关闭集群服务

关闭sql节点等同于停止mysql服务,此时外界数据不将再进来。然后关闭管理节点

~/mysql/bin/ndb_mgm -e shutdown
rm ~/mysql/mysql-cluster/ndb_1_config.bin.1 #不是必须的,如果config.ini有改动则要加上

这样操作后,管理节点和数据节点都将停止服务

Notes:

1:如果发现关闭一台机器的ndbd进程,另一台机器的ndbd的进程也关闭,则需要修改参数NoOfReplicas。
2:./ndbd --initial 不能同时在所有数据节点机器上执行,如执行,会删除所有数据
3:可以像操作非簇类型的数据库那样,操作mysqld节点
4:每次修改config.ini文件,重启ndb_mgmd时,需要删除mysql-cluster文件下的ndb_1_config.bin.1文件,
因为他默认调用此文件
5:NDB 簇不支持自动发现数据库的功能,这点很重要,一旦在一个数据节点上创建了世界(world)数据库和它的表,
在簇中的每个SQL节点上还需要发出命令 CREATE DATABASE world,后跟FLUSH TABLES。这样,节点就能
识别数据库并读取其表定义。(在本版本MySQL Cluster 7.1.5下数据库也会自动同步的)
6:如果在相关节点服务器启动时,注意查看~/mysql/mysql-cluster目录内的相关日志文件以获取错误信息.
7:在管理节点的配置文件里各[mysqld],[ndbd]和[ndb_mgmd]配置的选项值顺序应该如下:
[mysqld]
Id=4
HostName=192.168.208.3
Id在顶端紧跟其后的是HostName,如果顺序错了,当SQL或数据节点连接管理节点时,管理节点无法正确的定位
到其对应的节点配置上.
因为无法定位到对应的节点配置,当没有剩余的[空节点]时,客户端节点启动时(./mysqld or ./ndbd)
还会报:
Configuration error: Error : Could not alloc node id at 192.168.0.231 port 1186: No free
node id found for mysqld
(API).Failed to initialize consumers
8:[空节点]是没有指定HostName选项的节点配置均为空节点,空节点可以用来动态配置一些动态IP的节点,
一般管理节点的 配置文件要预留3个以上的空节点,因为备份时需要连接一个节点,如下:
[mysqld]
Id=6

原文出自:http://www.searchtb.com/2012/07/mysql-cluster.html

MySQL详解(九):MySQL Cluster MySQL Cluster实战 1.MySQL Cluster概述 MySQL Cluster技术在分布式系统中为MySQL提供了冗余特性,增强了安全性,可以大大的提高系统的可靠性和数据的有效性。MySQL集群需要一组计算机,每台计算机可以理解为一个节点,这些节点的功能各不相同。MySQL Cluster按照功能来分,可以分为三种节点:管理节点、数据节点和SQL节点。集群中的某台计算机可以是某... 阅读详情

相关推荐

VMware虚拟机上CentOS 8网络配置,解决CentOS 8、物理机和外网之间ping不通的问题

基本条件 虚拟机:已在VMware上安装CentOS 8 (不知道怎么安装CentOS 8的小伙伴请看这篇文章VMware上安装CentOS 8) 物理机:Windows 10 有物理机和虚拟机不能相互ping通的或是单方面不能ping通的小伙伴请仔细看下下面的网络配置步骤呀。 网络配置 1. 物理机下的配置 查看主机IP地址,win+R打开运行,输入cmd并按下回车,在打开的窗口中输入ipconfig,查看所有连接。 注意这一步不要找错IP地址!!!找的是以太网适配器 VMware Network

4377

MysqlCluster集群搭建及使用

亿级用户的分布式数据存储解决方案 1 文章目录1、简介2、搭建Mysql Cluster(基于阿里云内网部署,相同实例地区)2.1 安装配置管理节点(GMG)2.2 安装配置数据节点(NDB)2.3 安装配置SQL节点(NDB)2.4 集群状态3、操作Mysql Cluster4、MySQL Cluster的关闭顺序与单点故障测试5、Mysql Cluster 远程连接6、测试单点故障(高可用)7、SpringBoot中使用参考网址 1、简介 ​ MySQL Cluster(MySQL集群)是一个高性能、

极客 1万+

C语言面试,8道一定会遇到的----关于指针的笔试题详解

C语言面试,8道一定会遇到的----关于指针的笔试题详解

m0_55322924的博客 463

MySQL Cluster 简介

MySQL Cluster 是官方推出的基于 NDB(Network DataBase)存储引擎的高可用、可伸缩的分布式数据库系统。高可用:MySQL Cluster 具有内置的高可用性功能,可以自动检测和恢复故障。它支持故障检测和节点恢复,以确保集群中的数据和服务可用性。分布式存储:NDB 存储引擎支持将数据分布在多个节点上,实现了数据的分布式存储。这意味着数据可以水平扩展,从而提高了存储容量和性能。

Doublelv 的博客专栏。 1470

FPGA SPI驱动ADC避坑指南:以ADC128S022为例,详解时序设计与代码调试

本文以ADC128S022为例,详细解析FPGA通过SPI驱动ADC的时序设计与代码调试中的常见问题。从时钟分频计算、SPI模式选择到状态机实现,提供避坑指南和实战技巧,帮助工程师解决数据采集系统中的时序匹配难题。特别针对FPGA与ADC通信中的微妙差异,给出精确的Verilog代码示例和ModelSim仿真验证方法。

weixin_42522374的博客 458

从ADC校准到精准测量:避开PY32F030小信号采样的那些坑

本文深入探讨了PY32F030微控制器进行ADC小信号采样时面临的挑战与解决方案。从硬件设计、软件滤波算法到系统级校准策略,详细分析了如何避开常见陷阱,实现精准测量,特别是在25mV以下小信号场景中的应用实践。

ujm567890的博客 758

mysql 集群实践_MySQL Cluster集群探索与实践

MySQL集群是一种在无共享架构(SNA,Share Nothing Architecture)系统里应用内存数据库集群的技术。这种无共享的架构可以使得系统使用低廉的硬件获取高的可扩展性。MySQL集群是一种分布式设计,目标是要达到没有任何单点故障点。因此,任何组成部分都应该拥有自己的内存和磁盘。任何共享存储方案如网络共享,网络文件系统和SAN设备是不推荐或不支持的。通过这种冗余设计,MySQL声...

weixin_29023349的博客 162

C#创建COM组件,QT调用COM组件简单测试(VS2008+QT4.6.4)

一. C#创建组件: 1. VS2008新建一个项目,选择Visual C#, Class library 修改Properties下面的AssemblyInfo.cs文件,ComVisible属性设置为True,即:[assembly: ComVisible(true)] 2. 右击项目,选择“属性”, 选择“生成”选项卡,把“为COM互操作注册”勾选上 选择“签名”选项卡,把“

3517

MYSQL集群探索与实践

<br />简介 <br /> <br />MySQL集群是一种在无共享架构系统里应用内存数据库集群的技术。这种无共享的架构可以使得系统使用非常便宜的并且是最小配置的硬件。 <br />MySQL集群是一种分布式设计,目标是要达到没有任何单点故障点。因此,任何组成部分都应该拥有自己的内存和磁盘。任何共享存储方案如网络共享,网络文件系统和SAN设备是不推荐或不支持的。通过这种冗余设计,MySQL声称数据的可用度可以达到99。999%。 <br />实际上,MySQL集群是把一个叫做NDB的内存集群存储引擎集成

宿命 宽恕 轮回 6492

无人机多旋翼倾转动力测试系统-适用于(eVTOL开发、缩比模型测试、科研教育)

LY-QZ-F4多旋翼倾转动力测试系统是全球首款专为倾转四旋翼设计的多自由度动力测试平台,融合高精度传感、动态倾转模拟与智能工况分析,为下一代eVTOL技术提供全维度验证工具。采用航空级应变传感器(精度±0.1% FS),同步捕获推力、扭矩、俯仰/滚转力矩,动态误差<1%。同时测试电驱动系统(单轴最大150kW)与混合动力单元(增程式),支持高压(800V)平台。通过MET数据采集软件,控制采集一体化,定制化,实时观察上百个传感器数据,实时更改测试需求。可搭配六维姿态平台,温湿度舱、振动台等环境模拟设备。

weixin_49209795的博客 874

绿盾用户使用看图软件每次都需要把图片解密之后才能打开查看,怎么才能不用这么麻烦打开就能看

Win10专业版绿盾控制台7.0看图软件FastStone Image Viewer。

本博客,博文仅代表个人操作经验,不能完全解决你的问题,仅供参考,佛系回复。 1202

Mysql Innodb cluster集群搭建

之前搭建过一个Mysql Ndbcluster集群,但是mysql版本是5.7的,看到官网上mysql8的还是开发者版本,所以尝试搭建下mysql Innodbcluster集群。 MySQL的高可用架构无论是社区还是官方,一直在技术上进行探索,这么多年提出了多种解决方案,比如MMM,MHA,NDB Cluster,Galera Cluster,InnoDB Clust...

小时候挺菜的博客 1538

Simulink开发项1000例实战专栏--实例148:构建一个完整的电动汽车电池SOH评估仿真模型,包括电池建模模块、数据采集模块、SOH估算算法模块以及性能评估模块

电动汽车的动力电池是其核心部件,而电池的健康状态(State of Health, SOH)直接影响车辆的续航能力和使用寿命。SOH通常定义为当前电池容量与初始容量的比值,用百分比表示。通过基于MATLAB/Simulink平台的SOH评估仿真,可以实时监测电池的退化情况,并为电池管理系统(BMS)提供决策依据。本项目旨在构建一个完整的电动汽车电池SOH评估仿真模型,包括电池建模模块、数据采集模块、SOH估算算法模块以及性能评估模块,并通过仿真验证SOH评估的准确性。

xiaoheshang_123的博客 342

探索 Kubernetes 上的 MySQL 集群:k8s-mysql-cluster

探索 Kubernetes 上的 MySQL 集群:k8s-mysql-cluster 在数字化转型的时代,数据库作为关键基础设施,其可靠性与性能至关重要。而 Kubernetes(简称 k8s)作为容器编排平台,提供了动态管理和扩展应用的能力。 是一个基于 Kubernetes 的 MySQL 集群解决方案,它将传统数据库服务与现代化的云原生架构相结合,实现了自动化部署和管理 MySQL 集群。...

gitblog_00097的博客 535

电子电气架构 --- 整车电源管理

保证启动能力:防止因电池电量耗尽而导致的车辆无法启动,这对于确保车辆在任何时候都能可靠运行至关重要。 延长电池寿命:通过避免电池深度放电,有助于延长其使用寿命,减少更换电池的需求和成本。 提升用户体验:虽然负载被关闭可能会暂时影响舒适度,但通过在必要时自动采取行动,可以减少驾驶员的焦虑和不确定性,提高整体的用户满意度。

Soly_kun的博客 1084

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: Hbase- 二级索引
下一篇: UML五种关系
胸口碎大石_
博客等级 码龄17年 1154粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值