MySql集群搭建笔记

2023-10-27

1.      Mysql集群介绍

Mysql集群架构中主要包括管理节点和数据节点,管理节点负责整个集群结构的管理,数据的存储则由各个数据节点负责。当然,像非集群环境一样,需要提供一个mysql的节点供外部程序访问数据库。Mysql 集群的具体组织方式图-01

 

图-01

接下来便对其中涉及的各个节点和模块进行一一介绍

Management Node(管理节点):mysql集群全局的管理者,整个集群只有一个management node,负责管理集群架构中的其他Nodes(节点),包括控制其他节点的启停,查看节点状态等。另外还维护了集群的全局配置信息,因此在整个集群环境中应该优先于所有节点启动。管理节点启动命令为ndb_mgmd.

Data Node(数据节点):数据的存储节点,集群中会有多个Data Node,每个节点存储数据多个数据副本。虽然mysql集群可以设置副本数量为1,即集群没有数据冗余,所有节点的只存储各自数据片段的副本,但是这样的集群也就失去了意义,所以为了保证高可用性,建议最好是设定副本数量至少为2,或者更大,一份用于存储,一份作为冗余。系统默认值为2. 冗余副本数量越大,需要的节点数就会越多。Data node 节点启动命令为ndbd.关于存储副本的概念参考图-02(来自官网)也许有助于理解副本、冗余的含义和作用。

 

图-02

如图-02,集群中存在四个data node,分别为node1、node2、node3、node4, 集群数据分区存储,其中node1存储数据的partition 0,同时存储partition 2的一个备份副本用作冗余。其他节点类似。那样的好处是什么呢,见图-03

 

图-03

在这个例子中,即使group0和group1中各有一个node故障,整个cluster中也会有一份完整的数据,保持系统运转正常。

 

Sql Node (SQL节点): 对外提供访问mysql集群数据的入口,该节点可以有多个。也就是在单机环境下的mysqld服务。在启动该服务以后,我们便可以通过标准的mysql client程序的访问数据数据库。启动命令为mysqld

Applications(外部应用):外部应用要想访问集群环境下的数据库并不能直接访问data node,访问的是sql node,访问方法与单机环境一致。

 

2.      集群方案介绍

本文以实例的方式演示mysql cluster环境的搭建,首先介绍下我们预设的集群实例的方案。

搭建环境为windows xp(虚拟机)。

节点

IP

主机名

管理节点

192.168.109.130

Xp1

数据节点1

192.168.109.131

Xp2

数据节点2

192.168.109.132

Xp3

SQL节点

192.168.109.130

Xp1

细心的读者可能发现了,SQL节点和管理节点是同一台虚拟机。这是因为笔者机器性能有限,同时开了三个虚拟机已经很吃力了。另外mysql cluster中各个节点并不是要求与机器是一对一的,也就是说这种节点的划分是逻辑上的,是进程级的,只要是不同的进程即可。所以一台主机上可以运行多个节点。

 

3.      安装过程

3.1    安装包下载

下载一个支持集群的mysql版本。Mysql的单机版和集群版是两个不同的安装包。因为本例是在windows环境下搭建,所以我们可以到官网的这个页面上去选择相应的安装包下载。http://dev.mysql.com/downloads/cluster/ 在本例中我们选择ZIP Archive的非安装版本 ,这样我们可以直接解压就能用。

把压缩包分别传至各个节点主机,然后解压到C盘。解压后目录以c:\mysql-cluster为例。

3.2    管理节点

主机xp1的C:\mysql-cluster\bin下新建一个文件config.ini,其中内容如下: 

 

Xml代码   收藏代码
  1. [ndbd default]  
  2. # Options affecting ndbd processes on all data nodes:  
  3. NoOfReplicas=2                      #复本数量,此例采用默认值2  
  4. DataDir=C:/mysql-cluster/bin/cluster-data   # 数据节点存储目录  
  5. DataMemory=80M    # 数据存储分配的内存,酌情设置  
  6. IndexMemory=18M   # 索引存储分配的内存,酌情设置  
  7.   
  8. [ndb_mgmd]  
  9. # Management process options:  
  10. HostName=192.168.109.130               # 管理节点所在主机IP  
  11. DataDir=C:/mysql-cluster/bin/cluster-logs   # 管理节点日志目录  
  12.   
  13. [ndbd]  
  14. # Options for data node "A":  
  15. # (one [ndbd] section per data node)  
  16. HostName=192.168.109.132           # 节点所在主机IP  
  17. datadir=C:/mysql-cluster/data   # 数据存储目录  
  18.   
  19. [ndbd]  
  20. # Options for data node "B":  
  21. HostName=192.168.109.133           # 节点所在主机IP  
  22. datadir=C:/mysql-cluster/data  
  23.   
  24. [mysqld]  
  25. # SQL node options:  
  26. HostName=192.168.109.130           # SQL节点所在主机IP  

 

这些为集群整体的配置信息,其中[ndbd default]为全局数据节点的默认配置模块。[ndb_mgmd]为管理节点配置模块。[ndbd]为数据节点配置模块。[mysqld]为sql节点配置模块。#后面为注释内容,实际文件可以将这些注释去掉,以防止因为中文的存在导致mysql解析文件失败。启动管理节点直接调用bin目录下的ndb_mgmd.exe即可,但是我们在命令后指定我们上述的配置文件和集群配置的缓存目录,所以命令为

 

Java代码   收藏代码
  1. ndb_mgmd.exe --config-file=C:\\mysql-cluster\\bin\\config.ini --configdir=C:\mysql-cluster\bin\config-cache  

 

为了方便起见,我们在c:\mysql-cluster\bin目录下新建一个文件ndb_mgmd_start.bat,将上述管理节点启动的命令写入该批处理文件中作为启动命令。

3.3    数据节点

我们以数据节点1为例介绍,节点2与此类似。在主机xp2的c:\mysql-cluster下新建文件my.ini。键入如下内容

 

Xml代码   收藏代码
  1. [mysql_cluster]  
  2. # Options for data node process:  
  3. ndb-connectstring=192.168.109.130  # location of management server  

 

 

3.4    SQL节点

在xp1节点的c:\mysql-cluster目录下新建文件my.ini,键入如下内容

 

Xml代码   收藏代码
  1. [mysqld]  
  2. ndbcluster                      # run NDB storage engine  
  3. ndb-connectstring=192.168.109.130  # location of management serve  

 

其中ndbcluster指定了存储引擎为集群环境,ndb-connectstring指定了管理节点的地址。

         到此为止所有节点配置工作就完成了。

4.      节点管理

4.1    ndb_mgm介绍

mysql cluster提供了ndb_mgm.exe来对集群进行管理,在xp1主机的c:\mysql-cluster\bin目录下。我们可以直接在命令行执行该命令进入管理控制台。(注:该程序需要在管理节点启动后才能执行)

常用的命令包括:

show: 显示集群中所有节点的状态。如图-04

 

图-04

Node_id status: 查看node_id对应的节点的状态

shutdown –e: 停止管理节点和所有数据节点。SQL节点不会被停掉。

笔者就简单用了这几个,其他命令还很多,可以通过HELP命令来查看。

4.2    节点启停

Mysql cluster启动有顺序要求,管理节点要最先启动。

启动管理节点:在命令行中进到c:\mysql-cluster\bin目录下,执行我们之前编辑的批处理文件ndb_mgmd_start.bat.如果启动正常,我们此时可以执行ndb_mgm程序,通过管理控制台查看节点状态了。

启动数据节点:依次在各个数据节点主机的命令行中进到c:\mysql-cluster\bin目录下,执行ndbd.exe 即可。通过ndb_mgm的管理控制台查看启动状态。

启动SQL节点:在SQL节点的命令行中进到c:\mysql-cluster\bin目录下,执行mysqld.exe即可。通过ndb_mgm的管理控制台查看启动状态。

                   节点停止:在ndb_mgm的管理控制台中执行shutdown –e 则管理节点和数据节点均会停止。另外SQL节点需要手动停止。

5.      验证

集群环境搭建完成我们可以对其进行验证。此处偷偷懒,直接引用一个官网的图,如图-05

 

图-05

注意图中建表语句中的ENGINE=NDBCLUSTER。

如果有兴致还以通过外部程序验证一下。注意外部程序访问URL还是SQL节点。

好了,这样我们的mysql 集群环境就搭建完成了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySql集群搭建笔记 的相关文章

  • 创建用于存储高尔夫球成绩的可扩展数据库架构

    我正在尝试设计一个数据库来存储我所有的朋友和我的高尔夫球成绩 您可能知道 高尔夫得分由 18 洞的个人得分组成 我可以想到两种设计模式的方法 创建一个表 每个洞有一列 例如 h1 到 h18 该表具有引用其他表的 FK player id
  • django.core.exceptions.ImproperlyConfigured:加载 MySQLdb 模块时出错:没有名为 MySQLdb 的模块

    我在尝试连接 mysql 数据库时遇到的问题 我还给出了我使用过的数据库设置 Traceback most recent call last File manage py line 10 in
  • 寻找多列索引的最佳顺序

    假设我有一个包含两个索引的表 一个位于 a 列 一个位于 a b 和 c 列 我注意到 根据索引定义中列的顺序 MySQL 可能最终使用单列索引而不是多列索引 即使多列索引中的所有三列都在 ON 中引用JOIN 的一部分 这有点引出了一个问
  • 尝试在本地主机上测试我的 php 文件,但只出现一个空白页面,没有错误消息

    我正在运行 Apache 和 mySQL 因为我检查了所有日志 似乎没有任何错误 我的目标是每当有新的表单条目时就向特定地址发送电子邮件 我对后端和 PHP 缺乏经验 所以我不太确定哪里出了问题 任何帮助将不胜感激
  • 选择不带 FROM 但有多于一行的选择

    如何在不从现有表中进行选择的情况下生成 2 行 2 列的表 我正在寻找的是一个返回的选择语句 e g id value 1 103 2 556 Use UNION http dev mysql com doc refman 5 0 en u
  • html 下钻下拉所选值未插入 MYSQL

    我有两个下拉列表 首先从数据库下拉填充 根据第一个下拉列表的选定值从数据库填充第二个下拉列表 document ready function c change function var c1 c selected text if c1 aj
  • 无循环按键对多维数组求和

    我有这个 Array 0 gt Array f count gt 1 uid gt 105 1 gt Array f count gt 0 uid gt 106 2 gt Array f count gt 2 uid gt 107 3 gt
  • 如何在pandas中将字符串转换为没有日期的日期时间

    例如issue d数据框中的列是字符串 df issue d Dec 2012 我想将字符串转换为日期时间类型而不是字符串类型 2012 12 怎么做 I use datetime strptime x b Y for x in df is
  • 澄清创建临时表的连接顺序

    我在 mysql 中有一个大型查询 涉及将多个表连接在一起 它太慢了 所以我做了 解释 发现它正在创建一个临时表 我怀疑它占用了大部分执行时间 我找到了一些相关资料 mysql 文档 http dev mysql com doc refma
  • MySQL:用户对数据库的访问被拒绝

    我正在尝试在 Heroku 上的远程 SQL 服务器上创建一个数据库 clearDB 我与此联系 mysql host lt
  • WordPress 访问

    我正在与朋友一起开发一个网站 使用Wordpress我们正在尝试从我的计算机和他的计算机访问同一个 WordPress 帐户 以便我们可以一起在网站上工作 我们尝试将彼此添加为管理员 但只能从创建管理员的计算机上访问新帐户 有谁知道如何做到
  • MySQL-分割字符串

    我的问题与这篇文章类似 MySQL 中的 反向 GROUP CONCAT https stackoverflow com questions 17308669 reverse group concat in mysql 然而 而不是反转gr
  • SQL:将现有列设置为 MySQL 中的主键

    我有一个包含 3 列的数据库 id name somethingelse 该表没有设置索引 我收到 未定义索引 在 phpmyadmin 中id 是一个 7 位字母数字值 每行都是唯一的 我想将 Drugid 设置为主键 索引 我不知道有没
  • MySQL:更新所有行将字段设置为0,但将一行的字段设置为1

    是否有一种有效的方法将行字段的选择更新为 0 但根据 ID 将其中一行设置为 1 基本上 我在数据库中有多个对象 我想在其中一个 inuse 之间切换 因此查询将其中一行 按 id 设置为 inuse 1 将其他行设置为 inuse 0 谢
  • 使用 Python 开发时保护 MySQL 密码?

    我正在编写一个使用本地托管的 MySQL 数据库的 Python 脚本 该程序将以源代码形式提供 这样 MySQL 密码就肉眼可见 有没有好的办法来保护这个呢 这个想法是为了防止一些顽皮的人查看源代码 直接访问 MySQL 并做一些事情 好
  • _mysql_connector.MySQLInterfaceError:命令不同步;您现在无法运行此命令 python msql.connector

    我有一个功能 您可以在下面看到 如果运行此函数 我将收到您在标题中看到的错误 您能帮助我吗 不久前我能够用锁解决这个问题 但现在它们不起作用 我知道这与我的连接有关 但我不知道如何解决这个问题 def insertNewValues sel
  • 如何使用Peewee查询多个相似的数据库?

    我遇到了使用 Peewee 查询多个数据库的问题 我有 2 个现有的 mysql 数据库 让我们将它们命名为 A 和 B 结构相似 因为它是两个 Bugzilla 数据库 我使用 Pwiz 生成模型 modelsA py 和 modelsB
  • MySQL ALTER TABLE 挂起

    我知道这个问题已经被问过好几次了 但我的问题发生在我刚刚创建的表上 它只有 10 列和 1 行 因此 与通常的挂起问题不同 这不是具有大量数据的大表的情况 但它仍然挂着 这是我正在运行的 SQL ALTER TABLE db Search
  • 使用 PHP 和 jSON 从 MySQL 获取 UIImage

    我正在开发一个小型新闻阅读器 它通过对 URL 执行 POST 请求来从网站检索信息 响应是一个带有未读新闻的 JSON 对象 例如 应用程序上的最新新闻的时间戳为 2013 03 01 当用户刷新表时 它会发布 domain com ap
  • TCPDF - 来自 mysql 的打印表显示重复的第一行

    我是 TCPDF 的新手 我面临的小问题是所有输出数据都显示同一行 我的意思是第一条记录重复数据库中存在的总数据 行 的次数 这是我的代码 tbl header

随机推荐

  • Python薪资的高涨原因及相应代码分析

    Python语言自问世以来 一直以其简洁 易学和多功能而受到广泛关注和应用 在近年来 Python编程语言的普及和应用领域的不断扩大 使得Python开发人员的需求量大幅增加 与此同时 Python工资也呈现出快速上涨的趋势 本文将深入探讨
  • JDK1.8新特性详解

    介绍 Java是世界上使用最广泛的编程语言之一 近年来随着互联网技术的高速发展 对Java的要求也越来越高 JDK1 8是Java平台上的一个重要版本 引入了许多新特性和改进 本文将详细介绍JDK1 8中的新特性和应用场景 一 Lambda
  • 日期处理(moment.js)使用笔记

    之前没接触moment js 在新项目中见到了 做一做使用笔记也是分享一下 安装 引用 npm install moment 或者 yarn add moment import moment from moment 导入文件 Vue pro
  • Spring Boot各版本与Java版本的对应兼容关系,与构建工具(Maven、Gradle)版本的对应兼容关系,对servlet 容器的支持

    by 垃圾程序员 当前文章具有时效性 在当前springboot的版本下做的整合 之后大家视情况可以直接到Spring的官网查看 Spring HomeLevel up your Java code and explore what Spr
  • MAC下QT5 + Xcode 4.6.3 使用小结

    1 直接在命令行里使用qmake 大家的MAC上面QT5的安装路径不同 导致不能直接使用qmake命令行 xcode项目也不能拿来就用 有两种方法可以直接在命令行里面使用qmake 1 修改 bash profile 此方法在PATH中添加
  • [C#学习] BindingNavigator控件

    一 概述 BindingNavigator控件的用户界面 UI 由一系列 ToolStrip 按钮 文本框和静态文本元素组成 用于进行大多数常见的数据相关操作 如添加数据 删除数据和在数据中导航 每个控件都可以通过 BindingNavig
  • Windows安全中心 你的IT管理员已限制对此应用的区域的访问

    打开本地组策略 gt 计算机配置 gt Windows设置 gt 安全设置 gt 本地策略 gt 安全选项 gt 打开安全选项后 gt 滚轮转动往下拉 gt 找到 用户账户控制 选择以管理员模式批准运行所有管理员 打开属性 选择已启用 应用
  • linux-文件时间详解

    不同的文件系统 不同的操作系统对于文件时间的设置是不同的 一般分为创建时间 birth 修改时间 ctime 访问时间 atime 一般默认情况下显示的是修改时间 ctime 即默认以修改时间 ctime 当作排序时间 即一般情况 ls l
  • vue中的事件绑定

    目录 1 事件处理 1 1 最简单的事件绑定例子 1 2 默认参数event 1 3 其它自定义参数 1 4 this 2 事件修饰符 2 1 prevent阻止默认事件 常用 2 2 stop阻止事件冒泡 常用 2 3 once事件只触发
  • [原创]微软BI专题-渐变维度Type2进化三部曲

    在ETL过程中 对于渐变维度的处理 一直是大家比较关注的问题 关于渐变维度的概念 我们在2007年8月的 渐变维度转换及其实现 一文中有所介绍 本文将在实际应用的对比中 提供三种处理渐变维度的方法 并比较其效率 第一代 SSIS控件时代 对
  • [数值计算-15]:函数近似值的线性与非线性拟合的原理与Python代码示例

    作者主页 文火冰糖的硅基工坊 https blog csdn net HiWangWenBing 本文网址 https blog csdn net HiWangWenBing article details 119973082 目录 第1章
  • Python实用脚本:统计TXT文件字数

    最近在用金山打字通练习98版的五笔输入法 想知道自己找的文章大概有多少个字数 因为txt文件打开看不了总字数 就复制后放在word看字数 感觉实在是麻烦 就找个了Python脚本来算字数 还能统计总共练习了多少个字 txt内容要转换成ANS
  • 解决httpcore和 httpclient 版本冲突,以及httpcore下载不了依赖的问题。

    目录 问题一 编辑 问题二 解决 问题一 maven install 报错说找不到httpcore 问题二 在项目运行时候找不到org apache http annotation ThreadSafe的类文件 解决 1 遇到该问题可能是h
  • 自动驾驶测试中的Re-simulation技术

    随着自动驾驶技术的发展 自动驾驶仿真的重要性越来越大 一是体现在上路之前可以通过仿真进行初步验证 二是体现在路上遇到问题时 可以通过仿真进行数据回放 改善算法模块性能 平时常见的自动驾驶仿真主要是利用软件搭载测试场景 然而 随着data d
  • 【解决】VS2019各种乱码的情况

    关于Visual Studio 2019控制台输出中文出现乱码问题及解决办法 1 从 txt文件中读取输出出现乱码 2 从中文字符串中读取输出出现乱码 3 上传git时 gitee github里出现乱码 总结 环境 Windows11 V
  • Torchtext 0.12+ API 根据token,得到语料中统计的频数值(3)

    使用OrderedDict构造vocab时会按照从大到小的排序来构造token 因此借用这个特点 构造一个列表 专门保存vocab中每一个单词的频数 此时列表的下标位置与vocab中下标位置是一一对应的 借助vocab将文本 gt toke
  • Python判断股票是交易日,爬虫抓取深交所交易日历

    为了判断某一天是不是股票的交易日 以此区分自然日与交易日 我们通过抓取深交所的交易日历获取相关数据 获取交易日思路 首先 打开深交所的交易日历页面 http www szse cn aboutus calendar index html 我
  • Nginx:配置访问页面认证(ngx_http_auth_basic_module)

    Nginx 配置访问页面认证 ngx http auth basic module 我们在访问一些网站的时候 会遇到下图这样的验证页面 类似这样的验证页面在nginx怎么进行配置呢 下面我们来做一个演示 安装niginx 直接使用yum安装
  • 【LaTeX中英排版系列】LaTeX中英双标题、作者、机构、摘要文档首页排版指北

    效果图预览 XeLaTeX可编译代码 documentclass 11pt article usepackage xeCJK CJK语言环境 使用XeLaTex进行编译 usepackage authblk 对应中文部分的作者机构特殊语法
  • MySql集群搭建笔记

    MySql集群搭建笔记 博客分类 配置与管理 数据库 Mysql cluster 集群 1 Mysql集群介绍 Mysql集群架构中主要包括管理节点和数据节点 管理节点负责整个集群结构的管理 数据的存储则由各个数据节点负责 当然 像非集群环