Mysql集群与调优

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

Mysql集群与调优



实验背景:


1.安装MySQL-Cluster相关软件包。


2.依次配置管理/数据/SQL节点。


3.启动并测试MySQL-Cluster集群架构。


实验方案:


 使用6台RHEL 6.4虚拟机,其中sqlA和sqlB作为SQL节点,ndbA和ndbB作为数据节点,


mgmd作为管理节点,这5个节点构成MySQL Cluster体系;而另一台虚拟机192.168.4.20作为MySQL测试客户机。


 构成MySQL集群体系的5个节点应安装Cluster版的MySQL相关软件包,具体操作见“实现”部分的安排;测试用的Linux客户机只需安装普通版的MySQL-client即可。



实验实现:

1.前期准备工作


1)确认各节点服务器的主机名、IP地址


为5个节点建立统一的hosts文件,提高本地解析速度,相关操作如下:


[root@sqlA ~]# vim /etc/hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

.. ..

192.168.4.10 sqlA.tarena.com sqlA

192.168.4.20 sqlB.tarena.com sqlB

192.168.4.30 ndbA.tarena.com ndbA

192.168.4.40 ndbB.tarena.com ndbB

192.168.4.100 mgmsvr.tarena.com mgmsvr


参考上述hosts文件为各节点设置好主机名、IP地址(具体过程略)。


卸载冲突包【所有节点】


 官方提供的MySQL-Cluster相关软件包已集成数据库服务端/客户端程序,因此可直接用

来替换普通的MySQL服务端/客户端程序。如果已安装有普通版的mysql-server、mysql、

MySQL-server、MySQL-client包,请先将其卸载(若没有则忽略):

[root@sqlA ~]# yum -y remove mysql-server mysql

Setting up Remove Process



 对于RHEL自带的mysql-libs暂时保留(如果直接卸载会因为依赖关系删除许多重要的包

,比如crontab、postfix等),但在安装MySQl-Cluster相关包的时候采用“-U”升级的

方式执行替换。


如果有残留的/etc/my.cnf文件,确保已转移备用或直接删除。


[root@sqlA ~]# mv /etc/my.cnf /etc/my.cnf.old  


3)安装MySQL-Cluster相关软件包【所有节点】

在所有节点上,解压下载的MySQL-Cluster集合包:


[root@sqlA ~]# cd /var/ftp/pub/

[root@sqlA pub]# tar xvf MySQL-Cluster-gpl-7.3.3-1.el6.x86_64.rpm-bundle.tar

MySQL-Cluster-shared-gpl-7.3.3-1.el6.x86_64.rpm

MySQL-Cluster-shared-compat-gpl-7.3.3-1.el6.x86_64.rpm

MySQL-Cluster-server-gpl-7.3.3-1.el6.x86_64.rpm

MySQL-Cluster-client-gpl-7.3.3-1.el6.x86_64.rpm

MySQL-Cluster-test-gpl-7.3.3-1.el6.x86_64.rpm

MySQL-Cluster-devel-gpl-7.3.3-1.el6.x86_64.rpm

MySQL-Cluster-embedded-gpl-7.3.3-1.el6.x86_64.rpm


在所有节点上,安装MySQL-Cluster-server、MySQL-Cluster-client软件包:


[root@sqlA pub]# rpm -Uvh MySQL-Cluster-shared-*.rpm



在SQL节点(sqlA、sqlB)服务器上,修改MySQL数据库的root密码:

[root@sqlA ~]# cat /root/.mysql_secret

# The random password set for the root user at Tue Dec 24 15:24:50 2013 (local time): Z3Qw2OWJ                                 //查看默认的密码

[root@sqlA ~]# service mysql start         //启动MySQL服务程序

Starting MySQL... [确定]

[root@sqlA ~]# mysql –u root –p             //以上述默认密码登录

Enter password:


Welcome to the MySQL monitor. Commands end with ; or \g.



mysql> SET PASSWORD FOR 'root'@'localhost'=PASSWORD('1234567');

Query OK, 0 rows affected (0.10 sec)         //重设root口令


在数据节点(ndbA、ndbB)和管理节点(mgmsvr)上,实际上并不需要启动MySQL服务程序

,因此建议将mysql服务的自启状态设为关闭,root密码可改可不改:


[root@ndbA ~]# chkconfig mysql off

[root@ndbA ~]# chkconfig --list mysql

mysql 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭


4)添加授权数据库用户【SQL节点】


 在SQL节点(sqlA、sqlB)服务器上,添加相应的授权数据库用户,以方便客户端使用数据

库服务。以用户root为例,允许其从192.168.4.0/24网段访问:


mysql> GRANT all ON *.* TO 'root'@'192.168.4.%' IDENTIFIED BY '1234567';

Query OK, 0 rows affected (0.10 sec)             //授权用户及客户机

mysql> exit                                     //退出 mysql> 环境

Bye



2.配置管理节点 mgmd (192.168.4.100)


1)创建工作文件夹


为管理节点提供一个工作目录,方便记录MySQL集群相关的日志消息:


[root@mgmsvr ~]# mkdir -p /var/log/mysql-cluster


2)创建配置文件



针对本节的案例,管理节点的配置操作参考如下:


[root@mgmsvr ~]# vim /etc/my-cluster.ini

[ndbd default]

NoOfReplicas=2                                 //保留2份数据拷贝

DataMemory=80M                                 //数据缓存大小

IndexMemory=18M                             //索引缓存大小

[ndb_mgmd]


nodeid=1                                     //第1个管理节点的ID号


hostname=192.168.4.100                         //此管理节点的地址

datadir=/var/log/mysql-cluster             //此管理节点的工作目录



[mysqld]

nodeid=10                                     //第1个SQL节点的ID号

hostname=192.168.4.10                         //第1个SQL节点的地址

[mysqld]

nodeid=20                                     //第2个SQL节点的ID号

hostname=192.168.4.20                         //第2个SQL节点的地址



[ndbd]

nodeid=30                                     //第1个数据节点的ID号

hostname=192.168.4.30                         //第1个数据节点的地址

datadir=/var/lib/mysql-cluster/data        //第1个数据节点的工作目录

[ndbd]

nodeid=40                                     //第2个数据节点的ID号

hostname=192.168.4.40                         //第2个数据节点的地址

datadir=/var/lib/mysql-cluster/data        //第2个数据节点的工作目录




3.配置数据节点 ndbA(192.168.4.30) 、ndbB (192.168.4.40)


1)创建工作文件夹


为各数据节点提供一个工作目录,用来存放实际的数据库表记录等相关数据:


1.[root@ndbA ~]# mkdir -p /var/lib/mysql-cluster/data


2)创建配置文件


 指定工作目录(数据存储目录)、管理服务器的IP地址、采用ndbcluster存储引擎,以

便支持集群特性;并添加[mysql_cluster]配置段,同样指定管理地址。


针对本节的案例,2个数据节点的配置操作参考如下:


[root@ndbA ~]# vim /etc/my.cnf

[mysqld]

datadir=/var/lib/mysql-cluster/ndbdata     //指定数据存储目录

ndb-connectstring=192.168.4.100             //要连接的管理服务器的IP地址

ndbcluster                                     //指定运行的存储引擎

[mysql_cluster]                             //集群连接配置段

ndb-connectstring=192.168.4.100




4.配置SQL节点sqlA(192.168.4.10) 、sqlB (192.168.4.20)


    主要是调整my.cnf配置,指定运行的存储引擎、默认存储引擎,并通过[mysql_cluster]配置段指定管理地址。在MySQL-Cluster集群环境中,若某个数据库未采用ndbcluster引擎(而是InnoDB、MyISAM等其他引擎),则当更新数据库表时,可能无法同步到其他节点。




[root@sqlA ~]# vim /etc/my.cnf

[mysqld]

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

explicit_defaults_for_timestamp=1

.. ..

ndbcluster                                     //指定运行的存储引擎

default-storage-engine=ndbcluster             //设置默认存储引擎

[mysql_cluster]                             //集群连接配置段

ndb-connectstring=192.168.4.100



5.启动MySQL集群


正确的启动顺序:管理节点 --> 数据节点 --> SQL节点。


关闭顺序:SQL节点 --> 数据节点 --> 管理节点。


数据节点、SQL节点都正常运行后,理论上管理节点可关闭(无监控等任务的话)。


1)启动管理节点mgmd


MySQL Cluster管理节点的对应服务程序为ndb_mgmd,通过选项-f指定建立的集群配置文件。

[root@mgmsvr ~]# ndb_mgmd -f /etc/my-cluster.ini         //启动管理节点,-f 指定配置文件路径


若希望每次开机后自动运行ndb_mgmd,可将上述启动操作写入到/etc/rc.local配置文件内,例如:

[root@mgmsvr ~]# vim /etc/rc.local

.. ..

ndb_mgmd -f /etc/my-cluster.ini


启动完成后可查看监听状态:


[root@mgmsvr ~]# netstat -anpt | grep ndb


tcp 0 0 0.0.0.0:1186 0.0.0.0:* LISTEN 4656/ndb_mgmd

tcp 0 0 127.0.0.1:1186 127.0.0.1:38567 ESTABLISHED 4656/ndb_mgmd

tcp 0 0 127.0.0.1:38567 127.0.0.1:1186 ESTABLISHED 4656/ndb_mgmd


查看日志文件相关数据:


[root@mgmsvr ~]# ls /var/log/mysql-cluster/

ndb_1_cluster.log ndb_1_out.log ndb_1.pid



2)启动数据节点ndbA、ndbB

MySQL Cluster数据节点的对应服务程序为ndbd(单线程的)、ndbmtd(多线程的),首次启动或重新初始化时加 --initial选项,以后不用加。


启动ndbA:


[root@ndbA ~]# ndbd --initial         //启动数据节点

.2013-12-24 17:55:55 [ndbd] INFO -- Angel connected to '192.168.4.100:1186'

2013-12-24 17:55:55 [ndbd] INFO -- Angel allocated nodeid: 30


启动ndbB:


[root@ndbA ~]# ndbd --initial         //启动数据节点

2013-12-24 17:55:55 [ndbd] INFO -- Angel connected to '192.168.4.100:1186'

2013-12-24 17:55:55 [ndbd] INFO -- Angel allocated nodeid: 40


在ndbA和ndbB服务器上,修改/etc/rc.local配置文件,以便每次开机后能自动启动数据节点服务:

[root@ndbA ~]# vim /etc/rc.local

.. ..

ndbd


3)启动SQL节点sqlA、sqlB


对于MySQL Cluster的SQL节点来说,对应的服务程序就是mysqld,正常通过mysql脚本重新启动服务就可以了。


启动sqlA:


[root@sqlA ~]# service mysql restart

.Shutting down MySQL..... [确定]

Starting MySQL.... [确定]


启动sqlB:


[root@sqlB ~]# service mysql restart

Shutting down MySQL..... [确定]

Starting MySQL.... [确定]


在sqlA和sqlB服务器上,建议将mysql服务的自动状态设为“启用”:


[root@sqlA ~]# chkconfig mysql on


[root@sqlA ~]# chkconfig --list mysql


mysql 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭

成功启动后,可在本机登入mysql>环境,检查默认的存储引擎,确保已支持ndbcluster且作为默认存储引擎:


[root@sqlA ~]# mysql -u root -p

Enter password:


.. ..

mysql> SHOW ENGINES\G

*************************** 1. row ***************************

Engine: ndbcluster                     //已支持NDB集群存储

Support: DEFAULT                         //且已作为默认

Comment: Clustered, fault-tolerant tables

Transactions: YES

XA: NO

Savepoints: NO

*************************** 2. row ***************************

... ...



4)在管理节点mgmd上查看群集状态


直接执行ndb_mgm可进入群集管理环境:


[root@mgmsvr ~]# ndb_mgm //进入集群管理环境


-- NDB Cluster -- Management Client --

ndb_mgm>

进入ndb_mgm> 环境后,执行SHOW可查看当前各节点的状态,确保本例中的5个节点都已经成功连接;


ndb_mgm> SHOW //查看管理状态

Connected to Management Server at: localhost:1186

.Cluster Configuration

---------------------

[ndbd(NDB)] 2 node(s)                         //两个数据节点

id=30 @192.168.4.30 (mysql-5.6.14 ndb-7.3.3, Nodegroup: 0, *)

id=40 @192.168.4.40 (mysql-5.6.14 ndb-7.3.3, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)                         //一个数据节点

id=1 @192.168.4.100 (mysql-5.6.14 ndb-7.3.3)

[mysqld(API)] 2 node(s)                         //两个SQL节点

id=10 @192.168.4.10 (mysql-5.6.14 ndb-7.3.3)

id=20 @192.168.4.20 (mysql-5.6.14 ndb-7.3.3)

ndb_mgm>



6.MySQL集群的高可用性测试


1)数据同步测试


从客户机访问sqlA,执行写数据库、表相关操作:



然后从客户机访问sqlB,确认结果(能看到从sqlA上所建的库、表、表记录):


反过来从sqlB上所作的数据库表操作,从sqlA上也能获得相同的结果。


2)高可用性测试(关闭一台数据节点)


关闭数据节点ndbA上的ndbd进程:


[root@ndbA ~]# killall -9 ndbd                     //暴力结束ndbd进程

[root@ndbA ~]# netstat -anpt | grep ndbd             //确认已结束


此时从管理节点上查看集群状态,会发现ndbA已断开连接:

ndb_mgm> show



然后从客户机访问sqlA或sqlB,仍然可读、写数据库。比如可向mydb.mytb表中再添加一条记录:


以上测试成立说明:只要还有一台数据节点可用,MYSQL数据库整体就仍然可用。


实验总结:

1、实验开始之前的环境准备不要忘记卸载冲突包



2、在管理节点的ini配置文件中,应涵盖所有节点的设置,主要包括各节点的ID号、主机


名或IP地址、工作目录等信息。相关配置区段的作用如下:


?[ndbd default]:为所有的数据节点指定默认配置。

?[ndbd]:指定某一个数据节点的配置。

?[ndb_mgmd default]:为所有的管理节点指定默认配置。

?[ndb_mgmd]:指定某一个管理节点的配置。

?[mysqld default]:为所有的SQL节点指定默认配置。

?[mysqld]:指定某一个SQL节点的配置。


3、关于管理节点的启动,有以下几个需要注意的地方:


?ndb_mgmd默认以后台模式运行(--daemon),调试过程中可添加选项--nodaemon来禁用后台模式。


?ndb_mgmd初次启动成功以后,会自动保存集群配置,以后再启动时会忽略-f指定的配置文件,除非添加--inital选项(比如向集群中添加新的节点时,就应该重新初始化)。


4、








      本文转自Jx战壕  51CTO博客,原文链接:http://blog.51cto.com/xujpxm/1386303,如需转载请自行联系原作者

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
MySQL索引策略与查询性能调优实战
在实际应用中,需要根据具体的业务需求和查询模式,综合运用索引策略和查询性能调优方法,不断地测试和优化,以提高MySQL数据库的查询性能。
470 66
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL 数据库 SQL 语句调优方法详解(2-1)
本文深入介绍 MySQL 数据库 SQL 语句调优方法。涵盖分析查询执行计划,如使用 EXPLAIN 命令及理解关键指标;优化查询语句结构,包括避免子查询、减少函数使用、合理用索引列及避免 “OR”。还介绍了索引类型知识,如 B 树索引、哈希索引等。结合与 MySQL 数据库课程设计相关文章,强调 SQL 语句调优重要性。为提升数据库性能提供实用方法,适合数据库管理员和开发人员。
大数据新视界--大数据大厂之MySQL 数据库课程设计:MySQL 数据库 SQL 语句调优的进阶策略与实际案例(2-2)
本文延续前篇,深入探讨 MySQL 数据库 SQL 语句调优进阶策略。包括优化索引使用,介绍多种索引类型及避免索引失效等;调整数据库参数,如缓冲池、连接数和日志参数;还有分区表、垂直拆分等其他优化方法。通过实际案例分析展示调优效果。回顾与数据库课程设计相关文章,强调全面认识 MySQL 数据库重要性。为读者提供综合调优指导,确保数据库高效运行。
MySQL复制以及调优
本文介绍了MySQL自带复制方案的实现及其注意事项。复制方案能提供数据备份、负载均衡与分布式数据管理的优势。文章详细描述了复制步骤:主库(master)记录更改到二进制日志,发送同步消息给从库(slave),从库接收后将日志复制到本地并执行。实现复制包括配置主库的server-id和二进制日志、创建复制账号、初始化主库数据、设置从库参数及开启复制。此外,还探讨了三种日志格式(row、statement、mixed)的特点及选择建议,并分析了主从复制延迟的优化方法,如控制事务大小、优化日志传输和多线程还原日志等。最后,文中列出了搭建过程中需要注意的关键点。
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
86 3
云数据库:从零到一,构建高可用MySQL集群
在互联网时代,数据成为企业核心资产,传统单机数据库难以满足高并发、高可用需求。云数据库通过弹性扩展、分布式架构等优势解决了这些问题,但也面临数据安全和性能优化挑战。本文介绍了如何从零开始构建高可用MySQL集群,涵盖选择云服务提供商、创建实例、配置高可用架构、数据备份恢复及性能优化等内容,并通过电商平台案例展示了具体应用。
大数据-140 - ClickHouse 集群 表引擎详解5 - MergeTree CollapsingMergeTree 与其他数据源 HDFS MySQL
大数据-140 - ClickHouse 集群 表引擎详解5 - MergeTree CollapsingMergeTree 与其他数据源 HDFS MySQL
102 0
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
923 1
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
MySQL调优主要分为三个步骤:监控报警、排查慢SQL、MySQL调优。 排查慢SQL:开启慢查询日志 、找出最慢的几条SQL、分析查询计划 。 MySQL调优: 基础优化:缓存优化、硬件优化、参数优化、定期清理垃圾、使用合适的存储引擎、读写分离、分库分表; 表设计优化:数据类型优化、冷热数据分表等。 索引优化:考虑索引失效的11个场景、遵循索引设计原则、连接查询优化、排序优化、深分页查询优化、覆盖索引、索引下推、用普通索引等。 SQL优化。
1033 15
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
下一篇
oss创建bucket