一 MySQL集群简介
上一篇文章我们提到MySQL 读写分离,这篇文章我们讲解MySQL集群。我们提到的集群,是指多台机器完成一个工作,最主要的场景是数据库服务器和Web服务器,但是集群环境不适合大规模计算。前面我们有提到MySQL AB复制,因为MySQL AB复制不适合大规模运用,要解决这个问题,我们可以使用MySQL集群。
MySQL集群分为三类节点:管理节点、SQL节点、存储节点。管理节点的功能是管理其他节点,负责调度不同的SQL节点和存储节点。SQL节点作用是用户和该节点进行交互,用户发送SQL语句到该节点,进行读写请求。存储节点负责到磁盘中读数据和写数据。MySQL集群中采用一种特殊存储引擎,名叫NDB。NDB负责对数据进行读写,并保证节点之间的数据一致性,存储节点没有必要使用共享存储,因为第一存储节点本身的数据互为镜像,本身已经对数据做了备份。其中,管理节点只需要一个,SQL节点根据业务需要可以有多个,存储节点同理。
二 MySQL集群示意图
图片来源:http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-overview.html
三 使用MySQL集群的优劣
3.1 优势
1.处理业务能力大幅提高;
2.用户关注的点更集中于业务;
3.数据不易丢失,因为存储节点对数据做备份。当然不要完全依靠MySQL集群,制定合理的备份和恢复策略还是很有必要的;
4.在SQL节点有多台的情况下,一台SQL节点宕机不影响,只需要开发人员手动判断该节点是否在线,不在线切换到另一台SQL节点上,保证了高可用性。
3.2 劣势
1.成本提高,因为MySQL集群至少需要三台服务器;
2.运维难度增强,因为服务器数量增加。
四 搭建MySQL环境
4.1 实验环境简介
属性 IP 主机名
管理节点 192.168.1.11 mgmd
存储节点 192.168.1.14 ndb01
存储节点 192.168.1.15 ndb02
SQL节点 192.168.1.12 sql01
SQL节点 192.168.1.13 sql02
MySQL集群网络拓扑图
4.2 操作系统版本
RHEL Server6.1 64位系统
4.3 使用到的软件包版本
mysql-cluster-gpl-7.1.4b-linux-x86_64-glibc23.tar.gz
4.4 准备工作
第一步,拷贝文件
[root@larrywen opt]# scp mysql-cluster-gpl-7.1.4b-linux-x86_64-glibc23.tar.gz 192.168.1.11:/opt/ [root@larrywen opt]# scp mysql-cluster-gpl-7.1.4b-linux-x86_64-glibc23.tar.gz 192.168.1.12:/opt/ [root@larrywen opt]# scp mysql-cluster-gpl-7.1.4b-linux-x86_64-glibc23.tar.gz 192.168.1.13:/opt/ [root@larrywen opt]# scp mysql-cluster-gpl-7.1.4b-linux-x86_64-glibc23.tar.gz 192.168.1.14:/opt/ [root@larrywen opt]# scp mysql-cluster-gpl-7.1.4b-linux-x86_64-glibc23.tar.gz 192.168.1.15:/opt/
第二步,修改主机名
[root@serv01 ~]# hostname mgmd.host.com [root@serv01 ~]# vim /etc/sysconfig/network [root@serv01 ~]# cat !$ cat /etc/sysconfig/network NETWORKING=yes HOSTNAME=mgmd.host.com [root@serv01 ~]# hostname mgmd.host.com [root@serv02 ~]# hostname sql01.host.com [root@serv02 ~]# vim /etc/sysconfig/network [root@serv02 ~]# cat !$ cat /etc/sysconfig/network NETWORKING=yes HOSTNAME=sql01.host.com [root@serv02 ~]# hostname sql01.host.com [root@serv03 ~]# hostname sql02.host.com [root@serv03 ~]# vim /etc/sysconfig/network [root@serv03 ~]# cat !$ cat /etc/sysconfig/network NETWORKING=yes HOSTNAME=sql02.host.com [root@serv03 ~]# hostname sql02.host.com [root@serv04 ~]# hostname ndb01.host.com [root@serv04 ~]# vim /etc/sysconfig/network [root@serv04 ~]# cat !$ cat /etc/sysconfig/network NETWORKING=yes HOSTNAME=ndb01.host.com [root@serv04 ~]# hostname ndb01.host.com [root@serv05 ~]# hostname ndb02.host.com [root@serv05 ~]# vim /etc/sysconfig/network [root@serv05 ~]# cat !$ cat /etc/sysconfig/network NETWORKING=yes HOSTNAME=ndb02.host.com [root@serv05 ~]# hostname ndb02.host.com
第三步,确定IP地址
[root@mgmd ~]# ifconfig | grep eth -A1 eth0 Link encap:Ethernet HWaddr 00:0C:29:07:DD:3B inet addr:192.168.1.11 Bcast:192.168.1.255 Mask:255.255.255.0 [root@sql01 ~]# ifconfig | grep eth -A1 eth0 Link encap:Ethernet HWaddr 00:0C:29:6A:EC:97 inet addr:192.168.1.12 Bcast:192.168.1.255 Mask:255.255.255.0 [root@sql02 ~]# ifconfig | grep eth -A1 eth0 Link encap:Ethernet HWaddr 00:0C:29:BD:08:05 inet addr:192.168.1.13 Bcast:192.168.1.255 Mask:255.255.255.0 [root@ndb01 ~]# ifconfig | grep eth -A1 eth0 Link encap:Ethernet HWaddr 00:0C:29:0F:1A:09 inet addr:192.168.1.14 Bcast:192.168.1.255 Mask:255.255.255.0 [root@ndb02 ~]# ifconfig | grep eth -A1 eth0 Link encap:Ethernet HWaddr 00:0C:29:77:CB:2F inet addr:192.168.1.15 Bcast:192.168.1.255 Mask:255.255.255.0
4.5 管理节点搭建
第一步,添加mysql组和用户
[root@mgmd opt]# groupadd -g 27 mysql [root@mgmd opt]# useradd -u 27 -g 27 -r -M -s /sbin/nologin mysql [root@mgmd opt]# id mysql uid=27(mysql) gid=27(mysql) groups=27(mysql)
第二步,解压二进制包