MySQL NDB Cluster 分布式架构搭建 自定义启动、重启和关闭集群Shell脚本

此次NDB Cluster使用三台虚拟机进行搭建,一台作为管理节点;而对于另外两台服务器,每一台都充当着数据节点和SQL节点的角色。注意不是MGR主从复制架构,而是分布式MySQL架构。

创建 /var/lib/mysql-cluster/config.ini Cluster全局配置文件

[NDBD DEFAULT]
NoOfReplicas =2
DataMemory = 512M
MaxNoOfExecutionThreads = 4
[NDB_MGMD]
NodeId=1
hostname =192.168.182.102
datadir =/var/lib/mysql-cluster
[NDBD]
NodeId =2
hostname =192.168.182.103
datadir =/usr/local/mysql-cluster/data
[NDBD]
NodeId =3
hostname =192.168.182.104
datadir =/usr/local/mysql-cluster/data
[mysqld]
NodeId =4
hostname =192.168.182.103
[mysqld]
NodeId =5
hostname =192.168.182.104

在管理节点中执行以下命令,初始化管理节点(注意mysql cluster路径是固定的,否则会报错)

/usr/local/mysql/mysql-cluster/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial --ndb-nodeid=1

创建 /etc/my.cnf mysql配置文件

[mysqld]
basedir=/usr/local/mysql-cluster
datadir=/usr/local/mysql-cluster/data
socket=/usr/local/mysql-cluster/sock/mysql.sock
user=hadoop
symbolic-links=0
ndbcluster
ndb-connectstring=192.168.182.102
port=3306

[mysql_cluster]
ndb-connectstring=192.168.182.102

[ndbd]
ndb-connectstring=192.168.182.102

[mysqld_safe]
log-error=/usr/local/mysql-cluster/logs/mysql.pid
pid-file=/usr/local/mysql-cluster/logs/error.log

[mysql]
socket=/usr/local/mysql-cluster/sock/mysql.sock
#
## include all files from the config directory
##
#!includedir /etc/my.cnf.d

 在初始化mysqld之前,需要将data、logs、sock文件夹创建完毕,否则无法初始化

[hadoop@hadoop103 mysql-cluster]$ pwd
/usr/local/mysql-cluster
[hadoop@hadoop103 mysql-cluster]$ ls
bin  docs  include  lib  LICENSE  man  README  share  support-files
[hadoop@hadoop103 mysql-cluster]$ mkdir data
[hadoop@hadoop103 mysql-cluster]$ mkdir sock
[hadoop@hadoop103 mysql-cluster]$ mkdir logs

 初始化mysqld,同时没有对root账号设置密码

[hadoop@hadoop103 mysql-cluster]$ bin/mysqld --initialize-insecure --user=hadoop
2024-03-01T22:50:53.201408Z 0 [Warning] [MY-010139] [Server] Changed limits: max_open_files: 1024 (requested 8161)
2024-03-01T22:50:53.201412Z 0 [Warning] [MY-010142] [Server] Changed limits: table_open_cache: 431 (requested 4000)
2024-03-01T22:50:53.202613Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release.
2024-03-01T22:50:53.202952Z 0 [System] [MY-013169] [Server] /usr/local/mysql-cluster/bin/mysqld (mysqld 8.0.36-cluster) initializing of server in progress as process 2947
2024-03-01T22:50:53.211541Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2024-03-01T22:50:53.873353Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2024-03-01T22:50:54.189948Z 0 [System] [MY-010865] [NDB] '--initialize' -> ndbcluster plugin disabled
2024-03-01T22:50:55.344321Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
[hadoop@hadoop103 mysql-cluster]$ sudo cp support-files/mysql.server /etc/init.d/mysqld
[hadoop@hadoop103 mysql-cluster]$ sudo chmod +x /etc/init.d/mysqld

再初始化初始化数据节点,注意此时初始化完毕会自动连接到管理节点

[hadoop@hadoop103 mysql-cluster]$ bin/ndbd --initial
2024-03-02 06:51:57 [ndbd] INFO     -- Angel connected to '192.168.182.102:1186'
2024-03-02 06:51:57 [ndbd] INFO     -- Angel allocated nodeid: 2

 集群目前连接情况

[hadoop@hadoop102 mysql-cluster]$ bin/ndb_mgm -e show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)]	2 node(s)
id=2	@192.168.182.103  (mysql-8.0.36 ndb-8.0.36, starting, Nodegroup: 0)
id=3 (not connected, accepting connect from 192.168.182.104)

[ndb_mgmd(MGM)]	1 node(s)
id=1	@192.168.182.102  (mysql-8.0.36 ndb-8.0.36)

[mysqld(API)]	2 node(s)
id=4 (not connected, accepting connect from 192.168.182.103)
id=5 (not connected, accepting connect from 192.168.182.104)

注意SQL节点需要在数据节点全部启动后,才能开始启动,所以别着急启动mysqld

同时为了防止在之后停止mysqld的时候,出现rm: cannot remove '/var/lock/subsys/mysql': Permission denied报错,导致后续无法启动mysqld,需要修改该文件夹的权限

sudo chown -R hadoop:hadoop /var/lock/subsys

第三台服务器操作同第二台操作一致。在第三台服务器完成数据节点初始化之后,便可以启动两个SQL节点。整个集群启动成功后的连接情况如下

[hadoop@hadoop102 mysql-cluster]$ bin/ndb_mgm -e show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)]	2 node(s)
id=2	@192.168.182.103  (mysql-8.0.36 ndb-8.0.36, Nodegroup: 0, *)
id=3	@192.168.182.104  (mysql-8.0.36 ndb-8.0.36, Nodegroup: 0)

[ndb_mgmd(MGM)]	1 node(s)
id=1	@192.168.182.102  (mysql-8.0.36 ndb-8.0.36)

[mysqld(API)]	2 node(s)
id=4	@192.168.182.103  (mysql-8.0.36 ndb-8.0.36)
id=5	@192.168.182.104  (mysql-8.0.36 ndb-8.0.36)

为了测试集群是否能够正常存储数据,需要在SQL节点中设置MySQL远程连接配置。在这里我创建了一个名为hadoop的用户,并赋予全部操作权限

[hadoop@hadoop103 mysql-cluster]$ bin/mysql -uroot

mysql> CREATE USER 'hadoop'@'%' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.03 sec)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'hadoop'@'%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.11 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

 在Navicat中测试连接情况

以下是自定义的集群启动Shell脚本 

#!/bin/bash

/usr/local/mysql/mysql-cluster/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini --config-cache=FALSE --ndb-nodeid=1

ssh hadoop103 /usr/local/mysql-cluster/bin/ndbd
ssh hadoop104 /usr/local/mysql-cluster/bin/ndbd

PASSWORD=123456
echo $PASSWORD | sudo -S ssh -t root@hadoop103 'service mysqld start'
echo $PASSWORD | sudo -S ssh -t root@hadoop104 'service mysqld start'

以下是自定义的关闭集群Shell脚本

#!/bin/bash

# 定义要查找的端口号
PORT=1186

PASSWORD=123456
# 使用 lsof 命令查找占用指定端口的进程,并提取进程 ID
PID=$(echo $PASSWORD | sudo -S lsof -t -i:$PORT)

# 检查是否找到了进程 ID
if [ -z "$PID" ]; then
    echo "未找到占用端口 $PORT 的进程"
else
    # 使用 kill 命令终止进程
    /usr/local/mysql/mysql-cluster/bin/ndb_mgm -e shutdown
    echo $PASSWORD | sudo -S kill -9 $PID
    echo "已终止进程 $PID"
fi


# 使用 lsof 命令查找占用指定端口的进程,并提取进程 ID
PID=$(echo $PASSWORD | sudo lsof -t -i:$PORT)

# 检查是否找到了进程 ID
if [ -z "$PID" ]; then
    echo "未找到占用端口 $PORT 的进程, the cluster will start"

    echo $PASSWORD | sudo -S ssh -t root@hadoop103 'service mysqld stop'
    echo $PASSWORD | sudo -S ssh -t root@hadoop104 'service mysqld stop'
else
    # 使用 kill 命令终止进程
    echo $PASSWORD | sudo -S kill -9 $PID
    echo "已终止进程 $PID"
fi

以下是自定义的集群重启Shell脚本(前提是hadoop102的root用户已经将ssh密钥分配给hadoop103和hadoop104的root用户,否则还需要输入密码;本机sudo不需要输入密码的前提是/etc/sudoers配置了该用户)

#!/bin/bash

# 定义要查找的端口号
PORT=1186

PASSWORD=123456
# 使用 lsof 命令查找占用指定端口的进程,并提取进程 ID
PID=$(echo $PASSWORD | sudo -S lsof -t -i:$PORT)

# 检查是否找到了进程 ID
if [ -z "$PID" ]; then
    echo "未找到占用端口 $PORT 的进程"
else
    # 使用 kill 命令终止进程
    /usr/local/mysql/mysql-cluster/bin/ndb_mgm -e shutdown
    echo $PASSWORD | sudo -S kill -9 $PID
    echo "已终止进程 $PID"
fi


# 使用 lsof 命令查找占用指定端口的进程,并提取进程 ID
PID=$(echo $PASSWORD | sudo lsof -t -i:$PORT)

# 检查是否找到了进程 ID
if [ -z "$PID" ]; then
    echo "未找到占用端口 $PORT 的进程, the cluster will start"

    /usr/local/mysql/mysql-cluster/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini --config-cache=FALSE --ndb-nodeid=1

    ssh hadoop103 /usr/local/mysql-cluster/bin/ndbd
    ssh hadoop104 /usr/local/mysql-cluster/bin/ndbd

    echo $PASSWORD | sudo -S ssh -t root@hadoop103 'service mysqld restart'
    echo $PASSWORD | sudo -S ssh -t root@hadoop104 'service mysqld restart'
else
    # 使用 kill 命令终止进程
    echo $PASSWORD | sudo -S kill -9 $PID
    echo "已终止进程 $PID"
fi

以下是集群重启的日志与结果

[hadoop@hadoop102 mysql-cluster]$ ./restart.sh 
Connected to Management Server at: localhost:1186
3 NDB Cluster node(s) have shutdown.
Disconnecting to allow management server to shutdown.
已终止进程 3123
未找到占用端口 1186 的进程, the cluster will start
MySQL Cluster Management Server mysql-8.0.36 ndb-8.0.36
2024-03-02 07:20:42 [MgmtSrvr] INFO     -- Skipping check of config directory since config cache is disabled.
2024-03-02 07:20:42 [MgmtSrvr] WARNING  -- at line 4: [DB] IndexMemory is deprecated, will use Number bytes on each ndbd(DB) node allocated for storing indexes instead
2024-03-02 07:20:42 [ndbd] INFO     -- Angel connected to '192.168.182.102:1186'
2024-03-02 07:20:42 [ndbd] INFO     -- Angel allocated nodeid: 2
2024-03-02 07:20:42 [ndbd] INFO     -- Angel connected to '192.168.182.102:1186'
2024-03-02 07:20:42 [ndbd] INFO     -- Angel allocated nodeid: 3
Pseudo-terminal will not be allocated because stdin is not a terminal.
Shutting down MySQL.... SUCCESS! 
Starting MySQL... SUCCESS! 
Pseudo-terminal will not be allocated because stdin is not a terminal.
Shutting down MySQL.... SUCCESS! 
Starting MySQL..... SUCCESS! 

参考链接

MySQL Cluster集群搭建-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/429980.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

uipath调用python代码获取网站验证码

用uipath自带的ocr读验证码不是很准确,选择调用python读验证码,需要导入ddddocr(3.8以下版本支持ddddocr) 用uipath程序将验证码图片保存到本地(也可以直接用python处理图片,保存到本地比较简单&#xff0…

xss.haozi.me:0X0D

alert(1) -> 记住要回车一下-->是js的一个注释符但是只能用在最前面前面有一个空格都不行

C++:String的模拟实现

模拟实现的节奏比较快,大家可以先去看看博主的关于string的使用,然后再来看这里的模拟实现过程 C:String类的使用-CSDN博客 String模拟实现大致框架迭代器以及迭代器的获取(public定义,要有可读可写的也要有可读不可写…

基于springboot+vue的医院药品管理系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

【Android】源码解析 Activity 的构成

本文是基于 Android 14 的源码解析。 当我们写 Activity 时会调用 setContentView() 方法来加载布局。现在来看看 setContentView() 方法是怎么实现的,源码如下所示: 路径:/frameworks/base/core/java/android/app/Activity.javapublic void…

Linux中服务端开发

1 创建socket,返回一个文件描述符lfd---socket(); 2 将lfd和IP,PROT进行绑定---bind(); 3 将lfd由主动变成被动监听---listen(); 4 接收一个新的连接,得到一个的文件描述符cfd--accept() --该文件描述符用于与客户端通信 5 while(1) { 接受数据&a…

【扩散模型系列3】DiT开源项目

文章目录 DiT原始项目Fast-DiT readmeSamplingTraining训练之前的准备训练DiTPyTorch 训练结果改进训练效果 Evaluation (FID, Inception Score, etc.) 总结 DiT原始项目 该项目仅针对DiT训练,并未包含VAE 的训练 项目地址 论文主页 Fast-DiT readme 该项目仅针…

性能优化篇(七) UI优化注意事项以及使用Sprite Atlas打包精灵图集

UI优化注意事项 1.尽量避免使用IMGUI(OnGUI)来做游戏时的UI,因为IMGUI的开销比较大。 2.如果一个UGUI的控件不需要进行射线检测,则可以取消勾选Raycast Target 3.尽量避免使用完全透明的图片和UI控件。因为即使完全透明,我们看不见它&#xf…

论文笔记:Code Llama: Open Foundation Models for Code

导语 Code Llama是开源模型Llama 2在代码领域的一个专有模型,作者通过在代码数据集上进行进一步训练得到了了适用于该领域的专有模型,并在测试基准中超过了同等参数规模的其他公开模型。 链接:https://arxiv.org/abs/2308.12950机构&#x…

[cg] Games 202 - NPR 非真实感渲染

NPR特性(基于真实感渲染) 真实感--》翻译成非真实感的过程 NPR风格 需要转换为渲染中的操作 1.描边 B-->普通边界(不是下面几种的) C-->折痕 M-->材质边界 S-->需要在物体外面一圈上,并且是多个面共享…

win11部署自己的privateGpt(2024-0304)

什么是privateGpt? privategpt开源项目地址 https://github.com/imartinez/privateGPT/tree/main 官方文档 https://docs.privategpt.dev/overview/welcome/welcome PrivateGPT是一个可投入生产的人工智能项目,利用大型语言模型(LLMs)的…

流行 NFT 的必备指南

​作者:stellafootprint.network 编译:mingfootprint.network 来源:Footprint Analytics Blog 随着爱好者们对 NFT 的兴趣不断高涨,Footprint Analytics 发布了一系列文章,重点介绍各种热门 NFT 系列。这些文章深入…

GBU808-ASEMI整流桥GBU808参数、封装、尺寸

编辑:ll GBU808-ASEMI整流桥GBU808参数、封装、尺寸 型号:GBU808 品牌:ASEMI 封装:GBU-4 最大重复峰值反向电压:800V 最大正向平均整流电流(Vdss):8A 功率(Pd):中小功率 芯片个数&#…

【网站项目】075学生信息管理系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

xss.haozi.me:0x0B

<svg><script>(1)</script>

WebSocket 详解教程

概述 WebSocket 是什么&#xff1f; WebSocket 是一种网络通信协议。RFC6455 定义了它的通信标准。 WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。 为什么需要 WebSocket &#xff1f; 了解计算机网络协议的人&#xff0c;应该都知道&#x…

基于云的虚拟桌面基础架构 (VDI)的优势有哪些?

OpenText™ Exceed TurboX™ &#xff08;ETX&#xff09; 长期以来一直是虚拟化在 Linux 主机上运行的图形要求苛刻的软件的黄金标准。ETX 最新版本&#xff08;12.5&#xff09;增加了许多Microsoft Windows功能&#xff0c;包括Windows服务器&#xff0c;使ETX成为任何Windo…

HCIA-Datacom题库(自己整理分类的)_33_DHCP协议多选【7道题】

1.使用动态主机配置协议DHCP分配IP地址有哪些优点? 可以实现IP地址重复利用 工作量大且不好管理 配置信息发生变化(如DNS),只需要管理员在DHCP服务器上修改,方便统一管理 避免IP地址冲突 2.网络中部署了一台DHCP服务器,但是管理员发现部分主机并没有正确获取到该DHCP服务…

Kafka面经

1.Kafka如何保证消息不丢失 生产者&#xff1a; 1.Producer 默认是异步发送消息&#xff0c;这种情况下要确保消息发送成功&#xff0c;有两个方法 a. 把异步发送改成同步发送&#xff0c;这样 producer 就能实时知道消息发送的结果。 b. 添加异步回调函数来监听消息发送的结…

UNIapp实现局域网内在线升级

首先是UNIapp 生成apk 用Hbuilder 进行打包 可以从网站https://www.yunedit.com/reg?gotocert 使用自有证书&#xff0c;目测比直接使用云证书要快一些。 发布apk 网站 用IIS发布即可 注意事项中记录如下内容 第一、需要在 iis 的MiMe 中添加apk 的格式&#xff0c;否则无法…