mysql-cluster集群原理介绍和搭建步骤(四个data/sql节点) (转)
MySQL簇概述
MySQL簇是一种技术,该技术允许在无共享的系统中部署“内存中”数据库的簇。通过无共享体系结构,系统能够使用廉价的硬件,而且对软硬件无特殊要求。此外,由于每个组件有自己的内存和磁盘,不存在单点故障。
MySQL簇将标准的MySQL服务器与名为NDB的“内存中”簇式存储引擎集成了起来。在我们的文档中,术语NDB指的是与存储引擎相关的设置部分,而术语“MySQL簇”指的是MySQL和NDB存储引擎的组合。
MySQL簇由一组计算机构成,每台计算机上均运行着多种进程,包括MySQL服务器,NDB簇的数据节点,管理服务器,以及(可能)专门的数据访问程序。关于簇中这些组件的关系,请参见下图:
所有这些程序一起构成了MySQL簇。将数据保存到NDB簇存储引擎中时,表将保存在数据节点内。能够从簇中所有其他MySQL服务器直接访问这些表。因此,在将数据保存在簇内的工资表应用程序中,如果某一应用程序更新了1位雇员的工资,所有查询该数据的其他MySQL服务器能立刻发现这种变化。
对于MySQL簇,保存在数据节点内的数据可被映射,簇能够处理单独数据节点的故障,除了少数事务将因事务状态丢失而被放弃外,不会产生其他影响。由于事务性应用程序能够处理事务失败事宜,因而它不是问题源。
通过将MySQL簇引入开放源码世界,MySQL为所有需要它的人员提供了具有高可用性、高性能和可缩放性的簇数据管理。
MySQL簇的基本概念
NDB是一种“内存中”存储引擎,它具有可用性高和数据一致性好的特点。
能够使用多种故障切换和负载平衡选项配置NDB存储引擎,但以簇层面上的存储引擎开始最简单。MySQL簇的NDB存储引擎包含完整的数据集,仅取决于簇本身内的其他数据。
下面,我们介绍了设置由NDB存储引擎和一些MySQL服务器构成的MySQL簇的设置方法。
目前,MySQL簇的簇部分可独立于MySQL服务器进行配置。在MySQL簇中,簇的每个部分被视为1个节点。
注释:在很多情况下,术语“节点”用于指计算机,但在讨论MySQL簇时,它表示的是进程。在单台计算机上可以有任意数目的节点,为此,我们采用术语簇主机。
有三类簇节点,在最低的MySQL簇配置中,至少有三个节点,这三类节点分别是:
管理(MGM)节点:这类节点的作用是管理MySQL簇内的其他节点,如提供配置数据、启动并停止节点、运行备份等。由于这类节点负责管理其他节点的配置,应在启动其他节点之前首先启动这类节点。MGM节点是用命令ndb_mgmd启动的。
数据节点:这类节点用于保存簇的数据。数据节点的数目与副本的数目相关,是片段的倍数。例如,对于两个副本,每个副本有两个片段,那么就有4个数据节点。没有必要有一个以上的副本。数据节点是用命令ndbd启动的。
SQL节点:这是用来访问簇数据的节点。对于MySQL簇,客户端节点是使用NDB簇存储引擎的传统MySQL服务器。典型情况下,SQL节点是使用命令mysqld –ndbcluster启动的,或将ndbcluster添加到my.cnf后使用mysqld启动。
簇配置包括对簇中单独节点的配置,以及设置节点之间的单独通信链路。对于目前设计的MySQL簇,其意图在于,从处理器的能力、内存空间和带宽来讲,存储节点是同质的,此外,为了提供单一的配置点,作为整体,簇的所有配置数据均位于1个配置文件中。
管理服务器(MGM节点)负责管理簇配置文件和簇日志。簇中的每个节点从管理服务器检索配置数据,并请求确定管理服务器所在位置的方式。当数据节点内出现有趣的事件时,节点将关于这类事件的信息传输到管理服务器,然后,将这类信息写入簇日志。
此外,可以有任意数目的簇客户端进程或应用程序。它们分为两种类型:
标准MySQL客户端:对于MySQL簇,它们与标准的(非簇类)MySQL没有区别。换句话讲,能够从用PHP、Perl、C、C++、Java、Python、Ruby等编写的现有MySQL应用程序访问MySQL簇。
管理客户端:这类客户端与管理服务器相连,并提供了优雅地启动和停止节点、启动和停止消息跟踪(仅对调试版本)、显示节点版本和状态、启动和停止备份等的命令。
-----------------------------------------------------------------------------------以上部分是摘自官方文档
搭建sql节点(4个),data节点(4个),manage节点(1个)步骤
//环境介绍
1、manage节点:10.10.54.154
2、sql/data节点:10.10.54.154/155/156/157
//编译安装cmake2.8
[154/155/156/157]
1.下载mysql-cluster cmake
shell> wget http://dev.mysql.com/get/Downloads/MySQL-Cluster-7.2/mysql-cluster-gpl-7.2.15-linux2.6-x86_64.tar.gz
shell> wget http://www.cmake.org/files/v2.8/cmake-2.8.12.2.tar.gz
2.编译安装cmake2.8---(154/155/156/157)
shell> tar xvf cmake-2.8.12.2.tar.gz
shell> cd cmake-2.8.12.2
shell> ./configure
shell> make
shell> make install
3.编译安装mysql-cluster---(154/155/156/157)
shell> tar xvf mysql-cluster-gpl-7.2.15.tar.gz
shell> cd mysql-cluster-gpl-7.2.15
shell> cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/tmp/mysql-cluster.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DWITH_EMBEDDED_SERVER=0 \
-DWITH_NDB_JAVA=OFF \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_NDBCLUSTER_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_USER=mysql \
-DWITH_DEBUG=0 \
-DWITH_SSL=yes
4.shell> make && make install
//mysql-cluster配置---(154/155/156/157)
shell> mkdir /data/ndb
shell> cd /home/mysql-cluster-gpl-7.2.15
shell> cp support-files/mysql.server /etc/init.d/mysqld
shell> cp support-files/my-large.cnf /etc/my.cnf
shell> chown mysql.mysql /usr/local/mysql -R
shell> chmod 755 /usr/local/mysql/scripts/*
shell> chmod 755 /etc/init.d/mysqld
shell> sed -i "/
/a datadir=/data/ndb" /etc/my.cnf
shell> /usr/local/mysql/scripts/mysql_install_db --user=root --basedir=/usr/local/mysql --datadir=/data/ndb
shell> chown mysql:mysql -R /data/ndb
//data/sql节点配置---(154/155/156/157)
shell> cd /usr/local/mysql/bin/
shell> cp ndb_mgm* /usr/local/bin/
shell> vim /etc/my.cnf
-------------------------
[mysql_cluster]
ndb-connectstring=10.10.54.154
[mysqld]
datadir=/data/ndb
ndbcluster
ndb-connectstring=10.10.54.154
-------------------------
//管理节点154配置
shell> mkdir -p /etc/ndb/config.ini
shell> vim /etc/ndb/config.ini
--------------------------------------
[NDBD DEFAULT]
NoOfReplicas=2
DataMemory=128M
IndexMemory=64M
[TCP DEFAULT]
portnumber=2202
[NDB_MGMD]
NodeId=1
hostname=10.10.54.154
datadir=/var/lib/mysql-cluster
[NDBD]
NodeId=2
hostname=10.10.54.154
datadir=/data/ndb
BackupDataDir=/data/backup
[NDBD]
NodeId=3
hostname=10.10.54.155
datadir=/data/ndb
BackupDataDir=/data/backup
[NDBD]
NodeId=4
hostname=10.10.54.156
datadir=/data/ndb
BackupDataDir=/data/backup
[NDBD]
NodeId=5
hostname=10.10.54.157
datadir=/data/ndb
BackupDataDir=/data/backup
[MYSQLD]
NodeId=7
hostname=10.10.54.154
[MYSQLD]
NodeId=8
hostname=10.10.54.155
[MYSQLD]
NodeId=9
hostname=10.10.54.156
[MYSQLD]
NodeId=10
hostname=10.10.54.157
[MYSQLD]
NodeId=11
[MYSQLD]
NodeId=12
[MYSQLD]
NodeId=13
[MYSQLD]
NodeId=14
------------------------------------
//启动mysql-cluster
---启动顺序management node--data node---sql node
#启动管理节点
shell> ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial
##--initial参数第一次启动时加上
#启动数据节点
shell> ndbd #--initial ##初始化数据库,用在备份,恢复时
2014-02-27 18:14:23 [ndbd] INFO -- Angel connected to '10.10.54.154:1186'
2014-02-27 18:14:23 [ndbd] INFO -- Angel allocated nodeid: 2
#启动sql节点
shell> /etc/init.d/mysqld start
//查看mysql集群状态
shell> ndb_mgm
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)] 4 node(s)
id=2 @10.10.54.154 (mysql-5.5.35 ndb-7.2.15, Nodegroup: 0, *)
id=3 @10.10.54.155 (mysql-5.5.35 ndb-7.2.15, Nodegroup: 0)
id=4 @10.10.54.156 (mysql-5.5.35 ndb-7.2.15, Nodegroup: 1)
id=5 @10.10.54.157 (mysql-5.5.35 ndb-7.2.15, Nodegroup: 1)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @10.10.54.154 (mysql-5.5.35 ndb-7.2.15)
[mysqld(API)] 8 node(s)
id=7 @10.10.54.154 (mysql-5.5.35 ndb-7.2.15)
id=9 @10.10.54.155 (mysql-5.5.35 ndb-7.2.15)
id=10 @10.10.54.156 (mysql-5.5.35 ndb-7.2.15)
id=11 @10.10.54.157 (mysql-5.5.35 ndb-7.2.15)
id=12 (not connected, accepting connect from any host)
id=13 (not connected, accepting connect from any host)
id=14 (not connected, accepting connect from any host)
id=15 (not connected, accepting connect from any host)
//测试mysql-cluster
1.管理机上创建表
mysql> create database d1;
mysql> use d1;
mysql> CREATE TABLE `t_e` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` enum('M','F') NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`)
) ENGINE=ndbcluster DEFAULT CHARSET=utf8
2.mysql> insert into t_e select * from employees.employees;
##插入出错
ERROR 1297 (HY000): Got temporary error 233 'Out of operation records in transaction coordinator (increase MaxNoOfConcurrentOperations)' from NDBCLUSTER
#原因时插入数据量太大
mysql> insert into t_e select * from employees.employees limit 10000;
#插入成功
3.data节点上查看,数据已同步
//关闭mysql-cluster
1.先关闭sql节点
/etc/init.d/mysqld stop
2.在管理机上
shell> ndb_mgm
ndb_mgm> shutdown #关闭所有cluster进程
mysql-cluster集群原理介绍和搭建步骤(四个data/sql节点) (转)的更多相关文章
- MySQL Cluster 集群
本文转载 http://www.cnblogs.com/gomysql/p/3664783.html MySQL Cluster是一个基于NDB Cluster存储引擎的完整的分布式数据库系统.不仅仅 ...
- kafka集群原理介绍
目录 kafka集群原理介绍 (一)基础理论 二.配置文件 三.错误处理 kafka集群原理介绍 @(博客文章)[kafka|大数据] 本系统文章共三篇,分别为 1.kafka集群原理介绍了以下几个方 ...
- MySQL Cluster 集群部署
前言 此篇博客用以介绍 MySQL Cluster 集群部署方法 一.节点规划 序号 IP地址 节点名称 1 172.16.1.201 mysql-manage 2 172.16.1.202 mysq ...
- MySQL集群---②Windows平台搭建MySQL CLUSTER集群
原文:http://blog.csdn.net/mazhaojuan/article/details/42211857 本文将通过两台电脑来简单介绍一下Windows平台如何搭建MySQL集群. My ...
- centos7 mysql cluster集群搭建基于docker
1.准备 mn:集群管理服务器用于管理集群的其他节点.我们可以从管理节点创建和配置集群上的新节点.重新启动.删除或备份节点. db2/db3:这是节点间同步和数据复制的过程发生的层. db4/db5: ...
- 基于Docker的Mysql Cluster集群
参考 mysql-cluster镜像 https://medium.com/@ahmedamedy/mysql-clustering-with-docker-611dc28b8db7 使用Docker ...
- Windows系统搭建Mysql Cluster集群
简单介绍一下MySQL集群涉及的三种节点: 管理节点(也可以称管理服务器)是整个集群环境的核心,类似于集群中起调度作用的枢纽,由它来负责管理其它节点(数据节点和SQL节点)的开启.关闭或重启某 ...
- Redis Cluster集群详介绍和伪集群搭建
1 什么是Redis-Cluster 为何要搭建Redis集群.Redis是在内存中保存数据的,而我们的电脑一般内存都不大,这也就意味着Redis不适合存储大数据,适合存储大数据的是Hadoop生态系 ...
- MySQL Cluster 集群简介
简介 MySQL集群是一种在无共享架构(SNA,Share Nothing Architecture)系统里应用内存数据库集群的技术.这种无共享的架构可以使得系统使用低廉的硬件获取高的可扩展性. My ...
随机推荐
- U盘装系统系列三—-ghost系统安装教程
前面和大家分享了如何用老毛桃U盘启动盘制作工具把U盘制作启动盘,接下来说下制作好启动盘之后如何安装ghost系统.首先我们准备好ghost镜像复制到U盘中:然后用U盘启动:选择[01]后按Enter键 ...
- CSS3控制元素排列
需求: 将改变为. 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...
- 文成小盆友python-num3 集合,函数,-- 部分内置函数
本接主要内容: set -- 集合数据类型 函数 自定义函数 部分内置函数 一.set 集合数据类型 set集合,是一个无序且不重复的元素集合 集合基本特性 无序 不重复 创建集合 #!/bin/en ...
- Java Tips: 使用Pattern.split替代String.split
String.split方法很常用,用于切割字符串,split传入的参数是正则表达式,它的内部是每次都comiple正则表达式,再调用Pattern.split方法: public String[] ...
- 直播 linux上的第一个c++程序
这里用crt来直播吧: 登录到服务器上之后: 1.mkdir -p 建一个文件夹 2.ll 查看一下这个文件夹 3.cd 进入这个文件夹 4.vim 进行文本编辑 写完之后,按下esc中止输入模式,用 ...
- Android窗口管理服务WindowManagerService计算Activity窗口大小的过程分析
来自http://blog.csdn.net/luoshengyang/article/details/8479101 在Android系统中,Activity窗口的大小是由WindowManager ...
- hdu 1385 Minimum Transport Cost
http://acm.hdu.edu.cn/showproblem.php?pid=1385 #include <cstdio> #include <cstring> #inc ...
- PowerShell中调用外部程序和进程操作命令例子
学习PowerShell,我们不指望通过C#编程去搞定所有事情,我们应该记住cmd.exe或者说批处理给我们留下的宝贵财富——通过调用外部程序去解决问题.调用了外部程序,势必就要对进程进行管理,这就是 ...
- [置顶] 【原创分享】嵌入式linux应用之内核移植定制篇-前篇(linux-3.8.12 mini2440)--20130824
移植的话其实很早就做过了,不过那时用的友善定制的老版本2.6.32 驱动什么的全部弄好了,仅仅用默认配置而已.基本不用改动什么,很简单. 内核更新其实非常的快,今天我就用个3.8.12来移植. 当然, ...
- 价格更低、SLA 更强的全新 Azure SQL 数据库服务等级将于 9 月正式发布
继上周公告之后,很高兴向大家宣布更多好消息,作为我们更广泛的数据平台的一部分, 我们将在 Azure 上提供丰富的在线数据服务.9 月,我们将针对 Azure SQL 数据库推出新的服务等级.Azur ...