Mysql-Cluster 集群部署

本文详细介绍如何在CentOS 7环境下部署MySQL Cluster集群,包括管理节点、数据节点和SQL节点的具体配置步骤,以及集群测试和常见异常排查方法。

1.环境介绍(centos7,mysql-cluster-gpl-7.6.6)

名称ip端口
管理节点192.168.198.2351186
数据节点192.168.198.1862202
SQL节点192.168.198.241、192.168.198.1713306

【1.管理节点】

管理节点主要是用来对其他的节点进行管理。通常通过配置config.ini文件来配置集群中有多少需要维护的副本、配置每个数据节点上为数据和索引分配多少内存、IP地址、以及在每个数据节点上保存数据的磁盘路径;

管理节点通常管理Cluster配置文件和Cluster日志。Cluster中的每个节点从管理服务器检索配置信息,并请求确定管理服务器所在位置的方式。如果节点内出现新的事件的时候,节点将这类事件的信息传输到管理服务器,将这类信息写入到Cluster日志中;

一般在MySQL Cluster体系中至少需要一个管理节点,另外值得注意的是,因为数据节点和SQL节点在启动之前需要读取Cluster的配置信息,所以通常管理节点是最先启动的;

【2.数据节点】

数据节点用来存放Cluster里面的数据,MySQL Cluster在各个数据节点之间复制数据,任何一个节点发生了故障,始终会有另外的数据节点存储数据;

【3.SQL节点】

SQL节点简单地讲就是mysqld服务器,应用不能直接访问数据节点,只能通过SQL节点访问数据节点来返回数据。任何一个SQL节点都是连接到所有的存储节点的,所以当人任何一个存储节点发生故障的时候,SQL节点都可以把请求转移到另一个存储节点执行。通常来讲,SQL节点越多越好,SQL节点越多,分配到每个SQL节点的负载就越小,系统的整体性能就越好;

2.安装准备

卸载以前安装的Mysql 或者 mariadb

yum -y remove mysql*
yum -y remove mariadb*
#查看是否还有mysql命令
rpm -qa |grep mysql
#查看是否还有mysql目录
find / -name mysql
#检查是否还有mysql环境变量
cat /etc/profile

开启对应端口

firewall-cmd --add-port=1186/tcp --zone=public --permanent
firewall-cmd --add-port=2202/tcp --zone=public --permanent
firewall-cmd --add-port=3306/tcp --zone=public --permanent
systemctl restart firewalld.service

不管是Management Server,还是Data node、SQL node,都需要先安装MySQL集群版本。
安装之前准备好mysql用户和mysql用户组,相关命令:

userdel -r mysql
groupadd mysql
useradd -g mysql mysql

3.集群安装

注:所有服务器上都需要执行以下操作来安装MySQL集群版本。

tar -xzvf mysql-cluster-gpl-7.6.6-linux-glibc2.12-x86_64.tar.gz

mkdir /usr/local/mysql
mkdir /usr/local/mysql/data
chown -R mysql:mysql /usr/local/mysql

点击进入官网下载所需版本
在这里插入图片描述

配置文档

a.管理节点

管理节点需要删除/etc/my.cnf文件,因为ndb_mgmd启动的时候,也会加上/etc/my.cnf的配置内容,否则会有影响

rm -fr etc/my.cnf
mkdir /usr/local/mysql/mysql-cluster
vi /usr/local/mysql/mysql-cluster/config.ini

[ndbd default]:表示每个数据节点的默认配置,在每个节点的[ndbd ]中不用再写这些选项。

NoOfReplicas:副本数量,数据节点数必须是副本数的整数倍。

[ndb_mgmd]:表示管理节点的配置,只有一个,默认的对其他节点的端口是1186,故服务器需要开放1186端口。

[ndbd]:表示每个数据节点的配置,可以有多个,分别写上不同数据节点的IP地址。

[mysqld]:表示SQL节点的配置,可以有多个,分别写上不同SQL节点的IP地址。

编辑配置文件

#默认配置
[ndbd default]
NoOfReplicas=1 #数据节点数量
ServerPort=2202 #虽然默认端口是2202但是不再次声明可能实际的启动端口并非这个,导致连接失败

#管理节点
[ndb_mgmd]
nodeid=1
HostName=192.168.198.235
DataDir=/usr/local/mysql/mysql-cluster

#数据节点
[ndbd]
nodeid=2
HostName=192.168.198.186
DataDir=/usr/local/mysql/data

#sql节点
[mysqld]
nodeid=3
HostName=192.168.198.241

#必须有空的mysqld节点,不然数据节点断开后启动有报错
[mysqld]
nodeid=4

[mysqld]
nodeid=5

b.数据节点、SQL节点

他们的配置一样,编辑配置文件 vi /etc/my.cnf

[mysqld]
ndbcluster

[mysql_cluster]
# 多个管理节点用,隔开
ndb-connectstring=192.168.198.235

3.1管理节点

管理节点会用到 ndb_mgm和ndb_mgmd,其他可以删除

ndb_mgm,ndb客户端命令
ndb_mgmd,ndb管理节点启动命令
ndb_mgm是ndb_mgmd(MySQL Cluster Server)的客户端管理工具,通过它可以方便的检查Cluster的状态、启动备份、关闭Cluster等功能。

创建相应存放目录

mkdir /usr/local/mysql/bin
cp mysql-cluster-gpl-7.6.6-linux-glibc2.12-x86_64/bin/ndb_mgm* /usr/local/mysql/bin
cd /usr/local/mysql/bin
chmod +x ndb_mgm*

默认创建 /usr/local/mysql/mysql-cluster目录,有时候需要清理掉/usr/local/mysql/mysql-cluster
首次启动要–-initial 在以后的启动过程中不能添加。如果在启动后又添加了一个数据节点,这时修改了配置文件启动时就必须加上–initial参数,不然添加的节点不会作用在mysql-cluster中。

/usr/local/mysql/bin/ndb_mgmd -f /usr/local/mysql/mysql-cluster/config.ini --initial

关闭集群

/usr/local/mysql/bin/ndb_mgm -e shutdown

通过 lsof -i:1186netstat -ntlp | grep ndb_mgmd查看是否成功启动

查看管理节点

/usr/local/mysql/bin/ndb_mgm -e show

3.2数据节点

创建相应存放目录

mkdir /usr/local/mysql/bin
cp mysql-cluster-gpl-7.6.6-linux-glibc2.12-x86_64/bin/ndb_mgm* /usr/local/mysql/bin
cp mysql-cluster-gpl-7.6.6-linux-glibc2.12-x86_64/bin/ndbmtd /usr/local/mysql/bin
cp mysql-cluster-gpl-7.6.6-linux-glibc2.12-x86_64/bin/ndbd /usr/local/mysql/bin
cd /usr/local/mysql/bin
chmod +x ndb_mgm*

(首次启动要 –-initial) 进行NDB节点的初始化工作。在以后的启动过程中,不能添加该参数的,否则ndbd程序会清除在之前建立的所有用于恢复的数据文件和日志文件

/usr/local/mysql/bin/ndbd –-initial

显示已成功连接到管理节点,被分配节点id为2

在这里插入图片描述
通过 netstat -ntlp | grep ndbd查看是否成功启动

3.3SQL节点

创建相应存放目录

mv /usr/local/src/mysql-cluster-gpl-7.6.6-linux-glibc2.12-x86_64/* /usr/local/mysql
mkdir /usr/local/mysql/sock

安装MySQL(我们可以看到root@localhost 被赋予随机生成的一个密码)

/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

在这里插入图片描述

复制mysqld到系统服务里面去并重命名为mysqld,以后就可以使用start、stop、restart命令进行操作了

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

启动 service mysqld start 可以看到日志路径: /usr/local/mysql/data/localhost.err
在这里插入图片描述
通过 netstat -ntlp | grep mysqld查看是否成功启动

mysql_install_db 这个工具也不再被推荐了, mysql_install_db is deprecated. Please consider switching to mysqld --initialize 另外,在初始化时如果加上 –initial-insecure,则会创建空密码的 root@localhost 账号,否则会创建带密码的 root@localhost 账号,密码直接写在 log-error 日志文件中(在5.6版本中是放在 ~/.mysql_secret 文件里,更加隐蔽,不熟悉的话可能会无所适从)

#启动后修改密码(注意-p 不要和后面的密码分开写,要写在一起,密码必须要与其他服务器上的数据库设置的密码相同),也可进入服务后使用set password for root@localhost = password('新密码');

/usr/local/mysql/bin/mysqladmin -u root -pr=y&?o7fXwo+ password mysql

进入mysql服务

/usr/local/mysql/bin/mysql -u root -p
mysql> show databases;

启用远程登陆
在本机登入mysql后,更改“mysql”数据库里的“user”表里的“host”项,从”localhost”改为’%’。

mysql>use mysql;

mysql>select host, user from user where user = 'root';

mysql>update user set host ='%'where user ='root' and host ='localhost';

mysql>flush privileges;

4.测试

首先在管理节点查看各个节点的连接状态,如图一切正常

在这里插入图片描述
进入241上的mysql进行如下操作:

注意:创建表的时候使用ndb引擎

mysql> create database test;
Query OK, 1 row affected (0.05 sec)

mysql> use test;
Database changed
mysql>  create table test(id int,name varchar(10)) engine=ndb ;
Query OK, 0 rows affected (0.25 sec)

mysql> insert into test values(1,'test');
Query OK, 1 row affected (0.01 sec)

mysql> select * from test;
+------+------+
| id   | name |
+------+------+
|    1 | test |
+------+------+
1 row in set (0.00 sec)

进入171上的mysql进行查询:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| ndbinfo            |
| performance_schema |
| sys                |
| test               |
+--------------------+
6 rows in set (0.00 sec)

mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from test;
+------+------+
| id   | name |
+------+------+
|    1 | test |
+------+------+
1 row in set (0.00 sec)

可见数据已经成功的进行同步

5.异常排查

查看错误信息和日志肯定是首要的切入点

SQl节点: not connected, accepting connect from 192.168.198.241

查看SQL节点的日志路径:vim /usr/local/mysql/data/localdomain.err 发现存储节点连接超时,如下图

在这里插入图片描述
于是定位到数据节点服务日志:/usr/local/mysql/data/ndb_2_error.log

在这里插入图片描述
日志提示节点空间不足,可通过df -h进行查看,尝试扩展硬盘空间,最终得以解决。

Couldn’t start as daemon, error: 'Failed to lock pidfile ‘/usr/local/mysql/data/ndb_2.pid’, already locked by pid=613, errno: 11’
这个是端口进程被占用,可通过 lsof -i:(对应host)ps -ef | grep mysql 然后 kill -9 PID 后再次启动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值