Mysql Cluster学习笔记1123.docx
- 文档编号:11708154
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:27
- 大小:428.65KB
Mysql Cluster学习笔记1123.docx
《Mysql Cluster学习笔记1123.docx》由会员分享,可在线阅读,更多相关《Mysql Cluster学习笔记1123.docx(27页珍藏版)》请在冰点文库上搜索。
MysqlCluster学习笔记1123
MySQLCluster集群
1MySQLCluster介绍
MySQLCluster实际上是在无共享存储设备的情况下实现的一种完全分布式数据库系统,其主要通过NDBCluster(简称NDB)存储引擎来实现。
MySQLCluster刚刚诞生的时候可以说是一个可以对数据进行持久化的内存数据库,所有数据和索引都必须装载在内存中才能够正常运行,但是最新的MySQLCluster版本已经可以做到仅仅将所有索引装载在内存中即可,实际的数据可以不用全部装载到内存中。
1.1组件介绍
1.1.1SQL节点
SQL层的SQL服务器节点(后面简称为SQL节点):
也就是我们常说的MySQLServer。
主要负责实现一个数据库在存储层之上的所有事情,比如连接管理,Query优化和响应,Cache管理等等,只有存储层的工作交给了NDB数据节点去处理了。
也就是说,在纯粹的MySQLCluster环境中的SQL节点,可以被认为是一个不需要提供任何存储引擎的MySQL服务器,因为他的存储引擎有Cluster环境中的NDB节点来担任。
所以,SQL层各MySQL服务器的启动与普通的MySQLServer启动也有一定的区别,必须要添加ndbcluster参数选项才行。
我们可以添加在f配置文件中,也可以通过启动命令行来指定。
1.1.2NDB数据节点
Storage层的NDB数据节点:
也就是上面说的NDBCluster。
最初的NDB是一个内存式存储引擎,当然也会将数据持久化到存储设备上。
但是最新的NDBCluster存储引擎已经改进了这一点,可以选择数据是全部加载到内存中还是仅仅加载索引数据。
NDB节点主要是实现底层数据存储功能,来保存Cluster的数据。
每一个Cluster节点保存完整数据的一个fragment,也就是一个数据分片(或者一份完整的数据,视节点数目和配置而定),所以只要配置得当,MySQLCluster在存储层不会出现单点的问题。
一般来说,NDB节点被组织成一个一个的NDBGroup,一个NDBGroup实际上就是一组存有完全相同的物理数据的NDB节点群。
上面提到了NDB各个节点对数据的组织,可能每个节点都存有全部的数据也可能只保存一部分数据,主要是受节点数目和参数来控制的。
首先在MySQLCluster主配置文件(在管理节点上面,一般为config.ini)中,有一个非常重要的参数叫NoOfReplicas,这个参数指定了每一份数据被冗余存储在不同节点上面的份数,该参数一般至少应该被设置成2,也只需要设置成2就可以了。
因为正常来说,两个互为冗余的节点同时出现故障的概率还是非常小的,当然如果机器和内存足够多的话,也可以继续增大来更进一步减小出现故障的概率。
此外,一个节点上面是保存所有的数据还是一部分数据还受到存储节点数目的限制。
NDB存储引擎首先保证NoOfReplicas参数配置的要求来使用存储节点,对数据进行冗余,然后再根据节点数目将数据分段来继续使用多余的NDB节点。
分段的数目为节点总数除以NoOfReplicas所得。
1.1.3Manager节点
负责管理各个节点的Manage节点主机;管理节点负责整个Cluster集群中各个节点的管理工作,包括集群的配置,启动关闭各节点,对各个节点进行常规维护,以及实施数据的备份恢复等。
管理节点会获取整个Cluster环境中各节点的状态和错误信息,并且将各Cluster集群中各个节点的信息反馈给整个集群中其他的所有节点。
由于管理节点上保存了整个Cluster环境的配置,同时担任了集群中各节点的基本沟通工作,所以他必须是最先被启动的节点。
1.2应用场景
2MySQLCluster搭建
2.1安装包下载
1、下载mysql-cluster-gpl-7.5.8.tar.gz
下载地址:
2、下载boost_1_65_1.tar.gz
下载地址:
http:
//www.boost.org/users/download/
2.2目录说明
/data/software/软件存放目录
/data/program/mysqlCluster/数据存放路径
2.3环境准备
搭建MySQLCluster首先需要至少一个管理节点主机来实现管理功能,一个SQL节点主机来实现MySQLserver功能和两个ndb节点主机实现NDBCluster的功能。
我在这里测试使用双SQL节点来搭建测试环境,具体信息如下:
2.3.1系统及网络准备
所有节点均使用CentOS7.0操作系统,采用Mini最简化安装。
系统镜像:
CentOS-7-x86_64-DVD-1503-01.iso
MySQL节点110.0.33.217sql01
MySQL节点210.0.33.219sql02
ndb节点110.0.33.130ndb01
ndb节点210.0.33.137ndb02
管理节点10.0.33.11mgr
2.3.2修改主机名称
#vim/etc/HOSTNAME
mgr
#vim/etc/hosts
127.0.0.1localhostlocalhost.localdomainlocalhost4localhost4.localdomain4
:
:
1localhostlocalhost.localdomainlocalhost6localhost6.localdomain6
10.0.33.11mgr
10.0.33.137ndb02
10.0.33.130ndb01
10.0.33.217sql01
10.0.33.219sql02
2.3.3关闭SElinux和防火墙
1、关闭系统防火墙
#systemctlstopfirewalld.service关闭防火墙
#systemctldisablefirewalld.service禁用防火墙
2、关闭SElinux
#sed-i's/SELINUX=.*/SELINUX=disabled/g'/etc/selinux/config
#setenforce0立即生效
2.3.4安装编译代码需要的包
#yum-yinstallmakegitgcc-c++bison-develncurses-develperlper-develncurses-develbisoncmake java-1.8.0-openjdk-develjava-1.8.0-openjdk
2.3.5mysql旧版本清除
首先使用如下命令来清理之前操作系统自带的mysql安装:
#yum-yremovemysql
然后使用如下命令:
#rpm-qa|grepmysql*
对于找到的剩余mysql包,请按照如下的命令格式予以删除:
#rpm-e--nodepsmysql-libs-5.1.61-4.el6.x86_64
#rpm-e--nodepsmysql-connector-odbc-5.1.5r1144-7.el6.x86_64
2.4创建数据存放目录
#mkdir-p/data/program/mysqlCluster/{bin,ndbdata,tmp}
2.5新建mysql用户及用户组
#groupaddmysql
#useradd-gmysql-s/usr/sbin/nologinmysql
#chown-Rmysql:
mysql/data/program/mysqlCluster
2.6解压缩安装包
#cd/data/software
#tarxzvfmysql-cluster-gpl-7.5.8.tar.gz
#tarxzvfboost_1_59_0.tar.gz
#cdmysql-cluster-gpl-7.5.8
2.7编译
将以下全部拷贝到窗口执行。
注意,特别强调,下面编译参数的"="之间不能有空格。
#cmake-DCMAKE_INSTALL_PREFIX=/data/program/mysqlCluster\
-DMYSQL_UNIX_ADDR=/data/program/mysqlCluster/tmp/mysql-cluster.sock\
-DMYSQL_DATADIR=/data/program/mysqlCluster/ndbdata\
-DDEFAULT_CHARSET=utf8\
-DDEFAULT_COLLATION=utf8_general_ci\
-DWITH_EXTRA_CHARSETS:
STRING=utf8,gbk\
-DEXTRA_CHARSETS=all\
-DWITH_EMBEDDED_SERVER=0\
-DWITH_MYISAM_STORAGE_ENGINE=1\
-DWITH_INNOBASE_STORAGE_ENGINE=1\
-DWITH_MEMORY_STORAGE_ENGINE=1\
-DWITH_BLACKHOLE_STORAGE_ENGINE=1\
-DWITH_FEDERATED_STORAGE_ENGINE=1\
-DWITH_PARTITION_STORAGE_ENGINE=1\
-DWITH_NDBCLUSTER_STORAGE_ENGINE=1\
-DMYSQL_TCP_PORT=3306\
-DENABLED_LOCAL_INFILE=1\
-DMYSQL_USER=mysql\
-DWITH_DEBUG=0\
-DWITH_NDB_JAVA=OFF\
-DDOWNLOAD_BOOST=1\
-DWITH_BOOST=/data/software\
-DENABLE_DOWNLOADS=1
若此步发生错误,干掉当前目录下的CMakeCache.txt,重新再执行一次。
[root@mgrmysql-cluster-gpl-7.5.8]#rm-rfCMakeCache.txt
安装成功!
#make&&makeinstall
过程会持续大概40分钟。
2.8配置环境变量
#vi/etc/profile
#在文件中添加以下内容
exportPATH=$PATH:
/data/program/mysqlCluster/bin
#source/etc/profile
2.9安装MyCluster
#cd/data/program/mysqlCluster/bin/
#mysqld--collation-server=utf8_general_ci--character-set-server=utf8--user=mysql--basedir=/data/program/mysqlCluster--datadir=/data/program/mysqlCluster/ndbdata--secure-file-priv=/data/program/mysqlCluster/test/--initialize
#将标红色的密码记下来,下面有用。
密码为:
g_kKsm6j=ggj
注意:
需要先确保datadir目标目录下是空的,避免误操作破坏已有数据。
如果想强制初始化,那么直接删除data目录就可以了。
至此,准备的虚拟机模板已搞定!
模板名称为:
(MySQLClustertemplate)。
下一步将通过此模板创建两个MySQL节点,两个NDB节点。
并将这些节点修改ip地址和主机名称。
2.10管理节点配置
2.10.1创建配置文件目录及文件
#mkdir/data/program/mysqlCluster/etc
#vi/data/program/mysqlCluster/etc/config.ini
#config.ini配置文件如下所示
[ndb_mgmddefault]
datadir=/data/program/mysqlCluster/ndbdata
[ndbddefault]
NoOfReplicas=2
DataMemory=200M
IndexMemory=20M
datadir=/data/program/mysqlCluster/ndbdata
[ndb_mgmd]
NodeId=1
HostName=10.0.33.11
datadir=/data/program/mysqlCluster/ndbdata
[ndbd]
NodeId=11
HostName=10.0.33.130
datadir=/data/program/mysqlCluster/ndbdata
[ndbd]
NodeId=12
HostName=10.0.33.137
datadir=/data/program/mysqlCluster/ndbdata
[mysqld]
NodeId=21
HostName=10.0.33.217
[mysqld]
NodeId=22
HostName=10.0.33.219
[mysqld]
[mysqld]
[mysqld]
2.10.2启动管理节点
首次加载/data/program/mysqlCluster/etc/config.ini文件有改变,其它时候不要加,除非是在备份、恢复或配置变化后重启时,其他时候不要加,不然数据就清空了。
正常启动方式:
#ndb_mgmd-f/data/program/mysqlCluster/etc/config.ini--initial
如果有改动要加上:
#rm-rf/data/program/mysqlCluster/mysql-cluster/ndb_1_config.bin.1
#ndb_mgmd-f/data/program/mysqlCluster/etc/config.ini
2.10.3查看集群状态
#ndb_mgm
--NDBCluster--ManagementClient--
ndb_mgm>show
ConnectedtoManagementServerat:
localhost:
1186
ClusterConfiguration
---------------------
[ndbd(NDB)]2node(s)
id=11(notconnected,acceptingconnectfrom10.0.33.130)
id=12(notconnected,acceptingconnectfrom10.0.33.137)
[ndb_mgmd(MGM)]1node(s)
id=1@10.0.33.11(mysql-5.7.20ndb-7.5.8)
[mysqld(API)]5node(s)
id=21(notconnected,acceptingconnectfrom10.0.33.217)
id=22(notconnected,acceptingconnectfrom10.0.33.219)
id=23(notconnected,acceptingconnectfromanyhost)
id=24(notconnected,acceptingconnectfromanyhost)
id=25(notconnected,acceptingconnectfromanyhost)
关闭管理节点:
ndb_mgm>shutdown
2.11NDB节点配置
2.11.1编辑f
编辑/etc/f,在最后添加如下。
#vif
ndbcluster
ndb-connectstring=10.0.33.11
[mysql_cluster]
ndb-connectstring=10.0.33.11
2.11.2启动数据节点
只是在第一次启动或在备份/恢复或配置变化后重启ndbd时,才加–initial参数!
#ndbd–initial
2017-11-0222:
58:
00[ndbd]INFO--Angelconnectedto'10.0.33.11:
1186'
2017-11-0222:
58:
00[ndbd]INFO--Angelallocatednodeid:
11
正常启动方式:
#ndbd
2.11.3查看ndbd启动状态
#ps-ef|grepndbd
root32091007:
35?
00:
00:
00ndbd--initial
root321032091307:
35?
00:
00:
02ndbd--initial
root32532936007:
36pts/000:
00:
00grep--color=autondbd
2.12MySQL节点配置
2.12.1设置mysqld的开机启动:
#cd/data/software/mysql-cluster-gpl-7.5.2/support-files
#cpmysql.server/etc/init.d/mysql
#chmod755/etc/init.d/mysql
#chkconfigmysqlon
2.12.2编辑f
编辑/etc/f,添加如下内容:
[mysqld]
basedir=/data/program/mysqlCluster
datadir=/data/program/mysqlCluster/ndbdata
socket=/data/program/mysqlCluster/tmp/mysql-cluster.sock
ndbcluster
ndb-connectstring=10.0.33.11
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[client]
default-character-set=utf8
[mysqld]
character_set_server=utf8
[mysql_cluster]
ndb-connectstring=10.0.33.11
2.12.3启动mysql
#servicemysqlstart#启动
StartingMySQL....................................SUCCESS!
#servicemysqlstop#停止
#servicemysqlrestart#重启
2.12.4重置root帐户的密码
将所有MySQL节点重新设置账户密码,将前面步骤“安装Mycluster”随机生成的密码输入。
#mysql-uroot-p
mysql>SETPASSWORD=PASSWORD('123456');
将外部访问root的密码设置为123456
mysql>GRANTALLPRIVILEGESON*.*TO'root'@'%'IDENTIFIEDBY'123456'WITHGRANTOPTION;
2.12.5集群状态查看
节点全部启动成功后,在管理节点使用ndb_mgm工具的show命令查看集群状态:
ndb_mgm工具是ndb_mgmd(MySQLClusterServer)的客户端管理工具,通过该工具可以方便的检查Cluster的状态,启动备份,关闭等功能。
更详细的方法可以通过ndb_mgm--help命令来进行查看。
从上面显示的状态可以看出如下信息。
(1)集群目前的管理服务器端口是1186。
ConnectedtoManagementServerat:
localhost:
1186
(2)集群的数据节点(NDB)有2个。
(3)集群的管理节点有一个。
(4)SQL节点有5个,目前处于连接状态的有2个。
到这里MySQLCluster就已经搭建完成了。
3高可用测试
成功启动后,下面来测试一下Cluster的功能。
如果要使用cluster,则表的引擎必须为NDB,其他类型存储引擎的数据不会保存到数据节点中。
对于cluster的一个重要功能就是防止单点故障。
我们下面对这些问题分别来进行测试。
3.1NDB存储引擎测试
(1)在任意一个SQL节点(我这里选择10.0.33.219)的test库中创建测试表t1,设置存储引擎为NDB,并插入两条测试数据:
mysql>createtablet1(
->idint,
->namevarchar(20)
->)
->engine=ndb
->;
QueryOK,0rowsaffected(0.44sec)
mysql>insertintot1select1,'yayun';
QueryOK,1rowaffected(0.11sec)
Records:
1Duplicates:
0Warnings:
0
mysql>insertintot1select1,'atlas';
QueryOK,1rowaffected(0.03sec)
Records:
1Duplicates:
0Warnings:
0
(2)在另外一SQL节点(10.0.33.217)查询test库中t1表,结果如下:
mysql>select*fromtest.t1;
+------+------个-+
|id|name|
+------+-------+
|1|atlas|
|1|yayun|
+------+-------+
2rowsinset(0.08sec)
显然,两个SQL节点查询的数据时一致的。
(3)在SQL节点10.0.33.219上把测试表t1引擎改为MyISAM,再次插入测试数据:
mysql>altertablet1engine=myisam;
QueryOK,2rowsaffected(0.50sec)
Records:
2Duplicates:
0Warnings:
0
mysql>insertintot1select2,'goodboy';
QueryOK,1rowaffected(0.00sec)
Records:
1Duplicates:
0Warnings:
0
(4)在SQL节点10.0.33.217上再次查询表t1,结果如下:
mysql>select*fromt1;
ERROR1146(42S02):
Table'test.t1'doesn'texist
mysql>showtables;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Mysql Cluster学习笔记1123 Cluster 学习 笔记 1123