本文共 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种进程:
mysqld进程:供用户访问和执行sql语句
数据进程ndbd:存储数据
主机名 | 角色 | 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 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)
在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;
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