zoukankan      html  css  js  c++  java
  • mysql-cluster集群(亲测)

    重要说明:mysql-cluste与非集群时用的mysql-server与mysql-client没有任何关系,mysql-cluste安装包中已自带了集群用的server与client,启动mysql也是启动mysql-cluste中的mysql,与原先的mysql-server没有任何关系。

    一:基本概念

    “NDB” 是一种“内存中”的存储引擎,也是事务型存储引擎,具备ACID属性。

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

    数据节点:用于保存 Cluster的数据。数据节点的数目与副本的数目相关,是片段的倍数。数据节点是用命令“ndbd”启动的。

    SQL节点:用来访问 Cluster数据的节点。也就是Mysql服务,可以使用service mysqld start启动。

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

    090506799.jpg

    二:mysql-cluste安装包下载

    mysql-cluste官方下载地址:http://dev.mysql.com/downloads/cluster/

    本文测试下载的版本是linux 64位的tar包

    三:集群配置概述

    安装版本:mysql cluster 7.4.13

    操作系统 :centos6.5(X64)

    软件名称 :mysql-cluster-gpl-7.4.13-linux-glibc2.5-x86_64.tar.gz (通用版)

    管理节点IP:192.168.1.240

    数据节点-SQL节点IP:192.168.1.238

    数据节点-SQL节点IP:192.168.1.248

    四:安装

    不需要安装mysql-server软件了,所以可以关掉mysql服务

    在集群中的所有主机上安装mysql-cluster集群软件

    mysql-cluster软件提供3种进程:

    1,mysqld进程:供用户访问和执行sql语句

    2,数据进程ndbd:存储数据

    3,管理进程mgmd:管理集群中的所有的主机

    安装mysql-cluster,集群中的每台服务都要安装

    groupadd mysql
    useradd mysql -g mysql
    tar xvf mysql-cluster-gpl-7.4.13-linux-glibc2.5-x86_64.tar.gz
    mv mysql-cluster-gpl-7.4.13-linux-glibc2.5-x86_64 /usr/local/mysql
    cd /usr/local/mysql
    ./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql
    chown -R mysql:mysql mysql cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf

    为便于以后启动mysql服务,我们接着做如下步骤:

     复制配置文件

    [root@localhost mysql] cp support-files/my-default.cnf /etc/my.cnf

    h.  将mysqld服务加入开机自启动项。

    *首先需要将scripts/mysql.server服务脚本复制到/etc/init.d/,并重命名为mysqld。

    [root@localhostmysql]  cp support-files/mysql.server /etc/init.d/mysqld

    会有提示是否覆盖,输入yes

    这样就可以用 service mysqld start  service mysqld restart service mysqld stop

     

    *通过chkconfig命令将mysqld服务加入到自启动服务项中,这一步就不做了,因为mysql集群启动是有顺序的,sql节点要最后启动

    [root@localhost mysql]#chkconfig --add mysqld

    *注意服务名称mysqld就是我们将mysql.server复制到/etc/init.d/时重命名的名称。

    *查看是否添加成功

    [root@localhost mysql]#chkconfig --list mysqld

    mysqld   0:off 1:off        2:on        3:on        4:on        5:on        6:off

     

    mysql客户端启动:

    为了避免每次都输入mysql的全路径/usr/local/mysql/bin/mysql,可将其加入环境变量中,在vi /etc/profile最后加入两行命令:

    MYSQL_HOME=/usr/local/mysql

    export PATH=$PATH:$MYSQL_HOME/bin

    修改好后再执行source /etc/profile

    这样就可以在shell中直接输入mysql命令来启动客户端程序了

     

     

    五:管理节点配置

    vi /etc/mysql-cluster.ini (该文件不存在,需要创建,文件名可随便命名)

    文件内容如下:

    [NDBD DEFAULT]
    NoOfReplicas=2 #定义在Cluster环境中相同数据的份数,最大为4
    DataMemory=200M #每个数据节点中给数据分配的内存
    IndexMemory=20M #每个数据节点中给索引分配的内存
    MaxNoOfAttributes=20480 #该参数用于设置簇中触发程序对象的最大数目。该参数的默认值为768,不修改建表时可能会报708错误
    [NDB_MGMD]
    NodeId=1
    #设置管理节点服务器
    HostName=192.168.1.240
    DataDir=/usr/local/mysql/data
    [NDBD]
    NodeId=2
    #设置存储节点服务器(NDB节点)
    HostName=192.168.1.238
    DataDir=/usr/local/mysql/data
    [NDBD]
    NodeId=3
    #第二个NDB节点
    HostName=192.168.1.248
    DataDir=/usr/local/mysql/data
    [MYSQLD]
    NodeId=4
    HostName=192.168.1.238
    [MYSQLD]
    NodeId=5
    HostName=192.168.1.248

    启动(必须用参数“-f”告诉 ndb_mgm 配置文件所在位置,默认是在ndb_mgmd相同目录下

    cd  /usr/local/mysql/bin

    ./ndb_mgmd -f /etc/mysql-cluster.ini

    ./ndb_mgmd -f /etc/mysql-cluster.ini --initial  (#--initial:第一次启动时加上,其它时候不要加,不然会数据清空,除非是在备份、恢复或配置变化后重启时)

    启动成功后会显示当前mysql-cluster的信息

    通过netstat -lntpu或者ps -aux |grep ndb_mgmd查看是否启动成功

    让管理节点开机自动启动:以下路径根据自己实际的来。
     vi /etc/rc.d/rc.local
    加入下面的内容:
    /usr/local/mysql/bin/ndb_mgmd -f /etc/mysql-cluster.ini

    六:数据节点与sql节点的配置

    在238与248服务上做。

    vi /etc/my.cnf

    增加如下内容:

    [mysqld]
    ndbcluster  #使用ndb集群引擎
    ndb-connectstring=192.168.1.240 #指定管理集群的ip地址,多个以,分隔
    default-storage-engine=ndbcluster  #设置默认引擎
    #user=mysql
    #log-error=/usr/local/mysql/mysqld.err
    
    #指定管理集群的ip地址,多个以,分隔
    [mysql_cluster]
    ndb-connectstring=192.168.1.240

     在每台存储节点(ndbd)服务器上,如果是第一次启动ndbd进程的话,必须先执行以下命令: 
    cd /usr/local/mysql/bin

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

    如果不是第一次启动,直接运行如下命令即可: 

    cd /usr/local/mysql/bin
    ./ndb

    启动后的效果:

     

    查看是否启动成功:

    netstat -lntpu或者ps -aux |grep ndbd

     关闭数据节点:

    
    

     启动sql节点:

    service mysqld start

     启动sql节点成功后,修改下mysql的连接为任意ip,然后再设置连接的用户名为root,密码为test,这样客户端工具SQLyog等就可以连接到mysql服务上了。

    新安装的mysql密码是空的。

    ./mysql -u root -p
    use mysql
    SELECT `Host`,`User` FROM user;
    UPDATE user SET `Host` = '%' WHERE `User` = 'root' LIMIT 1;
    FLUSH PRIVILEGES;

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'test' WITH GRANT OPTION;

    SELECT `Host`,`User` FROM user;

    七:查看集群状态

     

    启动顺序:

    管理节点 -> 数据节点 -> SQL节点

    关闭顺序:

    SQL节点 -> 数据节点 -> 管理节点


    数据节点与sql节点都启动成功后在管理节点上查看集群状态。

    cd /usr/local/mysql/bin
    ./ndb_mgm -e show

    示例如下:已全部连接成功的

    或者

     如果节点已确认启动并且配置无误,还是not connected那就试下关闭防火墙与selinux

    可能原因:防火墙开启,阻止集群数据通信;关闭防火墙:service iptables stop;

    关闭 selinux:setenforce 0;

    管理和维护命令:

    cd /usr/local/mysql/bin

    关闭mysql集群: pkill -9 ndbd_mgmd

    启动mysql集群:./ndb_mgmd -f /var/lib/mysql-cluster/config.ini

    启动SQL节点:./mysqld_safe --user=mysql & 或 service mysqld restart

    查看mysql状态:./ndb_mgm -e show

    八:测试集群

    创建数据库表,简单查看配置效果:

    由于为分布式集群,所以,在Mysql中创建的表的存储引擎必须修改为:NDB Cluster,否则数据不会同步到其他节点服务器上。

    以下建表与插入数据在一台服务上操作,操作后直接查看其他节点中的mysql,可以看到数据库、表、数据都会同步的。

    先创建个数据库mytest

    CREATE TABLE tb_city(
    id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    NAME VARCHAR(20) NOT NULL DEFAULT '')
    ENGINE = NDBCLUSTER DEFAULT CHARSET utf8mb4;

    INSERT INTO tb_city VALUES(1, 'city1');
    INSERT INTO tb_city VALUES(2, 'city2');
    INSERT INTO tb_city VALUES(3, 'city3');

    示例如下

    九:更改表的ENGINE

    ALTER TABLE tablename ENGINE=NDBCLUSTER

     示例:

    ALTER TABLE tb_bank ENGINE=NDBCLUSTER
    集群的每一张表必须修改ENGINE = NDBCLUSTER

     

    十:jdbc连接


    原先配置:jdbc:mysql://192.168.1.238:3306/palm_2_0_16
    集群后配置:jdbc:mysql:loadbalance://192.168.1.238:3306,192.168.1.248:3306/palm_2_0_16?roundRobinLoadBalance=true
  • 相关阅读:
    关于BufferefReader.readLine()方法的理解
    web.xml配置
    第一章 网络编程入门
    浅谈c++中map插入数据的用法
    c++中new的用法
    线程
    设计模式(九)Bridge模式
    设计模式(八)Abstract Factory模式
    牛逼的人,都不太要面子
    质量运营在美团点评智能支付业务测试中的初步实践
  • 原文地址:https://www.cnblogs.com/shihaiming/p/6084965.html
Copyright © 2011-2022 走看看