mysql分布式集群搭建
本文主要介绍mysql数据库的分布式集群搭建:mysql-cluster,以下简称mc。比传统的主从复制更能抗并发,到底有多能抗就看你有多少并发了 -_- 。
科普一下知识点:
管理节点:mc管理节点负责管理、配置、监控整个集群。
数据节点:使用内存存放数据,保存进数据节点的数据都会自动复制并存储到其他数据节点。
mysql节点:也叫数据库节点,和我们平时使用的mysql相同,作为数据库使用。被数据节点访问。
环境准备
服务器名称 | 服务器IP | 角色 |
---|---|---|
node1 | 192.168.56.101 | 管理节点(也可多节点部署,保证高可用) |
node2 | 192.168.56.102 | 数据节点、mysql节点 |
node3 | 192.168.56.103 | 数据节点、mysql节点 |
先从官网下载mysql-cluster最新版。注意该集群已经包含mysql数据库,不需要单独再去安装什么mysql,收手吧。
分别上传到三台服务器上,解压到目录:/usr/local/mysql下
注意,mysql-cluster包官方下载下来大概800多M,解压后有3.5G左右 -_- 合理分配磁盘空间。
接下来开始配置
管理节点配置
#进入到集群解压目录
$ cd /usr/local/mysql
#创建管理端配置文件
$ vi config.ini
#编写以下内容
[ndbd default]
NoOfReplicas=2 #数据节点数量
DataMemory=200M #每个数据节点中给数据分配的内存
MaxNoOfAttributes=20480 #该参数用于设置簇中触发程序对象的最大数目。该参数的默认值为768
[ndb_mgmd]
NodeId=1
HostName=node1 #设置管理节点服务器
DataDir=/usr/local/mysql/data
[ndbd]
HostName=node2
NodeId=2 #设置数据节点服务器1
DataDir=/usr/local/mysql/data
[ndbd]
HostName=node3
NodeId=3 #设置数据节点服务器2
DataDir=/usr/local/mysql/data
[mysqld]
NodeId=4 #设置mysql节点服务器1
HostName=node2
[mysqld]
NodeId=5 #设置mysql节点服务器2
HostName=node3
保存文件后,执行以下命令启动管理节点(注意只在第一次启动时带上–initial参数,以后正常维护启动不要带,否则数据会清空)
$ /usr/local/mysql/bin/ndb_mgmd -f /usr/local/mysql/config.ini --initial
数据节点和mysql配置
编辑数据库配置文件:/etc/my.cnf
内容如下:
[mysqld]
user=root
ndbcluster
ndb-connectstring=node1
default-storage-engine=ndbcluster
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
[mysql_cluster]
ndb-connectstring=node1
!includedir /etc/my.cnf.d
到bin目录执行以下命令启动数据节点(同样注意,只有第一次启动时才带上–initial)
$ cd /usr/local/mysql/bin
$ ./ndbd --initial
mysql节点初始化
分别执行以下命令进行初始化
$ cd /usr/local/mysql/bin
#初始化数据库(注意输入日志,最后会打印随机生成的数据库root密码)
$ ./mysqld --initialize --user=root --basedir=/usr/local/mysql
#启动数据库
$ nohup ./mysqld --user=root &
#进入数据库
$ ./mysql -uroot -h 127.0.0.1 -p
#修改数据库root密码,且能远程访问
$ alter user user() identified by "你的密码";
$ grant all privileges on *.* to root@'%' identified by "你的密码";
$ flush privileges;
进行到这里,mysql集群环境就搭建起来了。如何查看集群状况呢
在管理节点服务器上进到bin目录
$ cd /usr/local/mysql/bin
执行以下命令,可得如图所示信息,可以直观看到集群各节点情况
集群启动命令汇总
以下命令都是在目录: /usr/local/mysql/bin下执行
#初始化数据库
$ ./mysqld --initialize --user=root --basedir=/usr/local/mysql
第一次初始化时:
#启动管理节点
$ ./ndb_mgmd -f /usr/local/mysql/config.ini --initial
#启动数据节点
$ ./ndbd --initial
#启动数据库
$ nohup ./mysqld --user=root &
以后维护时:
#启动管理节点
$ ./ndb_mgmd -f /usr/local/mysql/config.ini
#启动数据节点
$ ./ndbd
#启动数据库
$ nohup ./mysqld --user=root &
集群启动顺序要保持和上面一致:管理节点 -> 数据节点 -> mysql节点
测试
集群启动成功后,我们就可以分别连接两个mysql数据库,在其中一个数据库中进行建库,建表,维护表数据等操作均能同步到另一个数据库。
FAQ
如果集群启动成功,建库能同步,表却不能同步时,需要修改表的默认存储引擎为集群存储:ndbcluster