Linux下 MySQL-cluster集群搭建

 

一:基本概念

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

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

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

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

 

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

 

二:mysql-cluste安装包下载


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

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

直接下载地址: https://cdn.mysql.com//Downloads/MySQL-Cluster-7.4/mysql-cluster-gpl-7.4.15-linux-glibc2.5-x86_64.tar.gz

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

 

三:集群配置概述

安装版本:mysqlcluster 7.4.15

操作系统 :centos6.4(X64)

软件名称 :mysql-cluster-gpl-7.4.15-linux-glibc2.5-x86_64.tar.gz

本次采用三台机器:

管理节点IP

192.168.95.133

数据节点-SQL节点IP

192.168.95.117

数据节点-SQL节点IP

192.168.95.118

 

 

四:安装

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

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

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

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

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

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

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

groupadd mysql

useradd mysql -gmysql

 

tar xvf mysql-cluster-gpl-7.4.15-linux-glibc2.5-x86_64.tar.gz

mv mysql-cluster-gpl-7.4.15-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 /usr/local/mysql

 

 

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

1.    复制配置文件

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

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

[root@localhost mysql]  cpsupport-files/mysql.server /etc/init.d/mysqld

如果提示是否覆盖,输入yes

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

3.    mysql客户端启动:为了避免每次都输入mysql的全路径/usr/local/mysql/bin/mysql,可将其加入环境变量中,

vi /etc/profile最后加入两行命令:

MYSQL_HOME=/usr/local/mysql

exportPATH=$PATH:$MYSQL_HOME/bin

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

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

 

五:管理节点配置

在管理节点95.133上面操作

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.95.133
DataDir=/usr/local/mysql/data
[NDBD]
NodeId=2
#设置存储节点服务器(NDB节点)
HostName=192.168.95.117
DataDir=/usr/local/mysql/data
[NDBD]
NodeId=3
#第二个NDB节点
HostName=192.168.95.118
DataDir=/usr/local/mysql/data
[MYSQLD]
NodeId=4
HostName=192.168.95.117
[MYSQLD]
NodeId=5
HostName=192.168.95.118

 

 

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

cd  /usr/local/mysql/bin

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

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

通过ps -aux |grepndb_mgmd查看是否启动成功:

 

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

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

在数据和SQL节点95.11795.118上面操作

vi /etc/my.cnf

增加如下内容:

 

[mysqld]

ndbcluster  #使用ndb集群引擎

ndb-connectstring=192.168.95.133#指定管理集群的ip地址,多个以,分隔

default-storage-engine=ndbcluster  #设置默认引擎

#user=mysql

#log-error=/usr/local/mysql/mysqld.err

 

#指定管理集群的ip地址,多个以,分隔

[mysql_cluster]

ndb-connectstring=192.168.95.133

 

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

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

 

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

cd/usr/local/mysql/bin
./ndbd

启动后的效果:

 

 

查看是否启动成功:

netstat -lntpu或者ps -aux |grep ndbd

 

 

启动sql节点:

service mysqldstart

 

启动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 iptablesstop;

关闭 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 mysqldrestart

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

 

八:测试集群

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

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

 在95.117或者95.118服务器中查看默认储存引擎:

 

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

开始测试:

在95.117主机上进入mysql

cd /usr/local/mysql/bin/

./mysql

use test

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

 

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

 

 show tables

 

 

 

在95.118主机上进入mysql,查询数据库:

 

use test

show tables

可以看到数据库、表、数据都会同步的。

注:ENGINE = NDBCLUSTER DEFAULT CHARSET utf8mb4; 意思是用NDBCLUSTER 作为储存引擎,如果默认储存引擎就是ndbcluster 可以不加这条

 

九:更改表的ENGINE

ALTER TABLE tablename ENGINE=NDBCLUSTER

 示例:

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

 

十:jdbc连接

 


原先配置:jdbc:mysql://192.168.95.117:3306/palm_2_0_16
集群后配置:jdbc:mysql:loadbalance://192.168.95.117:3306,192.168.95.118:3306/palm_2_0_16?roundRobinLoadBalance=true

 

 

 

十一:MySQL集群启停操作,重启操作

提示:本次的管理节点为95.133,数据节点:95.117、95.118,SQL节点:95.117、95.118

1.  启动顺序:

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

 

1.     管理节点执行:

cd /usr/local/mysql/bin

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

通过ps -aux |grepndb_mgmd查看是否启动成功

 

2.     数据节点执行:

cd /usr/local/mysql/bin

./ndbd

通过ps -aux |grep ndbd查看是否启动成功

3.    SQL节点执行:

servicemysqld start

最后在管理节点中执行./ndb_mgm -e show查看mysql集群状态

 

2.  关闭顺序:

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

 

1.  SQL节点主机执行:service mysqld stop

 

2.  数据节点主机执行:ps -aux |grep ndbd

杀掉所有查询到的进程id:kill – 9 pid

 

3.  管理节点主机执行:ps –ef|grep mysql

杀掉所有查询到的进程id:kill –9 pid

 

最后在每台主机上面ps -ef |grep mysql检查下是否还有mysql进程运行

 

3.  重启顺序:

重启操作:先执行MySQL集群的关闭顺序,后执行启动顺序即可。

 

附1:MySQL数据库优化

MySQL的配置文件my.cnf中[mysqld]下增加如下优化参数:

lower_case_table_names=1

character_set_server=utf8

init_connect='SET NAMESutf8'

tmp_table_size=256M

max_heap_table_size=256M

log-error=mysqldcmc.log

event-scheduler=on

wait_timeout=3600

interactive-timeout=3600

max_connections = 800

max_user_connections = 500

thread_cache_size = 64

expire_logs_days=99

open_files_limit=20000

max_allowed_packet= 32M

sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

 

附2:错误总结

1.  初始化时候报错[ERROR] InnoDB:auto-extending data file ./ibdata1 is of a different size 640 pages (roundeddown to MB) than specified in the .cnf file: initial 768 pages, max 0 (relevantif non-zero) pages!

 

解决方法:

 

 执行删除命令:rm -rf /var/lib/mysql/ib*

 

删除:ibdata1、ib_logfile0、ib_logfile1文件

 

2.  启动mysql服务出错Starting MySQL...The server quit without updating PID file [失败]local/mysql/data/sgm3.pid).

解决方法:

在报错的目录下创建文件sgm3.pid

还出错就尝试关闭selinux后再试

 

3.  查看集群状态./ndb_mgm -e show  提示 not connected

[mysqld(API)] 2 node(s)

id=4 (not connected, accepting connect from192.168.95.117)

id=5 (not connected, accepting connect from192.168.95.118)

 

解决方法:

 

到usr local mysql目录下cp support-files/mysql.server /etc/init.d/mysqld

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

 

然后再执行 service mysqld restart

或者直接在support-files目录下./mysql.server restart

或者直接执行 /usr/local/mysql/support-files/mysql.server start 启动mysqld

4.  启动数据节点NDB报错

Unable to connect with connect string: nodeid=0,localhost:1186

Retrying every 5 seconds. Attemptsleft: 12

 

 

问题是连接不到管理节点

 

 

修改my.cnf配置文件,文中已经说过,这里在说一下:

增加如下内容:

 

[mysqld]

ndbcluster  #使用ndb集群引擎

ndb-connectstring=192.168.95.133#指定管理集群的ip地址,多个以,分隔

default-storage-engine=ndbcluster  #设置默认引擎

#user=mysql

#log-error=/usr/local/mysql/mysqld.err

 

#指定管理集群的ip地址,多个以,分隔

[mysql_cluster]

ndb-connectstring=192.168.95.133

 

如果修改后问题依旧,可能机器中有多个MySQL运行,共用了同一个my.cnf配置文件

拷贝一个my.cnf文件到 /usr/local/mysql/下

授权:chmod 644 my.cnf

 

修改文件:

 

启动ndb命令改为:

./ndbd --defaults-file=../my.cnf

 

指定配置文件启动后问题解决!


你可能感兴趣的:(linux系统相关)