摘要:本年伊始阶段,由于实验室对不同数据库性能测试需求,才出现MySQL集群搭建。购置主机,交换机,双绞线等一系列准备工作就绪,也就开始集群搭建。起初笔者对此不甚了解,查阅很多资料,最终都不太完善。故笔者真机环境测试成功后,整理出此搭建文档,一则防止遗忘知识总结,另则与人共享。前天完成文档由于文字偏多,给陌生配置者带来不小压力。更改文档版本后,减少文字增加图片,让一个大一的对mysql集群不了解者,照此配置。能够配置成功,故发表。(本文原创/整理,转载请标注原文出处: 真机环境下MySQL-Cluster搭建文档 )

相关文章

  1. 【Oracle RAC集群搭建1】 集群概念介绍
  2. 【Oracle RAC集群搭建2】 ORACLE集群概念和原理
  3. 【Oracle RAC集群搭建3】 RAC 工作原理和相关组件
  4. 【Oracle RAC集群搭建4】 缓存融合技术
  5. 【Oracle RAC集群搭建5】 RAC 特殊问题和实战经验
  6. 【Oracle RAC集群搭建6】 ORACLE 11 G版本2 RAC在LINUX上使用NFS安装前准备
  7. 【Oracle RAC集群搭建7】 ORACLE ENTERPRISE LINUX 5.7下DATABASE 11G RAC集群安装
  8. 【Oracle RAC集群搭建8】 ORACLE ENTERPRISE LINUX 5.7下DATABASE 11G RAC数据库安装
  9. 【Oracle RAC集群搭建9】 ORACLE ENTERPRISE LINUX 5.7下DATABASE 11G RAC基本测试与使用
  10. 【MySql集群搭建】   真机环境下MySQL-Cluster搭建文档

  11. 【Hadoop集群搭建1】Hadoop集群的配置

  12. 【Hadoop集群搭建2】Hadoop集群的配置

MySQL Cluster简介

MySQL cluster 和 Oracle RAC 完全不同,它采用 无共享架构Shared nothing(shared nothing architecture)。整个集群由管理节点(ndb_mgmd),处理节点(mysqld)和存储节点(ndbd)组 成,不存在一个共享的存储设备。MySQL cluster 主要利用了 NDB 存储引擎来实现,NDB 存储引擎是一个内存式存储引擎,要求数据必须全部加载到内存之中。数据被自动分布在集群中的不同存 储节点上,每个存储节点只保存完整数据的一个分片(fragment)。同时,用户可以设置同一份数据保存在多个不同的存储节点上,以保证单点故障不会造 成数据丢失。MySQL cluster 主要由 3 各部分组成:

  • SQL 服务器节点
  • NDB 数据存储节点
  • 监控和管理节点

这样的分层也是与 MySQL 本身把 SQL 处理和存储分开的架构相关系的。MySQL cluster 的优点在于其是一个分布式的数据库集群,处理节点和存储节点都可以线性增加,整个集群没有单点故障,可用性和扩展性都可以做到很高,更适合 OLTP 应用。但是它的问题在于:

  • NDB(“NDB” 是一种“内存中”的存储引擎,它具有可用性高和数据一致性好的特点。) 存储引擎必须要求数据全部加载到内存之中,限制比较大,但是目前 NDB 新版本对此做了改进,允许只在内存中加 载索引数据,数据可以保存在磁盘上。
  •  目前的 MySQL cluster 的性能还不理想,因为数据是按照主键 hash 分布到不同的存储节点上,如果应用不是通过主键去获取数据的话,必须在所有的存储节点上扫描, 返回结果到处理节点上去处理。而且,写操作需要同时写多份数据到不同的存储节点上, 对 节点间的网络要求很高。

虽然 MySQL cluster 目前性能还不理想,但是 share nothing 的架构一定是未来的趋势,Oracle 接手 MySQL之后,也在大力发展 MySQL cluster,我对 MySQL cluster 的前景抱有很大的期待。

mysql-cluster构造

安装mysql-cluster首先要了解cluster的构造,Cluster大体上是由管理节点(mgmd)、数据节点(ndbd)、sql节点(mysqld)组成的。

虚拟机安装centos6.6

系统要求:

内存:4G(最少4G)

CPU:需要支持VT

如果你是笔记本用户那么cpu虚拟化可能是关闭的,请在BIOS下设置virtualization 为enable

新建虚拟机,选择典型安装,点击下一步

点击下一步

这里用户名最好是mysql因为后面要用到。设置成其他用户也可以。

下一步

位置就是保存这个虚拟centos系统的位置

下一步

选择如图所示,下一步

选择自定义硬件,建议最好每个虚拟机分配1G的内存。每个cent最少分配512M内存。

点击完成就可以了。

虚拟机安装完成后,用root权限进入。密码和mysql账户的密码相同。

mysql-cluster下载

www.mysql.com/downloads/cluster 选择linux-generic下的版本 根据你的cent的系统选择32or64

centos6.6搭建环境配置

首先进入linux终端,右键桌面如图所示

Open in terminal(终端)

安装mysql-cluster前首先要卸载原有系统自带的mysql

联网卸载(终端下执行命令)

#yum remove mysql

手动清理(终端下执行命令)

#rpm –qa|grep mysql* (这条是查询系统中存在的mysql)

#rpm –e –nodeps mysql-libs-5.1.71-1.el6.x86_64 (不同版本的centos这个版本也不同)

mysql-cluster安装包导入cent中

首先查询需要导入的cent的ip地址,终端下输入

#ifconfig

如图所示其中inet addr:192.168.191.129就是这个cent的ip地址。

下载软件winscp

打开软件

新建站点,主机名就是cent 的ip ,用户名使用root

点击登录,输入密码,连接成功

左边是windows右边是cent

Cent下进入目录/usr/local/src 把你的mysql-cluster安装文件放在这个目录下

打开cent终端

添加mysql用户和组(如果前面安装虚拟机的时候使用的用户是mysql则跳过此步骤

添加mysql用户

1.      # groupadd mysql

2.      # useradd mysql -g mysql

安装mysql-cluster 7.4.4-linux

1.      # cd /usr/local/src/(已下载好集群版)

2.      # tar -xvf mysql-cluster-gpl-7.4.4-linux-glibc2.5-x86_64.tar.gz

3.      # mv mysql-cluster-gpl-7.4.4-linux-glibc2.5-x86_64 ../mysql

4.      # cd ..

5.      # chown -R mysql:mysql mysql/

6.      # cd mysql

7.      # scripts/mysql_install_db --user=mysql

当出现这个页面则mysql-cluster安装成功

以上步骤是安装mysql-cluster必须步骤,所有机器都要进行以上的步骤

集群配置

首先进行管理节点的配置(终端输入)

# vi  /var/lib/mysql-cluster/config.ini (目录和文件没有请新建,添加以下内容)

1.      [NDBD DEFAULT] 

2.      NoOfReplicas=2 

3.      [TCP DEFAULT] 

4.      portnumber=3306 

5.       

6.      [NDB_MGMD] 

7.      #设置管理节点服务器  

8.      nodeid=1 

9.      HostName=192.168.191.132 (管理节点服务器ip地址)

10.   DataDir=/var/mysql/data 

11.    

12.   [NDBD] 

13.   nodeid=2 

14.   HostName=192.168.191.130 (ndbd点ip地址)

15.   DataDir=/var/mysql/data 

16.    

17.   [MYSQLD] 

18.   nodeid=3 

19.   HostName=192.168.191.131  (mysqld节点ip地址)

20.   [MYSQLD] 

21.   nodeid=4 

22.   HostName=192.168.191.133  (mysqld节点ip地址)

23.    

24.   #必须有空的mysqld节点,不然数据节点断开后启动有报错 

25.   [MYSQLD] 

26.   nodeid=5 

27.   [mysqld] 

28.   nodeid=6

以上内容输入完毕后,按ESC,输入:wq即可保存退出

拷贝ndb_mgm、ndb_mgmd、config.ini到bin目录。

# cd /usr/local/mysql/bin

# cp ./ndb_mgm /usr/local/bin/

# cp ./ndb_mgmd /usr/local/bin/

# cp /var/lib/mysql-cluster/config.ini /usr/local/bin/

数据节点配置(终端输入)

# vi /etc/my.cnf (添加以下内容)

[mysqld]

datadir=/var/mysql/data

socket=/var/mysql/mysql.sock

user=mysql

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

#运行NDB存储引擎

ndbcluster

#指定管理节点

ndb-connectstring=192.168.191.132  (管理节点ip)

[MYSQL_CLUSTER]

ndb-connectstring=192.168.191.132   (管理节点ip)

[NDB_MGM]

connect-string=192.168.191.132   (管理节点ip)

[mysqld_safe]

log-error=/var/mysql/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

Sql节点配置(终端输入)

# cd /usr/local/mysql/

设置mysql服务为开机自启动

# cp support-files/mysql.server /etc/rc.d/init.d/mysqld

# chmod +x /etc/rc.d/init.d/mysqld

# chkconfig --add mysqld

# vi /etc/my.cnf (添加以下内容)

[mysqld]

datadir=/var/mysql/data

socket=/var/mysql/mysql.sock

user=mysql

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

log-bin = /var/mysql/log/mysql-bin.log

max_connections=1000

#以下为mysql 主主模式的配置文件

# 忽略mysql数据库复制

binlog-ignore-db=mysql

# 每次增长2

auto-increment-increment=2

# 设置自动增长的字段的偏移量,即初始值为2

auto-increment-offset=1

ndbcluster

ndb-connectstring=192.168.191.132 (管理节点ip)

[MYSQL_CLUSTER]

ndb-connectstring=192.168.191.132  (管理节点ip)

[NDB_MGM]

connect-string=192.168.191.132  (管理节点ip)

[mysqld_safe]

log-error=/var/mysql/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

这里要注意,在var目录下新建mysql目录,在新建的mysql目录下建立log和data目录

另外要给这两个目录授权代码如下

# cd /var

# chown –R mysql:mysql mysql/

下面两个命令是对mysql命令的一个link,否则无法使用mysql命令

# Ln –s /usr/local/mysql/bin/mysql /usr/bin

# Ln –s /var/mysql/mysql.sock /tmp/mysql.sock

运行mysql-cluster

mysql集群的启动顺序为:管理节点->数据节点->SQL节点

mysql集群的关闭顺序为,管理节点->数据节点->SQL节点

打开服务的时候注意防火墙问题

注意把管理节点的防火墙关闭 命令如下:

# /etc/init.d/iptables stop

首先打开管理节点服务

# ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial(注意第一次或者对config文件进行修改后,打开服务一定要加上initial否则新增加的内容不会被使用)

然后打开ndbd节点服务

# /usr/local/mysql/bin/ndbd --initial(此处同上)

出现一下信息表示ndbd节点启动成功.

2012-03-28 02:01:38 [ndbd] INFO -- Angel connected to '10.32.33.120:1186'

2012-03-28 02:01:38 [ndbd] INFO -- Angel allocated nodeid: 36

最后打开两个sql节点131和133

#service mysqld start

出现mysql success表示服务启动成功

打开管理节点,终端输入

# ndb_mgm

#ndb_mgm> show

显示以下信息,则mysql-cluster安装部署成功

Cluster Configuration

---------------------

[ndbd(NDB)] 2 node(s)

id=2 @192.168.191.130 (mysql-5.5.20 ndb-7.4.4, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)

id=1 @192.168.191.132 (mysql-5.5.20 ndb-7.4.4)

[mysqld(API)] 4 node(s)

id=3 @192.168.191.131 (mysql-5.5.20 ndb-7.4.4)

id=4 @192.168.191.133 (mysql-5.5.20 ndb-7.4.4)

id=5 (not connected, accepting connect from any host)

id=6 (not connected, accepting connect from any host)

可以看到各个节点已经连接上了。

 

以下是关于mgm相关的命令

# ndb_mgm

# ndb_mgm> show 查看各节点情况。  

# ndb_mgm> all report memory 查看各数据节点使用情况  

# ndb_mgm>create nodegroup 3创建数据节点分组   

# mysql> alter online table data_house reorganize partition; 调整分区数据

# ndb_mgm>shutdown关闭节点

# ndb_mgm>exit退出

常见问题

Mysqld端服务无法启动

[root@localhost Desktop]#service mysqld start

Starting mysql.the service quit without updating PID file (/[FAILED]/var/mysql/log/localhost.localdomain.pid).

先去查看日志

#cd /var/mysql/data

#less localhost.localdomain.err

如果错误是

Fatal error:can’t open and lock privilege tables:Table’mysql.user’ doesn’t exist

解决方法:

终端输入

到mysql目录下/usr/local/mysql

输入

Scripts/mysql_install_db –user=mysql(初始化数据库即可)

其他问题请注意查看问题所在的文件夹权限问题

测试

1、从SQL节点131登录,创建数据库和表,进行简单测试。

mysql> create database tltest ;

mysql> use tltest;

Database changed

mysql> create table test1(id int,name varchar(10)) engine=ndb ;

mysql> insert into test1 values(1,'tl');

mysql> select * from test1 ;

+------+---------+

| id   | name  |

+------+---------+

|  1 |    tl   |

+------+---------+

登陆133节点,查看效果,库,表和数据已经同步。

从133节点插入一条数据,同样登陆131,也能看到数据已经同步。


尾注:本系列文档,笔者真机环境测试无误得以分享,纯属原创,若有转载,请注释出处.:真机环境下MySQL-Cluster搭建文档

【Data Cluster】真机环境下MySQL数据库集群搭建的更多相关文章

  1. 生产环境MySQL数据库集群MHA上线实施方案

    生产环境MySQL数据库集群MHA上线实施方案 一.不停库操作 1.在所有节点安装MHAnode所需的perl模块(需要有安装epel源) yum install perl-DBD-MySQL -y ...

  2. MySQL数据库集群进行正确配置步骤

    MySQL数据库集群进行正确配置步骤 2010-06-09 10:47 arrowcat 博客园 字号:T | T 我们今天是要和大家一起分享的是对MySQL数据库集群进行正确配置,我前两天在相关网站 ...

  3. docker环境下solrcloud+zookeeper集群部署教程

    前言:两个月前的16年11月份完成的配置,使用的solr6.1和zookeeper3.4,刚刚写成blog,目前版本可能有小版本的变化. 本例完成结果为:在docker环境下部署solrcloud集群 ...

  4. Facebook揭密:如何让MySQL数据库集群自主运行

    Facebook运行着全球最大的MySQL数据库集群,该集群分布在两个大洲上的多个数据中心中数以千计的服务器上.让人不解的是,Facebook只动用了一个很小的团队来管理这个庞大的MySQL数据库集群 ...

  5. 在Windows中单机环境下创建RabbitMQ集群

    本文根据:http://www.360doc.com/content/15/0312/17/20874412_454622619.shtml整理而来 RabbitMQ具有很好的消息传递性能,同时又是开 ...

  6. mysql数据库集群

    mysql数据库集群主要有2种常用方案: replication:速度快.弱一致性.适合保存低价值的数据,主要应用于日志.新闻.帖子等系统. PXC:速度慢.强一致性.适合保存高价值的数据,主要应用于 ...

  7. 【Oracle 集群】Linux下Oracle RAC集群搭建之基本测试与使用(九)

    Oracle 11G RAC数据库安装(九) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总 ...

  8. 【转】【Oracle 集群】Linux下Oracle RAC集群搭建之基本测试与使用(九)

    原文地址:http://www.cnblogs.com/baiboy/p/orc9.html   阅读目录 目录 检查RAC状态 检查创建的数据库 全部参考文献 相关文章 Oracle 11G RAC ...

  9. 【Oracle 集群】Linux下Oracle RAC集群搭建之Oracle DataBase安装(八)

    Oracle 11G RAC数据库安装(八) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总 ...

随机推荐

  1. Android笔记——Button点击事件几种写法

    Button点击事件:大概可以分为以下几种: 匿名内部类 定义内部类,实现OnClickListener接口 定义的构造方法 用Activity实现OnClickListener接口 指定Button ...

  2. CSS浮动、定位

    这几天有空,整理了关于CSS浮动和定位的一些知识点,有什么欠缺的地方,欢迎大家批评指正. 一.文档流的概念指什么?有哪种方式可以让元素脱离文档流? 文档流,指的是元素排版布局过程中,元素会自动从左往右 ...

  3. ubuntu如何安装nodejs最新版 本

    如何正确的安装nodejs? 我们可以先安装nvm, git clone https://github.com/creationix/nvm.git ~/.nvm 然后打开 ~/.bashrc ,   ...

  4. 【WPF】日常笔记

    本文专用于记录WPF开发中的小细节,作为备忘录使用. 1. 关于绑定: Text ="{Binding AnchorageValue,Mode=TwoWay,UpdateSourceTrig ...

  5. SEO:权重如何做到从0到1

    SEO:权重如何做到从0到1 [写于2016年9月]我真的好久好久没到我的博客上去看过了,今天突然登上 seo.chinaz.com,搜索 dkplus.iteye.com,发现自己的博客在百度收录中 ...

  6. BZOJ 1692: [Usaco2007 Dec]队列变换 [后缀数组 贪心]

    1692: [Usaco2007 Dec]队列变换 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1383  Solved: 582[Submit][St ...

  7. NodeJs 开发微信公众号(五)真实环境部署

    在测试环境下开发完成代表着你离正式上线的目标不远了.接下来本章就主要谈一谈把测试环境的公众号升级为正式的公众号. 服务器和域名 目前为止我们只是在自己的电脑上完成了测试环境.真实的线上环境当然需要自己 ...

  8. .NET深入实战系列—Linq to Sql进阶

    最近在写代码的过程中用到了Linq查询,在查找资料的过程中发现网上的资料千奇百怪,于是自己整理了一些关于Linq中容易让人困惑的地方. 本文全部代码基于:UserInfo与Class两个表,其中Cla ...

  9. EasyPR--开发详解(6)SVM开发详解

    在前面的几篇文章中,我们介绍了EasyPR中车牌定位模块的相关内容.本文开始分析车牌定位模块后续步骤的车牌判断模块.车牌判断模块是EasyPR中的基于机器学习模型的一个模块,这个模型就是作者前文中从机 ...

  10. Direct3D Draw函数 异步调用原理解析

    概述 在D3D10中,一个基本的渲染流程可分为以下步骤: 清理帧缓存: 执行若干次的绘制: 通过Device API创建所需Buffer: 通过Map/Unmap填充数据到Buffer中: 将Buff ...