最近,对mysql-cluster进行初步了解,发现和oracle提供的RAC有一定的相似之处,但区别又很大,下面主要是mysql-cluster的搭建,至于对其的深入了解,留着以后工作需要用到时,再进行深入,现在先了解和掌握其基本的思路
      这篇文章写的比较乱,不建议参考,仅做个人记录之用,
      推荐参考博客:叶金荣:http://imysql.cn/
 
     1.配置环境说明和官方拓扑图
官方拓扑图:

数据节点(ndb):

    192.168.1.119
    192.168.1.120
    192.168.1.121
    192.168.1.122
SQL节点:
    192.168.1.123
    192.168.1.124
    192.168.1.125
管理节点:
    192.168.1.118
系统:red hat linux 6(2.6.32)
 
       2.修改所有主机的host文件,hosts文件内容如下[所有机器都需要配置]
  1. [root@client119 ~]# vim /etc/hosts
  2. 192.168.1.118 client118.kongzhong.com  client118
  3. 192.168.1.119 client119.kongzhong.com  client119
  4. 192.168.1.120 client120.kongzhong.com  client120
  5. 192.168.1.121 client121.kongzhong.com  client121
  6. 192.168.1.122 client122.kongzhong.com  client122
  7. 192.168.1.123 client123.kongzhong.com  client123
  8. 192.168.1.124 client124.kongzhong.com  client124
  9. 192.168.1.125 client125.kongzhong.com  client125
  10. 192.168.1.126 client126.kongzhong.com  client126

3.mysql-cluster 管理节点配置:

(1).在管理节点[192.168.1.118]上建立一个存放cluster配置文件的目录

  1. [root@client118 ~]# mkdir /var/lib/mysql-cluster
  2. [root@client118 ~]# cd /var/lib/mysql-cluster/

(2).编写配置文件

  1. [root@client118 mysql-cluster]# vim configure.ini
  2. [配置文件内容如下]
  3. # [ndbd default]:表示每个数据节点的默认配置,在每个节点的[NDBD]中不用再写这些选项
  4. [ndbd default]
  5. # 每个数据节点的镜像数量(即复制成员的个数)
  6. NoOfReplicas=2
  7. # 为数据存储分配的内存
  8. DataMemory=80M
  9. # 为索引存储分配的内存
  10. IndexMemory=18M
  11. [ndb_mgmd]
  12. # 定义管理节点的ip地址或者主机名
  13. hostname=192.168.1.118
  14. #  管理节点数据(日志)目录
  15. datadir=/var/lib/mysql-cluster
  16. # 定义数据节点的ip地址,数据存放目录
  17. [ndbd]
  18. hostname=192.168.1.122
  19. datadir=/usr/local/mysql
  20. [ndbd]
  21. hostname=192.168.1.119
  22. datadir=/usr/local/mysql
  23. [ndbd]
  24. hostname=192.168.1.120
  25. datadir=/usr/local/mysql
  26. [ndbd]
  27. hostname=192.168.1.121
  28. datadir=/usr/local/mysql
  29. # 定义sql节点
  30. [mysqld]
  31. hostname=192.168.1.125
  32. [mysqld]
  33. hostname=192.168.1.123
  34. [mysqld]
  35. hostname=192.168.1.124
  36. # 留一个空的[mysqld],以备扩展用, 否则会出现Failed to allocate nodeid No free node id found for ndbd(NDB)错误
  37. [mysqld]
  38. [mysqld]

(3).解压mysql-cluster压缩包

  1. [root@client118 ~]# tar -xf mysql-cluster-gpl-7.3.3-linux-glibc2.5-x86_64.tar.gz
  2. [root@client118 ~]# cd mysql-cluster-gpl-7.3.3-linux-glibc2.5-x86_64
  3. # 将管理节点用到的两个ndb_mgm*命令复制到/usr/local/bin/下
  4. [root@client118 mysql-cluster-gpl-7.3.3-linux-glibc2.5-x86_64]# cp bin/ndb_mgm* /usr/local/bin/
  5. [root@client118 mysql-cluster-gpl-7.3.3-linux-glibc2.5-x86_64]# cd /usr/local/bin/
  6. # 将上述命令赋予执行权限
  7. [root@client118 bin]# chmod +x ndb_mgm*
  8. # 建立mysql目录
  9. [root@client118 bin]# mkdir /usr/local/mysql

4.配置数据节点和sql节点:

# 我在数据节点和sql节点都初始化了系统数据库,个人觉得数据节点可以不初始化系统数据库,大家可以这样试一下

(1).在每个sql节点和数据节点配置my.cnf

  1. [root@client123 ~]# vim /etc/my.cnf
  2. [client]
  3. socket=/usr/local/mysql/sock/mysql.sock
  4. [mysqld]
  5. ndbcluster
  6. datadir=/usr/local/mysql
  7. socket=/usr/local/mysql/sock/mysql.sock
  8. port=3306
  9. # 指定管理节点ip地址
  10. ndb-connectstring=192.168.1.118
  11. old_passwords=1
  12. [mysql_cluster]
  13. # 指定管理节点ip地址
  14. ndb-connectstring=192.168.1.118

(2).在每个sql节点创建mysql用户和组[可以仅在sql节点执行建立mysql用户,数据节点可建可不建]

  1. [root@client120 ~]# groupadd mysql
  2. [root@client120 ~]# useradd -g mysql mysql
  3. # 建立mysql目录
  4. [root@client123 ~]# mkdir /usr/local/mysql
  5. [root@client123 ~]# mkdir /usr/local/mysql/sock

(3).在sql节点和数据节点都执行如下操作[数据节点如果在/usr/local没有mysql目录,建立此目录]

  1. [root@client123 ~]# tar -xf mysql-cluster-gpl-7.3.3-linux-glibc2.5-x86_64.tar.gz -C /usr/local/
  2. [root@client123 ~]# cd /usr/local/mysql-cluster-gpl-7.3.3-linux-glibc2.5-x86_64
  3. # 将解压的内容移动到 /usr/local/mysql目录下
  4. [root@client124 mysql-cluster-gpl-7.3.3-linux-glibc2.5-x86_64]# mv ./* ../mysql

(4).在sql节点初始化系统数据库,并修改相应目录权限和开机启动

  1. # 初始化系统数据库
  2. [root@client124 mysql]# scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql
  3. [root@client123 mysql]# chown -R mysql.mysql /usr/local/mysql/data
  4. [root@client123 mysql]# chown -R mysql.mysql /usr/local/mysql/sock
  5. [root@client123 mysql]# chown -R mysql .
  6. [root@client123 mysql]# cp support-files/mysql.server /etc/init.d/mysqld
  7. [root@client123 mysql]# chmod +x /etc/init.d/mysqld
  8. [root@client123 mysql]# chkconfig --add mysqld

5.cluster环境的启动

注意启动顺序:首先是管理节点,然后是NDBD节点,最后是SQL节点。

关闭顺序:先关闭sql节点,再关闭管理节点[ndb_mgm> shutdown]

(1).管理节点启动

  1. [root@client118 ~]#  ndb_mgmd -f /var/lib/mysql-cluster/config.ini
  2. # 启用ndb_mgm来监听客户端,如下:
  3. [root@client118 ~]#  ndb_mgm
  4. # 输入show,查看集群状况
  5. ndb_mgm> show

(2).启动数据(ndb)节点

  1. # 首次启动,则需要添加--initial参数,以便进行NDB节点的初始化工作。
  2. # 在以后的启动过程中,则是不能添加该参数的,否则ndbd程序会清除在之前建立的所有用于恢复的数据文件和日志文件[在备份、恢复或配置变化后重启时除外]
  3. [root@client119 ~]#  /usr/local/mysql/bin/ndbd --initial
  4. 如果不是首次启动,则执行下面的命令。
  5. [root@client119 ~]#  /usr/local/mysql/bin/ndbd

(3).sql节点启动

  1. # sql节点可以执行如下命令
  2. [root@client123 ~]# /usr/local/mysql/bin/mysqld_safe --user=mysql &
  3. # 如果将mysql的启动脚本已经复制到/etc/init.d下,可以执行如下:
  4. [root@client123 ~]# /etc/init.d/mysqld start

(4).现在再到管理节点,使用show命令看,是不是数据节点和sql节点都连上了

  1. ndb_mgm> show
  2. Cluster Configuration
  3. ---------------------
  4. [ndbd(NDB)]     4 node(s)
  5. id=2    @192.168.1.122  (mysql-5.6.14 ndb-7.3.3, Nodegroup: 0, *)
  6. id=3    @192.168.1.119  (mysql-5.6.14 ndb-7.3.3, Nodegroup: 0)
  7. id=4    @192.168.1.120  (mysql-5.6.14 ndb-7.3.3, Nodegroup: 1)
  8. id=5    @192.168.1.121  (mysql-5.6.14 ndb-7.3.3, Nodegroup: 1)
  9. [ndb_mgmd(MGM)] 1 node(s)
  10. id=1    @192.168.1.118  (mysql-5.6.14 ndb-7.3.3)
  11. [mysqld(API)]   5 node(s)
  12. id=6    @192.168.1.125  (mysql-5.6.14 ndb-7.3.3)
  13. id=7    @192.168.1.123  (mysql-5.6.14 ndb-7.3.3)
  14. id=8    @192.168.1.124  (mysql-5.6.14 ndb-7.3.3)
  15. id=9 (not connected, accepting connect from any host)
  16. id=10 (not connected, accepting connect from any host)

6.测试

(1).在任意sql节点创建测试数据

  1. # 为了让表在cluster中正常复制,创建一个表必须使用ndbcluster引擎(engine=ndb Or engine=ndbcluster)方法如下:
  2. [root@client123 ~]# mysql
  3. Welcome to the MySQL monitor.  Commands end with ; or \g.
  4. Your MySQL connection id is 2
  5. Server version: 5.6.14-ndb-7.3.3-cluster-gpl MySQL Cluster Community Server (GPL)
  6. Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
  7. Oracle is a registered trademark of Oracle Corporation and/or its
  8. affiliates. Other names may be trademarks of their respective
  9. owners.
  10. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  11. mysql> create database xcg;
  12. mysql>use xcg
  13. mysql>create table teacher(t_id int) engine=ndb;
  14. # 如果是一个已经存在的表,用alter table修改表的引擎。
  15. mysql>alter table student engine=ndb;
  16. # 插入一条数据:
  17. mysql>insert into teacher values(133);
  18. #  然后用另外一个sql节点登陆,查询数据,看是否能看到
  19. mysql>select * from teacher;
  20. # 两个节点数据保持一致,说明测试成功!

(2).模拟某一个数据(ndb)节点节点宕掉

# 在任意一个数据节点上终止掉NDB进程,然后再分别通过SQL节点去访问teacher表,查看是否可以正常访问,数据是否一致。

# 这里就不演示了,各位自行测试,ndb进程使用kill -9 杀掉进程

(3).模拟sql节点宕掉,原理同上,不演示

注意:

(1).在测试过程中,遇到ndb节点莫名重启,有点纳闷,待解!

(2).每次修改config.ini文件,重启ndb_mgmd时,需要删除mysql-cluster文件下的ndb_1_config.bin.1文件,
因为他默认调用此文件

(3).mysql-cluster主要配置选项:管理节点配置configure.ini,sql和数据节点配置/etc/my.cnf

MySQL-Cluster 初识的更多相关文章

  1. MySQL Cluster 集群简介

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

  2. MySQL Cluster 数据分布(分区、分组)

    数据分布 1.MySQL Cluster自动分区数据表(也可能使用用户自定义分区),将数据分布到分区中: 2.一个数据表被划分到多个Data Node分区中,数据在分区中被”striped”: 3.主 ...

  3. MySQL Cluster 7.3.5 集群配置实例(入门篇)

    一.环境说明: CentOS6.3(32位) + MySQL Cluster 7.3.5,规划5台机器,资料如下: 节点分布情况: MGM:192.168.137. NDBD1:192.168.137 ...

  4. MySQL Cluster 7.3.5 集群配置参数优化(优化篇)

    按照前面的教程:MySQL Cluster 7.3.5 集群配置实例(入门篇),可快速搭建起基础版的MySQL Cluster集群,但是在生成环境中,还是有很多问题的,即配置参数需要优化下, 当前生产 ...

  5. 【推荐】MySQL Cluster报错及解决方法(不断更新中)

    排查问题技巧: MySQL Cluster 自带了一个错误代码的查看的小程序.通过这个小东西我们可以方便的定位问题的原因. 这个程序就是 perror 在MYSQL安装目录的bin下面. 如报错:ER ...

  6. MySQL Cluster搭建与测试

    MySQL Cluster是一个基于NDB Cluster存储引擎的完整的分布式数据库系统.不仅仅具有高可用性,而且可以自动切分数据,冗余数据等高级功能.和Oracle Real Cluster Ap ...

  7. MySQL Cluster 配置文件(config.ini)详解

    MySQL Cluster 配置文件(config.ini)详解 ################################################################### ...

  8. MySQL Cluster 配置详细介绍

    在上篇文章已经详细说明了MySQL Cluster搭建与测试,现在来说说详细的配置参数.在MySQL Cluster 环境的配置文件 config.ini 里面,每一类节点都有两个(或以上)的相应配置 ...

  9. mysql集群 MySQL Cluster

    <?php /* 郑重说明2015年6月11日16:28:14,目前为止MySQL Cluster 社区版不支持INNODB,商业版支持,但是授权价格20W左右,so看此文档之前,考虑下钱 My ...

  10. How to use kingshard building a MySQL cluster

    How to use kingshard building a MySQL cluster https://github.com/flike/kingshard/blob/master/doc/Kin ...

随机推荐

  1. odoo前后端交互详解

    为了简单叙述,暂时不考虑多个db的情况(主要是懒得说没有db或者多个db实例的情况)当odoo指定数据库开启服务时(也就是odoo-bin -d <some_db_name> ),我们使用 ...

  2. Linux 各个命令的缩写原型

        cd:(change derictery)更换目录:    pwd:(Print Working Directory)显示当前工作目录:    mk:(make directory)创建目录: ...

  3. python中进程详解

    1:pdb调试:基于命令行的调试工具,非常类似gnu和gdb调试,以下是常用的调试命令: 可以python -m pdb xxx.py(你的py文件名)进入命令行调试模式 命令 简写命令 作用 bea ...

  4. Spring Cloud分区发布实践(6)--灰度服务-根据Header选择实例区域

    此文是一个完整的例子, 包含可运行起来的源码. 此例子包含以下部分: 网关层实现自定义LoadBalancer, 根据Header选取实例 服务中的Feign使用拦截器, 读取Header Feign ...

  5. 那些 Unix 命令替代品们「GitHub 热点速览 v.21.32」

    作者:HelloGitHub-小鱼干 好用的 Unix 命令替代工具能让你事半功倍,例如,bat 便是个带着高亮特性的加强版 cat,就像你用了 oh my zsh 之后便会感受到它的强大.同样好用的 ...

  6. ArrayList 源码底层实现解析 基于1.8

    ArrayList 介绍 ArrayList是一种线性数据结构,它的底层是用数组实现的,是动态数组.与Java中的数组相比,它的容量能动态增长.源代码里有解释.当创建一个数组的时候,就必须确定它的大小 ...

  7. 串、KMP模式匹配算法

    串是由0个或者多个字符组成的有限序列,又名叫字符串. 串的比较: 串的比较是通过组成串的字符之间的编码来进行的,而字符的编码指的是字符在对应字符集中的序号. 计算机中常用的ASCII编码,由8位二进制 ...

  8. C++ //关系运算符重载 < = > !=

    1 //关系运算符重载 < = > != 2 #include <iostream> 3 #include <string> 4 using namespace s ...

  9. C++ 1 (只在源文件)//点和圆的关系 //设计一个圆形类 和一个点类 计算点和圆的关系 //点到圆心的距离 == 半径 点在圆上 //点到圆心的距离 > 半径 点在圆外 //点到圆心的距离 < 半径 点在圆内 //点到圆心的距离 获取 ....... (x1 -x2)^2 + (y1-y2)^2 开根号 和半径对比 // 计算 可以 两边同时 平方

    1 //点和圆的关系 2 //设计一个圆形类 和一个点类 计算点和圆的关系 3 //点到圆心的距离 == 半径 点在圆上 4 //点到圆心的距离 > 半径 点在圆外 5 //点到圆心的距离 &l ...

  10. docker容器存储

    写在前面 我们在上篇学习了容器网络,对容器网络驱动bridge工作原理做了较为详细的介绍,今天小作文一起看看容器中另一个关键域-存储. 容器的存储可以分为两大类: 一种是与镜像相关的即我们在<d ...