• ADADADADAD

    怎么配置MySQL Cluster[ mysql数据库 ]

    mysql数据库 时间:2024-11-26 22:12:24

    作者:文/会员上传

    简介:

    ##MySQL Cluster 的配置说明管理节点(1 个) 10.10.10.9SQL 节点(2 个) 10.10.10.1010.10.10.11Data节点(2 个) 10.10.10.1010.10.10.11##配置主机IP[root@mysql9 ~]# cat /etc/sys

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    ##MySQL Cluster 的配置说明
    管理节点(1 个) 10.10.10.9
    SQL 节点(2 个) 10.10.10.10
    10.10.10.11
    Data节点(2 个) 10.10.10.10
    10.10.10.11

    ##配置主机IP
    [root@mysql9 ~]# cat /etc/sysconfig/network
    NETWORKING=yes
    HOSTNAME=mysql9 ##因为是克隆的虚拟机,所以需要修改主机名
    [root@mysql9 ~]# cat /etc/hosts
    127.0.0.1localhostmysql9##因为是克隆的虚拟机,所以需要修改主机名,后面的主机名每台机器不一样。
    10.10.10.9mysql9
    10.10.10.10mysql10
    10.10.10.11mysql11
    ##上面所做的操作,在所有服务器上面都要执行!

    ##禁用selinux
    修改/etc/selinux/config文件
    将SELINUX=enforcing改为SELINUX=disabled
    重启机器即可。
    查看selinux状态:
    [root@CentOS ~]# getenforce
    ##关闭iptables ##这个不知道是什么东西,浪费我大量的时间,不关闭的话,启动Data节点会报错:
    -bash-4.1$ ndbd --initial
    Unable to connect with connect string: nodeid=0,10.10.10.9:1186
    Retrying every 5 seconds. Attempts left: 12 11 10 9 8 7 6 5 4 3 2 1, failed.
    2015-12-18 23:11:55 [ndbd] ERROR-- Could not connect to management server, error: ''
    ##下面关闭它:
    [root@mysql9 ~]# service iptables stop
    iptables:将链设置为政策 ACCEPT:filter[确定]
    iptables:清除防火墙规则: [确定]
    iptables:正在卸载模块:[确定]
    [root@mysql9 ~]# chkconfig iptables off
    ##上面所做的操作,在所有服务器上面都要执行!

    ##添加用户和组
    [root@db ~]# groupadd mysql
    [root@db ~]# useradd -r -g mysql mysql
    [root@localhost data]# passwd mysql
    更改用户 mysql 的密码 。
    新的 密码:
    无效的密码: 过短
    无效的密码: 过于简单
    重新输入新的 密码:
    passwd: 所有的身份验证令牌已经成功更新。
    ##上面所做的操作,在所有服务器上面都要执行!

    ##MySQL Cluster 的安装配置
    [root@CentOS tmp]# cd /tmp/
    [root@CentOS tmp]# ll mysql-cluster-gpl-7.4.8-linux-glibc2.5-i686.tar.gz
    -rw-r--r--. 1 root root 472807612 12月 18 01:11 mysql-cluster-gpl-7.4.8-linux-glibc2.5-i686.tar.gz
    [root@CentOS tmp]# tar zxf mysql-cluster-gpl-7.4.8-linux-glibc2.5-i686.tar.gz -C /usr/local/
    [root@CentOS tmp]# cd /usr/local/
    [root@CentOS local]# mv mysql-cluster-gpl-7.4.8-linux-glibc2.5-i686/ mysql
    [root@CentOS local]# chown -R mysql:mysql /usr/local/mysql
    [root@CentOS local]# vi /etc/profile
    export PATH=/usr/local/mysql/bin:$PATH
    [root@localhost bin]# source /etc/profile
    ##上面所做的操作,在所有服务器上面都要执行!

    ##初始化数据库
    [root@CentOS local]# mkdir -p /data/3306
    [root@CentOS local]# chown -R mysql:mysql /data
    [root@CentOS local]# su - mysql
    su: 警告:无法切换到目录/home/mysql: 没有那个文件或目录
    -bash-4.1$ mkdir -p /home/mysql
    mkdir: 无法创建目录"/home/mysql": 权限不够
    -bash-4.1$ exit
    logout
    [root@CentOS local]# mkdir -p /home/mysql
    [root@CentOS local]# su - mysql
    -bash-4.1$ cd /usr/local/mysql
    -bash-4.1$ ./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306
    -bash-4.1$ cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
    -bash-4.1$ vi /etc/my.cnf
    [client]
    port = 3306
    socket = /data/3306/mysql.sock
    default-character-set = utf8

    [mysqld]
    port = 3306
    user = mysql
    socket = /data/3306/mysql.sock
    pid-file = /data/3306/mysql.pid
    basedir = /usr/local/mysql
    datadir = /data/3306
    log-bin = /data/3306/mysql-bin
    lower_case_table_names=1
    max_connections=1000
    character_set_server=utf8
    character_set_client=utf8

    [mysql]
    default-character-set=utf8
    [root@localhost mysql]# cd /usr/local/mysql
    [root@localhost mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
    [root@localhost mysql]# chmod 777 /etc/rc.d/init.d/mysqld
    [root@CentOS mysql]# service mysqld start
    Starting MySQL.....[确定]
    [root@CentOS mysql]# netstat -tulnp | grep mysql
    tcp0 0 :::3306 :::*LISTEN 2057/mysqld
    [root@CentOS mysql]# service mysqld status
    MySQL running (2057)[确定]
    [root@CentOS mysql]# service mysqld stop
    Shutting down MySQL.. [确定]
    ##上面所做的操作,在所有服务器上面都要执行!由于我是虚拟机,就是做一遍,其它的复制。
    #管理节点,其实不需要mysqld二进制文件,只需要MySQL Cluster服务端程序(ndb_mgmd)和监听客户端程度(ndb_mgm)。
    ##这里因为是克隆的虚拟机,就一起在管理节点上面也安装了mysqld服务,但后面配置就不会再提到要配置它的地方了。

    ##管理节点配置步骤
    ##在mysql用户下面执行!
    (1)在服务器10.10.10.9 的/data下创建目录mysql-cluster,并在目录中创建配置文件config.ini。
    -bash-4.1$ cd /data/
    -bash-4.1$ mkdir mysql-cluster
    -bash-4.1$ cd mysql-cluster/
    -bash-4.1$ touch config.ini
    (2)根据这里的测试集群环境,config.ini 文件配置如下:
    -bash-4.1$ vi config.ini
    ##配置文件里面的配置,在等号两边最好加上空格,本人在这里是吃了大亏,耽误了大量的时间、精力。
    ##一度以为没有是哪里没有配对,结果后来最终发现还是配置文件的问题导致后面启不来!
    [ndbd default]
    noofreplicas = 1#每个数据节点的镜像数量
    datamemory = 50M#每个数据节点中给数据分配的内存(这个M一定要大写)
    indexmemory = 20M #每个数据节点中给索引分配的内存

    [ndb_mgmd]
    #配置管理节点
    hostname = 10.10.10.9#管理节点IP
    datadir = /data/mysql-cluster #管理节点数据目录,管理节点启动成功后在该目录下面会存在很多日志信息等。

    [ndbd]
    hostname = 10.10.10.10 ##指定data节点选项
    datadir = /data/mysql-cluster/data

    [ndbd]
    hostname = 10.10.10.11 ##指定data节点选项
    datadir = /data/mysql-cluster/data

    [mysqld]
    hostname = 10.10.10.10 ##指定sql节点选项

    [mysqld]
    hostname = 10.10.10.11 ##指定sql节点选项

    上面的配置文件中,包括很多的组,组名用“[]”括起来,这里我们最关心的是3 类节点组的配置,分别定义如下。
    ? [NDB_MGMD]:表示管理节点的配置,只能有一个。
    ? [NDBD DEFAULT]:表示每个数据节点的默认配置,在每个节点的[NDBD]中不用再写这些选项。只能有一个。
    ? [NDBD]:表示每个数据节点的配置,可以有多个。
    ? [MYSQLD]:表示SQL 节点的配置,可以有多个,分别写上不同SQL 节点的IP 地址;也可以不用写IP 地址,只保留一个空节点,表示任意一个IP 地址都可以进行访问。此节点的个数表明了可以用来连接数据节点的SQL 节点总数。
    每个节点都要有一个独立的id 号,可以手工填写,比如“id=2”,也可以不写,系统会按照配置文件的填写顺序自动分配。

    ##SQL 节点和Data 节点的配置
    #SQL节点,可以将之视为传统的MySQL Server。Data节点,也是一个MySQL Server,并在my.cnf中指定少数几个参数即可。
    ##这里由于环境限制,SQL 节点和Data 节点的是放在同一台虚拟机上面的,环境中其实也仅仅安装了一个mysqld服务。后面提到的修改my.cnf配置,就是这个。
    ##网上很多地方都提到SQL 节点和Data 节点跟普通的mysqld服务没上面区别,要把普通的mysqld变为SQL 节点和Data 节点只需要在my.cnf配置里面添加少数几个参数即可。
    ##但我还是不太明白,后面启动Data 节点并没有用到任何mysqld相关的大小,所以我理解,其实Data 节点也是不需要安装mysqld服务的。需要bin里面的命令。
    ##在mysql用户下面执行!在10.10.10.10和10.10.10.11上面都要做!
    SQL 节点和数据节点的配置非常简单,只需要在对MySQL 的配置文件(my.cnf)中增加如下内容即可(参数含义见后面注释):
    [root@CentOS ~]# chown mysql:mysql /etc/my.cnf
    [root@CentOS ~]# su - mysql
    -bash-4.1$ vi /etc/my.cnf
    [mysqld]
    ndbcluster#运行NDB 存储引擎
    ndb-connectstring=10.10.10.9 #定位管理节点

    [mysql_cluster]
    ndb-connectstring=10.10.10.9 #定位管理节点

    [mysqld_safe]
    log-error = /data/mysql-cluster/data/mysqld.log
    pid-file = /data/mysql-cluster/data/mysqld.pid
    ##创建目录
    -bash-4.1$ mkdir -p /data/mysql-cluster/data

    ##Cluster 的启动
    Cluster 需要各个节点都进行启动后才可以运行,节点的启动顺序为管理节点 -> 数据节点 -> SQL 节点。
    (1)在管理节点上,从系统shell 发出下述命令以启动管理节点进程:(10.10.10.9)
    -bash-4.1$ pwd
    /data/mysql-cluster
    -bash-4.1$ ndb_mgmd -f ./config.ini
    MySQL Cluster Management Server mysql-5.6.27 ndb-7.4.8
    -bash-4.1$ ndb_mgm
    -- NDB Cluster -- Management Client --
    ndb_mgm> show
    Connected to Management Server at: localhost:1186
    Cluster Configuration
    ---------------------
    [ndbd(NDB)]2 node(s)
    id=2 (not connected, accepting connect from 10.10.10.10) ##可以看见未连接(not connected),这是因为还没有启动
    id=3 (not connected, accepting connect from 10.10.10.11)

    [ndb_mgmd(MGM)]1 node(s)
    id=1@10.10.10.9 (mysql-5.6.27 ndb-7.4.8)

    [mysqld(API)]2 node(s)
    id=4 (not connected, accepting connect from 10.10.10.10) ##可以看见未连接(not connected),这是因为还没有启动
    id=5 (not connected, accepting connect from 10.10.10.11)

    ndb_mgm> exit
    -bash-4.1$ ps -ef | grep ndb
    mysql 2312 1785 0 18:58 pts/100:00:00 ndb_mgm
    mysql 2457 1 0 19:24 ?00:00:03 ndb_mgmd -f ./config.ini
    mysql 2495 1595 0 19:31 pts/000:00:00 grep ndb

    (2)在每台数据节点服务器上(本例为10.10.10.10 和10.10.10.11),运行下述命令启动ndbd 进程:
    ndbd 进程是使用NDB 存储引擎处理表中数据的进程。通过该进程,存储节点能够实现分布式事务管理、节点恢复、在线备份等相关的任务。
    注意:仅应在首次启动ndbd 时,或在备份/恢复或配置变化后重启ndbd 时使用“--initial”参数,这很重要。原因在于,该参数会使节点删除由早期ndbd 实例创建的、用于恢复的任何文件,包括恢复用日志文件。
    -bash-4.1$ ndbd --initial##10.10.10.10
    2015-12-19 01:29:05 [ndbd] INFO -- Angel connected to '10.10.10.9:1186'
    2015-12-19 01:29:05 [ndbd] INFO -- Angel allocated nodeid: 2
    -bash-4.1$ ndbd --initial##10.10.10.11
    2015-12-19 01:37:36 [ndbd] INFO -- Angel connected to '10.10.10.9:1186'
    2015-12-19 01:37:36 [ndbd] INFO -- Angel allocated nodeid: 3

    (3)依次启动SQL 节点上的MySQL 服务(本例为10.10.10.10 和10.10.10.11)。
    -bash-4.1$ service mysqld start
    也可以用:-bash-4.1$ mysqld_safe --defaults-file=/etc/my.cnf 2>&1 > /dev/null &

    (4)节点全部成功启动后,用ndb_mgm 工具的show 命令查看集群状态:
    ##ndb_mgm 工具是ndb_mgmd(MySQL Cluster Server)的客户端管理工具,通过它可以方便地检查Cluster 的状态、启动备份、关闭Cluster 等功能。
    ndb_mgm> show
    Cluster Configuration
    ---------------------
    [ndbd(NDB)]2 node(s)
    id=2@10.10.10.10 (mysql-5.6.27 ndb-7.4.8, Nodegroup: 0, *)
    id=3@10.10.10.11 (mysql-5.6.27 ndb-7.4.8, Nodegroup: 1)

    [ndb_mgmd(MGM)]1 node(s)
    id=1@10.10.10.9 (mysql-5.6.27 ndb-7.4.8)

    [mysqld(API)]2 node(s)
    id=4@10.10.10.10 (mysql-5.6.27 ndb-7.4.8)
    id=5@10.10.10.11 (mysql-5.6.27 ndb-7.4.8)

    ##测试 MySQL Cluster
    ##上文提到过,如果要使用Cluster,则表的存储引擎必须为NDB,其他类型存储引擎的数据将不会保存到数据节点中。
    1.NDB 存储引擎测试
    (1)在任意一个SQL 节点(这里用10.10.10.10)的test 库中创建测试表t1,设置存储引擎为NDB,并插入两条测试数据:
    mysql> create table t1(id int) engine=ndb;
    mysql> insert into t1 values(1);
    mysql> insert into t1 values(2);
    (2)在另外一个SQL 节点(10.10.10.11),查询test 库中的t1 表,结果如下:
    mysql> select * from t1;##显然,两个SQL 节点查询到的数据是一致的。
    (3)在SQL 节点10.10.10.10 上将测试表t1 的存储引擎改为MyISAM,再次插入测试记录:
    mysql> alter table t1 engine=myisam;
    mysql> insert into t1 values(3);
    (4)在SQL 节点10.10.10.11 上再次查询表t1,结果如下:
    mysql> select * from t1; ##可以发现,表t1 已经无法查询。
    ERROR 1146 (42S02): Table 'test.t1' doesn't exist
    (5)在SQL 节点10.10.10.10 上再次将t1 的存储引擎改为NDB:
    mysql> alter table t1 engine=ndb;
    (6)在SQL 节点10.10.10.11 上再次查询,结果如下:
    mysql> select * from t1;
    +------+
    | id|
    +------+
    |2 |
    |3 |
    |1 |
    +------+
    3 rows in set (0.01 sec)
    ##显然,表t1 的数据被再次同步到了数据节点。所有SQL 节点又都可以正常查询数据。
    ##其实可以发现,数据文件还是存放在mysqld的datadir目录里面;而前面指定的“/data/mysql-cluster/data”这些目录放的是集群相关的东西。

    2.单点故障测试——SQL 节点发生单点故障。
    (1)将SQL 节点10.10.10.10 上的MySQL 服务停止。
    -bash-4.1$ mysqladmin -uroot -p shutdown
    (2)查看一下Cluster 的状态。
    ndb_mgm> show
    Cluster Configuration
    ---------------------
    [ndbd(NDB)]2 node(s)
    id=2@10.10.10.10 (mysql-5.6.27 ndb-7.4.8, Nodegroup: 0, *)
    id=3@10.10.10.11 (mysql-5.6.27 ndb-7.4.8, Nodegroup: 1)

    [ndb_mgmd(MGM)]1 node(s)
    id=1@10.10.10.9 (mysql-5.6.27 ndb-7.4.8)

    [mysqld(API)]2 node(s)
    id=4 (not connected, accepting connect from 10.10.10.10)
    id=5@10.10.10.11 (mysql-5.6.27 ndb-7.4.8)
    (3)从节点10.10.10.11 上查看表t1,结果如下。
    mysql> select * from t1;
    +------+
    | id|
    +------+
    |2 |
    |3 |
    |1 |
    +------+
    3 rows in set (0.01 sec)

    ##关闭MySQL Cluster
    Cluster 的关闭命令很简单,只需要在shell 下执行如下命令即可:-bash-4.1$ ndb_mgm -e shutdown
    也可以用ndb_mgm 工具进入管理界面后,使用shutdown 命令关闭:ndb_mgm> shutdown
    然后再其它节点上关闭mysqld:-bash-4.1$ service mysqld stop
    或者:mysqladmin -uroot -p shutdown

    ##日志管理
    MySQL Cluster 提供了两种日志,分别是集群日志(clusterlog)和节点日志(node log)。前者记录了所有Cluster 节点生成的日志,后者仅仅记录了数据节点的本地事件。在大多数情况下,我们都推荐使用集群日志,因为它在一个地方记录了所有节点的数据,更便于进行管理。
    clusterlog 一般记录在和配置文件( config.ini ) 同一个目录下, 文件名格式为ndb__cluster.log,其中nodeid 为管理节点号。
    可以使用ndb_mgm 客户端管理工具打开或者关闭日志,具体操作如下。
    (1)在shell 中执行ndb_mgm 命令。
    -bash-4.1$ ndb_mgm
    -- NDB Cluster -- Management Client --
    ndb_mgm>
    (2)执行clusterlog info 命令查看当前日志状态。
    ndb_mgm> clusterlog info
    Connected to Management Server at: localhost:1186
    Severities enabled: INFO WARNING ERROR CRITICAL ALERT
    (3)当前日志是打开的,用clusterlog off 命令关闭日志。
    ndb_mgm> clusterlog off
    Cluster logging is disabled
    (4)再次查看日志状态,发现已经关闭。
    ndb_mgm> clusterlog info
    Cluster logging is disabled.
    (5)执行clusterlog on 命令将再次打开日志。
    ndb_mgm> clusterlog on
    Cluster logging is enabled.
    ndb_mgm> clusterlog info
    Severities enabled: INFO WARNING ERROR CRITICAL ALERT

    怎么配置MySQL Cluster.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: clustermysql