Standing up a MySQL cluster

此配方将指导您完成设置MySQL群集的过程。 通过跨多个系统划分数据并维护副本以避免单点故障,群集数据库可以应对可伸缩性和高可用性的挑战。

集群的成员称为节点。 MySQL集群中有三种节点类型:数据节点,API节点和管理节点。 数据节点负责存储数据。 然后,用户和进程连接到API节点以访问数据库。 管理节点作为整体管理集群。 虽然可以在同一系统上安装多个节点,但是,API节点和数据节点都可以托管在同一系统上。 但是,在同一系统上托管多个数据节点显然不是一个好主意,因为它否定了MySQL分发数据的努力。

准备

此配方演示了如何使用四个系统部署MySQL集群。 第一个系统将托管管理节点,我们假设它具有IP地址192.168.56.100。 第二个系统将托管API节点并具有地址192.168.56.101。 其余系统将配置数据节点,并使用地址192.168.56.102和192.168.56.103。 您需要使用root帐户或sudo在所有四个系统上进行管理访问.

怎么做。。。

请按照以下步骤设置群集MySQL数据库:

  • 从MySQL网站下载集群存档,并使用tar解压缩其包:
curl -L dev.mysql.com/get/Downloads/MySQL-Cluster-7.4/  MySQL-Cluster-gpl-7.4.10-1.el7.x86_64.rpm-bundle.tar | tar x
  • 在每个系统上,安装perl-Data-Dumper并将已安装的mariadb-libspackage替换为下载的MySQL-Cluster-shared软件包:
yum install perl-Data-Dumper MySQL-Cluster-shared-gpl-*.rpmyum erase mariadb-libs
  • 在每个系统上安装MySQL-Cluster-server和MySQL-Cluster-client软件包:
yum install MySQL-Cluster-{server,client}-gpl-*.rpm
  • 在托管管理节点的系统上,创建/ var / lib / mysql-cluster目录:
mkdir /var/lib/mysql-cluster
  • 在/var/lib/mysql-cluster/config.ini中为管理节点创建集群的配置文件,如下所示:
[ndbd default]NoOfReplicas = 2DataMemory = 100MIndexMemory = 10MServerPort = 2202[ndb_mgmd]hostname = 192.168.56.100[mysqld]hostname = 192.168.56.101[ndbd]hostname = 192.168.56.102[ndbd]hostname = 192.168.56.103
  • 启动管理节点:
ndb_mgmd -f /var/lib/mysql-cluster/config.ini
  • 在管理节点系统的防火墙中打开端口1186:
firewall-cmd --zone=public --permanent --add-port=1186/tcpfirewall-cmd --reload
  • 在每个数据节点的系统上,使用以下命令创建文件/etc/my.cnf:
[mysql_cluster]ndb-connectstring = 192.168.56.100
  • 启动每个数据节点:
ndbd
  • 在数据节点的系统防火墙中打开端口2202:
firewall-cmd --zone=public --permanent --add-port=2202/tcpfirewall-cmd --reload
  • 使用以下命令在托管API节点的系统上创建/etc/my.cnf:
[mysqld]ndbclusterdefault-storage-engine = ndbcluster[mysql_cluster]ndb-connectstring = 192.168.56.100
  • 启动MySQL服务器作为API节点:
mysqld_safe &
  • 检索安装MySQL服务器时创建的root帐户的临时密码。 它记录在/root/.mysql_secret中:
cat /root/.mysql_secret
  • 使用mysqladmin为root帐户设置新密码。 提示输入当前密码时,请输入上一步中标识的密码:
mysqladmin -u root -p password
  • 在API节点系统的防火墙中打开端口3306:
firewall-cmd --zone=public --permanent --add-service=mysqlfirewall-cmd --reload
  • 使用托管管理节点的系统上的ndb_mgm客户端验证集群的状态:
ndb_mgm -e SHOW

工作原理

本文教您如何使用两个数据节点设置MySQL集群数据库:一个API节点和一个管理节点。 管理节点由ndb_mgmdprocess组成,该处理器向其他节点提供配置信息并对其进行监视。 在数据节点上,ndbd进程处理群集数据的存储,分区和复制。 知道管理节点和数据节点的MySQL服务器充当API节点,用户可以通过该节点使用集群数据库。

Oracle维护的存储库中可用的软件包是在不支持网络数据库(NDB)的情况下构建的,因此我们首先从MySQL网站下载了一个存档,该存档包含将安装支持NDB /集群的MySQL版本的软件包:

curl -L dev.mysql.com/get/Downloads/MySQL-Cluster-7.4/MySQL- Cluster-gpl-7.4.10-1.el7.x86_64.rpm-bundle.tar | tar x

MySQL抽象了数据的物理组织和操作细节,并将其委托给各种存储引擎。 不同的引擎具有不同的能力。 由于NDB引擎是实现集群的引擎,因此我们需要一个支持引擎的构建。 而不是像我们在其他配方中那样将curl的输出写入文件,这次我们使用x参数将输出直接传递给tar,以便动态扩展存档。

之后,我们从CentOS存储库安装了perl-Data-Dumper软件包,并将已安装的mariadb-libs软件包替换为每个系统上刚刚下载的MySQL-Cluster-shared软件包:

yum install perl-Data-Dumper MySQL-Cluster-shared-gpl-*.rpmyum erase mariadb-libs

MySQL-Cluster-shared软件包提供其他程序使用的共享库来使用MySQL。默认情况下,这些库取代了从CentOS存储库安装的MariaDB版本,使我们免于遇到会阻止干净安装的库冲突。由于之后不再需要它,我们卸载了mariadb-libspackage。

Yum在安装MySQL-Cluster-server软件包之后执行的一些安装后步骤是在Perl中编写的,并使用Perl的Data :: Dumper模块。这使得Perl-Data-Dumper包成为MySQL-Cluster-server包的依赖项。但是,一个错误导致Yum错过了这个,所以我们自己安装了这个包,以便MySQL-Cluster-server软件包的安装顺利进行。它不会阻止软件包的安装,但它需要我们手动完成一些额外的配置步骤。

有了这些要求,我们就在每个系统上安装了MySQL-Cluster-server和MySQL-Cluster-client软件包:

yum install MySQL-Cluster-{server,client}-gpl-*.rpm

整个集群的配置几乎集中在/var/lib/mysql-cluster/config.ini中的管理节点。 该文件分为几个部分,第一部分是[ndb default],它提供了应该用于集群的默认配置值。 这里的值适用于集群的每个节点,除非在相应节点的配置部分中被更具体的指令覆盖:

[ndbd default]NoOfReplicas = 2DataMemory = 100MIndexMemory = 10MServerPort = 2202

NoOfReplicas选项设置群集中的副本数。它的值可以设置为1或2,尽管2是推荐值。回想一下,不仅跨数据节点对集群数据库进行了分区,而且还对其进行了复制;每个节点通常承载一个分区,通常是数据库大小的1 / n(其中n是数据节点的数量),也是其他节点的副本。如果系统脱机,群集仍然可以正常运行,因为其数据在副本中仍然可用。 NoOfReplicas的值为1意味着只有一个数据库副本(没有副本),并且数据库的可用性取决于所有数据节点都在运行。

数据节点将其数据库的工作副本保存在RAM中,以减少延迟,同时定期将数据同步到磁盘。 DataMemory选项指定节点应为数据保留多少RAM,IndexMemory指定应为主键和唯一索引保留多少内存。无论您提供什么值,请确保有足够的资源可以避免RAM交换。

ServerPort选项指定节点将用于彼此通信的端口号。默认情况下,MySQL会动态分配端口,以便更容易在同一系统上运行多个节点,但由于此配方在其自己的主机系统上运行每个节点,我们需要知道端口以允许通过防火墙的流量,我们指定了我们自己。

配置中的后续部分使用hostname选项指定管理节点(通过[ndb_mgmtd]部分),API节点([mysqld]部分)和数据节点([ndbd]部分)的地址正在跑步。如多个[ndbd]部分所示,如果在集群中运行该类型的多个节点,则会出现相同类型的多个部分:

[ndb_mgmd]hostname = 192.168.56.100[mysqld]hostname = 192.168.56.101[ndbd]hostname = 192.168.56.102[ndbd]hostname = 192.168.56.103

在其余系统上,/etc/my.cnf被创建为数据节点和API节点使用的配置文件。 每个包含一个[mysql_cluster]部分,它提供了ndb-connectionstring选项:

[mysql_cluster]ndb-connectstring = 192.168.56.100

ndb-connectstring选项指定承载管理节点的系统的地址。 当数据和API节点联机时,它们与管理器通信以接收其配置信息。 如果您的群集有多个管理节点,则可以在用逗号分隔的连接字符串中列出其他节点:

ndb-connectstring = "192.168.56.100,192.168.56.105,192.168.56.106"

此外,API节点的配置包括[mysqld]部分。 它包括用于启用NDB引擎的ndbcluster选项和default-storage-engine选项,指示MySQL使用NDB来管理所有新表,除非在表的CREATE TABLE语句中另有指定:

[mysqld]ndbclusterdefault-storage-engine = ndbcluster

当用户或进程使用CREATE TABLE语句创建新表时,他们可以使用ENGINE指令指定应使用哪些MySQL存储引擎来管理其数据,例如:

CREATE TABLE users ( id INTEGER UNSIGNED NOT NULL PRIMARY KEY, first_name VARCHAR(50) NOT NULL DEFAULT '', last_name VARCHAR(50) NOT NULL DEFAULT '')ENGINE = NDBCluster;

默认引擎是InnoDB引擎。 但是,只有NDB管理的表中的数据才能进入群集。 如果表由另一个引擎管理,则数据驻留在API节点上本地,并且不可用于群集中的其他节点。 为了防止意外问题和这可能导致的任何混淆,我们更改了默认引擎,以便在未提供ENGINE指令时表将使用NDB引擎。

启动MySQL集群时启动节点的顺序很重要,因为一个节点可能依赖于其他节点。 首先启动管理节点,然后启动数据节点,然后启动API节点。

API节点上MySQL的root帐户的密码是在第一次启动服务器时随机生成的,并写入/root/.mysql_secret文件,就像我们在设置MySQL数据库配方时使用mysqladmin更改它一样:

cat /root/.mysql_secretmysqladmin -u root -p password

发送到管理节点系统上的ndb_mgm客户端的SHOW命令允许我们查看集群的状态,并确保一切正常运行。 可以在交互模式下调用客户端,也可以使用-e参数直接将命令传递给它:

ndb_mgm -e SHOW

可以使用ndb_mgm客户端查看MySQL集群的状态

See also

Refer to the following resources for more information on working with MySQL clusters:

  • MySQL Reference Manual: MySQL Cluster Core Concepts (http://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-basics.html)
  • MySQL Reference Manual: MySQL Cluster Installation (http://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-installation.html)
  • MySQL Reference Manual: MySQL Cluster Nodes, Node Groups, Replicas, and Partitions (http://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-nodes-groups.html)
  • MySQL Reference Manual: Online Backup of MySQL Cluster (http://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-backup.html)
  • Set Up a MySQL Cluster the Easy Way (http://youtube.com/watch?v=64jtbkuPtvc)
  • High Availability MySQL Cookbook by Alex Davies (https://www.packtpub.com/big-data-and-business-intelligence/high-availability-mysql-cookbook)

mysql群集配置_CentOS7 - 建立一个MySQL集群相关推荐

  1. MySQL主从架构、读写分离、集群相关面试问题

    文章目录 一.MySQL主从同步原理 二.MySQL主从集群面试相关问题 1.全库同步与部分同步 2.GTID同步集群 3.集群扩容与MySQL数据迁移 4.理解半同步复制 5.主从集群与读写分离 6 ...

  2. MySQL中间件之ProxySQL(13):ProxySQL集群

    返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html ProxySQL有原生的集群功能,但是这个原生的集群功能还正在试验阶段 ...

  3. centos7 mysql安装教程_centos7环境下MySQL安装教程

    Linux centos7环境下安装MySQL步骤的详细介绍 安装MySQL mysql 有两个跟windows不同的地方 1).my.ini 保存到/etc/my.ini 2).用户权限,单独用户执 ...

  4. mysql 修改配置生效_linux下面MySQL变量修改及生效

    今天在访问mysql项目的时候突然报500错误,没有找到连接,因此想到mysql的连接时间. mysql> show global variables; 主要就是连接时间是28800(8小时), ...

  5. 从永远到永远-Navicat将MySQL数据库复制到另一个Mysql数据库

    Navicat将MySQL数据库复制到另一个Mysql数据库 1.需求 2.方案 3.问题 1.需求 云服务器快到期了,实在不想续费了.一个是再续费太贵,再一个就是性能一般.索性直接买了个32G内存笔 ...

  6. mysql脑裂_如何防止HA集群的脑裂

    luozhaode:博主这篇有关脑裂的文章是我看到过的理解的最透彻的.真是学习了,不过在实际工作中还是对脑裂存在着疑惑,恳请博主释疑一下.谢谢! 我们熟知的脑裂问题一般表现形式是: 在mysql主备上 ...

  7. 建立HBase的集群和HDInsight在Hadoop中使用Hive来查询它们

    建立HBase的集群和HDInsight在Hadoop中使用Hive来查询它们 在本教程中,您将学习如何创建和查询HDInsight使用HiveHadoop的HBase的表.下列步骤描述: •如何使用 ...

  8. 使用kubeadm快速部署一个K8s集群

    kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具. 这个工具能通过两条指令完成一个kubernetes集群的部署: # 创建一个 Master 节点 $ kubeadm i ...

  9. 配置Windows Server2008故障转移集群

    Abner Kou原创 配置Windows Server2008故障转移集群 一. 问题描述 建立双节点的Windows Server 2008 故障转移集群,为Hyper-v的高可用和SQLServ ...

最新文章

  1. 【Ubuntu】ubuntu设置GUI程序自启动
  2. 这是一名南京985AI硕士,CSDN博客专家
  3. Android查询数据库问题
  4. 使用脚本实现自动清除指定文件夹下丢失链接文件的符号链接
  5. 用libevent实现简易的telnet
  6. 解决Could not load dynamic library ‘cudnn64_7.dll‘; dlerror cudnn64_7.dll not found
  7. js 实现2的n次方计算函数_JS中数据结构与算法---排序算法
  8. 542. 01 矩阵
  9. Java数据结构与算法之堆排序
  10. EPLAN电气设计入门学习笔记
  11. php图书借阅管理系统前台,php图书馆图书借阅管理系统
  12. 极客大学产品经理训练营:数据分析与用户数据 第17课总结
  13. 快速排序算法的发明者霍尔
  14. ROS远程连接Turtlebot3并进行简单的移动控制
  15. sapjco3的安装
  16. 区块链 :拜占庭将军问题 [BFT]
  17. ReactDOM.render 是如何串联渲染链路的?(中)
  18. 朝花夕拾 Mysql笔记3
  19. mysql 左连接不生效
  20. R中的直方图和核密度图绘制

热门文章

  1. linux下的单机工具,Linux下单机模式的Hadoop部署
  2. bilibili 解析_用 Python 抓取 bilibili 弹幕并分析!
  3. 一年代码功能点的创新性怎么写_查新报告的查新点(创新点)写法,参考
  4. 将张量转换为 int32 类型
  5. QT的QStackedLayout
  6. haar级联分类器--人脸检测和匹配
  7. postgres与osm初步使用
  8. linux 之间 copy 传输文件方法:ftp、samba、sftp、scp、sz/rz
  9. 红米k30pro工程测试代码_3299起?红米K30Pro官宣3.24发 对比米10 追悼会来了?
  10. java手机网站开发工具_制作网站常用的网页开发工具有哪些