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

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

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

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

0da45be03c316251c44917df07d8989b.png

存储引擎

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.mzph.cn/news/388793.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab散点图折线图_什么是散点图以及何时使用

matlab散点图折线图When you were learning algebra back in high school, you might not have realized that one day you would need to create a scatter plot to demonstrate real-world results.当您在高中学习代数时,您可能没有意识到有一天需要创建一个散点图…

python字符串和List:索引值以 0 为开始值,-1 为从末尾的开始位置;值和位置的区别哦...

String(字符串)Python中的字符串用单引号 或双引号 " 括起来,同时使用反斜杠 \ 转义特殊字符。 字符串的截取的语法格式如下: 变量[头下标:尾下标]索引值以 0 为开始值,-1 为从末尾的开始位置。[一个是值&#x…

逻辑回归 python_深入研究Python的逻辑回归

逻辑回归 pythonClassification techniques are an essential part of machine learning and data science applications. Approximately 70% of problems in machine learning are classification problems. There are lots of classification problems that are available, b…

spring定时任务(@Scheduled注解)

(一)在xml里加入task的命名空间 xmlns:task"http://www.springframework.org/schema/task" http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.1.xsd(二)启用注…

JavaScript是如何工作的:与WebAssembly比较及其使用场景

*摘要:** WebAssembly未来可期。 原文:JavaScript是如何工作的:与WebAssembly比较及其使用场景作者:前端小智Fundebug经授权转载,版权归原作者所有。 这是专门探索 JavaScript及其所构建的组件的系列文章的第6篇。 如果…

Matplotlib中的“ plt”和“ ax”到底是什么?

Indeed, as the most popular and fundamental data visualisation library, Matplotlib is kind of confusing in some perspectives. It is usually to see that someone asking about的确,作为最受欢迎的基础数据可视化库,Matplotlib在某些方面令人困…

2018年阿里云NoSQL数据库大事盘点

2019独角兽企业重金招聘Python工程师标准>>> NoSQL一词最早出现在1998年。2009年Last.fm的Johan Oskarsson发起了一次关于分布式开源数据库的讨论,来自Rackspace的Eric Evans再次提出了NoSQL概念,这时的NoSQL主要是指非关系型、分布式、不提供…

cayenne:用于随机模拟的Python包

TL;DR; We just released v1.0 of cayenne, our Python package for stochastic simulations! Read on to find out if you should model your system as a stochastic process, and why you should try out cayenne.TL; DR; 我们刚刚发布了 cayenne v1.0 ,这是我们…

java 如何将word 转换为ftl_使用 freemarker导出word文档

近日需要将人员的基本信息导出,存储为word文档,查阅了很多资料,最后选择了使用freemarker,网上一共有四种方式,效果都一样,选择它呢是因为使用简单,再次记录一下,一个简单的demo,仅供…

DotNetBar office2007效果

1.DataGridView 格式化显示cell里的数据日期等。 进入编辑列,选择要设置的列,DefaultCellStyle里->行为->formart设置 2.tabstrip和mdi窗口的结合使用给MDI窗口加上TabPage。拖动个tabstrip到MDI窗口上tabstrip里选择到主窗口名就加上TABPAGE了。d…

spotify 数据分析_没有数据? 没问题! 如何从Wikipedia和Spotify收集重金属数据

spotify 数据分析For many data science students, collecting data is seen as a solved problem. It’s just there in Kaggle or UCI. However, that’s not how data is available daily for working Data Scientists. Also, many of the datasets used for learning have …

IS环境下配置PHP5+MySql+PHPMyAdmin

IIS环境下配置PHP5MySqlPHPMyAdmin Posted on 2009-08-07 15:18 谢启祥 阅读(1385)评论(18) 编辑 收藏 虽然主要是做.net开发的,但是,时不时的还要搞一下php,但是,php在windows下的配置,总是走很多弯路,正好…

kaggle数据集_Kaggle上有170万份ArXiv文章的数据集

kaggle数据集“arXiv is a free distribution service and an open-access archive for 1.7 million scholarly articles in the fields of physics, mathematics, computer science, quantitative biology, quantitative finance, statistics, electrical engineering and sys…

深度学习数据集中数据差异大_使用差异隐私来利用大数据并保留隐私

深度学习数据集中数据差异大The modern world runs on “big data,” the massive data sets used by governments, firms, and academic researchers to conduct analyses, unearth patterns, and drive decision-making. When it comes to data analysis, bigger can be bett…

C#图片处理基本应用(裁剪,缩放,清晰度,水印)

前言 需求源自项目中的一些应用,比如相册功能,通常用户上传相片后我们都会针对该相片再生成一张缩略图,用于其它页面上的列表显示。随便看一下,大部分网站基本都是将原图等比缩放来生成缩略图。但完美主义者会发现一些问题&#…

Java客户端访问HBase集群解决方案(优化)

测试环境&#xff1a;IdeaWindows10 准备工作&#xff1a; <1>、打开本地 C:\Windows\System32\drivers\etc&#xff08;系统默认&#xff09;下名为hosts的系统文件&#xff0c;如果提示当前用户没有权限打开文件&#xff1b;第一种方法是将hosts文件拖到桌面进行配置后…

WPF布局系统

WPF之路——WPF布局系统 前言 前段时间忙了一阵子Google Earth&#xff0c;这周又忙了一阵子架构师论文开题报告&#xff0c;现在终于有时间继续<WPF之路>了。先回忆一下上篇的内容&#xff0c;在《从HelloWorld到WPF World》中&#xff0c;我们对WPF有了个大概的了解&am…

PostGIS容器运行

2019独角兽企业重金招聘Python工程师标准>>> 获取镜像&#xff1a; docker pull mdillon/postgis 该 mdillon/postgis 镜像提供了容器中运行Postgres&#xff08;内置安装PostGIS 2.5&#xff09; 。该镜像基于官方 postgres image&#xff0c;提供了多种变体&#…

小型数据库_如果您从事“小型科学”工作,那么您是否正在利用数据存储库?

小型数据库If you’re a scientist, especially one performing a lot of your research alone, you probably have more than one spreadsheet of important data that you just haven’t gotten around to writing up yet. Maybe you never will. Sitting idle on a hard dri…

BitmapEffect位图效果是简单的像素处理操作。它可以呈现下面几种特殊效果。

BitmapEffect位图效果是简单的像素处理操作。它可以呈现下面几种特殊效果。 BevelBitmapEffect 凹凸效果 BlurBitmapEffect 模糊效果 DropShadowBitmapEffect投影效果 EmbossBitmapEffect 浮雕效果 Outer…