一、 MySQL集群版
MySQL 数据库作为最受欢迎的开源数据库,通常在一般项目中使用单机版或者主从库的方式即可满足常见的项目需求,本次项目有额外的高可用需求,因此采用了集群版数据库的搭建。
相比主从的优势在于,多节点单独挂一台,不会影响业务系统正常使用,而主从的方式只要主库挂了,其他从库也会不可用。
集群版有三种类型节点:管理节点、数据节点、sql节点。
- 管理节点:顾名思义,用于管理其他节点。
- 数据节点:用于存储集群数据(通常存放于内存中)。
- Sql节点:就是我们的mysqld服务。
图片来自于mysql官方文档
官方文档地址:
MySQL :: MySQL 8.0 Reference Manual :: 23 MySQL NDB Cluster 8.0
二、 搭建准备
本次搭建所用的机器环境为:centos7机器5台。两台做mysqld服务,两台做管理节点,一台做数据节点,为了节省资源另外从mysqld中抽取一台也做数据节点。
安装包下载地址:
Index of /232905/yum/mysql-cluster-8.0-community/el/7/x86_64
mysql-cluster-community-client-8.0.26-1.el7.x86_64.rpm
mysql-cluster-community-ndbclient-devel-8.0.26-1.el7.x86_64.rpm
mysql-cluster-community-client-plugins-8.0.26-1.el7.x86_64.rpm
mysql-cluster-community-data-node-8.0.26-1.el7.x86_64.rpm
mysql-cluster-community-server-8.0.26-1.el7.x86_64.rpm
mysql-cluster-community-common-8.0.26-1.el7.x86_64.rpm
mysql-cluster-community-devel-8.0.26-1.el7.x86_64.rpm
mysql-cluster-community-libs-8.0.26-1.el7.x86_64.rpm
mysql-cluster-community-libs-compat-8.0.26-1.el7.x86_64.rpm
mysql-cluster-community-management-server-8.0.26-1.el7.x86_64.rpm
mysql-cluster-community-ndbclient-8.0.26-1.el7.x86_64.rpm
按照依赖的顺序依次使用rpm安装完成。
- 单机版与集群版的server安装包都是不一样的,需要下载mysql-cluster开头的安装包,并且要确保机器中没有安装过单机版mysql
三、 配置、启动
1.启动管理节点:
管理节点的配置单独写在 /var/lib/mysql-cluster/config.ini 中
写好对应的管理节点、数据节点、sql节点的地址等信息以后,启动管理节点。按照上述配置则是在24、41两台机器中启动,命令如下:
ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial
2.启动数据节点:
按照上述配置,在25、26两台机器中启动数据节点。
第一次启动命令为:ndbd --initial
- 后续重启直接执行ndbd,如果加上--initial会清空数据。
3.启动sql节点:
按照上述配置,在41、42两台机器中启动sql节点。
在/etc/my.cnf配置中加入
初始化并启动数据库:
mysqld --initialize
service mysqld start
4.测试连接:
都启动完成后可以在管理节点的机器中查看对应的节点状态:
所有节点都连接成功则说明此次部署正常,随便连接41、42任意一个库,新建数据库、表之后,可以看到另外一个库也在实时同步,并且关掉任意一台,不影响另外一台。
四、 踩坑记录
以下为本次mysql集群版使用过程中遇到的那些坑,供大家参考减少重复踩坑。
1.数据迁移中的引擎及索引问题:
单机版与集群版mysql的引擎是不一样的,如果要从单机版将数据迁移至集群版,需要在导出的sql文件中将InnoDB的引擎改为NDB引擎,有些外键ON DELETE或者ON UPDATE 额外操作的可能会有报错,可以在sql中先清除掉这些后面再补上。
2.自增主键序列问题:
多台集群数据库在插入数据时,每台的自增起始值是不一样的,所以会导致最终数据的自增ID并不是连续的,根据ID大小判定插入顺序的逻辑可能需要修改。
3.默认配置文件修改:
需要在配置文件/var/lib/mysql-cluster/config.ini中加大默认限制参数,否则后期会因为默认索引、内存等大小限制开的太小而报错,无法插入数据。
4.开机自启动顺序:
如果做开机自启动的话,需要保证先启动管理节点,再启动剩下的,因为管理启动后会开启1186端口,因此在数据节点及sql节点的自启动脚本中,可以加入等待管理节点端口1186启动以后再启动的逻辑。