• ADADADADAD

    MySQL集群搭建实现高可用[ mysql数据库 ]

    mysql数据库 时间:2024-12-24 19:09:53

    作者:文/会员上传

    简介:

    MySQL集群搭建实现高可用
    MySQL集群概述和安装环境MySQL Cluster是MySQL适合于分布式计算环境的高实用、高冗余版本。Cluster的汉语是"集群"的意思。它采用了NDB Cluster

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    MySQL集群搭建实现高可用


    MySQL集群概述和安装环境

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

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

    mysql 集群架构

















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

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

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


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

    mysql 管理结点:xuegod63.cn IP:192.168.1.63 (安装server、client)

    mysql 数据结点:xuegod64.cn IP:192.168.1.64 (安装server、client)

    mysql 数据结点:xuegod65.cn IP:192.168.1.65 (安装server、client)

    msyql SQL结点:xuegod66.cn IP:192.168.1.66 (安装server、client)

    msyql SQL结点:xuegod67.cn IP:192.168.1.67 (安装server、client)


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


    环境清理以及安装

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

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

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

    1.mysql旧版本清除

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

    yum -y remove mysql

    yum –y remove maridb*(centos7)

    然后使用如下命令:

    rpm -qa | grep mysql

    rpm -qa | grep maridb

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

    rpm -e --nodeps mysql-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@xuegod63 ~]# rpm -ihv epel-release-7-10.noarch.rpm

    [root@xuegod63 ~]# rpm -ihv mysql57-community-release-el7-11.noarch.rpm


    2.2开启mysql cluster 源

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


    2.3刷新yum源缓存

    [root@xuegod63 ~]# yum clean all && yum list


    2.4安装解决Cluster的依赖包

    [root@xuegod63 ~]# yum install -y perl perl-Class-MethodMaker perl-DBIlibaio numactl


    2.5安装Mysql Cluster

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


    2.6查看安装路径

    [root@xuegod63 ~]# rpm -ql mysql-cluster-community-server

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


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

    [root@xuegod64 ~]# yum install -y mysql-cluster-community-data-node

    [root@xuegod65 ~]# yum install -y mysql-cluster-community-data-node

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

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


    5.创建文件夹

    管理节点创建配置目录:

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


    搭建mysql集群

    1.1 各个机器上的配置


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

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


    [root@xuegod63 ~]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=192.168.1.63#管理结点的IP地址。本机IP

    ###### data node options: #存储结点

    [ndbd]

    HostName=192.168.1.64

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

    nodeid=2

    [ndbd]

    HostName=192.168.1.65

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

    nodeid=3

    # SQL node options:#关于SQL结点

    [mysqld]

    HostName=192.168.1.66

    nodeid=4

    [mysqld]

    HostName=192.168.1.67

    nodeid=5

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

    2.xuegod64、xuegod65数据节点

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

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

    [mysqld]

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

    ndbcluster #启>动ndb引擎

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

    [mysqld_safe]

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

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

    [mysql_cluster]

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


    3. SQL节点配置文档:

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

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

    [mysqld]

    ndbcluster #启动ndb引擎

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

    [mysqld_safe]

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

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

    [mysql_cluster]

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

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

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

    而SQL节点上没有。

    1.2MySQL Cluster启动

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

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

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

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





      xuegod63上启动管理结点命令

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

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


    查看端口号:

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

    tcp00 0.0.0.0:11860.0.0.0:*LISTEN7057/ndb_mgmd

    tcp00 127.0.0.1:1186127.0.0.1:60324ESTABLISHED 7057/ndb_mgmd

    tcp00 127.0.0.1:60324127.0.0.1:1186ESTABLISHED 7057/ndb_mgmd


    2. xuegod64和xuegod65启动数据节点服务

    [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. xuegod66、xuegod67启动SQL结点服务

    [root@xuegod66~]#systemctl start mysqld

    [root@xuegod66 ~]#systemctl start mysqld


    4. 查看mysql 集群状态:

    [root@xuegod67 ~]#ndb_mgm

    ndb_mgm> show

    Cluster Configuration

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

    [ndbd(NDB)]2 node(s)

    id=2@192.168.1.64(mysql-5.7.22 ndb-7.5.10, Nodegroup: 0, *)

    id=3@192.168.1.65(mysql-5.7.22 ndb-7.5.10, Nodegroup: 0)


    [ndb_mgmd(MGM)]1 node(s)

    id=1@192.168.1.63(mysql-5.7.22 ndb-7.5.10)


    [mysqld(API)]2 node(s)

    id=4@192.168.1.66(mysql-5.7.22 ndb-7.5.10)

    id=5@192.168.1.67(mysql-5.7.22 ndb-7.5.10)


    5. 数据同步实验测试

    我们就需要在此之前改一下两台机器mysql的密码。

    查看mysql root用户密码 注意:我们只需修改sql节点的密码

    [root@xuegod66 ~]# grep password /var/log/mysqld.log

    2018-07-02T16:01:46.008448Z 1 [Note] A temporary password is generated for root@localhost: lCUouyg(k2?F


    在my.cnf文件中mysqld下面添加 validate-password=off

    重启mysql

    [root@xuegod66 ~]# systemctl restart mysqld

    [root@xuegod66 ~]# mysql -u root -p'lCUouyg(k2?F'

    mysql: [Warning] Using a password on the command line interface can be insecure.

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

    Your MySQL connection id is 6

    Server version: 5.7.22-ndb-7.5.10-cluster-gpl


    Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.


    Oracle is a registered trademark of Oracle Corporation and/or its

    affiliates. Other names may be trademarks of their respective

    owners.


    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


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

    mysql> grant all privileges on *.* to cluster@"%"identified by "123456"; #授权

    mysql> flush privileges;

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


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

    mysql -ucluster -p123456 -h 192.168.1.66

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

    mysql> create database db;

    mysql> use db;

    mysql> create table test(id int) engine=ndb;

    mysql> insert into test values(1000);

    mysql> select * from test;


    登陆另一台sql节点查看

    mysql -ucluster -p123456 -h 192.168.1.67

    mysql> use db;

    mysql> select * from test;


    停掉一个sql节点测试

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

    ndb_mgm> show 查看状态

    Connected to Management Server at: localhost:1186

    Cluster Configuration

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

    [ndbd(NDB)]2 node(s)

    id=2@192.168.1.64(mysql-5.7.22 ndb-7.5.10, Nodegroup: 0, *)

    id=3@192.168.1.65(mysql-5.7.22 ndb-7.5.10, Nodegroup: 0)


    [ndb_mgmd(MGM)]1 node(s)

    id=1@192.168.1.63(mysql-5.7.22 ndb-7.5.10)


    [mysqld(API)]2 node(s)

    id=4 (not connected, accepting connect from 192.168.1.66)

    id=5@192.168.1.67(mysql-5.7.22 ndb-7.5.10) #发现少了一个sql 节点


    7. 关闭服务

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


    关闭mysql的管理节点

    [root@xuegod63 /]# ndb_mgm

    -- NDB Cluster -- Management Client –

    ndb_mgm> shutdown

    Node 2: Cluster shutdown initiated

    Node 3: Cluster shutdown initiated

    Node 2: Node shutdown completed.

    Node 3: Node shutdown completed.

    3 NDB Cluster node(s) have shutdown.

    Disconnecting to allow management server to shutdown.


    ndb_mgm> exit

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


    手动关闭SQL节点服务···

    Xuegod66和xuegod67上,手动关闭SQL节点服务

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

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


    或者:方法二 kill掉

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

    [root@xuegod66 ~]# kill -9 7617

    [root@xuegod66 ~]# kill -9 7743

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

    8. 总结

    再次启动,mysql集群启动:

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

    [root@xuegod64/]#ndbd

    [root@xuegod65 /]#ndbd

    [root@xuegod66 /]# systemctl restart mysqld

    [root@xuegod67 /]# systemctl restart mysqld



    查看mysql 集群状态:

    [root@xuegod63 ~]# ndb_mgm

    -- NDB Cluster -- Management Client --

    ndb_mgm> show

    Cluster Configuration

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

    [ndbd(NDB)]2 node(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)]1 node(s)

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


    [mysqld(API)]2 node(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)

    MySQL集群搭建实现高可用.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: mysql可用高可用