ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

NDBmysql-cluster集群部署脚本

NDBmysql-cluster集群部署脚本 NDBNetwork Database是MySQL Cluster的核心存储引擎专为高可用性、高吞吐量、分布式数据存储设计采用内存计算磁盘持久化架构支持跨节点数据分片与自动冗余适用于对实时性和可靠性要求严苛的业务场景如金融交易、电信计费、实时分析等。今天大白鼠就分享构建mysql集群的脚本帮助大家快速部署学习环境使用脚本必读信息主机名称规划本次脚本以一个管理节点两个mysql节点和两个data节点为例管理节点 mgrmysql节点A mysqlamysql节点B mysqlb数据节点1 data1数据节点2 data2安装包mysql-cluster-gpl-7.6.16-linux-glibc2.12-x86_64.tar.gz站内下载链接https://download.csdn.net/download/qq_28608175/91554469先部署mysql节点和数据节点最后部署管理节点运行任何脚本前请记住服务器IP地址按照上述主机名称规划对应。管理节点脚本#!/bin/bash # Function: 安装并配置 MySQL NDB 管理节点 # Author: tommypeng 20250730 set -e # 函数定义 function error_exit { echo -e \033[31m错误$1\033[0m 2 exit 1 } function success_msg { echo -e \033[32m$1\033[0m } # 权限检查 [[ $USER ! root ]] error_exit 请使用 root 用户执行此脚本。 # 防火墙与 SELinux 处理 systemctl stop firewalld systemctl disable firewalld success_msg 防火墙已关闭 sed -i s/^SELINUX.*/SELINUXdisabled/g /etc/selinux/config setenforce 0 success_msg SELinux 已关闭 # 安装包检查 tarball/root/mysql-cluster-gpl-7.6.16-linux-glibc2.12-x86_64.tar.gz [[ ! -f $tarball ]] error_exit 未找到安装包 $tarball请上传。 # 获取用户输入 read -erp 请输入管理节点IP地址: mgrIP read -erp 请输入 MySQL 节点 A 的 IP 地址: mysqlAIP read -erp 请输入 MySQL 节点 B 的 IP 地址: mysqlBIP read -erp 请输入数据节点1的 IP 地址: data1IP read -erp 请输入数据节点2的 IP 地址: data2IP # 主机名与 hosts 配置 hostnamectl set-hostname mgr cat /etc/hosts EOF $mgrIP mgr $mysqlAIP mysqla $mysqlBIP mysqlb $data1IP data1 $data2IP data2 EOF # 创建目录结构 mkdir -p /usr/local/mysql/data/mysql-cluster mkdir -p /data/mysql-cluster # 解压并安装 tar -xzf $tarball -C /tmp mv /tmp/mysql-cluster-gpl-7.6.16-linux-glibc2.12-x86_64/* /usr/local/mysql/ echo export PATH\$PATH:/usr/local/mysql/bin /etc/profile source /etc/profile # 生成 config.ini cat /data/mysql-cluster/config.ini EOF [ndbd default] NoOfReplicas2 DataMemory512M [ndb_mgmd default] PortNumber1186 Datadir/usr/local/mysql/data/mysql-cluster [tcp default] SendBufferMemory2M ReceiveBufferMemory64k [ndb_mgmd] NodeId99 HostName$mgrIP [ndbd] NodeId3 HostName$data1IP DataDir/usr/local/mysql/data [ndbd] NodeId4 HostName$data2IP DataDir/usr/local/mysql/data [mysqld] NodeId1 HostName$mysqlAIP [mysqld] NodeId2 HostName$mysqlBIP EOF # 提示启动信息 success_msg 配置完成请运行以下命令启动管理节点 echo -e \n\033[33mndb_mgmd -f /data/mysql-cluster/config.ini --initial\033[0mmysql节点脚本#!/bin/bash # Function: 安装并配置 NDB Cluster 中的 MySQL SQL 节点 # Author: tommypeng # Date: 2025-07-31 set -e # 工具函数 function error_exit { echo -e \033[31m[错误] $1\033[0m 2 exit 1 } function success_msg { echo -e \033[32m[完成] $1\033[0m } # 用户权限检查 [[ $USER ! root ]] error_exit 请使用 root 用户运行本脚本。 # 环境准备防火墙 SELinux systemctl stop firewalld systemctl disable firewalld success_msg 防火墙已关闭 sed -i s/^SELINUX.*/SELINUXdisabled/g /etc/selinux/config setenforce 0 success_msg SELinux 已关闭 # 检查安装包是否存在 TARBALL/root/mysql-cluster-gpl-7.6.16-linux-glibc2.12-x86_64.tar.gz [[ ! -f $TARBALL ]] error_exit 未找到安装包$TARBALL # 读取用户输入信息 read -erp 请输入管理节点 IP 地址 mgrIP read -erp 请输入本机节点名如 mysqla 或 mysqlb sqlNodeName read -erp 请输入本机 IP 地址 localIP # 主机名和 /etc/hosts hostnamectl set-hostname $sqlNodeName cat /etc/hosts EOF $mgrIP mgr $localIP $sqlNodeName EOF # 创建 mysql 用户组如不存在 groupadd -f mysql id mysql /dev/null || useradd -M -s /sbin/nologin -g mysql mysql # 解压并安装 MySQL tar -xzf $TARBALL -C /tmp mkdir -p /usr/local/mysql mv /tmp/mysql-cluster-gpl-7.6.16-linux-glibc2.12-x86_64/* /usr/local/mysql/ mkdir -p /usr/local/mysql/data chown -R mysql:mysql /usr/local/mysql # 设置环境变量 echo export PATH\$PATH:/usr/local/mysql/bin /etc/profile source /etc/profile # 复制启动脚本 cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld # 配置 MySQL my.cnf mv /etc/my.cnf /etc/my.cnf.bak 2/dev/null || true read -erp 请输入 SQL 节点 ID如 1 或 2不可重复 nodeId cat /etc/my.cnf EOF [mysqld] basedir/usr/local/mysql datadir/usr/local/mysql/data pid-file/usr/local/mysql/data/mysqld.pid usermysql port3306 character_set_serverutf8mb4 collation_serverutf8mb4_general_ci explicit_defaults_for_timestamptrue # NDB Cluster 相关配置 ndbcluster ndb-nodeid$nodeId default-storage-enginendbcluster ndb-connectstring$mgrIP:1186 # 性能配置 max_connections1000 max_allowed_packet128M query_cache_size0 innodb_buffer_pool_size512M [mysql_cluster] ndb-connectstring$mgrIP:1186 EOF # 初始化数据库 rm -rf /usr/local/mysql/data/* /usr/local/mysql/bin/mysqld --initialize --usermysql \ --basedir/usr/local/mysql --datadir/usr/local/mysql/data /root/init_mysql.log 21 # 提取临时密码 temp_pw$(grep temporary password /root/init_mysql.log | awk -F rootlocalhost: {print $2}) echo -e \033[33mMySQL 默认 root 密码$temp_pw\033[0m请登录后及时修改 # 启动 MySQL /etc/init.d/mysqld start success_msg MySQL 启动成功 # 提示登录 echo -e \n你可以使用以下命令连接数据库首次登录 echo -e \033[36mmysql -uroot -p\033[0mdata节点脚本#!/bin/bash # Function: 安装并配置 NDB Cluster 中的数据节点ndbd # Author: tommypeng # Date: 2025-07-31 set -e # 工具函数 function error_exit { echo -e \033[31m[错误] $1\033[0m 2 exit 1 } function success_msg { echo -e \033[32m[完成] $1\033[0m } # 权限检查 [[ $USER ! root ]] error_exit 请使用 root 用户运行此脚本。 # 防火墙与 SELinux systemctl stop firewalld systemctl disable firewalld success_msg 防火墙已关闭 sed -i s/^SELINUX.*/SELINUXdisabled/g /etc/selinux/config setenforce 0 success_msg SELinux 已关闭 # 检查安装包 TARBALL/root/mysql-cluster-gpl-7.6.16-linux-glibc2.12-x86_64.tar.gz [[ ! -f $TARBALL ]] error_exit 未找到安装包$TARBALL # 读取变量 read -erp 请输入管理节点 IP 地址: mgrIP read -erp 请输入 MySQL 节点 A 的 IP 地址: mysqlAIP read -erp 请输入 MySQL 节点 B 的 IP 地址: mysqlBIP read -erp 请输入数据节点 1 的 IP 地址: data1IP read -erp 请输入数据节点 2 的 IP 地址: data2IP read -erp 请输入当前数据节点主机名data1 或 data2: hostname read -erp 请输入当前数据节点的 ID如 3 或 4: nodeId # 设置主机名及 hosts hostnamectl set-hostname $hostname cat /etc/hosts EOF $mgrIP mgr $mysqlAIP mysqla $mysqlBIP mysqlb $data1IP data1 $data2IP data2 EOF success_msg /etc/hosts 已配置 # 创建用户和目录 groupadd -f mysql id mysql /dev/null || useradd -M -s /sbin/nologin -g mysql mysql tar -xzf $TARBALL -C /tmp mkdir -p /usr/local/mysql mv /tmp/mysql-cluster-gpl-7.6.16-linux-glibc2.12-x86_64/* /usr/local/mysql/ mkdir -p /usr/local/mysql/data chown -R mysql:mysql /usr/local/mysql success_msg MySQL Cluster 安装完毕 # 添加环境变量 if ! grep -q /usr/local/mysql/bin /etc/profile; then echo export PATH\$PATH:/usr/local/mysql/bin /etc/profile fi source /etc/profile # 配置 my.cnf mv /etc/my.cnf /etc/my.cnf.bak 2/dev/null || true cat /etc/my.cnf EOF [ndbd] # 数据节点配置 ndb-nodeid$nodeId ndb-connectstring$mgrIP:1186 datadir/usr/local/mysql/data [mysql_cluster] ndb-connectstring$mgrIP:1186 EOF success_msg /etc/my.cnf 已生成 # 启动数据节点 ndbd --initial --ndb-connectstringmgr success_msg 数据节点已初始化成功mysql节点启动后使用初始密码登陆后应该执行-- 第一步修改当前登录用户的密码强制要求ALTER USER rootlocalhost IDENTIFIED BY Pxg-1981;-- 第二步创建远程访问权限可选但常用GRANT ALL PRIVILEGES ON *.* TO root% IDENTIFIED BY Pxg-1981 WITH GRANT OPTION;-- 第三步刷新权限FLUSH PRIVILEGES;集群启动注意事项启动时先启动管理节点命令 ndb_mgmd -f /data/mysql-cluster/config.ini再启动mysql节点命令 /etc/init.d/mysqld start最后启动数据节点命令 ndbd --initial --ndb-connectstringmgr第一次启动ndbd 非首次启动集群功能验证管理节点运行命令查看所有节点状态[rootmgr mysql]# ndb_mgm -- NDB Cluster -- Management Client -- ndb_mgm show Connected to Management Server at: localhost:1186 Cluster Configuration --------------------- [ndbd(NDB)] 2 node(s) id3 10.10.10.240 (mysql-5.7.32 ndb-7.6.16, Nodegroup: 0, *) id4 10.10.10.241 (mysql-5.7.32 ndb-7.6.16, Nodegroup: 0) [ndb_mgmd(MGM)] 1 node(s) id99 10.10.10.237 (mysql-5.7.32 ndb-7.6.16) [mysqld(API)] 2 node(s) id1 10.10.10.238 (mysql-5.7.32 ndb-7.6.16) id2 10.10.10.239 (mysql-5.7.32 ndb-7.6.16) ndb_mgm按照下图逻辑去验证亦可祝君顺利
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进