前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL集群搭建实现高可用

MySQL集群搭建实现高可用

作者头像
萧晚歌
发布2020-08-19 11:10:30
3K0
发布2020-08-19 11:10:30
举报
文章被收录于专栏:linux技术分享linux技术分享

本节所讲内容:

l MySQL 集群概述

l 实战:MySQL 集群 搭建

1  MySQL集群概述和安装环境

MySQLCluster是MySQL适合于分布式计算环境的高实用、高冗余版本。Cluster的汉语是“集群”的意思。它采用了NDB Cluster 存储引擎,允许在1个 Cluster 中运行多个MySQL服务器。

MySQLCluster 是一种技术,该技术允许在无共享的系统中部署“内存中”数据库的 Cluster 。通过无共享体系结构,系统能够使用廉价的硬件,而且对软硬件无特殊要求。此外,由于每个组件有自己的内存和磁盘,不存在单点故障。

1.1  mysql 集群架构

SQL节点: 给上层应用层提供sql访问。

管理节点(MGM): 管理整个集群。 启动,关闭集群。 通过ndb_mgmd命令启动集群

存储/数据节点: 保存cluster中的数据。 数据节点,可以提供副本。实现数据冗余。

NDB引擎:是一种 “内存中”的存储引擎 , 它具有可用性高和数据一致性好的特点。

拓展:NDB引擎介绍:

NDB引擎

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

缺陷

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

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

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

2.2 优点

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

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

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

Mysql cluster的下载地址:https://dev.mysql.com/downloads/cluster/

在我们做的实验中mysql cluster集群各机器角色如下分配:

mysql 管理节点:xuegod67.cn  IP:10.10.10.67

mysql 数据节点:xuegod68.cn   IP:10.10.10.68

mysql 数据节点:xuegod69.cn   IP:10.10.10.69

msyql SQL节点:xuegod70.cn  IP:10.10.10.70

msyql SQL节点:xuegod71.cn   IP:10.10.10.71

实战:MySQL集群搭建

1.  环境清理以及安装

这一部分虽然是初始过程但是比较复杂,请大家耐心配置。

所有主机上执行下面内容:

首先我们要清除旧版本,然后安装mysql cluster,最后是文件权限管理。

1.mysql旧版本清除

首先使用如下命令来清理之前操作系统自带的mysql安装:

yum -y remove mysql

然后使用如下命令:

rpm -qa | grep mysql

对于找到的2个剩余mysql包,请按照如下的命令格式予以删除:

rpm -e --nodepsmysql-libs-5.1.71-1.el6.x86_64

最后删掉下列文件:

rm -rf  /var/lib/mysql/*

rm -rf  /etc/my.cnf 

rm -rf  /etc/init.d/mysqld

vim  /etc/profile  删除与mysql相关内容

2. mysql cluster 7.5版本安装:三台机器都需要安装

2.1上传并安装最新的EPEL源和 mysql社区版源安装包[所有的机器都需要的操作]

[root@xuegod67 ~]# rpm -ihvepel-release-7-10.noarch.rpm

[root@xuegod67 ~]# rpm -ihvmysql8.0-community-release-el7-11.noarch.rpm

2.2开启mysqlcluster 源

[root@xuegod67 ~]# sed -i"56s/0/1/g" /etc/yum.repos.d/mysql-community.repo

2.3刷新yum源缓存

[root@xuegod67 ~]# yum cleanall && yum list

2.4安装解决Cluster的依赖包

[root@xuegod67 ~]# yum install-y perl perl-Class-MethodMaker perl-DBI  libaio numactl

2.5安装MysqlCluster

[root@xuegod67 ~]# yum install-y mysql-cluster-community-server

2.6查看安装路径

[root@xuegod67 ~]# rpm -qlmysql-cluster-community-server

其他4台主机上重复2.1—2.5的步骤

3.数据节点主机都要安装数据节点的相关包(2台)  数据节点

 [root@xuegod68 ~]# yum install -ymysql-cluster-community-data-node

[root@xuegod69 ~]# yuminstall -y mysql-cluster-community-data-node

4. 管理节点安装management管理包 管理节点

 [root@xuegod67~]# yum -y install mysql-cluster-community-management-server

5.创建文件夹

管理节点创建配置目录:

[root@xuegod67~]# mkdir -p /usr/mysql-cluster/

2  搭建mysql集群

经过复杂的初始配置,我们终于要搭建集群了。我们按配置,启动,测试的顺序来整理这一部分。

  2.1  各个机器上的配置

我们先将需求配置到各台机器上

1.xuegod67创建管理节点上配置文件

[root@xuegod67 ~]vim /usr/mysql-cluster/config.ini   #写入以下内容

[ndbd default]

NoOfReplicas=2                                   #数据写入数量。2表示两份

DataMemory=200M                               #配置数据存储可使用的内存

IndexMemory=100M                              #索引给100M

[ndb_mgmd]

nodeid=1

datadir=/var/lib/mysql                       #管理结点的日志

HostName=10.10.10.67                         #管理结点的IP地址。本机IP

###### data nodeoptions:                         #存储结点

[ndbd]

HostName=10.10.10.68

DataDir=/var/lib/mysql                            #mysql数据存储路径

nodeid=2

[ndbd]

HostName=10.10.10.69

DataDir=/var/lib/mysql                            #mysql数据存储路径

nodeid=3

# SQL node options:                               #关于SQL结点

[mysqld]

HostName=10.10.10.70

nodeid=4

[mysqld]

HostName=10.10.10.71

nodeid=5

在这个文件里,我们分别给五个节点分配了ID,这有利于更好的管理和区分各个节点。当然,要是不指定,MySQL也会动态分配一个

2.xuegod68、xuegod69数据节点

[root@xuegod68 /]# vim  /etc/my.cnf           #请配置xuegod69一样

[root@xuegod69 /]# vim  /etc/my.cnf   

[mysqld]

datadir=/var/lib/mysql                                          #mysql数据存储路径

ndbcluster                                                                 #启动ndb引擎

ndb-connectstring=10.10.10.67                      # 管理节点IP地址

[mysqld_safe] 

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

[mysql_cluster]

ndb-connectstring=10.10.10.67                      #管理节点IP地址

3. SQL节点配置文档:

 [root@xuegod70~]#vim /etc/my.cnf    #请配置xuegod71一样

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

[mysqld]

ndbcluster                                 #启动ndb引擎

ndb-connectstring=10.10.10.67          # 管理节点IP地址

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

[mysql_cluster] 

ndb-connectstring=10.10.10.67         #管理节点IP地址

说明:数据节点和SQL结点配置文件区别 ,就多一行

数据结点有:datadir=/var/lib/mysql                  #mysql数据存储路径。

SQL节点上没有。

2.2  MySQL Cluster启动

初次启动命令以及用户密码更改调整:(请严格按照次序启动)

先启动:管理结点服务->数据结点服务->sql结点服务

关闭:关闭管理结点服务,关闭管理结点服务后,nbdb数据结点服务会自动关闭->手动把sql结点服务关了。

执行初次启动前请先确认将两台机器的防火墙关闭(service iptables stop 或者 设定 防火墙端口可通,两个端口即通讯端口1186、数据端口3306 )

1.xuegod67上启动管理结点命令

[root@xuegod67 ~]#ndb_mgmd --ndb_nodeid=1--initial -f /usr/mysql-cluster/config.ini

#尽量不要把管理结点、 数据结点、存储结点 配置在同一台机子上,否则一个挂了,就全挂了。

查看端口号:

[root@xuegod67~]# netstat  -antup | grep 1186

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

tcp         0     0 127.0.0.1:1186    127.0.0.1:60324     ESTABLISHED 7057/ndb_mgmd

tcp         0     0 127.0.0.1:60324  127.0.0.1:1186              ESTABLISHED7057/ndb_mgmd

2.xuegod68和xuegod69启动数据节点服务

[root@xuegod68 ~]# ndbd--initial

[ndbd] INFO     -- Angel connected to '10.10.10.67: 1186'

[ndbd] INFO     -- Angel allocated nodeid: 2

[root@xuegod69 ~]# ndbd--initial

[ndbd] INFO     -- Angel connected to '10.10.10.67: 1186'

[ndbd] INFO     -- Angel allocated nodeid: 3

3.Xuegod70、xuegod71启动SQL结点服务

[root@xuegod70~]#systemctlstart mysqld

[root@xuegod71 ~]#systemctlstart mysqld

4. 查看mysql 集群状态:

[root@xuegod67 ~]#ndb_mgm

ndb_mgm> show

5. 数据同步实验测试

因为默认密码比较坑人,我们就需要在此之前改一下两台机器mysql的密码。

查看mysql root用户密码

注意:我们只需修改sql节点的密码

[root@xuegod70 ~]# greppassword /var/log/messages

# The random password set forthe root user at Wed Apr  1 21:10:53 2015(local time): gDVpNRBxTcgd17di

# 可以在配置文件加一行跳过密码

skip-grant-tables

5.7以上版本关闭密码安全策略插件

在my.cnf添加 validate-password=off 重启mysql

[root@xuegod70 ~]# mysql –uroot–p’gDVpNRBxTcgd17di’

mysql>setpassword for 'root'@'localhost'=password('123456');

mysql>grant all privilegeson *.* to cluster@”%” identified by “123456” #授权

mysql>flush privileges;

另一台sql节点也是一样操作

6.模拟外部机器的一个客户端 插入数据:

mysql -ucluster -p123456 -h 10.10.10..70

注意:创建表的时候使用ndb引擎

mysql> create database db;

mysql> use db;

mysql> create table test(idint) engine=ndb;

mysql> insert into testvalues(1000);

mysql> select * from test;

登陆另一台sql节点查看

mysql -ucluster -p123456 -h 10.10.10.71

mysql> use db;

mysql> select * from test;

停掉一个sql节点测试

[root@xuegod67 ~]# mysqladmin-uroot -p123456 shutdown

ndb_mgm> show 查看状态

7.  关闭服务

关闭mysql集群顺序: 关闭管理节点服务-》 关闭管理节点时,数据结点服务自动关闭 –》 需要手动关闭SQL结点服务

  [root@xuegod63 /]      # ndb_mgm

-- NDB Cluster -- ManagementClient --

ndb_mgm> shutdown

Node 2: Cluster shutdowninitiated

Node 3: Cluster shutdowninitiated

3 NDB Cluster node(s) haveshutdown.

Disconnecting to allowmanagement server to shutdown.

Node 2: Node shutdowncompleted.

ndb_mgm> exit

ps -axu | grep  ndbd         #查看不到,说明数据节点已经被关

手动关闭SQL节点服务

Xuegod70和xuegod71上,手动关闭SQL节点服务

[root@xuegod70 ~]# mysqladmin-uroot -p123456 shutdown

[root@xuegod71 ~]# mysqladmin-uroot -p123456 shutdown

或者:方法二 kill掉

[root@xuegod70 ~]# ps -axu |grep mysql

[root@xuegod70 ~]# kill -97617

[root@xuegod70 ~]# kill -97743

[root@xuegod70~]# ps -axu |grep mysql  #xuegod71同样kill掉

8.  总结

再次启动,mysql集群启动:

[root@xuegod67/]# ndb_mgmd --ndb_nodeid=1 --initial -f /usr/mysql-cluster/config.ini

[root@xuegod68 /]#ndbd

[root@xuegod69 /]#ndbd

[root@xuegod70 /]# systemctlrestart mysqld

[root@xuegod71 /]# systemctlrestart mysqld

查看mysql 集群状态:

[root@xuegod63 ~]# ndb_mgm

-- NDB Cluster -- Management Client --

ndb_mgm> show

Cluster Configuration

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

[ndbd(NDB)]  2node(s)

id=2 @10.10.10.68  (mysql-5.7.20 ndb-7.5.8, Nodegroup: 0, *)

id=3 @10.10.10.69  (mysql-5.7.20 ndb-7.5.8, Nodegroup: 0)

[ndb_mgmd(MGM)]     1node(s)

id=1 @10.10.10.67  (mysql-5.7.20 ndb-7.5.8)

[mysqld(API)] 2node(s)

id=4 @10.10.10.70  (mysql-5.7.20 ndb-7.5.8)

id=5 @10.10.10.71  (mysql-5.7.20 ndb-7.5.8)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档