在网上看了几篇相关教程,虽然写的都很好,但是没有一个可以从头到尾做下来没有任何问题的,最终结合了各篇的精华,终于自己搭成了,趁着刚搭完,赶快记录下来~
环境
三台阿里云服务器(2v+4g+50g),在一个VPC网络里,就是在一个局域网里。
三台机器的内网ip如下:
服务器1:172.17.119.207
服务器2:172.17.119.206
服务器3:172.17.119.204
其中,服务器1上安装管理节点,服务器2上安装一个数据节点和一个sql节点,服务器3上安装一个数据节点和一个sql节点。
说明
1.本文使用mysql cluster的安装包,其中包含mysql5.7,所以无需额外安装mysql,如果以前安装过mysql,需要先卸载干净,本人是在纯净的ubuntu1804上安装的,也推荐大家在纯净的系统上安装,避免mysql残留影响安装。
2.以下所有命令均以root身份执行。
下载安装包
这个安装包在三台服务器上都需要有,使用下面命令获取:
wget http://mirrors.sohu.com/mysql/MySQL-Cluster-7.5/mysql-cluster-gpl-7.5.10-linux-glibc2.12-x86_64.tar.gz
tar -xf mysql-cluster-gpl-7.5.10-linux-glibc2.12-x86_64.tar.gz
也可以到这个网址上自己找更新版本的。
配置
管理节点
执行下面命令:
mv mysql-cluster-gpl-7.5.10-linux-glibc2.12-x86_64 /usr/local/mysql_cluster
//将集群启动和管理命令放到/usr/local/bin
cd /usr/local/mysql_cluster/bin
cp ndb_mgm* /usr/local/bin
//配置文件
mkdir /var/lib/mysql-cluster
cd /var/lib/mysql-cluster
vi config.ini
config.ini内容如下:
# Options affecting ndbd processes on all data nodes:
[NDBD DEFAULT]
NoOfReplicas=2
DataMemory=80M
IndexMemory=18M
# TCP/IP options:
[TCP DEFAULT]
#portnumber=2202
# Management process options:
[NDB_MGMD]
nodeid=1
HostName=172.17.119.207
DataDir=/var/lib/mysql-cluster/
# Options for data node :
[NDBD]
nodeid=2
HostName=172.17.119.206
DataDir=/usr/local/mysql_cluster/data/
# Options for data node :
[NDBD]
nodeid=3
HostName=172.17.119.204
DataDir=/usr/local/mysql_cluster/data/
# SQL node options:
[MYSQLD]
nodeid=4
HostName=172.17.119.206
[MYSQLD]
nodeid=5
HostName=172.17.119.204
管理节点就配置好了。
数据节点和sql节点
在服务器2和服务器3上均执行以下命令:
mv mysql-cluster-gpl-7.5.10-linux-glibc2.12-x86_64 /usr/local/mysql
//添加用户和组
groupadd mysql
useradd -g mysql mysql
//将ndbd命令复制到/usr/local/bin/,该命令用于启动数据节点
cd /usr/local/mysql/bin/
cp ndbd /usr/local/bin
//安装运行mysql需要的包
apt-get install numactl
apt-get install libaio1 libaio-dev
//初始化mysql
cd /usr/local/mysql
mkdir data
cd bin/
./mysqld --initialize
这一步执行完,屏幕输出的最后一行应该是这样的:
A temporary password is generated for root@localhost: caA15u&;>p>X
就是会告诉你root用户mysql的初始密码,这个要记录一下,后面连接mysql要用的。
接下来设置一些权限:
cd /usr/local/mysql
chown -R root .
chown -R mysql data
chgrp -R mysql .
cp support-files/mysql.server /etc/init.d
chmod +x /etc/init.d/mysql.server
最后创建并修改配置文件:
vi /etc/my.cnf
my.cnf内容如下:
[mysqld]
ndbcluster
ndb-connectstring=172.17.119.207
datadir=/usr/local/mysql/data
basedir=/usr/local/mysql
character_set_server=utf8
default-storage-engine=ndbcluster
port=3306
[mysql_cluster]
ndb-connectstring=172.17.119.207
到这里,数据节点和sql节点就也配置完成了。
运行
启动管理节点
执行下面命令:
cd /usr/local/bin
ndb_mgmd --ndb-nodeid=1 --initial --configdir=/var/lib/mysql-cluster/ -f /var/lib/mysql-cluster/config.ini
输出如下信息则表示管理节点启动成功:
然后,使用ndb_mgm命令进入管理模式,输入show查看当前状态:
可以看到,此时数据节点和sql节点都处于未连接的状态。
启动数据节点
在服务器2和服务器3上均执行下面命令:
cd /usr/local/bin/
ndbd --initial
注意,--initial参数只有第一次启动需要带上,之后再启动就不需要了,如果输出如下则表示数据节点启动成功:
在两台服务器上都执行完之后,到管理节点,再次输入show,会看到两个数据节点都连上了:
启动sql节点
在服务器2和服务器3上均执行以下命令:
cd /usr/local/mysql/bin/
./mysqld_safe --user=mysql --skip-syslog &
看到如下信息说明sql节点启动成功:
这时再到管理节点,输入show,会发现两个sql节点也连接上了:
到这里,mysql集群的搭建就算大功告成了!
验证
最后验证一下效果,在sql节点1上建一个数据库,看看是否可以同步到节点2。
首先,在服务器2上连接mysql:
cd /usr/local/mysql/bin/
./mysql -uroot -p
然后,输入初始化mysql的时候屏幕上输出的那个密码。
进去之后,首先要更换密码,否则无法进行任何操作。
连接上mysql之后,输入以下命令修改密码:
ALTER USER USER() IDENTIFIED BY 'your_password';
以后再连接,密码就用你设置的这个了~
然后,我们创建个数据库,叫test。
create database test;
创建完之后,到sql节点2,同样需要首先更改密码,更改之后,查看数据库:
可以看到,在sql节点2上,也有了test数据库,说明同步上了~
关闭
想要关闭集群时,最好按顺序来,避免把集群搞乱。
首先在管理节点执行以下命令:
cd /usr/local/bin
ndb_mgm -e shutdown
执行完这一步,管理节点和数据节点就都关闭了,sql节点还需要手动关闭。
使用提示
最后要提示一点,是我踩过的一个坑。。。
我们在配置集群的时候,配置了数据库默认引擎为ndb_cluster,只有使用这个引擎,数据才能同步上。
但是,这只对我们新建的表生效。
我们搭好集群以后,一般会把以前mysql的数据导进去,这时候问题来了,以前的mysql用的一般是innodb之类的引擎,所以数据导入之后,并不能同步上,一定要在导入数据之后,把所有表的引擎改成ndb_cluster,这样才能同步上!