MySQL集群

Quirita ·
更新时间:2024-11-13
· 601 次阅读

(一)介绍

原理
MySQL集群是一个无共享的、分布式节点架构的存储方案,其目的是提供容错性和高性能.是MySQL适合于分布式计算环境的高可用、高性能版本,它采用了NDB Cluster存储引擎

MySQL集群主要包括三个组成部分:管理节点、数据节点、SQL节点
管理节点(MGM):管理MySQL Cluster内的其他节点,提供配置数据,启动并停止节点、运行备份等
数据节点:保存Cluster的数据
SQL节点:用来访问Cluster数据的节点
在这里插入图片描述
在NDB集群中这些组件的关系如上所示:所有这些程序一起工作来形成一个NDB集群.当数据被NDB存储引擎存储时,表(和表数据)存储在数据节点中.这样的表可以直接从集群中的所有MySQL服务器(SQL节点)访问.因此,在一个将数据存储在集群中的工资单应用程序中,如果一个应用程序更新了雇员的工资,那么查询这些数据的所有其他MySQL服务器都可以立即看到这个变化.

NDB集群核心概念
NDB CLUSTER(也称为NDB)是一个内存存储引擎,提供高可用的数据持久化功能.
NDB CLUSTER存储引擎可以配置一系列故障转移和负载平衡.
集群节点
集群节点有三种类型,在最小的NDB集群配置中,至少会有三个节点.
1. Management node
这种类型节点的作用是管理NDB集群中的其他节点,执行诸如提供配置数据、启动和停止节点以及运行备份等功能.因为这个节点类型管理其他节点的配置,所以应该首先启动这种类型的节点,在任何其他节点之前.执行ndb_mgmd命令启动该节点.
2. Data node
这种类型节点的作用是存储集群数据.一个副本足以用于数据存储,但不提供冗余;因此,建议使用两个(或更多)副本来提供冗余,从而获得高可用性.执行ndbd或ndbmtd(多线程)命令启动该节点.NDB集群表通常存储在内存中,而不是在磁盘上(这就是为什么我们将NDB集群称为内存中的数据库).然而,一些NDB集群数据可以存储在磁盘上.
3. SQL node
在NDB Cluster中SQL节点是一个使用NDBCLUSTER存储引擎的传统MySQL服务器.期望在生产环境中使用三个节点的设置是不现实的.这样的配置不提供冗余;为了从NDB集群的高可用性特性中获益,您必须使用多个数据和SQL节点.还强烈推荐使用多个管理节点

优点和使用场景
1:N个9的高可用性
2:快速的自动失效切换
3:灵活的分布式体系结构,没有单点故障
4:高吞吐量和低延迟
5:可扩展性强,支持在线扩容
6:适用于具有非常高的并发需求,对可用性要求较高,或者是数据需要分片的遵守SQL标准的传统RDBMS系统

##### (二)实验准备和MySQL软件安装
说明

本次实验模拟MySQL集群架构,其中使用数据库为MySQL集群版本,此外准备了三个Linux服务器,其中一个用作管理节点,另外两个服务器既充当了数据节点角色,又充当了SQL节点的角色
MySQL集群下载和安装
1:下载地址,文件为压缩文件
https://dev.mysql.com/downloads/cluster/

2:检查防火墙,关闭防护墙

service iptables stop # 关闭命令 chkconfig iptables off # 永久关闭防火墙 service iptables status #查看防火墙状态

3:检查是否有已安装MySQL版本,如果有删除,本次安装为集群版本

yum list installed | grep mysql yum -y remove XXX

4:上传文件并解压到目录 /usr/local/mysql,注意移动压缩包解压后里面文件到mysql目录下,mysql目录直接为数据文件,比如bin等目录

5:安装MySQL集群
scripts/mysql_install_db --user=root

6:注册服务(赋予执行权限)
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
chmod +x /etc/rc.d/init.d/mysqld

此时已经完成基本配置,另外俩台服务器相同操作

(三)集群配置

备注:配置SQL节点和数据节点(俩台服务器相同配置)
配置SQL和NDB节点
1:复制配置文件
cp /usr/local/mysql/my.cnf /etc/my.cnf
vi /etc/my.cnf

[client] port=3306 socket=/tmp/mysql.sock [mysqld] basedir=/usr/local/mysql/ datadir=/usr/local/mysql/data user=root log-error=/var/lib/mysql/mysqld.err ndbcluster ndb-connectstring=192.168.0.107 [mysql_cluster] ndb-connectstring=192.168.0.107

配置解释:
1:端口
2:basedir根路径
3:datadir存储数据
4:user用户
5:log-error错误日志
6:如果当前节点为数据节点的话,那么需要添加ndbcluster,如果是SQL节点的话需要添加mysql_cluster,其中的IP指向管理节点,如果当前服务器既是数据节点又是SQL节点的话,那么两个都需要配置.
7:删除配置文件中最后一行vi /etc/my.cnf

在这里插入图片描述
配置管理节点
准备目录

1:复制ndb文件到bin目录下
cp /usr/local/mysql/bin/ndb_mgm* /usr/local/bin
2:添加执行权限
cd /usr/local/bin
chmod +x ndb_mgm*

3:在lib目录下创建目录,用于存放节点配置文件
cd /var/lib/
mkdir mysql-cluster
cd mysql-cluster/
vi config.ini

4:配置文件添加配置内容如下

[NDBD DEFAULT] NoOFReplicas=1 DataMemory=500M IndexMemory=300M [TCP DEFAULT] portnumber=2202 [NDB_MGMD] NodeId=1 hostname=192.168.0.107 datadir=/var/lib/mysql-cluster/ [NDBD] NodeId=2 hostname=192.168.0.103 datadir=/usr/local/mysql/data/ [NDBD] NodeId=3 hostname=192.168.0.105 datadir=/usr/local/mysql/data/ [MYSQLD] NodeId=4 hostname=192.168.0.103 [MYSQLD] NodeId=5 hostname=192.168.0.105

启动顺序
节点启动顺序为:管理节点,NDB数据节点,Sql节点
启动管理节点

cd /usr/local/bin 指定配置文件启动 ndb_mgmd -f /var/lib/mysql-cluster/config.ini 查看状态 ndb_mgm -e show

在这里插入图片描述
查看状态,其中管理节点已经配置成功,而NDB节点和SQL节点未连接
如果后续添加了新增的节点,再次启动使用
ndb_mgmd -f /var/lib/mysql-cluster/config.ini -initial

启动NDB节点

本次实验中配置俩个NDB节点,因此下面操作需要俩台服务器都进行对应配置启动

cp /usr/local/mysql/bin/ndbd /usr/local/bin
cd /usr/local/bin
./ndbd --initial

在这里插入图片描述
此时已经启动了NDB节点,需要到管理节点上进行状态查看
ndb_mgm -e show
此时查看管理节点,NDB服务已连接,sql节点还未连接

在这里插入图片描述
启动SQL节点
cd /usr/local/bin
service mysqld start
集群测试
选择一台SQL服务器登录MySQL
cd /usr/local/mysql/bin
mysql -u root -p
密码空

注意:所有的表必须使用ndb引擎,否则不会同步,即必须遵守以下建表语句
create table TableName (id primary key ,name varchar(20)) engine=ndb


作者:Octopus2017



mysql集群 Mysql

需要 登录 后方可回复, 如果你还没有账号请 注册新账号