阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL集群之MySQL Cluster

134次阅读
没有评论

共计 18722 个字符,预计需要花费 47 分钟才能阅读完成。

1. 参考文档

http://www.linuxidc.com/Linux/2016-04/130100.htm

2. 简介

MySQL-Cluster 是一种技术,该技术允许在无共享的系统中部署“内存中”数据库的簇。通过无共享体系结构,系统能够使用廉价的硬件,而且对软硬件无特殊要求。此外,由于每个组件都有自己的内存和磁盘,所以不存在单点故障。

MySQL 簇将标准的 MySQL 服务器与名为 NDB 的“内存中”的簇式存储引擎集成了起来。术语 NDB 指的是与存储引擎相关的设置部分,而术语“MySQL 簇”指的是 MySQL 和 NDB 存储引擎的组合。

MySQL 簇由一组计算机构成,每台计算机上均运行着多种进程,包括 MySQL 服务器,NDB 簇的数据节点,管理服务器(MGM),以及(可能)专门的数据访问程序。关于簇中组件的关系,如下图:

 MySQL 集群之 MySQL Cluster

所有这些程序一起构成了 MySQL 簇。将数据保存到 NBD 簇引擎中时,表将保存在数据节点内。能够从簇中所有其他 MySQL 服务器直接访问这些表。因此,假如在将数据保存在簇内的工资应用程序中,如果某一应用程序更新了一位雇员的工资,所有查询该数据的其他 MySQL 服务器能立刻发现这种变化。

对于 MySQL 簇,保存在数据节点的数据可被映射,簇能够处理单独数据节点的故障,除了少数事物将因事物状态丢失而被放弃外,不会产生其他影响。由于事物性应用程序能够处理失败事宜,因而它不是问题源。

MySQL Cluster 备份与恢复 http://www.linuxidc.com/Linux/2013-06/85295.htm

MySQL Cluster 安装配置 http://www.linuxidc.com/Linux/2013-07/87705.htm

MySQL Cluster 3 台机器搭建集群环境 DOC http://www.linuxidc.com/Linux/2013-01/78249.htm

MySQL Cluster7.2 在线增加数据节点存在重大弊端 http://www.linuxidc.com/Linux/2012-08/67605.htm

3. MySQL 簇的基本概念

NDB 是一种“内存中”存储引擎,它具有可用性高和数据一致性好的特点。

能够使用多种故障切换和负载平衡选项配置 NDB 存储引擎,但以簇层面上的存储引擎开始最简单。MySQL 簇的 NDB 存储引擎包含完整的数据集,仅取决于簇本身内的其他数据。

下面名,我们将介绍设置由 NDB 存储引擎和一些 MySQL 服务器构成的 MySQL 簇的设置方法。

目前,MySQL 簇的部分可以独立于 MySQL 服务器进行配置。在 MySQL 簇中,簇的每个部分被视为一个节点。

注释:在很多情况下,术语“节点”用于指计算机,但在讨论 MySQL 簇时,它表示的是进程。在单台计算机上可以有任意数目的节点,所以我们才有可能将多个不同功能的节点配置在同一台计算机上,为此,我们采用术语簇主机。

有三类簇节点,在最低的 MySQL 簇配置中,至少有三个节点,这三类节点分别是:

管理节点(MGM):这类节点的作用是管理 MySQL 簇内的其他节点,如提供配置数据,启动并停止节点,运行备份等。由于这类节点负责管理其他节点的配置,所以管理节点应在其他节点之前先启动。MGM 节点是用命令 ndb_mgm 启动的。

数据节点(NDB):这类节点用于保存簇的数据。数据集点的数目与副本的数目相关,是片段的倍数。例如,对于两个副本,每个副本又两个片段,那么就有 4 个数据节点。没有必要有一个以上的副本。。数据节点是用命令 ndbd 来启动的。

SQL 节点:这类节点是用来访问簇数据的节点。对于 MySQL 簇,客户端节点是使用 NDB 簇存储引擎的传统 MySQL 服务器。典型情况下,SQL 节点是使用命令 mysql -ndbcluster 来启动的,或将 ndbcluster 添加到 my.cnf 后面使用 mysqld 启动。

簇配置包括对簇中单独节点的配置,以及设置节点之间的单独通信链路。对于目前设计的 MySQL 簇,其意图在于,从处理器的能力,内存空间和宽带来讲,存储节点是同质的,此外,为了提供单一的配置点,作为整体,簇的所有配置均位于一个文件中。

管理服务器(MGM 节点)负责管理簇配置文件和簇日志。簇中的每个节点从管理服务器检索配置数据,并请求确定管理服务器所在的位置的方式。当数据节点内出现有趣的事件时,节点将关于这类事件的信息传输到管理服务器,然后,啊经这类信息写入簇日志。

 

4. 实现环境

现在,我们计划建立有 5 个节点的 MySQL CLuster 体系,因此需要用到 3 台机器 (sql 和数据节点共用),分别做如下用途:

                节点 (用途)                IP 地址 (主机名)
                管理节点 (MGM)              10.24.0.101(db1) nodeid = 1

                数据节点 1(NDBD1)          10.24.6.4 (db4) nodeid = 11
                数据节点 2(NDBD2)          10.24.6.6(db5) nodeid =12
                SQL 节点 1(SQL1)            10.24.6.4(db2) nodeid = 21
                SQL 节点 2(SQL2)            10.24.6.6(db3) nodeid = 22

5. MySQL-Cluster 安装包下载

对于 MySQL-Cluster 的安装包下载,下载地址见 http://dev.mysql.com/downloads/cluster/

mysql-cluster-gpl-7.4.7-debian7-x86_64.deb

6. 安装

6.1. 清除之前的 mysql 痕迹

此外 如果之前安装过 mysql-server,在进行此次实验之前,需要将 mysql-server 卸载,执行以下指令卸载 mysql

sudo apt-get autoremove –purge mysql-server

sudo apt-get remove mysql-server

sudo apt-get autoremove mysql-server

sudo apt-get remove mysql-common (非常重要)

6.2. 安装 deb 文件

sudo dpkg -i mysql-cluster-gpl-7.4.7-debian7-x86_64.deb

安装目录 /opt/mysql/server-5.6

6.3. 存储节点 /SQL 节点安装

SQL 节点和数据节点的安装步骤基本相同,所以在设计为存储节点或 SQL 节点的的每一台机器上,以系统根用户身份执行以下步骤:

mysql 组和 mysql 用户

检查 /etc/passwd 和 /etc/group/ 文件,查看在系统上是否已经存在 mysql 组和 mysql 用户,这时因为某些操作系统会将其作为安装进程的一部分创建。可以使用以下指令查看:

cat show /etc/passwd

cat show /etc/group

如果它们不存在,则需要创建新的 mysql 用户组,然后为该组添加一个 mysql 用户

groupadd mysql

useradd -g mysql mysql

6.4. 创建系统数据库的脚本

sudo /opt/mysql/server-5.6/scripts/mysql_install_db –user=mysql

如果此脚本不能运行,若报错为主机名不匹配的话,则很有可能是下载的版本不对,查看操作系统是 32 位还是 64 位,选择正确的版本。若报错找不到默认的文件,则很有可能是因为之前的 mysql-server 没有卸载,执行上文提供的指令,彻底卸载 mysql-server

成功结果:

To start mysqld at boot time you have to copy

support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !

To do so, start the server, then issue the following commands:

  /opt/mysql/server-5.6/bin/mysqladmin -u root password ‘new-password’

  /opt/mysql/server-5.6/bin/mysqladmin -u root -h drbd01 password ‘new-password’

Alternatively you can run:

  /opt/mysql/server-5.6/bin/mysql_secure_installation

which will also give you the option of removing the test

databases and anonymous user created by default.  This is

strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:

  cd /opt/mysql/server-5.6 ; /opt/mysql/server-5.6/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl

  cd mysql-test ; perl mysql-test-run.pl

Support MySQL by buying support/licenses at http://shop.mysql.com

WARNING: Found existing config file /opt/mysql/server-5.6/my.cnf on the system.

Because this file might be in use, it was not replaced,

but was used in bootstrap (unless you used –defaults-file)

and when you later start the server.

The new default config file was created as /opt/mysql/server-5.6/my-new.cnf,

please compare it with your file and take the changes you need.

6.5. 设置 MySQL 服务器和数据目录必要的权限

chown -R root .

chown -R mysql data

3

chgrp -R mysql .

6.6. 拷贝 mysql.server

  
  

sudo cp /opt/mysql/server-5.6/support-files/mysql.server /etc/init.d/mysql

chmod +x /etc/init.d/mysql

6.7. 拷贝 my.cnf

sudo cp /opt/mysql/server-5.6/my-new.cnf /etc/my.cnf

sudo vim /etc/my.cnf

 MySQL 集群之 MySQL Cluster

6.8. 设置 root 密码

sudo apt-get install mysql-client

mysqladmin -u root flush-privileges password “123456”

6.9. 管理节点安装

对于管理(MGM)节点,不需要安装 mysqld 可执行文件,仅需要安装用于 MGM 服务器和客户端的二进制文件,这类文件可在下载的档案文件中找到。假定将下载的档案文件放在了 /var/tmp 文件下,以系统管理员的身份执行以下步骤,在簇管理节点主机上安装 ndb_mgmd 和 ndb_mgm

ndb_mgmd:ndb 管理服务器

ndb_mgm: ndb 管理客户端

6.10. 安装 deb 文件

sudo dpkg -i mysql-cluster-gpl-7.4.7-debian7-x86_64.deb

安装目录 /opt/mysql/server-5.6

6.11. 创建管理目录

sudo mkdir /usr/local/mysql/

6.12. 拷贝 ndb 管理程序

sudo cp /opt/mysql/server-5.6/bin/ndb_mgm* /usr/local/mysql/

6.13. 端口

注释 :簇管理节点的默认端口是 1186, 数据节点的默认端后是 2202。

 

6.14.  配置 ndb 管理节点

cd /usr/local/mysql/

sudo vim config.ini:

# Options affecting ndbd processes on all data nodes:

[NDBD DEFAULT]

NoOfReplicas=2

DataMemory=80M

IndexMemory=18M

# TCP/IP options:

[TCP DEFAULT]

#portnumber=2202

# Management process options:

[NDB_MGMD]

nodeid=1

HostName=10.24.0.101

DataDir=/usr/local/mysql

# Options for data node :

[NDBD]

nodeid=11

HostName=10.24.6.4

DataDir=/opt/mysql/server-5.6/data/

# Options for data node :

[NDBD]

nodeid=12

HostName=10.24.6.6

DataDir=/opt/mysql/server-5.6/data/

# SQL node options:

[MYSQLD]

nodeid=21

HostName=10.24.6.4

[MYSQLD]

nodeid=22

HostName=10.24.6.6

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2016-04/130099p2.htm

7. 启动

完成配置后,启动簇并不困难。必须在数据节点所在的主机上分别启动每个簇节点进程。尽管能够按任何顺序启动节点,但还是建议,首先启动管理节点,然后启动存储节点,最后启动 SQL 节点。

7.1. 管理节点启动

可使用 nbd_mgm 指令登录到 ndb_mgm 客户端,登录后,可使用 show 指令来查看簇中个节点情况。

注意,启动 MGM 时,必须用 - f 或者–config-file 选项,告诉 ndb_mgmd 到哪里找到配置文件。首次启动时必须选用–initial 选项,或者更改了 MGM 节点的配置信息后,也需选用–initial 选项。

sudo /usr/local/MySQL/ndb_mgmd -f /usr/local/mysql/config.ini

 MySQL 集群之 MySQL Cluster

Ndb 客户端查看:

wiki@zoweewiki:/usr/local/mysql$ /usr/local/mysql/ndb_mgm

— NDB Cluster — Management Client —

ndb_mgm>

ndb_mgm>

ndb_mgm>

ndb_mgm> show

Connected to Management Server at: localhost:1186

Cluster Configuration

———————

[ndbd(NDB)]    2 node(s)

id=11  @10.24.6.4  (mysql-5.6.25 ndb-7.4.7, Nodegroup: 0, *)

id=12  @10.24.6.6  (mysql-5.6.25 ndb-7.4.7, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)

id=1    @10.24.0.101  (mysql-5.6.25 ndb-7.4.7)

[mysqld(API)]  2 node(s)

id=21  @10.24.6.4  (mysql-5.6.25 ndb-7.4.7)

id=22  @10.24.6.6  (mysql-5.6.25 ndb-7.4.7)

 

7.2. 数据节点启动

在每台数据节点主机上,对于首次启动,运行下述命令启动 NDBD 进程:

sudo /opt/mysql/server-5.6/bin/ndbd –initial

注意,应仅在首次启动时 ndbd 时,或者在备份 / 恢复或者配置变化后重启 ndbd 时使用“–initial”参数,这很重要,因为该参数会使数据节点删除由早期 ndbd 实例创建的,用于恢复的任何文件,包括恢复用日志文件。

 MySQL 集群之 MySQL Cluster

7.3. MYSQL 节点启动

sudo /etc/init.d/mysql restart

启动日志:

/opt/mysql/server-5.6/data/drbd02.err

151015 14:33:19 mysqld_safe Starting mysqld daemon with databases from /opt/mysql/server-5.6/data

2015-10-15 14:33:22 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use –explicit_defaults_for_timestamp server option (see documentation for more details).

2015-10-15 14:33:22 0 [Note] /opt/mysql/server-5.6/bin/mysqld (mysqld 5.6.25-ndb-7.4.7-cluster-gpl-log) starting as process 15192 …

2015-10-15 14:33:23 15192 [Note] Plugin ‘FEDERATED’ is disabled.

2015-10-15 14:33:23 15192 [Note] InnoDB: Using atomics to ref count buffer pool pages

2015-10-15 14:33:23 15192 [Note] InnoDB: The InnoDB memory heap is disabled

2015-10-15 14:33:23 15192 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins

2015-10-15 14:33:23 15192 [Note] InnoDB: Memory barrier is not used

2015-10-15 14:33:23 15192 [Note] InnoDB: Compressed tables use zlib 1.2.3

2015-10-15 14:33:23 15192 [Note] InnoDB: Using Linux native AIO

2015-10-15 14:33:23 15192 [Note] InnoDB: Not using CPU crc32 instructions

2015-10-15 14:33:23 15192 [Note] InnoDB: Initializing buffer pool, size = 128.0M

2015-10-15 14:33:23 15192 [Note] InnoDB: Completed initialization of buffer pool

2015-10-15 14:33:24 15192 [Note] InnoDB: Highest supported file format is Barracuda.

2015-10-15 14:33:24 15192 [Note] InnoDB: 128 rollback segment(s) are active.

2015-10-15 14:33:24 15192 [Note] InnoDB: Waiting for purge to start

2015-10-15 14:33:24 15192 [Note] InnoDB: 5.6.25 started; log sequence number 1626027

2015-10-15 14:33:24 15192 [Note] NDB: Changed global value of binlog_format from STATEMENT to MIXED

2015-10-15 14:33:24 15192 [Note] NDB: NodeID is 22, management server ‘10.24.0.101:1186’

2015-10-15 14:33:25 15192 [Note] NDB[0]: NodeID: 22, all storage nodes connected

2015-10-15 14:33:25 15192 [Warning] NDB: server id set to zero – changes logged to bin log with server id zero will be logged with another server id by slave mysqlds

2015-10-15 14:33:25 15192 [Note] NDB Binlog: Starting…

2015-10-15 14:33:25 15192 [Note] NDB Util: Starting…

2015-10-15 14:33:25 15192 [Note] NDB Index Stat: Starting…

2015-10-15 14:33:25 15192 [Note] NDB Index Stat: Wait for server start completed

2015-10-15 14:33:25 15192 [Note] NDB Util: Wait for server start completed

2015-10-15 14:33:25 15192 [Note] NDB Binlog: Started

2015-10-15 14:33:25 15192 [Note] NDB Binlog: Setting up

2015-10-15 14:33:25 15192 [Note] NDB Binlog: Created schema Ndb object, reference: 0x80040016, name: ‘Ndb Binlog schema change monitoring’

2015-10-15 14:33:25 15192 [Note] NDB Binlog: Created injector Ndb object, reference: 0x80050016, name: ‘Ndb Binlog data change monitoring’

2015-10-15 14:33:25 15192 [Note] NDB Binlog: Setup completed

2015-10-15 14:33:25 15192 [Note] NDB Binlog: Wait for server start completed

2015-10-15 14:33:25 15192 [Note] Server hostname (bind-address): ‘*’; port: 3306

2015-10-15 14:33:25 15192 [Note] IPv6 is available.

2015-10-15 14:33:25 15192 [Note]  – ‘::’ resolves to ‘::’;

2015-10-15 14:33:25 15192 [Note] Server socket created on IP: ‘::’.

2015-10-15 14:33:25 15192 [Note] Event Scheduler: Loaded 0 events

2015-10-15 14:33:25 15192 [Note] /opt/mysql/server-5.6/bin/mysqld: ready for connections.

Version: ‘5.6.25-ndb-7.4.7-cluster-gpl-log’  socket: ‘/var/run/mysqld/mysqld.sock’  port: 3306  MySQL Cluster Community Server (GPL)

2015-10-15 14:33:25 15192 [Note] NDB Util: Wait for cluster to start

2015-10-15 14:33:25 15192 [Note] NDB Util: Started

2015-10-15 14:33:25 15192 [Note] NDB Binlog: Check for incidents

2015-10-15 14:33:25 15192 [Note] NDB Binlog: Wait for cluster to start

2015-10-15 14:33:25 15192 [Note] NDB Index Stat: Wait for cluster to start

2015-10-15 14:33:25 15192 [Note] ndb_index_stat_proc: Created Ndb object, reference: 0x80070016, name: ‘Ndb Index Statistics monitoring’

2015-10-15 14:33:25 15192 [Note] NDB Index Stat: Started

2015-10-15 14:33:26 15192 [Note] NDB Binlog: DISCOVER TABLE Event: REPL$mysql/ndb_schema

2015-10-15 14:33:26 15192 [Note] NDB Binlog: logging ./mysql/ndb_schema (UPDATED,USE_WRITE)

2015-10-15 14:33:26 15192 [Note] NDB Binlog: DISCOVER TABLE Event: REPL$mysql/ndb_apply_status

2015-10-15 14:33:26 15192 [Note] NDB Binlog: logging ./mysql/ndb_apply_status (UPDATED,USE_WRITE)

2015-10-15 14:33:26 15192 [Note] NDB: Cleaning stray tables from database ‘ndb_12_fs’

2015-10-15 14:33:26 15192 [Note] NDB: Cleaning stray tables from database ‘ndbinfo’

2015-10-15 14:33:26 15192 [Note] NDB: Cleaning stray tables from database ‘performance_schema’

2015-10-15 14:33:26 15192 [Note] NDB: Cleaning stray tables from database ‘test’

2015-10-15 14:33:26 15192 [Note] NDB Binlog: Wait for first event

2015-10-15 14:33:26 [NdbApi] INFO    — Flushing incomplete GCI:s< 4554/3

2015-10-15 14:33:26 [NdbApi] INFO    — Flushing incomplete GCI:s< 4554/3

2015-10-15 14:33:26 15192 [Note] NDB Binlog: starting log at epoch 4554/3

2015-10-15 14:33:26 15192 [Note] NDB Binlog: Got first event

2015-10-15 14:33:26 15192 [Note] NDB Binlog: ndb tables writable

2015-10-15 14:33:26 15192 [Note] NDB Binlog: Startup and setup completed

2015-10-15 14:33:26 15192 [Note] NDB Schema dist: Data node: 11 reports subscribe from node 21, subscriber bitmask 0200000

2015-10-15 14:33:26 15192 [Note] NDB Schema dist: Data node: 12 reports subscribe from node 21, subscriber bitmask 0200000

2015-10-15 14:34:03 15192 [Warning] IP address ‘10.24.6.170’ could not be resolved: Name or service not known

2015-10-15 14:34:56 15192 [Note] NDB Schema dist: Data node: 11 reports subscribe from node 21, subscriber bitmask 00

2015-10-15 14:34:56 15192 [Note] NDB Schema dist: Data node: 12 reports subscribe from node 21, subscriber bitmask 00

2015-10-15 14:35:03 15192 [Note] NDB Schema dist: Data node: 11 reports subscribe from node 21, subscriber bitmask 0200000

2015-10-15 14:35:03 15192 [Note] NDB Schema dist: Data node: 12 reports subscribe from node 21, subscriber bitmask 0200000

2015-10-15 14:41:04 15192 [Note] NDB Schema dist: Data node: 11 failed, subscriber bitmask 00

2015-10-15 14:42:36 15192 [Note] NDB Schema dist: Data node: 12 reports subscribe from node 21, subscriber bitmask 00

1. 参考文档

http://www.linuxidc.com/Linux/2016-04/130100.htm

2. 简介

MySQL-Cluster 是一种技术,该技术允许在无共享的系统中部署“内存中”数据库的簇。通过无共享体系结构,系统能够使用廉价的硬件,而且对软硬件无特殊要求。此外,由于每个组件都有自己的内存和磁盘,所以不存在单点故障。

MySQL 簇将标准的 MySQL 服务器与名为 NDB 的“内存中”的簇式存储引擎集成了起来。术语 NDB 指的是与存储引擎相关的设置部分,而术语“MySQL 簇”指的是 MySQL 和 NDB 存储引擎的组合。

MySQL 簇由一组计算机构成,每台计算机上均运行着多种进程,包括 MySQL 服务器,NDB 簇的数据节点,管理服务器(MGM),以及(可能)专门的数据访问程序。关于簇中组件的关系,如下图:

 MySQL 集群之 MySQL Cluster

所有这些程序一起构成了 MySQL 簇。将数据保存到 NBD 簇引擎中时,表将保存在数据节点内。能够从簇中所有其他 MySQL 服务器直接访问这些表。因此,假如在将数据保存在簇内的工资应用程序中,如果某一应用程序更新了一位雇员的工资,所有查询该数据的其他 MySQL 服务器能立刻发现这种变化。

对于 MySQL 簇,保存在数据节点的数据可被映射,簇能够处理单独数据节点的故障,除了少数事物将因事物状态丢失而被放弃外,不会产生其他影响。由于事物性应用程序能够处理失败事宜,因而它不是问题源。

MySQL Cluster 备份与恢复 http://www.linuxidc.com/Linux/2013-06/85295.htm

MySQL Cluster 安装配置 http://www.linuxidc.com/Linux/2013-07/87705.htm

MySQL Cluster 3 台机器搭建集群环境 DOC http://www.linuxidc.com/Linux/2013-01/78249.htm

MySQL Cluster7.2 在线增加数据节点存在重大弊端 http://www.linuxidc.com/Linux/2012-08/67605.htm

3. MySQL 簇的基本概念

NDB 是一种“内存中”存储引擎,它具有可用性高和数据一致性好的特点。

能够使用多种故障切换和负载平衡选项配置 NDB 存储引擎,但以簇层面上的存储引擎开始最简单。MySQL 簇的 NDB 存储引擎包含完整的数据集,仅取决于簇本身内的其他数据。

下面名,我们将介绍设置由 NDB 存储引擎和一些 MySQL 服务器构成的 MySQL 簇的设置方法。

目前,MySQL 簇的部分可以独立于 MySQL 服务器进行配置。在 MySQL 簇中,簇的每个部分被视为一个节点。

注释:在很多情况下,术语“节点”用于指计算机,但在讨论 MySQL 簇时,它表示的是进程。在单台计算机上可以有任意数目的节点,所以我们才有可能将多个不同功能的节点配置在同一台计算机上,为此,我们采用术语簇主机。

有三类簇节点,在最低的 MySQL 簇配置中,至少有三个节点,这三类节点分别是:

管理节点(MGM):这类节点的作用是管理 MySQL 簇内的其他节点,如提供配置数据,启动并停止节点,运行备份等。由于这类节点负责管理其他节点的配置,所以管理节点应在其他节点之前先启动。MGM 节点是用命令 ndb_mgm 启动的。

数据节点(NDB):这类节点用于保存簇的数据。数据集点的数目与副本的数目相关,是片段的倍数。例如,对于两个副本,每个副本又两个片段,那么就有 4 个数据节点。没有必要有一个以上的副本。。数据节点是用命令 ndbd 来启动的。

SQL 节点:这类节点是用来访问簇数据的节点。对于 MySQL 簇,客户端节点是使用 NDB 簇存储引擎的传统 MySQL 服务器。典型情况下,SQL 节点是使用命令 mysql -ndbcluster 来启动的,或将 ndbcluster 添加到 my.cnf 后面使用 mysqld 启动。

簇配置包括对簇中单独节点的配置,以及设置节点之间的单独通信链路。对于目前设计的 MySQL 簇,其意图在于,从处理器的能力,内存空间和宽带来讲,存储节点是同质的,此外,为了提供单一的配置点,作为整体,簇的所有配置均位于一个文件中。

管理服务器(MGM 节点)负责管理簇配置文件和簇日志。簇中的每个节点从管理服务器检索配置数据,并请求确定管理服务器所在的位置的方式。当数据节点内出现有趣的事件时,节点将关于这类事件的信息传输到管理服务器,然后,啊经这类信息写入簇日志。

 

4. 实现环境

现在,我们计划建立有 5 个节点的 MySQL CLuster 体系,因此需要用到 3 台机器 (sql 和数据节点共用),分别做如下用途:

                节点 (用途)                IP 地址 (主机名)
                管理节点 (MGM)              10.24.0.101(db1) nodeid = 1

                数据节点 1(NDBD1)          10.24.6.4 (db4) nodeid = 11
                数据节点 2(NDBD2)          10.24.6.6(db5) nodeid =12
                SQL 节点 1(SQL1)            10.24.6.4(db2) nodeid = 21
                SQL 节点 2(SQL2)            10.24.6.6(db3) nodeid = 22

5. MySQL-Cluster 安装包下载

对于 MySQL-Cluster 的安装包下载,下载地址见 http://dev.mysql.com/downloads/cluster/

mysql-cluster-gpl-7.4.7-debian7-x86_64.deb

6. 安装

6.1. 清除之前的 mysql 痕迹

此外 如果之前安装过 mysql-server,在进行此次实验之前,需要将 mysql-server 卸载,执行以下指令卸载 mysql

sudo apt-get autoremove –purge mysql-server

sudo apt-get remove mysql-server

sudo apt-get autoremove mysql-server

sudo apt-get remove mysql-common (非常重要)

6.2. 安装 deb 文件

sudo dpkg -i mysql-cluster-gpl-7.4.7-debian7-x86_64.deb

安装目录 /opt/mysql/server-5.6

6.3. 存储节点 /SQL 节点安装

SQL 节点和数据节点的安装步骤基本相同,所以在设计为存储节点或 SQL 节点的的每一台机器上,以系统根用户身份执行以下步骤:

mysql 组和 mysql 用户

检查 /etc/passwd 和 /etc/group/ 文件,查看在系统上是否已经存在 mysql 组和 mysql 用户,这时因为某些操作系统会将其作为安装进程的一部分创建。可以使用以下指令查看:

cat show /etc/passwd

cat show /etc/group

如果它们不存在,则需要创建新的 mysql 用户组,然后为该组添加一个 mysql 用户

groupadd mysql

useradd -g mysql mysql

6.4. 创建系统数据库的脚本

sudo /opt/mysql/server-5.6/scripts/mysql_install_db –user=mysql

如果此脚本不能运行,若报错为主机名不匹配的话,则很有可能是下载的版本不对,查看操作系统是 32 位还是 64 位,选择正确的版本。若报错找不到默认的文件,则很有可能是因为之前的 mysql-server 没有卸载,执行上文提供的指令,彻底卸载 mysql-server

成功结果:

To start mysqld at boot time you have to copy

support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !

To do so, start the server, then issue the following commands:

  /opt/mysql/server-5.6/bin/mysqladmin -u root password ‘new-password’

  /opt/mysql/server-5.6/bin/mysqladmin -u root -h drbd01 password ‘new-password’

Alternatively you can run:

  /opt/mysql/server-5.6/bin/mysql_secure_installation

which will also give you the option of removing the test

databases and anonymous user created by default.  This is

strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:

  cd /opt/mysql/server-5.6 ; /opt/mysql/server-5.6/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl

  cd mysql-test ; perl mysql-test-run.pl

Support MySQL by buying support/licenses at http://shop.mysql.com

WARNING: Found existing config file /opt/mysql/server-5.6/my.cnf on the system.

Because this file might be in use, it was not replaced,

but was used in bootstrap (unless you used –defaults-file)

and when you later start the server.

The new default config file was created as /opt/mysql/server-5.6/my-new.cnf,

please compare it with your file and take the changes you need.

6.5. 设置 MySQL 服务器和数据目录必要的权限

chown -R root .

chown -R mysql data

3

chgrp -R mysql .

6.6. 拷贝 mysql.server

  
  

sudo cp /opt/mysql/server-5.6/support-files/mysql.server /etc/init.d/mysql

chmod +x /etc/init.d/mysql

6.7. 拷贝 my.cnf

sudo cp /opt/mysql/server-5.6/my-new.cnf /etc/my.cnf

sudo vim /etc/my.cnf

 MySQL 集群之 MySQL Cluster

6.8. 设置 root 密码

sudo apt-get install mysql-client

mysqladmin -u root flush-privileges password “123456”

6.9. 管理节点安装

对于管理(MGM)节点,不需要安装 mysqld 可执行文件,仅需要安装用于 MGM 服务器和客户端的二进制文件,这类文件可在下载的档案文件中找到。假定将下载的档案文件放在了 /var/tmp 文件下,以系统管理员的身份执行以下步骤,在簇管理节点主机上安装 ndb_mgmd 和 ndb_mgm

ndb_mgmd:ndb 管理服务器

ndb_mgm: ndb 管理客户端

6.10. 安装 deb 文件

sudo dpkg -i mysql-cluster-gpl-7.4.7-debian7-x86_64.deb

安装目录 /opt/mysql/server-5.6

6.11. 创建管理目录

sudo mkdir /usr/local/mysql/

6.12. 拷贝 ndb 管理程序

sudo cp /opt/mysql/server-5.6/bin/ndb_mgm* /usr/local/mysql/

6.13. 端口

注释 :簇管理节点的默认端口是 1186, 数据节点的默认端后是 2202。

 

6.14.  配置 ndb 管理节点

cd /usr/local/mysql/

sudo vim config.ini:

# Options affecting ndbd processes on all data nodes:

[NDBD DEFAULT]

NoOfReplicas=2

DataMemory=80M

IndexMemory=18M

# TCP/IP options:

[TCP DEFAULT]

#portnumber=2202

# Management process options:

[NDB_MGMD]

nodeid=1

HostName=10.24.0.101

DataDir=/usr/local/mysql

# Options for data node :

[NDBD]

nodeid=11

HostName=10.24.6.4

DataDir=/opt/mysql/server-5.6/data/

# Options for data node :

[NDBD]

nodeid=12

HostName=10.24.6.6

DataDir=/opt/mysql/server-5.6/data/

# SQL node options:

[MYSQLD]

nodeid=21

HostName=10.24.6.4

[MYSQLD]

nodeid=22

HostName=10.24.6.6

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2016-04/130099p2.htm

8. 测试

8.1. 常规测试

为了让数据表能够在 cluster 中正常复制,创建数据表时必须指定为 ndbcluster 引擎(engine=ndb 或 engine=ndbcluster)。

登录到 10.24.64 的 MySQL,然后创建一个新数据库 songzi,并创建一个 ndbcluster 引擎的数据表 test(id int,name char(10)), 并向表中插入一条数据(0,songzi)。10.24.6.4 上的操作及结果如下图:

 MySQL 集群之 MySQL Cluster

然后登录 10.24.6.6 的 mysql,可查看到数据已同步,并且新建的表及数据也存在。10.24.6.6 上的操作及结果如下图:

 MySQL 集群之 MySQL Cluster

 

8.2. 模拟 NDB 节点 Crash

终止 10.24.6.4 上的 NDB 进程,执行以下指令查看 NDB 进程情况

ps -ef | grep ndbd

kill 24077

ps -ef | grep ndbd

具体操作及结果见下图:

 MySQL 集群之 MySQL Cluster

也可以在 ndb_mgm 管理节点客户端查看到 10.24.0.101 上的 NDB 节点已停掉

 MySQL 集群之 MySQL Cluster

然后分别登录到 10.24.6.4 和 10.24.6.6 的 mysql,可发现依然能够查询到数据。结果如下图

10.24.6.4

 MySQL 集群之 MySQL Cluster

10.24.6.6

 MySQL 集群之 MySQL Cluster

此结果说明测试成功,即当有一个 NDB 节点 Crash 后,整个 MySQL 环境仍可以正常服务。

8.3. 模拟 SQL 节点 Crash

在上 10.24.6.4 上终止 mysqld 进程,可执行以下指令:

killall mysqld

也可以在 ndb_mgm 管理节点客户端查看到 10.24.6.4 上的 SQL 节点已停掉

 MySQL 集群之 MySQL Cluster

登录到 10.24.6.6 上的 mysql,可查看到数据依然存在

 MySQL 集群之 MySQL Cluster

此结果说明测试成功,及当有一个 SQL 节点 Crash 后,整个 MySQL-Cluster 环境仍可以工作。

至此,整个 MySQL-Cluster 安装及配置实验已完成。实验结束后,可使用指令 shell> ndb_mgm -e shutdown 或者 ndb_mgm>shutdown 来关闭簇中的所有节点。

 

9. 遇到问题

 MySQL 集群之 MySQL Cluster

MySQL 集群之 MySQL Cluster

10. 总结

  • Mysql cluster 是一个统一的共享集群
  • 多 mysql 同时共享
  • 一个值多份存储,不是像 redis 那样根据一致性 hash 分布存储
  • 高并发、高可用、高伸缩性
  • share nothing 架构
  • 通过增加数据节点扩展:通过 32 个数据节点实现每秒 2 亿条 NoSQL 查询,以及通过 16 个数据节点每秒查询近 250 万 SQL 语句
  • 推荐使用 lvs + keepalived + mysql cluster 实现集群 mysql,MySQL Cluster 是一个实时可扩展且符合 ACID 的事务型内存数据库

MySQL Cluster 的详细介绍 :请点这里
MySQL Cluster 的下载地址 :请点这里

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-04/130099.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计18722字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中