1 MySQL集群简介

1.1 什么是MySQL集群

MySQL集群是一个无共享的(shared-nothing)、分布式节点架构的存储方案,其目的是提供容错性和高性能。

数据更新使用读已提交隔离级别(read-committedisolation)来保证所有节点数据的一致性,使用两阶段提交机制(two-phasedcommit)保证所有节点都有相同的数据(如果任何一个写操作失败,则更新失败)。

无共享的对等节点使得某台服务器上的更新操作在其他服务器上立即可见。传播更新使用一种复杂的通信机制,这一机制专用来提供跨网络的高吞吐量。

通过多个MySQL服务器分配负载,从而最大程序地达到高性能,通过在不同位置存储数据保证高可用性和冗余。

了解更多:

http://www.mysql.com/why-mysql/white-papers/guide-to-optimizing-performance-of-the-mysql-cluster/

1.2 集群 MySQL中名称概念

1)Sql 结点(SQL node—下图对应为 mysqld):分布式数据库。包括自身数据和查询中心结点数据

2)数据结点(Data node – ndbd):集群共享数据(内存中)

3)管理服务器(Management Server – ndb_mgmd):集群管理 SQL node,Data node

详情见下图:

image

1.3 环境配置

1)至少2台Linux服务器,后面的例子是3台Linux服务器

图片
如果只有2台的话,那么其中一台机器就要多一个角色:Management Server

2)MySQL集群版本安装程序,分32位和64位版本,最新版本请在http://www.mysql.com/downloads/里面下载

2 安装

不管是Management Server,还是Data node、SQL node,都需要先安装MySQL集群版本,然后根据不用的配置来决定当前服务器有哪几个角色。

安装之前准备好mysql用户和mysql用户组,相关命令:

groupadd mysql

useradd mysql -g mysql

确定相关机器的防火墙已关闭(或者设置防火墙这几台机器之间的网络连接是畅通无阻的),相关命令:

chkconfig iptables off

service iptables stop

2.1 安装MySQL集群版本

1)把mysql-cluster-advanced-7.3.2-linux-glibc2.5-i686.tar.gz(这是32位安装版,64位安装版:mysql-cluster-advanced-7.3.2-linux-glibc2.5-x86_64.tar.gz)上传到/usr/local

2)解压:tar zxvf mysql-cluster-advanced-7.3.2-linux-glibc2.5-i686.tar.gz

3)重命名:mv mysql-cluster-advanced-7.3.2-linux-glibc2.5-i686 mysql

4)授权:chown -R mysql:mysql mysql

5)切换到mysql用户:su – mysql

6)切换目录到mysql:/usr/local/mysql

7)安装mysql:scripts/mysql_install_db --user=mysql

2.2 配置Management Server

1)使用root账号创建目录:mkdir /var/lib/mysql-cluster

2)新建文件config.ini然后上传到mysql-cluster里面:
image-1673321248929
3)授权:chown -R mysql:mysql /var/lib/mysql-cluster

4)切换到mysql用户:su – mysql

5)启动管理服务:/usr/local/mysql/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini

6)查看服务是否正常启动:netstat –lntpu

打印:

tcp 0 0 0.0.0.0:1186 0.0.0.0:* LISTEN 2437/ndb_mgmd

看到1186端口开放了说明启动是正常的

2.3 配置Data Node

1)新建文件my.cnf然后上传到/etc里面:
image-1673321268347
(*网上有些资料是直接改/usr/local/mysql/my.cnf,我试了一下,无法启动,估计程序默认是读取/etc/my.cnf)

2)切换到mysql用户:su – mysql

3)启动数据节点服务:/usr/local/mysql/bin/ndbd –initial

第一次启动需要加参数:–initial,以后就不用加了,直接运行:/usr/local/mysql/bin/ndbd

4)查看服务是否正常启动:netstat –lntpu

打印:
image-1673321285912
看到ndbd了说明启动是正常的

2.4 配置SQL Node

1)新建文件my.cnf然后上传到/etc里面,和上面的Data Node里面的配置一样,如果上面的步骤已经做了,略去此步骤。

2)切换到mysql用户:su – mysql

3)设置管理员密码:

/usr/local/mysql/bin/mysqladmin -u root password ‘123’

/usr/local/mysql/bin/mysqladmin -u root -h LINUX129 password ‘123’

上面的命令行里面的123是新密码,LINUX129是机器名,这2条命令来自于安装mysql执行:scripts/mysql_install_db --user=mysql 后的打印日志

4)复制mysqld到系统服务里面去:

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

如果权限不够,可以先使用root用户授权:

chown -R mysql:mysql /etc/init.d/mysqld

5)启动SQL节点服务:service mysqld start

或者/etc/init.d/mysqld start

或者/usr/local/mysql/bin/mysqld_safe --user=mysql &

6)查看服务是否正常启动:netstat –lntpu

打印:

tcp 0 0 :::3306 :::* LISTEN 2590/mysqld

看到3306端口开放了说明启动是正常的

3 常用命令或问题

1)ndb_mgmd管理命令:/usr/local/mysql/bin/ndb_mgm

执行之后就是管理控制台了,里面可以继续输入命令。

查看集群里面的全部节点的状态:show

2)停止集群服务器的命令:/usr/local/mysql/bin/ndb_mgm -e shutdown

如果集群配置有更新了:rm /usr/local/mysql/mysql-cluster/ndb_1_config.bin.1

3)停止SQL节点的命令:/usr/local/mysql/bin/mysqladmin -uroot shutdown

4)SQL Node上连接MySQL:/usr/local/mysql/bin/mysql -u root –p

执行之后就是MySQL控制台了,里面可以继续输入命令。
image-1673321307686
同样方式在另外一台SQL Node上连接MySQL,查看数据库、表、记录是否已同步过去。

5)解决MySQL客户端工具连接SQL Node出现1130的异常,在MySQL控制台下执行:

  • 如果你想myuser使用mypassword从任何主机连接到mysql服务器的话。

GRANT ALL PRIVILEGES ON . TO ‘myuser’@‘%’ IDENTIFIED BY ‘mypassword’ WITH GRANT OPTION;

FLUSH PRIVILEGES;

  • 如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器,并使用mypassword作为密码

GRANT ALL PRIVILEGES ON . TO ‘myuser’@‘192.168.1.3’ IDENTIFIED BY ‘mypassword’ WITH GRANT OPTION;

FLUSH PRIVILEGES;

  • 如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器的dk数据库,并使用mypassword作为密码

GRANT ALL PRIVILEGES ON dk.* TO ‘myuser’@‘192.168.1.3’ IDENTIFIED BY ‘mypassword’ WITH GRANT OPTION;

FLUSH PRIVILEGES;

6)使用MySQL客户端工具创建表时选择引擎:NDBCLUSTER,如下图:
image-1673321327306