频道栏目
首页 > 资讯 > 其他综合 > 正文

MySQLCluster搭建与测试

19-01-30        来源:[db:作者]  
收藏   我要投稿

1、服务器准备

1) MySQL节点1 10.41.1.85

2) MySQL节点2 10.41.1.84

3) ndb节点1 10.41.1.83

4) ndb节点2 10.41.1.82

5) 管理节点 10.41.1.81

2、测试环境

5台服务器均一样,不是必须的,所以服务器均已关闭iptables和selinux,生产环境请根据实际情况自行决定

systemctl stop firewalld #关闭防火墙

systemctl disable firewalld #永久关闭防火墙

setenforce 0 #临时关闭selinux

sed -i 's#SELINUX=enforcing#SELINUX=disable#g' /etc/selinux/config #永久关闭selinux

getenforce #查看当前状态

3、软件准备

mysql-cluster-gpl-7.2.4-linux2.6-x86_64.tar.gz

4、管理节点安装配置

建立目录:

mkdir /usr/local/mysql/bin -p

mkdir /data/mysql-cluster -p

准备文件

cp ./mysql-cluster-gpl-7.2.4-linux2.6-x86_64/bin/ndb_mgm /usr/local/mysql/bin/

cp ./mysql-cluster-gpl-7.2.4-linux2.6-x86_64/bin/ndb_mgmd /usr/local/mysql/bin/

环境变量

echo "export PATH=$PATH:/usr/local/mysql/bin" >>/etc/profile

source /etc/profile

配置

cd /data/mysql-cluster/

touch config.ini

cat /data/mysql-cluster/config.ini

[NDBD DEFAULT]

NoOfReplicas=1

DataMemory=64M

IndexMemory=16M

#管理节点

[NDB_MGMD]

nodeid=1

hostname=10.41.1.81

datadir=/data/mysql-cluster

#第一个 ndbd 节点:

[NDBD]

nodeid=2

hostname=10.41.1.83

datadir=/data/mysql-cluster/data

#第二个 ndbd 节点:

[NDBD]

nodeid=3

hostname=10.41.1.82

datadir=/data/mysql-cluster/data

SQL节点:

[MySQLD]

nodeid=4

hostname=10.41.1.85

[MySQLD]

nodeid=5

hostname=10.41.1.84

[MySQLD]

6、NDB节点安装(数据节点)

数据节点1: 10.41.1.83

数据节点2: 10.41.1.82

建立用户

useradd mysql

解压mysql cluster

tar zxf mysql-cluster-gpl-7.2.4-linux2.6-x86_64.tar.gz

mv mysql-cluster-gpl-7.2.4-linux2.6-x86_64/ /usr/local/mysql/

授权

cd /usr/local/mysql

chown -R mysql .

chgrp -R mysql .

建立数据目录,并授权(用来在没使用NDB时存放的数据)

mkdir /data/mysql -p

chown -R mysql.mysql /data/mysql/

初始化

/usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/data/mysql/ --basedir=/usr/local/mysql

授权root

chown -R root .

配置

\cp support-files/my-large.cnf /etc/my.cnf

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

chmod 755 /etc/init.d/mysqld

环境变量

echo "export PATH=$PATH:/usr/local/mysql/bin" >>/etc/profile

source /etc/profile

建立目录(存放NDB节点的数据)

mkdir /data/mysql-cluster/data -p

修改/etc/my.cnf文件

cat /etc/my.cnf

[mysqld]

datadir=/data/mysql

basedir= /usr/local/mysql

ndbcluster

ndb-connectstring=10.41.1.81

[MYSQL_CLUSTER]

ndb-connectstring=10.41.1.81

说明:

如果希望尽可能的各环境保持一致,建议在NDB节点也和SQL节点一样安装整个带有 NDB Cluster 存储引擎的MySQL Server。(NDB节点可以不用初始化数据,自己已经测试,但是我依然会初始化)安装细节和上面的SQL节点完全一样。

7、安装 MySQL 节点

sql节点1: 10.41.1.85

sql节点2: 10.41.1.84

建立用户

useradd mysql

解压mysql cluster

tar zxf mysql-cluster-gpl-7.2.4-linux2.6-x86_64.tar.gz

mv mysql-cluster-gpl-7.2.4-linux2.6-x86_64/ /usr/local/mysql/

授权

cd /usr/local/mysql

chown -R mysql .

chgrp -R mysql .

建立数据目录,并授权(用来在没使用NDB时存放的数据)

mkdir /data/mysql -p

chown -R mysql.mysql /data/mysql/

初始化

/usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/data/mysql/ --basedir=/usr/local/mysql

授权root

chown -R root .

配置

\cp support-files/my-large.cnf /etc/my.cnf

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

chmod 755 /etc/init.d/mysqld

环境变量

echo "export PATH=$PATH:/usr/local/mysql/bin" >>/etc/profile

source /etc/profile

建立目录(存放NDB节点的数据)

mkdir /data/mysql-cluster/data -p

修改/etc/my.cnf文件

cat /etc/my.cnf

[mysqld]

datadir=/data/mysql

basedir= /usr/local/mysql

ndbcluster

ndb-connectstring=10.41.1.81

[MYSQL_CLUSTER]

ndb-connectstring=10.41.1.81

开始使用Cluster:

8、启动

启动顺序为:管理节点->数据节点->SQL节点(非常重要)

a)启动管理节点:

ndb_mgmd -f /data/mysql-cluster/config.ini

检查:

netstat -ntlp | grep 1186

ps -ef | grep ndb_mgmd | grep -v grep

b)启动NDB(数据节点)

注意:

只是在第一次启动或在备份/恢复或配置变化后重启ndbd时,才加–initial参数!

ndbd --initial

检查:

ps -ef | grep ndbd | grep -v grep

c)启动SQL节点(启动mysql服务)

/etc/init.d/mysqld start

9、ndb_mgm工具

a)show命令查看集群状态

ndb_mgm> show

Cluster Configuration

[ndbd(NDB)] 2 node(s)

id=2 @10.41.1.83 (mysql-5.5.19 ndb-7.2.4, Nodegroup: 0, Master)

id=3 @10.41.1.82 (mysql-5.5.19 ndb-7.2.4, Nodegroup: 1)

[ndb_mgmd(MGM)] 1 node(s)

id=1 @10.41.1.81 (mysql-5.5.19 ndb-7.2.4)

[mysqld(API)] 3 node(s)

id=4 @10.41.1.85 (mysql-5.5.19 ndb-7.2.4)

id=5 @10.41.1.84 (mysql-5.5.19 ndb-7.2.4)

id=6 (not connected, accepting connect from any host)

10、测试1-NDB存储引擎测试

(1)在任意一个SQL节点(我这里选择10.41.1.85)的test_cluster库中创建测试表test_table01(不指定引擎)和test_table02(NDB存储引擎),设置存储引擎为NDB,并插入两条测试数据:

mysql> create table test_table01( id int, name varchar(20) ) engine=ndb;

mysql> create table test_table02( id int, name varchar(20) ) ;

mysql> show tables;

+------------------------+

Tables_in_test_cluster

+------------------------+

test_table01

test_table02

+------------------------+

2 rows in set (0.01 sec)

另一sql节点:

mysql> show tables;

+------------------------+

Tables_in_test_cluster

+------------------------+

test_table02

+------------------------+

1 row in set (0.02 sec)

说明只有ndb引擎才同步。

(2)在test_table02中插入两条测试数据

mysql> insert into t1 select 1,'yayun';

Query OK, 1 row affected (0.11 sec)

Records: 1 Duplicates: 0 Warnings: 0

mysql> insert into t1 select 1,'atlas';

Query OK, 1 row affected (0.03 sec)

Records: 1 Duplicates: 0 Warnings: 0

两个sql节点都能查到数据。

mysql> select * from test_table02;

+------+-----------+

id | name

+------+-----------+

1 | cluster01

2 | cluster02

+------+-----------+

2 rows in set (0.00 sec)

显然,两个SQL节点查询的数据是一致。

(3)在SQL节点10.41.1.85上把测试表test_table02引擎改为MyISAM,再次插入测试数据:

mysql> alter table test_table02 engine=myisam;

Query OK, 2 rows affected (0.90 sec)

Records: 2 Duplicates: 0 Warnings: 0

mysql> insert into test_table02 value(3,'cluster03');#10.41.1.84

ERROR 1412 (HY000): Table definition has changed, please retry transaction

插入数据直接报错。

11、单点故障测试

管理节点,不需要特殊的配置,只需要将管理工具和配置文件放置多台服务器上即可。

SQL节点

10.41.1.84上的MySQL服务停止

管理节点:

[mysqld(API)] 3 node(s)

id=4 @10.41.1.85 (mysql-5.5.19 ndb-7.2.4)

id=5 (not connected, accepting connect from 10.41.1.84)

id=6 (not connected, accepting connect from any host)

10.41.1.85:

mysql> insert into test_table02 value(4,'cluster04');

Query OK, 1 row affected (0.00 sec)

mysql> select from test_table02;

+------+-----------+

id | name

+------+-----------+

2 | cluster02

3 | cluster03

4 | cluster04

1 | cluster01

+------+-----------+

4 rows in set (0.00 sec)

10.41.1.85服务开启:

mysql> select from test_table02;

+------+-----------+

id | name

+------+-----------+

3 | cluster03

4 | cluster04

1 | cluster01

2 | cluster02

+------+-----------+

4 rows in set (0.01 sec)

数据又同步过来了

NDB(数据节点)

数据节点10.41.1.82上的NDB进程停止

[root@node3 mysql]# ps -ef | grep ndbd

root 15969 1 0 14:37 00:00:04 ndbd --initial

root 15970 15969 1 14:37 00:00:47 ndbd --initial

root 16029 15801 0 15:36 pts/3 00:00:00 grep --color=auto ndbd

killall ndbd

任意sql节点查询:

mysql> select from test_table02;

ERROR 1296 (HY000): Got error 157 'Unknown error code' from NDBCLUSTER

无法查询

10.41.1.81:

grep 'NoOfReplicas' /data/mysql-cluster/config.ini

NoOfReplicas=1 #每个数据节点的镜像数量

将配置文件中的NoOfReplicas改为2,按照前面的步骤重新启动集群,无法启动,NoOfReplicas参数无法临时更改,我们开始就需要设置好,不要到后面才想到更改,那时就悲剧了。如果重新ndbd --initial,将会丢失所有数据。

NoOfReplicas=2:

管理节点需要--initial参数启动

ndb_mgmd --initial -f /data/mysql-cluster/config.ini

数据节点(NDB)启动还要用ndbd --initial,数据丢失

mysql> select from test_table02;

ERROR 1146 (42S02): Table 'test_cluster.test_table02' doesn't exist

mysql> create table test(

-> id int,

-> name varchar(20)

-> ) engine=ndb;

Query OK, 0 rows affected (0.85 sec)

mysql> show tables;

+------------------------+

Tables_in_test_cluster

+------------------------+

test

+------------------------+

1 row in set (0.01 sec)

mysql> insert into test value(1,'one');

Query OK, 1 row affected (0.00 sec)

mysql> insert into test value(2,'two');

Query OK, 1 row affected (0.00 sec)

mysql> select * from test;

+------+------+

id | name

+------+------+

1 | one

2 | two

+------+------+

2 rows in set (0.00 sec)

再次停掉数据节点10.41.1.82:

两节点都可以正常数据查询

12、MySQL Cluster集群的关闭

关闭顺序:SQL节点->数据节点->管理节点(在MySQL Cluster环境中,NDB节点和管理节点的关闭都可以在管理节点的管理程序中完成,也可以分节点关闭,但是SQL节点却没办法。所以,在关闭整个MySQL Cluster环境或者关闭某个SQL节点的时候,首先必须到SQL节点主机上来关闭SQL节点程序。关闭方法和MySQL Server的关闭一样。)

(1)SQL节点关闭

/etc/init.d/mysqld stop

(2)(NDB)数据节点关闭

ndbd stop

(3)管理节点关闭

ndb_mgm> shutdown或者命令行:ndb_mgm -e shutdown

总结:

参数NoOfReplicas无法临时更改。

selinux,iptables等相关问题。

注:参考大量网络数据。


相关TAG标签
上一篇:访问日志切割
下一篇:Apache Spark RPC协议中的反序列化漏洞分析
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站