MySQL集群搭建实现高可用
MysqL集群概述和安装环境
MysqL Cluster是MysqL适合于分布式计算环境的高实用、高冗余版本。Cluster的汉语是"集群"的意思。它采用了NDB Cluster 存储引擎,允许在1个 Cluster 中运行多个MysqL服务器。
MysqL Cluster 是一种技术,该技术允许在无共享的系统中部署"内存中"数据库的 Cluster 。通过无共享体系结构,系统能够使用廉价的硬件,而且对软硬件无特殊要求。此外,由于每个组件有自己的内存和磁盘,不存在单点故障。
MysqL 集群架构
存储/数据节点: 保存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旧版本清除
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
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-DBI libaio 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 [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地址 |
数据结点有:datadir=/var/lib/MysqL #MysqL数据存储路径。
而sql节点上没有。
1.2 MysqL 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
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 ESTABLISHED 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;
[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) |
7. 关闭服务
关闭MysqL集群顺序: 关闭管理节点服务-》 关闭管理节点时,数据结点服务自动关闭 –》 需要手动关闭sql结点服务
[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 | grep ndbd #查看不到,说明数据节点已经被关
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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。