一:mysql集群原理:

1 mysql集群分为三个节点:

  1.1 控制节点:本身不提供服务只是控制整个集群的开启与关闭

  1.2 数据节点:真正提供数据库的存储,并和其他数据节点关联用

  1.3 sql节点:和平常数据库一样提供正常服务

二:mysql集群要点与思路:

2.1 最好将现有的mysql或MariaDB卸载干净,

   rpm -qa | grep mysql 找出含有mysql的软件包

   rpm -e  --nodeps mysql   删除后再查一下是否删除干净

2.2 关闭防火墙/selinux哦,不然后期同步数据节点同步会有问题

2.3 删除或移动掉/etc/my.cnf

3.1 几个重要的配置文件及文件作用

3.1.1  /var/lib/mysql-cluster/config.ini   此文件是控制节点的主配置文件,

                      主要是定义数据节点的数据目录的的路径

3.1.2  /etc/my.conf 主配置文件,主要指定集群是谁,以及存放数据目录及启动时生成的mysql.sock文件

4.错误排查思路

4.1 如果要迁移数据目录一定务必先将mysql关闭,否则mysql.sock文件会报错重复

4.2 查看my.cnf 文件中数据目录位置,并将其下的所有文件都复制到你想存放的位置,

  并且要严格按照my.cnf 配置文件里面的位置进行更改,否则会报错类似如下

  Starting MySQL...The server quit without updating PID file (/datas/mysqld//hadoop02.pid).

4.3 登录mysql集群报错,没有生成sock文件,mysql.sock 已经更换位置,所以找不到咯

4.4  ./ndb_mgmd初始化集群控制节点时报错如下:

  -- Could not determine which nodeid to use for this node. Specify it with --ndb-nodeid=<nodeid

  ./ndb_mgmd -f /var/lib/mysql-cluster/config.ini  #重新加载一下就好

mysql -uroot -p
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

  如果确认mysql服务正常运行,还提示文章标题的此错误,那就是“/etc/my.cnf”配置文件的问题了。

  解决办法是修改“/etc/my.cnf”配置文件,在配置文件中添加“[client]”选项和“[mysql]”选项,

  并使用这两个选项下的“socket”参数值,与“[mysqld]”选项下的“socket”参数值,指向的socket文件路径完全一致。如下:

[mysqld]
datadir=/storage/db/mysql
socket=/storage/db/mysql/mysql.sock

[client]
default-character-set=utf8
socket=/storage/db/mysql/mysql.sock

[mysql]
default-character-set=utf8
socket=/storage/db/mysql/mysql.sock

 

其中socket等于的路径就是socket文件的位置,我们只要修改my.cnf文件,告诉mysql,mysqldump

mysqladmin等命令,mysql服务的socket文件位置在哪里,然后重启mysqld服务即可。

5. mysql集群常用的命令及问题

5.1  控制节点:cd /usr/local/mysql/bin/

       ./ndb_mgmd  -f /var/lib/mysql-cluster/config.ini --initial

                  #仅第一次启动或重启过服务器时又或config.ini 改过用,其它时候只需./ndb_mgmd即可

        ./ndb_mgm                #进入集群客户端

         show                         #查看集群有哪些节点及状态

       shutdown                   #关闭集群

5.2  数据节点:

        cd /usr/local/mysql/bin/

       ./ndbd          #加载连接控制节点,一般在控制节点show看不到时执行此脚本

       

三:mysql搭建细节:

1、数据节点和SQL节点

第一步 添加mysql用户和组,这是必需的。

groupadd mysql

useradd -g mysql mysql

第二步 开始安装,下载的版本是免编译的,复制过来就可以用了。

cd /var/tmp

tar -C /usr/local-zxvf mysql-cluster-gpl-7.1.9a-linux-i686-glibc23.tar.gz

cd /usr/local

mv mysql-cluster-gpl-7.1.9a-linux-i686-glibc23.tar.gz mysql

第三步 在mysql修改目录权限,这也是必需的,不然第四步会报错的。

cd mysql

chown -R root .

chown -R mysql data

chgrp -R mysql .

第四步 安装初始的数据库表

scripts/mysql_install_db --user=mysql

    安装完成后,初始化数据库报错如下:

    [root@localhost mysql]# ./scripts/mysql_install_db  --user=mysql

    -bash: ./scripts/mysql_install_db: /usr/bin/perl: bad interpreter: No such file or

        directory

    貌似提示注释器错误,没有/usr/bin/perl文件或者档案,解决办法(安装perl跟perl-devel即可):

    执行  yum -y install perl perl-devel

 

第五步 设置mysql服务为开机自启动

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

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

chkconfig --add mysqld

第六步 启动mysql服务,如果报错请参考

service mysqld start

这七步,其它的服务器添加按照如上步骤即可添加数据节点和SQL节点了

2 管理节点:

cd mysql

cp bin/ndb_mgm*/usr/local/bin

cd /usr/local/bin

chmod +x ndb_mgm*

管理节点只要ndb_mgm和ndb_mgmd两个文件和一个配置文件即可,因此把这三个文件复制到那里,那里就是管理节点了。

ndb_mgmd是mysql cluster管理服务器,ndb_mgm是客户端管理工具,等一下会用到它们的。

到目前为止两个SQL节点两个数据节点和一个管理节点都安装完成了,但是还不能工作,得进行配置,把这几个节点联系在一起协同工作。

3、配置

1、数据节点和SQL节点

mysql服务启动时会默认加载/etc/my.cnf作为其配置文件,要将一个mysql服务器配置成一个数据节点和SQL节点也非常的简单,这是配置前的my.cnf的内容:

      [mysqld]
        datadir=/home/mysql
        socket=/home/mysql/mysql.sock
        symbolic-links=0

      [client]
        default-character-set=utf8
        socket=/home/mysql/mysql.sock

      [mysql]
        default-character-set=utf8
        socket=/home/mysql/mysql.sock

      [mysqld]
        ndbcluster
        ndb-connectstring=192.168.1.201

      [mysql_cluster]
        ndb-connectstring=192.168.1.201

 

只要在内容结尾加上4行就将这个mysql服务器变成了一个数据节点和SQL节点。

ndbcluster   #运行NDB存储引擎

#指定管理节点  以上两行声明其为SQL节点

ndb-connectstring=192.168.1.252   

[mysql_cluster]

#指定管理节点  以上两行声明其为数据节点

ndb-connectstring=192.168.1.252   

注意两台服务器都得这样配置。

4、管理节点

管理节点的配置复杂一点,在管理服务器/var/lib/mysql-cluster/目录中创建config.ini文件。

cd /var/lib

mkdir mysql-cluster

cd mysql-cluster

vim config.ini

在config.ini文件中添加以下内容:

      [NDBD DEFAULT]

          NoOfReplicas=1    #每个数据节点的镜像数量

          DataMemory=500M   #每个数据节点中给数据分配的内存

            IndexMemory=300M  #每个数据节点中给索引分配的内存

       [TCP DEFAULT]

          portnumber=2202   #数据节点的默认连接端口

       [NDB_MGMD]        #配置管理节点

          hostname=10.10.10.164

          datadir=/var/lib/mysql-cluster/  #管理节点数据(日志)目录

       [NDBD]            #数据节点配置

          hostname=10.10.10.164

          datadir=/usr/local/mysql/data/   #数据节点目录

       [NDBD]

          hostname=10.10.10.165

          datadir=/usr/local/mysql/data/

       [MYSQLD]   #SQL节点目录

          hostname=10.10.10.165
    
       [MYSQLD]
  
          hostname=10.10.10.166

[NDBD DEFAULT]:表示每个数据节点的默认配置在每个节点的[NDBD]中不用再写这些选项,只能有一个。
[NDB_MGMD]:表示管理节点的配置,只有一个。
[NDBD]:表示每个数据节点的配置,可以有多个。
[MYSQLD]:表示SQL节点的配置,可以有多个,分别写上不同SQL节点的IP地址,也可以什么都不写,

      只保留一个空节点,表示任意一个IP地址都可以进行访问,此节点的个数表明了可以用来连接数据节点的SQL节点总数。

四、启动

1、管理节点

mysql cluster 需要各个节点都 进行启动后才可以工作,节点的启动顺序为管理节点->数据节点->SQL节点。首先启动管理节点

cd /usr/local/bin

./ndb_mgmd -f /var/lib/mysql-cluster/config.ini

命令行中的ndb_mgmd是mysql cluster的管理服务器,后面的-f表示后面的参数是启动的参数配置文件。如果在启动后过了几天又添加了一个数据节点,这时修改了配置文件启动时就必须加上--initial参数,不然添加的节点不会作用在mysql cluster中。

./ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial

启动时可能会报个WARNING,如WARNING  -- at line 7: [TCP] portnumber is deprecated,这个不用管。可以正常工作的。

2、数据节点

安装后第一次启动数据节点时要加上--initial参数,其它时候不要加,除非是在备份、恢复或配置变化后重启时。

/usr/local/mysql/bin/ndbd --initial

 

如果显示以下信息说明启动完成:

2010-12-31 12:48:03 [ndbd] INFO     -- Angel connected to '192.168.1.252:1186'
2010-12-31 12:48:03 [ndbd] INFO     -- Angel allocated nodeid: 3

3、SQL节点

service mysqld start

4、客户端管理

cd /usr/local/bin

./ndb_mgm

这时就进入到客户端,可以对mysql cluster进行各项操作,进入后会有ndb_mgm > 提示符出现,首先来查看各节点的连接情况,在ndb_mgm> 提示符下输入show:

ndb_mgm> show

ClusterConfiguration

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

[ndbd(NDB)]     2 node(s)

id=2    @192.168.1.252  (mysql-5.1.51 ndb-7.1.9,Nodegroup:0,Master)

id=3    @192.168.1.52  (mysql-5.1.51 ndb-7.1.9,Nodegroup:1)

[ndb_mgmd(MGM)]1 node(s)

id=1    @192.168.1.252  (mysql-5.1.51 ndb-7.1.9)

[mysqld(API)]   2 node(s)

id=4    @192.168.1.252  (mysql-5.1.51 ndb-7.1.9)

id=5    @192.168.1.52  (mysql-5.1.51 ndb-7.1.9)

可以看到各个节点已经连接上了,至此,mysql cluster配置完成。

五、关闭

mysql cluster的关闭也很简单,只需在ndb_mgm> 提示符下输入 shutdown即可,这时会显示各节点的关闭信息,再输入exit即可退出ndb_mgm管理,回到shell中。虽然mysql cluster 关闭了,但是SQL节点的mysql服务并不会停止的。接下来就可以做各种试验了。

六、在数据节点创建库和表能够同步到另一台数据节点服务器上,且一台挂掉另一台可以正常提供服务

6.1 在一台数据节点上测试

[root@localhost    mysql]#  /etc/rc.d/init.d/mysqld status                //检验mysql是否运行
[root@localhost mysql]# /etc/rc.d/init.d/mysqld start                   //启动mysql
[root@localhost mysql]# /usr/local/mysql/bin/mysql -u root -p
Enter password:
mysql> show databases;
mysql> create database testdb2;
mysql> use testdb2;
mysql> CREATE TABLE td_test2 (i INT) ENGINE=NDB;
//这里必须指定数据库表的引擎为NDBCLUSTER,与配置文件中的名称相同
mysql> INSERT INTO td_test2() VALUES (1);
mysql> INSERT INTO td_test2() VALUES (152);
mysql> SELECT * FROM td_test2;

6.2 在登录另一台数据节点查看,是否有创建的库和表,完成后再逆向测试(再这台上创建库再另一台数据节点查看是否有)

6.3 停掉一台数据节点,在没停 的数据节点上创建数据,然后在开启停掉的数据节点,应该能同步过来才算perfect

mysql集群7.4.1的更多相关文章

  1. mysql集群数据一致性校验

    目前,mysql在互联网行业使用地如火如荼,很多大型网站都在使用MySQL数据库,通过搭建mysql主备集群,实现高性能,高可用的存储方案.mysql集群的共同特性是通过复制来实现主备间的同步,保证主 ...

  2. MySQL集群在断网后再启动报"Unable to start missing node group"问题处理

    总所周知,MySQL集群又名ndb cluster,而ndb就是network based database的简称,数据库节点之间依靠网络来通信和保证数据分块间的一致性.今天由于机房交换机损坏,导致集 ...

  3. 京东分布式MySQL集群方案介绍

    背景 数据库作为一个非常基础的系统,任何一家互联网公司都会使用,数据库产品也很多,有Oracle.SQL Server .MySQL.PostgeSQL.MariaDB等,像SQLServer/Ora ...

  4. MySql集群FAQ----mysql主从配置与集群区别、集群中需要多少台计算机呢?为什么? 等

    抽取一部分显示在这里,如下, What's the difference in using Clustervs using replication? 在复制系统中,一个MySQL主服务器会更新一个或多 ...

  5. linux上使用amoeba实现MySql集群,以及读写分离,主从复制

    一.由于是MySql集群,所以就不可能只有一个MySql,需要多个MySql,具体安装步骤,可以参考http://www.cnblogs.com/ywzq/p/4882140.html这个地址进行安装 ...

  6. 高可用性、负载均衡的mysql集群解决方案

    高可用性.负载均衡的mysql集群解决方案 一.mysql的市场占有率 二.mysql为什么受到如此的欢迎 三.mysql数据库系统的优缺点 四.网络服务器的需求 五.什么是mysql的集群 六.什么 ...

  7. mysql集群实例

    原文地址:http://www.it165.net/database/html/201403/5678.html http://www.cnblogs.com/seesea125/archive/20 ...

  8. MySQL Cluster(MySQL 集群) 初试(转)

    作/译者:叶金荣(imysql#imysql.com>),来源:http://imysql.com,欢迎转载. 作/译者:叶金荣(Email: ),来源:http://imysql.cn,转载请 ...

  9. 浅谈mysql集群

    一.什么是MySQL集群 MySQL集群是一个无共享的(shared-nothing).分布式节点架构的存储方案,其目的是提供容错性和高性能. 数据更新使用读已提交隔离级别(read-committe ...

  10. MYSQL集群的搭建

    按照此配置完全可以配置成功!! 一.介绍========测试环境:Server1:ndbd 192.168.1.225Server2:ndbd 192.168.1.226Server3:mysqld ...

随机推荐

  1. 原生js的开发笔记

    1.基本的dom操作 var a=document.getElementById('ma1').innerHTML;/获取html代码 alert(document.getElementById('m ...

  2. python2x与python3x的区别

    python2x与Python3x的区别 一.1.Python2x: a.源码不规范,源码混乱,重复代码冗余(重复多) python3x: b.重整源码,源码规范,优美,清新,简单 2.Python2 ...

  3. ESD总结

    设计人员完全可以让系统在经过ESD事件后不发生故障并仍能继续运行.将这个目标谨记在心,下面让我们更好地理解ESD冲击时到底发生了什么,然后介绍如何设计正确的系统架构来应对ESD. 简单模型 将一个电容 ...

  4. C/C++经典面试题一

    1.变量的声明和定义有什么区别? 常量:在程序执行过程中,不会发生改变的量,不能被改变的量 变量:在程序执行过程中,可以被改变的量 定义变量的方式:数据类型 变量名 = 常量: int num = 1 ...

  5. 2. Spring Boot项目启动原理初探

    SpringBoot从宏观上说,就是对spring容器进行了一层包装.它内部的入口是利用 SpringApplication类的static的 run 方法进行启动的,调用的图: 上图中的这些方法都位 ...

  6. python 指定日期图片文件删除

    手机使用python操作图片文件 起因 前几天去国图拍了一本书,一本心理学方面的书,也许你问我为什么不去买一本,或者去网上找pdf. 其实吧,关于心理学方面的书可以说在市面上一抓就是一堆,至于拍这本书 ...

  7. 最长增长子序列(LIS)

    给定一个无序的整数数组,找到其中最长上升子序列的长度. 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4. 说 ...

  8. webstorm设置VCS:版本控制顶部按钮

    说明: 每次都在这坑一下,浪费时间,百度只指出在哪,并没有说怎么调出来 我用的版本是10,点击下面的选项按操作设置就可以了 红色箭头:从服务器获取最新代码: 绿色箭头:提交: 白色箭头:撤销

  9. OpenStack实践系列③镜像服务Glance

    OpenStack实践系列③镜像服务Glance 3.5 Glance部署 修改glance-api和glance-registry的配置文件,同步数据库 [root@node1 ~]# vim /e ...

  10. mariadb:SQL日常使用总结

    1.关联删除 DELETE T_Base_Resource_Action FROM T_Base_Resource_Action  INNER JOIN T_Base_Resource ON T_Ba ...