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 "/

mysqld

/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进程

时间: 2024-10-14 04:53:52

mysql-cluster集群原理介绍和搭建步骤(四个data/sql节点) (转)的相关文章

Mysql Cluster集群配置详解

一. MySQL集群简介 MySQL群集技术在分布式系统中为MySQL数据提供了冗余特性,增强了安全性,使得单个MySQL服务器故障不会对系统产生巨大的负面效应,系统的稳定性得到保障.MySQL群集需要有一组计算机,每台计算机的角色可能是不一样的.MySQL群集中有三种节点:管理节点.数据节点和SQL节点.群集中的某计算机可能是某一种节点,也可能是两种或三种节点的集合.这三种节点只是在逻辑上的划分,所以它们不一定和物理计算机是一一对应的关系. 管理节点(也可以称管理服务器)主要负责管理数据节点和

MySQL集群---②Windows平台搭建MySQL CLUSTER集群

本文将通过两台电脑来简单介绍一下Windows平台如何搭建MySQL集群. MySQL集群支持多台电脑,本文搭建的MySQL集群以两台机子为例,其中一台(IP为192.168.24.33)部署管理节点.数据节点和SQL节点,另一台(IP为192.168.24.82)部署数据节点和SQL节点. 实际应用中,不要将管理节点跟数据节点部署到一台机子上,因为如果数据节点宕机会导致管理节点不可用,同时整个MySQL群集也就都不可用了.所以一个MySQL群集理想情况下至少有三台服务器,将管理节点单独放到一台

Redis cluster集群原理及搭建

一.集群原理 架构 Redis cluster使用去中心化的思想,整个集群是分布式的.所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽. 客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,只要连接集群中任意一个可用节点即可. Redis集群数据分片(Redis cluster data sharding)不使用一致性哈希算法,而是采用哈希槽(hash slot)的方式.集群中内置了 16384 个哈希槽(编号0-1638

centos7 mysql cluster集群搭建基于docker

1.准备 mn:集群管理服务器用于管理集群的其他节点.我们可以从管理节点创建和配置集群上的新节点.重新启动.删除或备份节点. db2/db3:这是节点间同步和数据复制的过程发生的层. db4/db5:应用程序使用的接口服务器连接到数据库集群. [[email protected] ~]# docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

Mysql Cluster 集群 windows版本

VM1:192.168.220.102 管理节点(MGM) VM2:192.168.220.103 数据节点(NDBD1),SQL节点(SQL1) VM3:192.168.220.104 数据节点(NDBD2),SQL节点(SQL2) MySQL Cluster版本:7.4.6 (MSI Installer) 下载地址:http://dev.mysql.com/downloads/cluster/ 测试工具:Navicate for MySQL 三种节点: 管理节点:用于管理集群共它节点: 守护

mariadb gelera cluster集群参数介绍

参考官网:https://mariadb.com/kb/en/mariadb/galera-cluster-system-variables/#wsrep_notify_cmd

mysql cluster 集群时插入大量数据出现 table is full的解决方法

一.循环插入数据时出现  table is full 二.在mgm>all report memoryusage 查看 Node 2: Data usage is 22%(2305 32K pages of total 10240) 使用率到最后98%以上这时出现啦table is full 基于以上两种情况,其实是一种情况的我的解决方法是: 根据硬件配置必须根据硬件配置修改my.cnf文件和config.ini文件 1.config.ini[ndbd default]NoOfReplicas=

支撑微博亿级社交平台,小白也能玩转Redis集群(原理篇)

Redis作为一款性能优异的内存数据库,支撑着微博亿级社交平台,也成为很多互联网公司的标配.这里将以Redis Cluster集群为核心,基于最新的Redis5版本,从原理再到实战,玩转Redis集群 常见Redis集群方案 在介绍Redis Cluster集群方案之前,为了方便对比,先简单了解一下业界常见的Redis集群方案: 1 基于客户端分片 Redis Sharding是Redis Cluster出来之前,业界普遍使用的多Redis实例集群方法.其主要思想是基于哈希算法,根据Redis数

redis cluster 集群畅谈(三) 之 水平扩容、slave自动化迁移

上一篇http://www.cnblogs.com/qinyujie/p/9029522.html, 主要讲解 实验多master写入.读写分离.实验自动故障切换(高可用性),那么本篇我们就来聊了聊redis cluster 水平扩容以及自动化 slave 迁移. redis repliction 主从架构,一主多从更多的是为了提高 读QPS .而 redis cluster 集群中不建议或者没有说做物理的读写分离了,redis cluster 集群更强调的是通过master的水平扩容,来横向扩