MySQL集群(mysql-cluster)

环境

系统环境:centos7

管理节点:192.168.127.128

数据节点:192.168.127.145,192.168.127.146

sql节点:192.168.127.145,192.168.127.146

约定

创建mysql用户,将程序部署到/home/mysql 目录下

数据节点、sql节点必须卸载mariadb

管理节点 创建/var/lib/mysql/mysql-cluster 目录,且mysql账户有读写权限

管理节点部署

/home/mysql目录下创建config.ini 文件

ini 复制代码
[ndbd default]
NoOfReplicas=2
 
[ndb_mgmd]
NodeId=1
hostname=192.168.127.128
datadir=/home/mysql/mysql-cluster/
 
[ndbd]
NodeId=2
hostname=192.168.127.145
datadir=/home/mysql/data/
[ndbd]
NodeId=3
hostname=192.168.127.146
datadir=/home/mysql/data/
 
[mysqld]
NodeId=4
hostname=192.168.127.145
[mysqld]
NodeId=5
hostname=192.168.127.146

第一次启动执行

shell 复制代码
./bin/ndb_mgmd -f ./config.ini --initial

关闭命令

shell 复制代码
./bin/ndb_mgm -e shutdown

数据节点、sql节点部署

在/etc 目录下创建my.cnf

其中mysql_cluster节点为数据节点的配置,其他的为mysql节点的配置

ini 复制代码
[client]
socket=/home/mysql/mysql.sock

[mysqld]
basedir=/home/mysql
datadir=/home/mysql/data
socket=/home/mysql/mysql.sock
user=mysql
symbolic-links=0
ndbcluster
ndb-connectstring=192.168.127.128

[mysqld_safe]
log-error=/home/mysql/mysqld.log
pid-file=/home/mysql/mysqld.pid

[mysql_cluster]
ndb-connectstring=192.168.127.128

启动数据节点

第一次启动需要加 --initial 参数

shell 复制代码
./bin/ndbd --initial

mysqld配置

(1)初始换数据:

shell 复制代码
./bin/mysqld --initialize

(2)启动mysql

shell 复制代码
./bin/mysqld_safe --user=mysql &

(3) 登录mysql修改root账户密码

sh 复制代码
set password for 'root'@'localhost' = password('123456')
grant all privileges on *.* to 'root'@'%' identified by '123456'

(4)mysqld 关闭

Kill 掉mysqld_safe进程即可

再次启动需要删除 mysql.sock、mysqld.pid、mysql.sock.lock 文件

启动顺序

管理节点>数据节点>sql节点(必须等上级所有节点启动后才能启动下级节点)

关闭顺序

管理节点>数据节点>sql节点

动态增加sql节点、数据节点

一般来说NoOfReplicas是2,那么增加或减少的数量也应该是成对的。一次需要增加2n个数据节点、或者2n个sql节点(n>=1)

修改配置

在config.ini 中增加sql节点或者数据节点

关闭管理节点

执行ndb_mgm进入管理命令界面

找到管理节点的id,然后执行 管理节点id stop,退出

启动

shell 复制代码
./bin/ndb_mgmd -f ./config.ini --reload

滚动重启旧的数据存储节点服务(滚动重启,不能所有节点同时重启,如果同时停止,数据库前端查询就会出现错误)

shell 复制代码
ndb_mgm> [ndb_id] restart 

滚动重启所有的数据查询节点服务:可以将mysqld_safe的启动、关闭写成shell脚本,通过脚本重启mysql服务

脚本

kill_mysqld_safe.sh

shell 复制代码
#!/bin/bash


sp_pid=`ps -ef | grep mysqld_safe | grep -v grep | awk '{print $2}'`
if [ -z "$sp_pid" ]
then
 echo "[ not find mysqld_safe pid ]"
else
 echo "find result: $sp_pid "
 kill -9 $sp_pid
fi

spm_pid=`ps -ef | grep mysqld | grep -v grep | awk '{print $2}'`
if [ -z "$spm_pid" ]
then
 echo "[ not find mysqld pid ]"
else
 echo "find result: $spm_pid"
 kill -9 $spm_pid
fi


rm -f mysql.sock
rm -f mysql.sock.lock
rm -f mysqld.pid

echo "remove mysql.sock,mysqld.pid,mysql.sock.lock"

kill_ndbd.sh

shell 复制代码
#!/bin/bash


sp_pid=`ps -ef | grep ndbd | grep -v grep | awk '{print $2}'`
if [ -z "$sp_pid" ]
then
 echo "[ not find ndbd pid ]"
else
 echo "find result: $sp_pid "
 kill -9 $sp_pid
fi

start_mysqld_safe.sh

shell 复制代码
#!/bin/bash
./bin/mysqld_safe --user=mysql &

start_ndbd.sh

shell 复制代码
#!/bin/bash

./bin/ndbd &
相关推荐
博一波9 分钟前
Redis 集群:连锁银行的 “多网点智能协作系统”
数据库·redis·缓存
HashData酷克数据15 分钟前
官宣:Apache Cloudberry (Incubating) 2.0.0 发布!
数据库·开源·apache·cloudberry
秋难降15 分钟前
SQL 索引突然 “罢工”?快来看看为什么
数据库·后端·sql
TDengine (老段)1 小时前
TDengine 时间函数 TODAY() 用户手册
大数据·数据库·物联网·oracle·时序数据库·tdengine·涛思数据
码界奇点1 小时前
KingbaseES一体化架构与多层防护体系如何保障企业级数据库的持续稳定与弹性扩展
数据库·架构·可用性测试
悟乙己1 小时前
数据科学家如何更好地展示自己的能力
大数据·数据库·数据科学家
皆过客,揽星河2 小时前
mysql进阶语法(视图)
数据库·sql·mysql·mysql基础语法·mysql进阶语法·视图创建修改删除
tuokuac2 小时前
Redis 的相关文件作用
数据库·redis·缓存
鹧鸪云光伏与储能软件开发3 小时前
投资储能项目能赚多少钱?小程序帮你测算
运维·数据库·小程序·光伏·光伏设计软件·光伏设计
2301_779503765 小时前
MySQL主从同步--主从复制进阶
数据库·mysql