博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
test
阅读量:6833 次
发布时间:2019-06-26

本文共 6234 字,大约阅读时间需要 20 分钟。

MySQL Cluster 是MySQL适合于分布式计算环境的高实用、高冗余版本。它采用了NDB Cluster 存储引擎,允许在1个 Cluster 中运行多个MySQL服务器。 该技术允许在无共享的系统中部署“内存中”数据库的 Cluster 。

管理节点(mgm):这类节点的作用是管理MySQLCluster内的其他节点,如提供配置数据,并停止节点,运行备份等。由于这类节点负责管理其他节点的配置,应该在启动其他节点之前启动这类节点。MGM节点是用命令“ndb_mgmd”启动的;数据节点(ndb):这类节点用于保存Cluster的数据,数据节点的数目与副本的数目相关,是片段的倍数。例如,对于两个副本,每个副本有两个片段,那么就有4个数据节点,没有必要设定过多的副本,在NDB中数据会尽量的保存在内存中。数据节点使用命令“ndb”启动的;SQL节点:这是用来访问Cluster数据的节点,对于MySQL Cluster,客户端节点是使用NDB Cluster存储引擎的传统MySQL服务器。通常,SQL节点使用命令“mysqld-ndbcluster”启动的;

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

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

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

  3. 管理进程mgmd:管理集群中的所有的主机
  • 不需要安装mysql-server软件了,所以可以关掉mysql服务

avatar

主机名 角色 IP地址
node01 管理、数据节点 192.168.0.201
node02 管理、数据节点 192.168.0.202
node03 数据、sql节点 192.168.0.203
ipsan1 172.16.10.191
ipsan2 172.16.10.192

安装的是Mysql cluster 7.3,为了和参考文档中的版本一致。

关闭防火墙及selinux(all)

wget https://cdn.mysql.com//Downloads/MySQL-Cluster-7.3/MySQL-Cluster-gpl-7.3.21-1.el7.x86_64.rpm-bundle.tar下载并解压:mkdir ./mysql-clustertar xvf MySQL-Cluster-gpl-7.3.21-1.el7.x86_64.rpm-bundle.tar -C ./mysql-cluster

检查并卸载掉之前安装的Mysql及mariadb版本并安装集群版本(all):

cd mysql-clusterrpm -ivh *.rpm根据提示补安装依赖包:yum -y install net-tools perl-Module-Install

运行mysql-install-db脚本(5.6及以下版本)进行初始化,注意其中用户为root的名称需要跟配置文件my.cnf中的相同(rpm安装已经自动设置了环境变量,其他方式安装可以到对应目录下执行———all)

mysql_install_db -user=mysql

编辑集群管理节点配置文件/usr/mysql-cluster/config.ini

[ndb_mgmd default]datadir = /usr/local/mysql/ndbdata[ndbd default]NoOfReplicas = 1            #定义在Cluster环境中相同数据的份数,最大为4DataMemory = 80M            #每个数据节点中给数据分配的内存IndexMemory = 18M           #每个数据节点中给索引分配的内存datadir = /usr/local/mysql/ndbdata[ndb_mgmd]          #定义管理节点NodeId = 1HostName = node01#[ndbd]#NodeId = 11#HostName = node01[ndbd]              #定义Ndb节点NodeId = 11HostName = node01[ndbd]NodeId = 12HostName = node02[ndbd]NodeId = 13HostName = node03[mysqld]NodeId = 14HostName = node01[mysqld]NodeId = 15HostName = node02

在数据节点上配置/etc/my.cnf

[mysqld]symbolic-link = 0ndbcluster              #使用ndb集群引擎ndb-connectstring = 192.168.0.201       #指定管理集群的ip地址,多个以,分隔[mysqld_safe]log-error = /var/log/mysql.logpid-file=/var/run/mysqld/mysql.pid[mysql_cluster]             #指定管理集群的ip地址,多个以,分隔ndb-connectstring = 192.168.0.201

在启动mysql集群的时候,注意首先要启动管理节点,并依次启动其他等若干个节点,相应的启动步骤如下:

1. 在管理节点上,切换到/usr/local/mysql/bin目录下,执行ndb_mgmd -f /var/lib/mysql-cluster/config.ini命令,完成管理节点的启动;2. 在各个数据节点上,切换到/usr/local/mysql/bin目录下,执行ndbd --initial(第一次启动时,否则执行ndbd即可),完成对数据节点的启动;3. 在各个SQL节点上,同样切换到/usr/local/mysql/bin目录下,执行mysqld_safe --user=root完成启动;4. 在管理节点上运行ndb_mgm命令,进入数据库管理的客户端,输入show命令,查看与之相连接的各个节点的状态;

初始化集群管理进程并启动(监听客户端):

[root@node01 mysql-cluster]# ndb_mgmd -f /usr/mysql-cluster/config.ini --initial

MySQL Cluster Management Server mysql-5.6.40 ndb-7.3.21
[root@node01 ~]# ps aux|grep mgmroot      1069  0.4  0.2 637040  8348 ?        Ssl  10:48   0:00 ndb_mgmd -f /usr/mysql-cluster/config.iniroot      1080  0.0  0.0 112704   964 pts/0    S+   10:48   0:00 grep --color=auto mgm

在所有节点上初始化集群:

[root@node03 mysql-cluster]# ndbd --initial

[root@node03 mysql-cluster]# ndbd --initial2018-06-11 16:09:23 [ndbd] INFO     -- Angel connected to '192.168.0.201:1186'                2018-06-11 16:09:23 [ndbd] INFO     -- Angel allocated nodeid: 13

如果只有第一行的信息提示,很有可能是mgmd节点没有正常启动。

首次启动,需要添加--initial参数,进行NDB节点的初始化工作,在以后的启动过程中,不能添加该参数,否则NDBD程序会清除之前建立的所有用于恢复的数据文件和日志文件;

集群正常后的状态:

[root@node01 mysql-cluster]# ndb_mgm

-- NDB Cluster -- Management Client --ndb_mgm> showConnected to Management Server at: 192.168.0.201:1186Cluster Configuration---------------------[ndbd(NDB)] 3 node(s)id=11   @192.168.0.201  (mysql-5.6.40 ndb-7.3.21, Nodegroup: 0, *)id=12   @192.168.0.202  (mysql-5.6.40 ndb-7.3.21, Nodegroup: 1)id=13   @192.168.0.203  (mysql-5.6.40 ndb-7.3.21, Nodegroup: 2)[ndb_mgmd(MGM)] 1 node(s)id=1    @192.168.0.201  (mysql-5.6.40 ndb-7.3.21)[mysqld(API)]   2 node(s)id=14   @192.168.0.201  (mysql-5.6.40 ndb-7.3.21)id=15   @192.168.0.202  (mysql-5.6.40 ndb-7.3.21)

或者

[root@node01 ~]# ndb_mgm -e show

Connected to Management Server at: 192.168.0.201:1186Cluster Configuration---------------------[ndbd(NDB)] 3 node(s)id=11   @192.168.0.201  (mysql-5.6.40 ndb-7.3.21, Nodegroup: 0, *)id=12   @192.168.0.202  (mysql-5.6.40 ndb-7.3.21, Nodegroup: 1)id=13   @192.168.0.203  (mysql-5.6.40 ndb-7.3.21, Nodegroup: 2)[ndb_mgmd(MGM)] 1 node(s)id=1    @192.168.0.201  (mysql-5.6.40 ndb-7.3.21)[mysqld(API)]   2 node(s)id=14   @192.168.0.201  (mysql-5.6.40 ndb-7.3.21)id=15   @192.168.0.202  (mysql-5.6.40 ndb-7.3.21)

在SQL节点上分别进入系统的安全状态,并完成对root用户的密码修改:

mysqld_safe --user=root  &直接输入Mysql登录

验证集群是否搭建成功,在SQL节点A上运行命令,在SQL节点B上查询:

mysql> create database ctest;Query OK, 1 row affected (0.05 sec)mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema || ctest              || mysql              || ndbinfo            || performance_schema || test               |+--------------------+6 rows in set (0.00 sec)mysql> create table test(    -> id int PRIMARY KEY    -> );Query OK, 0 rows affected (0.03 sec)

注意所建立表的存储引擎必须是ndbcluster类型,否则无法同步到其他节点;

查看表的存储引擎类型:

mysql> show table status from ctest where name='test' \G;*************************** 1. row ***************************           Name: test         Engine: ndbcluster         #存储引擎类型        Version: 10     Row_format: Fixed           Rows: 1 Avg_row_length: 28    Data_length: 32768Max_data_length: 0   Index_length: 0      Data_free: 0 Auto_increment: NULL    Create_time: NULL    Update_time: NULL     Check_time: NULL      Collation: latin1_swedish_ci       Checksum: NULL Create_options:        Comment:1 row in set (0.01 sec)

如果类型是InnoDB,就使用语句更改:

alter table test engine=ndbcluster;

trouble shooting

  1. 启动nbd_mgmd失败,报错:
    [root@node01 mysql-cluster]# ndb_mgmd -f /usr/mysql-cluster/config.ini --reload
    MySQL Cluster Management Server mysql-5.6.40 ndb-7.3.212018-06-11 15:41:35 [MgmtSrvr] ERROR    -- at line 37: Nodegroup 1 has 1 members, NoOfReplicas=22018-06-11 15:41:35 [MgmtSrvr] ERROR    -- Could not load configuration from '/usr/mysql-cluster/config.ini'2018-06-11 15:41:35 [MgmtSrvr] ERROR    -- Could not determine which nodeid to use for this node. Specify it with --ndb-nodeid=
    on command line

    是指配置文件的参数NoOfReplicas = 2,对应配置文件中定义的ndb_mgmd就应该有2个,改成1就行。

转载于:https://blog.51cto.com/9430048/2153704

你可能感兴趣的文章
JDK中的设计模式应用实例
查看>>
刘知远:让计算机听懂人话
查看>>
什么是DevOps?
查看>>
基于Spring AOP实现可控的请求日志保存,自定义注解
查看>>
secureCRT,永久设置,保护眼睛,配色方案
查看>>
[note]wordpress上线准备
查看>>
TFT working sequence
查看>>
Inside Cisco IOS Software Architecture(第一章,系统基础知识)
查看>>
java.lang.UnsupportedClassVersionError: Bad version number in .class file
查看>>
理解 Neutorn LBaaS - 每天5分钟玩转 OpenStack(120)
查看>>
CentOS上面的MRTG快速配置
查看>>
SCCM 2016 配置管理系列(Part3)
查看>>
基本TCP套接字编程
查看>>
我的友情链接
查看>>
mysql query cache优化
查看>>
double强制类型转换为int的实现过程
查看>>
php开发事半功倍的几个技巧
查看>>
SQLite学习手册(目录)
查看>>
9月国内服务器品牌关注度:超云新进榜 苹果降至第9
查看>>
6月第4周中国.ORG域名总量仅净增47个 环比缩小
查看>>