怎么配置MySQL Cluster

61次阅读
没有评论

共计 9857 个字符,预计需要花费 25 分钟才能阅读完成。

这篇文章主要讲解了“怎么配置 MySQL Cluster”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着丸趣 TV 小编的思路慢慢深入,一起来研究和学习“怎么配置 MySQL Cluster”吧!

##MySQL Cluster 的配置说明
管理节点(1 个)10.10.10.9
SQL 节点(2 个)10.10.10.10
                 10.10.10.11
Data 节点(2 个)10.10.10.10
                 10.10.10.11

## 配置主机 IP
[root@mysql9 ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=mysql9              ## 因为是克隆的虚拟机,所以需要修改主机名
[root@mysql9 ~]# cat /etc/hosts
127.0.0.1 localhost mysql9   ## 因为是克隆的虚拟机,所以需要修改主机名,后面的主机名每台机器不一样。
10.10.10.9 mysql9
10.10.10.10 mysql10
10.10.10.11 mysql11
## 上面所做的操作,在所有服务器上面都要执行!

## 禁用 selinux
修改 /etc/selinux/config 文件
将 SELINUX=enforcing 改为 SELINUX=disabled
重启机器即可。
查看 selinux 状态:
[root@CentOS ~]# getenforce
## 关闭 iptables  ## 这个不知道是什么东西,浪费我大量的时间,不关闭的话,启动 Data 节点会报错:
-bash-4.1$ ndbd –initial
Unable to connect with connect string: nodeid=0,10.10.10.9:1186
Retrying every 5 seconds. Attempts left: 12 11 10 9 8 7 6 5 4 3 2 1, failed.
2015-12-18 23:11:55 [ndbd] ERROR    — Could not connect to management server, error:
## 下面关闭它:
[root@mysql9 ~]# service iptables stop
iptables:将链设置为政策 ACCEPT:filter                    [确定]
iptables:清除防火墙规则:                                [确定]
iptables:正在卸载模块:                                  [确定]
[root@mysql9 ~]# chkconfig iptables off
## 上面所做的操作,在所有服务器上面都要执行!

## 添加用户和组
[root@db ~]# groupadd mysql
[root@db ~]# useradd -r -g mysql mysql
[root@localhost data]# passwd mysql
更改用户 mysql 的密码。
新的 密码:
无效的密码:过短
无效的密码:过于简单
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
## 上面所做的操作,在所有服务器上面都要执行!

##MySQL Cluster 的安装配置
[root@CentOS tmp]# cd /tmp/
[root@CentOS tmp]# ll mysql-cluster-gpl-7.4.8-linux-glibc2.5-i686.tar.gz 
-rw-r–r–. 1 root root 472807612 12 月 18 01:11 mysql-cluster-gpl-7.4.8-linux-glibc2.5-i686.tar.gz
[root@CentOS tmp]# tar zxf mysql-cluster-gpl-7.4.8-linux-glibc2.5-i686.tar.gz -C /usr/local/
[root@CentOS tmp]# cd /usr/local/
[root@CentOS local]# mv mysql-cluster-gpl-7.4.8-linux-glibc2.5-i686/ mysql
[root@CentOS local]# chown -R mysql:mysql /usr/local/mysql
[root@CentOS local]# vi /etc/profile
export PATH=/usr/local/mysql/bin:$PATH
[root@localhost bin]# source /etc/profile
## 上面所做的操作,在所有服务器上面都要执行!

## 初始化数据库
[root@CentOS local]# mkdir -p /data/3306
[root@CentOS local]# chown -R mysql:mysql /data
[root@CentOS local]# su – mysql
su: 警告:无法切换到目录 /home/mysql: 没有那个文件或目录
-bash-4.1$ mkdir -p /home/mysql
mkdir: 无法创建目录 /home/mysql : 权限不够
-bash-4.1$ exit
logout
[root@CentOS local]# mkdir -p /home/mysql
[root@CentOS local]# su – mysql
-bash-4.1$ cd /usr/local/mysql
-bash-4.1$ ./scripts/mysql_install_db –user=mysql –basedir=/usr/local/mysql –datadir=/data/3306
-bash-4.1$ cp /usr/local/mysql/support-files/my-default.cnf  /etc/my.cnf
-bash-4.1$ vi /etc/my.cnf
[client]
port = 3306
socket = /data/3306/mysql.sock
default-character-set = utf8

[mysqld]
port = 3306
user = mysql
socket = /data/3306/mysql.sock
pid-file = /data/3306/mysql.pid
basedir = /usr/local/mysql
datadir = /data/3306
log-bin = /data/3306/mysql-bin
lower_case_table_names=1
max_connections=1000
character_set_server=utf8
character_set_client=utf8

[mysql]
default-character-set=utf8
[root@localhost mysql]# cd /usr/local/mysql
[root@localhost mysql]# cp support-files/mysql.server  /etc/rc.d/init.d/mysqld
[root@localhost mysql]# chmod 777 /etc/rc.d/init.d/mysqld
[root@CentOS mysql]# service mysqld start
Starting MySQL…..                                        [确定]
[root@CentOS mysql]# netstat -tulnp | grep mysql
tcp        0      0 :::3306                     :::*                        LISTEN      2057/mysqld        
[root@CentOS mysql]# service mysqld status
MySQL running (2057)                                       [确定]
[root@CentOS mysql]# service mysqld stop
Shutting down MySQL..                                      [确定]
## 上面所做的操作,在所有服务器上面都要执行!由于我是虚拟机,就是做一遍,其它的复制。
# 管理节点,其实不需要 mysqld 二进制文件,只需要 MySQL Cluster 服务端程序(ndb_mgmd)和监听客户端程度(ndb_mgm)。
## 这里因为是克隆的虚拟机,就一起在管理节点上面也安装了 mysqld 服务,但后面配置就不会再提到要配置它的地方了。

## 管理节点配置步骤
## 在 mysql 用户下面执行!
(1)在服务器 10.10.10.9 的 /data 下创建目录 mysql-cluster,并在目录中创建配置文件 config.ini。
-bash-4.1$ cd /data/
-bash-4.1$ mkdir mysql-cluster
-bash-4.1$ cd mysql-cluster/
-bash-4.1$ touch config.ini
(2)根据这里的测试集群环境,config.ini 文件配置如下:
-bash-4.1$ vi config.ini
## 配置文件里面的配置,在等号两边最好加上空格,本人在这里是吃了大亏,耽误了大量的时间、精力。
## 一度以为没有是哪里没有配对,结果后来最终发现还是配置文件的问题导致后面启不来!
[ndbd default]
noofreplicas = 1   #每个数据节点的镜像数量
datamemory = 50M   #每个数据节点中给数据分配的内存(这个 M 一定要大写)
indexmemory = 20M  # 每个数据节点中给索引分配的内存

[ndb_mgmd]
# 配置管理节点
hostname = 10.10.10.9   #管理节点 IP
datadir = /data/mysql-cluster  # 管理节点数据目录,管理节点启动成功后在该目录下面会存在很多日志信息等。

[ndbd]
hostname = 10.10.10.10  ## 指定 data 节点选项
datadir = /data/mysql-cluster/data

[ndbd]
hostname = 10.10.10.11  ## 指定 data 节点选项
datadir = /data/mysql-cluster/data

[mysqld]
hostname = 10.10.10.10  ## 指定 sql 节点选项

[mysqld]
hostname = 10.10.10.11  ## 指定 sql 节点选项

上面的配置文件中,包括很多的组,组名用“[]”括起来,这里我们最关心的是 3 类节点组的配置,分别定义如下。
? [NDB_MGMD]:表示管理节点的配置,只能有一个。
? [NDBD DEFAULT]:表示每个数据节点的默认配置,在每个节点的 [NDBD] 中不用再写这些选项。只能有一个。
? [NDBD]:表示每个数据节点的配置,可以有多个。
? [MYSQLD]:表示 SQL 节点的配置,可以有多个,分别写上不同 SQL 节点的 IP 地址;也可以不用写 IP 地址,只保留一个空节点,表示任意一个 IP 地址都可以进行访问。此节点的个数表明了可以用来连接数据节点的 SQL 节点总数。
每个节点都要有一个独立的 id 号,可以手工填写,比如“id=2”,也可以不写,系统会按照配置文件的填写顺序自动分配。

##SQL 节点和 Data 节点的配置
#SQL 节点,可以将之视为传统的 MySQL Server。Data 节点,也是一个 MySQL Server,并在 my.cnf 中指定少数几个参数即可。
## 这里由于环境限制,SQL 节点和 Data 节点的是放在同一台虚拟机上面的,环境中其实也仅仅安装了一个 mysqld 服务。后面提到的修改 my.cnf 配置,就是这个。
## 网上很多地方都提到 SQL 节点和 Data 节点跟普通的 mysqld 服务没上面区别,要把普通的 mysqld 变为 SQL 节点和 Data 节点只需要在 my.cnf 配置里面添加少数几个参数即可。
## 但我还是不太明白,后面启动 Data 节点并没有用到任何 mysqld 相关的大小,所以我理解,其实 Data 节点也是不需要安装 mysqld 服务的。需要 bin 里面的命令。
## 在 mysql 用户下面执行!在 10.10.10.10 和 10.10.10.11 上面都要做!
SQL 节点和数据节点的配置非常简单,只需要在对 MySQL 的配置文件(my.cnf)中增加如下内容即可(参数含义见后面注释):
[root@CentOS ~]# chown mysql:mysql /etc/my.cnf 
[root@CentOS ~]# su – mysql
-bash-4.1$ vi /etc/my.cnf 
[mysqld]
ndbcluster                   #运行 NDB 存储引擎
ndb-connectstring=10.10.10.9 #定位管理节点

[mysql_cluster]
ndb-connectstring=10.10.10.9 #定位管理节点

[mysqld_safe]
log-error = /data/mysql-cluster/data/mysqld.log
pid-file = /data/mysql-cluster/data/mysqld.pid
## 创建目录
-bash-4.1$ mkdir -p /data/mysql-cluster/data

##Cluster 的启动
Cluster 需要各个节点都进行启动后才可以运行,节点的启动顺序为管理节点 – 数据节点 – SQL 节点。
(1)在管理节点上,从系统 shell 发出下述命令以启动管理节点进程:(10.10.10.9)
-bash-4.1$ pwd
/data/mysql-cluster
-bash-4.1$ ndb_mgmd -f ./config.ini
MySQL Cluster Management Server mysql-5.6.27 ndb-7.4.8
-bash-4.1$ 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 10.10.10.10)  ## 可以看见未连接(not connected),这是因为还没有启动
id=3 (not connected, accepting connect from 10.10.10.11)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @10.10.10.9  (mysql-5.6.27 ndb-7.4.8)

[mysqld(API)] 2 node(s)
id=4 (not connected, accepting connect from 10.10.10.10)  ## 可以看见未连接(not connected),这是因为还没有启动
id=5 (not connected, accepting connect from 10.10.10.11)

ndb_mgm exit
-bash-4.1$ ps -ef | grep ndb
mysql     2312  1785  0 18:58 pts/1    00:00:00 ndb_mgm
mysql     2457     1  0 19:24 ?        00:00:03 ndb_mgmd -f ./config.ini
mysql     2495  1595  0 19:31 pts/0    00:00:00 grep ndb

(2)在每台数据节点服务器上(本例为 10.10.10.10 和 10.10.10.11),运行下述命令启动 ndbd 进程:
ndbd 进程是使用 NDB 存储引擎处理表中数据的进程。通过该进程,存储节点能够实现分布式事务管理、节点恢复、在线备份等相关的任务。
注意:仅应在首次启动 ndbd 时,或在备份/恢复或配置变化后重启 ndbd 时使用“–initial”参数,这很重要。原因在于,该参数会使节点删除由早期 ndbd 实例创建的、用于恢复的任何文件,包括恢复用日志文件。
-bash-4.1$ ndbd –initial   ##10.10.10.10
2015-12-19 01:29:05 [ndbd] INFO     — Angel connected to 10.10.10.9:1186
2015-12-19 01:29:05 [ndbd] INFO     — Angel allocated nodeid: 2
-bash-4.1$ ndbd –initial   ##10.10.10.11
2015-12-19 01:37:36 [ndbd] INFO     — Angel connected to 10.10.10.9:1186
2015-12-19 01:37:36 [ndbd] INFO     — Angel allocated nodeid: 3

(3)依次启动 SQL 节点上的 MySQL 服务(本例为 10.10.10.10 和 10.10.10.11)。
-bash-4.1$ service mysqld start
也可以用:-bash-4.1$ mysqld_safe  –defaults-file=/etc/my.cnf 2 1 /dev/null

(4)节点全部成功启动后,用 ndb_mgm 工具的 show 命令查看集群状态:
##ndb_mgm 工具是 ndb_mgmd(MySQL Cluster Server)的客户端管理工具,通过它可以方便地检查 Cluster 的状态、启动备份、关闭 Cluster 等功能。
ndb_mgm show
Cluster Configuration
———————
[ndbd(NDB)] 2 node(s)
id=2 @10.10.10.10  (mysql-5.6.27 ndb-7.4.8, Nodegroup: 0, *)
id=3 @10.10.10.11  (mysql-5.6.27 ndb-7.4.8, Nodegroup: 1)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @10.10.10.9  (mysql-5.6.27 ndb-7.4.8)

[mysqld(API)] 2 node(s)
id=4 @10.10.10.10  (mysql-5.6.27 ndb-7.4.8)
id=5 @10.10.10.11  (mysql-5.6.27 ndb-7.4.8)

## 测试 MySQL Cluster 
## 上文提到过,如果要使用 Cluster,则表的存储引擎必须为 NDB,其他类型存储引擎的数据将不会保存到数据节点中。
1.NDB 存储引擎测试
(1)在任意一个 SQL 节点(这里用 10.10.10.10)的 test 库中创建测试表 t1,设置存储引擎为 NDB,并插入两条测试数据:
mysql create table t1(id int) engine=ndb;
mysql insert into t1 values(1);
mysql insert into t1 values(2);
(2)在另外一个 SQL 节点(10.10.10.11),查询 test 库中的 t1 表,结果如下:
mysql select * from t1;    ## 显然,两个 SQL 节点查询到的数据是一致的。
(3)在 SQL 节点 10.10.10.10 上将测试表 t1 的存储引擎改为 MyISAM,再次插入测试记录:
mysql alter table t1 engine=myisam;
mysql insert into t1 values(3);
(4)在 SQL 节点 10.10.10.11 上再次查询表 t1,结果如下:
mysql select * from t1;  ## 可以发现,表 t1 已经无法查询。
ERROR 1146 (42S02): Table test.t1 doesn t exist
(5)在 SQL 节点 10.10.10.10 上再次将 t1 的存储引擎改为 NDB:
mysql alter table t1 engine=ndb;
(6)在 SQL 节点 10.10.10.11 上再次查询,结果如下:
mysql select * from t1;
+——+
| id   |
+——+
|    2 |
|    3 |
|    1 |
+——+
3 rows in set (0.01 sec)
## 显然,表 t1 的数据被再次同步到了数据节点。所有 SQL 节点又都可以正常查询数据。
## 其实可以发现,数据文件还是存放在 mysqld 的 datadir 目录里面;而前面指定的“/data/mysql-cluster/data”这些目录放的是集群相关的东西。

2.单点故障测试——SQL 节点发生单点故障。
(1)将 SQL 节点 10.10.10.10 上的 MySQL 服务停止。
-bash-4.1$ mysqladmin -uroot -p shutdown
(2)查看一下 Cluster 的状态。
ndb_mgm show
Cluster Configuration
———————
[ndbd(NDB)] 2 node(s)
id=2 @10.10.10.10  (mysql-5.6.27 ndb-7.4.8, Nodegroup: 0, *)
id=3 @10.10.10.11  (mysql-5.6.27 ndb-7.4.8, Nodegroup: 1)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @10.10.10.9  (mysql-5.6.27 ndb-7.4.8)

[mysqld(API)] 2 node(s)
id=4 (not connected, accepting connect from 10.10.10.10)
id=5 @10.10.10.11  (mysql-5.6.27 ndb-7.4.8)
(3)从节点 10.10.10.11 上查看表 t1,结果如下。
mysql select * from t1;
+——+
| id   |
+——+
|    2 |
|    3 |
|    1 |
+——+
3 rows in set (0.01 sec)

## 关闭 MySQL Cluster 
Cluster 的关闭命令很简单,只需要在 shell 下执行如下命令即可:-bash-4.1$ ndb_mgm -e shutdown
也可以用 ndb_mgm 工具进入管理界面后,使用 shutdown 命令关闭:ndb_mgm shutdown
然后再其它节点上关闭 mysqld:-bash-4.1$ service mysqld stop
或者:mysqladmin -uroot -p shutdown

## 日志管理
MySQL Cluster 提供了两种日志,分别是集群日志(clusterlog)和节点日志(node log)。前者记录了所有 Cluster 节点生成的日志,后者仅仅记录了数据节点的本地事件。在大多数情况下,我们都推荐使用集群日志,因为它在一个地方记录了所有节点的数据,更便于进行管理。
clusterlog 一般记录在和配置文件(config.ini)同一个目录下,文件名格式为 ndb__cluster.log,其中 nodeid 为管理节点号。
可以使用 ndb_mgm 客户端管理工具打开或者关闭日志,具体操作如下。
(1)在 shell 中执行 ndb_mgm 命令。
-bash-4.1$ ndb_mgm
— NDB Cluster — Management Client —
ndb_mgm  
(2)执行 clusterlog info 命令查看当前日志状态。
ndb_mgm clusterlog info
Connected to Management Server at: localhost:1186
Severities enabled: INFO WARNING ERROR CRITICAL ALERT 
(3)当前日志是打开的,用 clusterlog off 命令关闭日志。
ndb_mgm clusterlog off
Cluster logging is disabled
(4)再次查看日志状态,发现已经关闭。
ndb_mgm clusterlog info
Cluster logging is disabled.
(5)执行 clusterlog on 命令将再次打开日志。
ndb_mgm clusterlog on
Cluster logging is enabled.
ndb_mgm clusterlog info
Severities enabled: INFO WARNING ERROR CRITICAL ALERT 

感谢各位的阅读,以上就是“怎么配置 MySQL Cluster”的内容了,经过本文的学习后,相信大家对怎么配置 MySQL Cluster 这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是丸趣 TV,丸趣 TV 小编将为大家推送更多相关知识点的文章,欢迎关注!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-20发表,共计9857字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)