首页 数据库 mysql教程 MySQL优化之-集群搭建代码步骤详解(图)

MySQL优化之-集群搭建代码步骤详解(图)

Mar 10, 2017 am 10:54 AM

1 概述


MySQL Cluster 是MySQL 适合于分布式计算环境的高实用、可拓展、高性能、高冗余版本,其研发设计的初衷就是要满足许多行业里的最严酷应用要求,这些应用中经常要求数据库运行的可靠性要达到99.999%。MySQL Cluster允许在无共享的系统中部署“内存中”数据库集群,通过无共享体系结构,系统能够使用廉价的硬件,而且对软硬件无特殊要求。此外,由于每个组件有自己的内存和磁盘,不存在单点故障。

实际上,MySQL集群是把一个叫做NDB的内存集群存储引擎集成与标准的MySQL服务器集成。它包含一组计算机,每个都跑一个或者多个进程,这可能包括一个MySQL服务器,一个数据节点,一个管理服务器和一个专有的一个数据访问程序。

MySQL Cluster能够使用多种故障切换和负载平衡选项配置NDB存储引擎,但在Cluster 级别上的存储引擎上做这个最简单。以下为MySQL集群结构关系图,


 

MySQL从结构看,由3类节点(计算机或进程)组成,分别是:

管理节点:用于给整个集群其他节点提供配置、管理、仲裁等功能。理论上通过一台服务器提供服务就可以了。

数据节点:MySQL Cluster的核心,存储数据、日志,提供数据的各种管理服务。2个以上 时就能实现集群的高可用保证,DB节点增加时,集群的处理速度会变慢。

SQL节点(API):用于访问MySQL Cluster数据,提供对外应用服务。增加 API 节点会提高整个集群的并发访问速度和整体的吞吐量,该节点 可以部署在Web应用服务器上,也可以部署在专用的服务器上,也开以和DB部署在 同一台服务器上。

2 NDB引擎


MySQL Cluster 使用了一个专用的基于内存的存储引擎——NDB引擎,这样做的好处是速度快, 没有磁盘I/O的瓶颈,但是由于是基于内存的,所以数据库的规模受系统总内存的限制, 如果运行NDB的MySQL服务器一定要内存够大,比如4G, 8G, 甚至16G。NDB引擎是分布式的,它可以配置在多台服务器上来实现数据的可靠性和扩展性,理论上 通过配置2台NDB的存储节点就能实现整个数据库集群的冗余性和解决单点故障问题。


2.1 缺陷


  • 基于内存,数据库的规模受集群总内存的大小限制

    基于内存,断电后数据可能会有数据丢失,这点还需要通过测试验证。

    多个节点通过网络实现通讯和数据同步、查询等操作,因此整体性受网络速度影响,

    因此速度也比较慢

     

    2.2 优点


    • 多个节点之间可以分布在不同的地理位置,因此也是一个实现分布式数据库的方案。

      扩展性很好,增加节点即可实现数据库集群的扩展。

      冗余性很好,多个节点上都有完整的数据库数据,因此任何一个节点宕机都不会造成服务中断。

      实现高可用性的成本比较低,不象传统的高可用方案一样需要共享的存储设备和专用的软件才能实现,NDB 只要有足够的内存就能实现。

二、集群搭建

将搭建一个最简化的MySQL Cluster系统,配置方法中的所有命令都是以root账户运行。这个MySQL Cluster包含一个管理结点、两个数据结点、两个SQL结点,这五个结点会分别安装在五个虚拟机上,虚拟机的名称和IP如下所示:

管理结点

mysql-mgm

192.168.124.141

数据结点 1

mysql-ndbd-1

192.168.124.142

数据结点 2

mysql-ndbd-2

192.168.124.143

SQL 结点1

mysql-sql-1

192.168.124.144

SQL 结点2

mysql-sql-2

192.168.124.145

  

一、公共配置

请在三个虚拟机上分别配置此处的配置项。

1. 安装虚拟机

虚拟机操作系统安装CentOS 6.4的x86_64版本,使用NAT网络,并且还要安装vmware-tools,具体安装方法此处不详述。

2. 拷贝mysql cluster

下载以下版本的MySQL-Cluster:

http://www.php.cn/

下载得到的压缩包拷贝至虚拟机的/root/Downloads目录,然后在shell中运行以下命令:

cd /root/Downloads
tar -xvzf mysql-cluster-gpl-7.3.4-linux-glibc2.5-x86_64.tar.gz
mv mysql-cluster-gpl-7.3.4-linux-glibc2.5-x86_64 /usr/local/mysql
登录后复制

3. 关闭安全策略

关闭iptables防火墙(或者打开防火墙的1186、3306端口),在Shell中运行以下命令:

chkconfig --level 35 iptables off
登录后复制

关闭SELinux,在Shell中运行以下命令:

gedit /etc/selinux/config
登录后复制

将config文件中的SELINUX项改为disabled,修改后的config文件的内容如下:

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted
登录后复制

最后重启系统

二、配置管理结点(192.168.124.141)

1. 配置config.ini配置文件

在shell中运行以下命令:

mkdir /var/lib/mysql-cluster
cd /var/lib/mysql-cluster
gedit config.ini
登录后复制


配置文件config.ini内容如下:

[ndbd default]
NoOfReplicas=2
DataMemory=80M
IndexMemory=18M
[ndb_mgmd]
NodeId=1
hostname=192.168.124.141
datadir=/var/lib/mysql-cluster
[ndbd]
NodeId=2
hostname=192.168.124.142
datadir=/usr/local/mysql/data
[ndbd]NodeId=3hostname=192.168.124.143datadir=/usr/local/mysql/data
[mysqld]NodeId=4hostname=192.168.124.144
[mysqld]
NodeId=5
hostname=192.168.124.145
登录后复制

2. 安装管理结点

安装管理节点,不需要mysqld二进制文件,只需要MySQL Cluster服务端程序(ndb_mgmd)和监听客户端程序(ndb_mgm)。在shell中运行以下命令:

cp /usr/local/mysql/bin/ndb_mgm* /usr/local/bin
cd /usr/local/bin
chmod +x ndb_mgm*
登录后复制

三、配置数据结点(192.168.124.142、192.168.124.143)

1. 添加mysql组和用户

在shell中运行以下命令:

groupadd mysql
useradd -g mysql mysql
登录后复制
登录后复制

2. 配置my.cnf配置文件

在shell中运行以下命令:

gedit /etc/my.cnf
登录后复制
登录后复制

配置文件my.cnf的内容如下:

[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/sock/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql_cluster]
ndb-connectstring=192.168.124.141
登录后复制

3. 创建系统数据库

在shell中运行以下命令:

cd /usr/local/mysql
mkdir sock
scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
登录后复制
登录后复制

4. 设置数据目录

在shell中运行以下命令:

chown -R root .
chown -R mysql.mysql /usr/local/mysql/data
chown -R mysql.mysql /usr/local/mysql/sock
chgrp -R mysql .
登录后复制
登录后复制

5. 配置MySQL服务

在shell中运行以下命令:

cp support-files/mysql.server /etc/rc.d/init.d/
chmod +x /etc/rc.d/init.d/mysql.server
chkconfig --add mysql.server
登录后复制
登录后复制

四、配置SQL结点(192.168.124.144、192.168.124.145)

1. 添加mysql组和用户

在shell中运行以下命令:

groupadd mysql
useradd -g mysql mysql
登录后复制
登录后复制

2. 配置my.cnf配置文件

在shell中运行以下命令:

gedit /etc/my.cnf
登录后复制
登录后复制

配置文件my.cnf的内容如下:

[client]
socket=/usr/local/mysql/sock/mysql.sock
[mysqld]
ndbcluster
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/sock/mysql.sock
ndb-connectstring=192.168.124.141
[mysql_cluster]
ndb-connectstring=192.168.124.141
登录后复制

3. 创建系统数据库

在shell中运行以下命令:

cd /usr/local/mysql
mkdir sock
scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
登录后复制
登录后复制

4. 设置数据目录

在shell中运行以下命令:

chown -R root .
chown -R mysql.mysql /usr/local/mysql/data
chown -R mysql.mysql /usr/local/mysql/sock
chgrp -R mysql .
登录后复制
登录后复制

5. 配置MySQL服务

在shell中运行以下命令:

cp support-files/mysql.server /etc/rc.d/init.d/
chmod +x /etc/rc.d/init.d/mysql.server
chkconfig --add mysql.server
登录后复制
登录后复制

五、Cluster环境启动

注意启动顺序:首先是管理节点,然后是数据节点,最后是SQL节点。

1. 启动管理结点

在shell中运行以下命令:

ndb_mgmd -f /var/lib/mysql-cluster/config.ini
登录后复制

还可以使用ndb_mgm来监听客户端,如下:

ndb_mgm
登录后复制

2. 启动数据结点

首次启动,则需要添加--initial参数,以便进行NDB节点的初始化工作。在以后的启动过程中,则是不能添加该参数的,否则ndbd程序会清除在之前建立的所有用于恢复的数据文件和日志文件。

/usr/local/mysql/bin/ndbd --initial
登录后复制

如果不是首次启动,则执行下面的命令。

/usr/local/mysql/bin/ndbd
登录后复制

3. 启动SQL结点

若MySQL服务没有运行,则在shell中运行以下命令:

/usr/local/mysql/bin/mysqld_safe --user=mysql &
登录后复制

4. 启动测试

查看管理节点,启动成功:

六、集群测试

1. 测试一

现在我们在其中一个SQL结点上进行相关数据库的创建,然后到另外一个SQL结点上看看数据是否同步。

在SQL结点1(192.168.124.144)上执行:

shell> /usr/local/mysql/bin/mysql -u root -p
mysql>show databases;
mysql>create database aa;
mysql>use aa;
mysql>CREATE TABLE ctest2 (i INT) ENGINE=NDB; //这里必须指定数据库表的引擎为NDB,否则同步失败
mysql> INSERT INTO ctest2 () VALUES (1);
mysql> SELECT * FROM ctest2;
登录后复制

然后在SQL结点2上看数据是否同步过来了

经过测试,在非master上创建数据,可以同步到master上

查看表的引擎是不是NDB,>show create table 表名;

2. 测试二

关闭一个数据节点 ,在另外一个节点写输入,开启关闭的节点,看数据是否同步过来。

首先把数据结点1重启,然后在结点2上添加数据

在SQL结点2(192.168.124.145)上操作如下:

mysql> create database bb;
mysql> use bb;
mysql> CREATE TABLE ctest3 (i INT) ENGINE=NDB;
mysql> use aa;
mysql> INSERT INTO ctest2 () VALUES (3333);
mysql> SELECT * FROM ctest2;
登录后复制

等数据结点1启动完毕,启动数据结点1的服务

#/usr/local/mysql/bin/ndbd --initial#service mysqld start
登录后复制


然后登录进去查看数据

# /usr/local/mysql/bin/mysql -u root –p
登录后复制


可以看到数据已经同步过来了,说明数据可以双向同步了。

七、关闭集群

1. 关闭管理节点和数据节点,只需要在管理节点(ClusterMgm--134)里执行:

shell> /usr/local/mysql/bin/ndb_mgm -e shutdown
登录后复制

显示

Connected to Management Server at: localhost:1186
2 NDB Cluster node(s) have shutdown.
Disconnecting to allow management server to shutdown.
登录后复制

2. 然后关闭Sql节点(135,136),分别在2个节点里运行:

shell> /etc/init.d/mysql.server stop
Shutting down MySQL... SUCCESS!
登录后复制

注意:要再次启动集群,就按照第五部分的启动步骤即可,不过这次启动数据节点的时候就不要加”-initial”参数了。


以上是MySQL优化之-集群搭建代码步骤详解(图) 的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1672
14
CakePHP 教程
1428
52
Laravel 教程
1332
25
PHP教程
1277
29
C# 教程
1257
24
laravel入门实例 laravel入门实例 Apr 18, 2025 pm 12:45 PM

Laravel 是一款 PHP 框架,用于轻松构建 Web 应用程序。它提供一系列强大的功能,包括:安装: 使用 Composer 全局安装 Laravel CLI,并在项目目录中创建应用程序。路由: 在 routes/web.php 中定义 URL 和处理函数之间的关系。视图: 在 resources/views 中创建视图以呈现应用程序的界面。数据库集成: 提供与 MySQL 等数据库的开箱即用集成,并使用迁移来创建和修改表。模型和控制器: 模型表示数据库实体,控制器处理 HTTP 请求。

MySQL和PhpMyAdmin:核心功能和功能 MySQL和PhpMyAdmin:核心功能和功能 Apr 22, 2025 am 12:12 AM

MySQL和phpMyAdmin是强大的数据库管理工具。1)MySQL用于创建数据库和表、执行DML和SQL查询。2)phpMyAdmin提供直观界面进行数据库管理、表结构管理、数据操作和用户权限管理。

MySQL与其他编程语言:一种比较 MySQL与其他编程语言:一种比较 Apr 19, 2025 am 12:22 AM

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。 MySQL以其高性能、可扩展性和跨平台支持着称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

laravel框架安装方法 laravel框架安装方法 Apr 18, 2025 pm 12:54 PM

文章摘要:本文提供了详细分步说明,指导读者如何轻松安装 Laravel 框架。Laravel 是一个功能强大的 PHP 框架,它 упростил 和加快了 web 应用程序的开发过程。本教程涵盖了从系统要求到配置数据库和设置路由等各个方面的安装过程。通过遵循这些步骤,读者可以快速高效地为他们的 Laravel 项目打下坚实的基础。

在MySQL中解释外键的目的。 在MySQL中解释外键的目的。 Apr 25, 2025 am 12:17 AM

在MySQL中,外键的作用是建立表与表之间的关系,确保数据的一致性和完整性。外键通过引用完整性检查和级联操作维护数据的有效性,使用时需注意性能优化和避免常见错误。

比较和对比Mysql和Mariadb。 比较和对比Mysql和Mariadb。 Apr 26, 2025 am 12:08 AM

MySQL和MariaDB的主要区别在于性能、功能和许可证:1.MySQL由Oracle开发,MariaDB是其分支。2.MariaDB在高负载环境中性能可能更好。3.MariaDB提供了更多的存储引擎和功能。4.MySQL采用双重许可证,MariaDB完全开源。选择时应考虑现有基础设施、性能需求、功能需求和许可证成本。

SQL与MySQL:澄清两者之间的关系 SQL与MySQL:澄清两者之间的关系 Apr 24, 2025 am 12:02 AM

SQL是一种用于管理关系数据库的标准语言,而MySQL是一个使用SQL的数据库管理系统。SQL定义了与数据库交互的方式,包括CRUD操作,而MySQL实现了SQL标准并提供了额外的功能,如存储过程和触发器。

MySQL:数据库,PHPMYADMIN:管理接口 MySQL:数据库,PHPMYADMIN:管理接口 Apr 29, 2025 am 12:44 AM

MySQL和phpMyAdmin可以通过以下步骤进行有效管理:1.创建和删除数据库:在phpMyAdmin中点击几下即可完成。2.管理表:可以创建表、修改结构、添加索引。3.数据操作:支持插入、更新、删除数据和执行SQL查询。4.导入导出数据:支持SQL、CSV、XML等格式。5.优化和监控:使用OPTIMIZETABLE命令优化表,并利用查询分析器和监控工具解决性能问题。

See all articles