mysql-cluster集群官方文档介绍:
一安装要求
安装环境:CentOS-6.8
安装方式:源码编译安装
软件名称:mysql-cluster-gpl-7.4.13-linux-glibc2.5-x86_64.tar.gz
下载地址:http://mysql.mirror.kangaroot.net/Downloads/
软件安装位置:/usr/local/mysql
数据存放位置:/usr/local/mysql/data
二集群设计
2.1集群设计
首先设计集群的安装分配方式,我共需要5台服务器,服务器分配如下:
管理节点:192.168.1.231
sql节点1:192.168.1.232
sql节点2:192.168.1.233
数据节点1:192.168.1.234
数据节点2:192.168.1.235
2.2检查安装的mysql
检查系统中已经安装过的mysql信息,操作如下:
[root@my-mgm ~]# rpm -qa | grep mysql
[root@my-mgm ~]# service mysql status
如果安装过其他版本的mysql,请卸载,操作如下:
[root@my-mgm ~]# /etc/init.d/mysqld stop //关闭目前的mysql服务[root@my-mgm ~]# ps -ef | grep mysql* //检验mysql是否已经关闭#如果没关闭,执行kill
-9端口号#执行删除rpm -e --allmatches --nodeps mysql mysql-server mysql-libs
rm -rf /var/lib/mysql //删除mysql的安装目录
三安装mysql-cluster
集群中的每台服务器都要安装
3.1安装软件
[root@my-mgm ~]# groupadd mysql
[root@my-mgm ~]# useradd mysql -g mysql -s /sbin/nologin -M
[root@my-mgm ~]# chown -R mysql.mysql /var/mysql
[root@my-mgm local]# cd /usr/local
[root@my-mgm local]# tar -zxvf
mysql-cluster-gpl-7.4.14-linux-glibc2.5-x86_64.tar.gz
[root@my-mgm local]# mv mysql-cluster-gpl-7.4.14-linux-glibc2.5-x86_64 mysql
[root@my-mgm local]# chown -R mysql.mysql mysql
[root@my-mgm mysql]# scripts/mysql_install_db --user=mysql
--basedir=/usr/local/mysql
[root@my-mgm mysql]# chown -R mysql.mysql . #非常重要
[root@my-mgm mysql]# cp support-files/my-default.cnf /etc/my.cnf
3.2将mysqld服务加入开机自启动项
[root@my-mgm mysql]# cp support-files/mysql.server /etc/init.d/mysqld
会提示是否覆盖,输入yes
这样就可以用service mysqld {start | restart | stop}
[root@my-mgm ~]# chkconfig --add mysqld注意:sql节点不需要做这一步,因为mysql集群启动是有顺序的,sql节点要最后启动
验证是否成功
[root@my-mgm ~]# chkconfig --list mysqld
3.3配置环境变量
为了避免每次都输入mysql的全路径,可将其加入环境变量中
vim /etc/profile向其加入
#mysql_cluster path
MYSQL_HOME=/usr/local/mysql
export PATH=$PATH:$MYSQL_HOME/bin
然后执行source /etc/profile使其升效
四管理节点
安装管理节点(192.168.1.231)
4.1管理节点配置
[root@my-mgm ~]# mkdir /var/lib/mysql-cluster
[root@my-mgm ~]# cd /var/lib/mysql-cluster
[root@my-mgm mysql-cluster]# vim /var/lib/mysql-cluster/config.ini
在config.ini中添加以下内容
[ndbd default]
NoOfReplicas=2 #定义在Cluster环境中相同数据的份数,最大为4
DataMemory=200M #每个数据节点中给数据分配的内存
IndexMemory=20M #每个数据节点中给索引分配的内存
MaxNoOfAttributes=20480
#该参数用于设置簇中触发程序对象的最大数目。该参数的默认值为768,不修改建表时可能会报708错误
[ndb_mgmd]
NodeId=1 #设置管理节点服务器
HostName=192.168.1.231
DataDir=/var/lib/mysql-cluster
[ndbd]
NodeId=2 #设置存储节点服务器(NDB节点)
HostName=192.168.1.232
DataDir=/usr/local/mysql/data
[ndbd]
NodeId=3
HostName=192.168.1.233
DataDir=/usr/local/mysql/data
[mysqld]
NodeId=4 #设置SQL节点服务器
HostName=192.168.1.234
[mysqld]
NodeId=5
HostName=192.168.1.235
[mysqld]
#为空代表任意sql节点连接集群
4.3管理节点启动
启动(必须用参数“-f“告诉ndb_mgm配置文件所在位置,默认是在ndb_mgmd相同目录下)
[root@my-mgm ~]# /usr/local/mysql/bin/ndb_mgmd -f
/var/lib/mysql-cluster/config.ini--initial
(#--initial:第一次启动时加上。其它时候不要加,不然会数据清空,除非是在备份、恢复或配置变化后重启时需要加上)
[root@my-mgm ~]#ndb_mgmd -f /var/lib/mysql-cluster/config.ini
iMySQL Cluster Management Server mysql-5.6.35 ndb-7.4.14
[root@my-mgm ~]# netstat -lntpu或者ps -aux | grep ndb_mgmd
看到tcp 0 0 0.0.0.0:1186开放说明启动正常
开启管理节点服务器的1186端口
4.4管理节点检验
执行以下操作
[root@my-mgm ~]#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 192.168.1.234)
id=3 (not connected, accepting connect from 192.168.1.235)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.1.231 (mysql-5.6.35 ndb-7.4.14)
[mysqld(API)] 2 node(s)
id=4 (not connected, accepting connect from 192.168.1.232)
id=5 (not connected, accepting connect from 192.168.1.233)
ndb_mgm>exit
4.5管理节点关闭
[root@my-mgm ~]# ndb_mgm -e shutdown
Connected to Management Server at: localhost:1186
1 NDB Cluster node(s) have shutdown.
Disconnecting to allow management server to shutdown.
4.6管理节点开机自动启动
vim /etc/rc.d/rc.local
加入/usr/local/mysql/bin/ndb_mgmd -f
/var/lib/mysql-cluster/config.ini
五数据节点
数据节点1:192.168.1.234
数据节点2:192.168.1.235
5.1数据节点配置
对数据节点进行配置,执行以下操作:
[root@my-db1 ~]# vim /etc/my.cnf
清空my.cn文件加入以下内容:
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
ndbcluster #使用ndb集群引擎
character_set_server=utf8
ndb-connectstring=192.168.1.231 #指定管理集群的ip地址,多个以,分隔
[mysql_cluster]
ndb-connectstring=192.168.1.231 #指定管理集群的ip地址,多个以,分隔
[ndb_mgm]
connect-string=192.168.1.231
针对数据节点2的安装重复5.1的操作
5.2数据节点启动
启动此处时,管理节点服务器防火墙必须开启1186、3306端口
注意:只是在第一次启动或在备份/恢复或配置变化重启ndbd时,才加--initial参数!
第一次启动如下:
[root@my-db1 ~]# ndbd --initial
2017-02-09 11:13:22 [ndbd] INFO -- Angel connected to '192.168.1.231:1186'
2017-02-09 11:13:22 [ndbd] INFO -- Angel allocated nodeid: 2
正常启动方式:
[root@my-db1 ~]# ndbd
5.3数据节点关闭
[root@my-db1 ~]# ps -ef | grep ndbd
[root@my-db1 ~]# kill -9 pid
5.4数据节点加入开机自启动
vim /etc/rc.d/rc.local
加入/usr/local/mysql/bin/ndbd
六SQL节点设置
sql节点1:192.168.1.232
sql节点2:192.168.1.233
6.1 sql节点配置
对sql节点进行配置,执行以下操作:
[root@my-sql1 ~]# vim /etc/my.cnf
清空my.cn文件加入以下内容:
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
ndbcluster #使用ndb集群引擎
character_set_server=utf8
ndb-connectstring=192.168.1.231 #指定管理集群的ip地址,多个以,分隔
[mysql_cluster]
ndb-connectstring=192.168.1.231 #指定管理集群的ip地址,多个以,分隔
[ndb_mgm]
connect-string=192.168.1.231
针对sql节点2的安装重复6.1的操作
6.2 sql节点启动与关闭
service mysqld start|stop|restart|status
/etc/init.d/mysqld start|stop|restart|status
/etc/rc.d/init.d/mysqld start|stop|restart|status
mysqld_safe --user=mysql &
七集群常用配置
7.1集群开启与关闭顺序
开启:管理节点->数据节点->SQL节点
关闭:SQL节点->数据节点->管理节点
7.2集群状态查看
ndb_mgm -e show
7.3测试集群
因为分布式集群,所以在mysql中创建的表存储引擎必须修改为:NDBCLUSTER,否则数据不会同步到其他节点服务器上。
创建数据库:create database mytest
创建表:create table
test1(name varchar(10)) engine=ndbcluster;
这里必须指定数据库表的引擎为ndbcluster,与配置文件中名称相同
插入数据:insert into test1() values('张三');commit;
更改表的ENGINE为集群模式
ALTER TABLE TABLENAME ENGINE=NDBCLUSTER
查看表的引擎是不是NDB
show create table tablename
7.4 jdbc连接
单点配置:jdbc:mysql://192.168.1.232:3306/database
集群方式:jdbc:mysql:loadbalance://192.168.1.232:3306,192.168.1.233:3306/database?roundRobinLoadBalance=true
7.5创建数据库和用户
#mysql –u root –p
Mysql>create database goblog;
Mysql>grant all privileges on goblog.* to 'bloger'@'10.120.%'
identified by 'bloger';
Mysql>flush privileges;
Mysql>quit;
7.6共享权限的实现
#share privilege在每个sql节点执行下面语句
mysql -S /tmp/mysql.sock < /usr/local/mysql/share/ndb_dist_priv.sql
#one of cluster API在其中一sql节点执行下面语句
CALL mysql.mysql_cluster_move_privileges();
FLUSH PRIVILEGES;
#init root password初始化密码
mysqladmin -S /tmp/mysql.sock -u root password root
#one of cluster API删除空密码用户
delete from user where LENGTH(password)<10;
#create user设置用户远程登陆
GRANT ALL PRIVILEGES ON *.* TO 'root'@'10.120.%' IDENTIFIED BY 'root';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.%' IDENTIFIED BY 'root';