MySQL优化之——集群搭建步骤具体解释

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46833179

1 概述


MySQL Cluster 是MySQL 适合于分布式计算环境的高有用、可拓展、高性能、高冗余版本号。其研发设计的初衷就是要满足很多行业里的最严酷应用要求。这些应用中常常要求数据库执行的可靠性要达到99.999%。

MySQL Cluster同意在无共享的系统中部署“内存中”数据库集群,通过无共享体系结构。系统可以使用便宜的硬件,并且对软硬件无特殊要求。此外。因为每一个组件有自己的内存和磁盘,不存在单点故障。

实际上,MySQL集群是把一个叫做NDB的内存集群存储引擎集成与标准的MySQLserver集成。它包括一组计算机。每一个都跑一个或者多个进程,这可能包括一个MySQLserver,一个数据节点,一个管理server和一个专有的一个数据訪问程序。

MySQL Cluster可以使用多种故障切换和负载平衡选项配置NDB存储引擎,但在Cluster 级别上的存储引擎上做这个最简单。

下面为MySQL集群结构关系图,


 

MySQL从结构看。由3类节点(计算机或进程)组成,各自是:

管理节点:用于给整个集群其它节点提供配置、管理、仲裁等功能。理论上通过一台server提供服务就能够了。

数据节点:MySQL Cluster的核心。存储数据、日志,提供数据的各种管理服务。

2个以上 时就能实现集群的高可用保证。DB节点添加时。集群的处理速度会变慢。

SQL节点(API):用于訪问MySQL Cluster数据。提供对外应用服务。添加 API 节点会提高整个集群的并发訪问速度和总体的吞吐量,该节点 能够部署在Web应用server上。也能够部署在专用的server上,也开以和DB部署在 同一台server上。

2 NDB引擎


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


2.1 缺陷


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

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

    多个节点通过网络实现通讯和数据同步、查询等操作。因此总体性受网络速度影响。

    因此速度也比較慢

     

    2.2 长处


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

      扩展性非常好。添加节点就可以实现数据库集群的扩展。

      冗余性非常好,多个节点上都有完整的数据库数据,因此不论什么一个节点宕机都不会造成服务中断。

      实现高可用性的成本比較低。不象传统的高可用方案一样须要共享的存储设备和专用的软件才干实现。NDB 仅仅要有足够的内存就能实现。

二、集群搭建

将搭建一个最简化的MySQL Cluster系统,配置方法中的全部命令都是以root账户执行。

这个MySQL Cluster包括一个管理结点、两个数据结点、两个SQL结点,这五个结点会分别安装在五个虚拟机上,虚拟机的名称和IP例如以下所看到的:

管理结点

mysql-mgm

192.168.124.141

数据结点 1

mysql-ndbd-1

192.168.124.142

数据结点 2

mysql-ndbd-2

192.168.124.143

SQL 结点1

mysql-sql-1

192.168.124.144

SQL 结点2

mysql-sql-2

192.168.124.145

  

一、公共配置

请在三个虚拟机上分别配置此处的配置项。

1. 安装虚拟机

虚拟机操作系统安装CentOS 6.4的x86_64版本号,使用NAT网络,而且还要安装vmware-tools,详细安装方法此处不详述。

2. 拷贝mysql cluster

下载下面版本号的MySQL-Cluster:

http://cdn.mysql.com/Downloads/MySQL-Cluster-7.3/mysql-cluster-gpl-7.3.4-linux-glibc2.5-x86_64.tar.gz

下载得到的压缩包拷贝至虚拟机的/root/Downloads文件夹。然后在shell中执行下面命令:

cd /root/Downloads
tar -xvzf mysql-cluster-gpl-7.3.4-linux-glibc2.5-x86_64.tar.gz
mv mysql-cluster-gpl-7.3.4-linux-glibc2.5-x86_64 /usr/local/mysql

3. 关闭安全策略

关闭iptables防火墙(或者打开防火墙的1186、3306port),在Shell中执行下面命令:

chkconfig --level 35 iptables off

关闭SELinux,在Shell中执行下面命令:

gedit /etc/selinux/config

将config文件里的SELINUX项改为disabled。改动后的config文件的内容例如以下:


# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

最后重新启动系统

二、配置管理结点(192.168.124.141)

1. 配置config.ini配置文件

在shell中执行下面命令:

mkdir /var/lib/mysql-cluster

cd /var/lib/mysql-cluster

gedit config.ini

配置文件config.ini内容例如以下:

[ndbd default]
NoOfReplicas=2
DataMemory=80M
IndexMemory=18M

[ndb_mgmd]
NodeId=1
hostname=192.168.124.141
datadir=/var/lib/mysql-cluster

[ndbd]
NodeId=2
hostname=192.168.124.142
datadir=/usr/local/mysql/data

[ndbd]
NodeId=3
hostname=192.168.124.143
datadir=/usr/local/mysql/data


[mysqld]
NodeId=4
hostname=192.168.124.144


[mysqld]
NodeId=5
hostname=192.168.124.145

2. 安装管理结点

安装管理节点,不须要mysqld二进制文件,仅仅须要MySQL Cluster服务端程序(ndb_mgmd)和监听client程序(ndb_mgm)。在shell中执行下面命令:

cp /usr/local/mysql/bin/ndb_mgm* /usr/local/bin
cd /usr/local/bin
chmod +x ndb_mgm*

三、配置数据结点(192.168.124.142、192.168.124.143)

1. 加入mysql组和用户

在shell中执行下面命令:

groupadd mysql
useradd -g mysql mysql

2. 配置my.cnf配置文件

在shell中执行下面命令:

gedit /etc/my.cnf

配置文件my.cnf的内容例如以下:

[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/sock/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[mysql_cluster]
ndb-connectstring=192.168.124.141

3. 创建系统数据库

在shell中执行下面命令:

cd /usr/local/mysql
mkdir sock
scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

4. 设置数据文件夹

在shell中执行下面命令:

chown -R root .
chown -R mysql.mysql /usr/local/mysql/data
chown -R mysql.mysql /usr/local/mysql/sock
chgrp -R mysql .

5. 配置MySQL服务

在shell中执行下面命令:

cp support-files/mysql.server /etc/rc.d/init.d/
chmod +x /etc/rc.d/init.d/mysql.server
chkconfig --add mysql.server

四、配置SQL结点(192.168.124.144、192.168.124.145)

1. 加入mysql组和用户

在shell中执行下面命令:

groupadd mysql
useradd -g mysql mysql

2. 配置my.cnf配置文件

在shell中执行下面命令:

gedit /etc/my.cnf

配置文件my.cnf的内容例如以下:

[client]
socket=/usr/local/mysql/sock/mysql.sock

[mysqld]
ndbcluster
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/sock/mysql.sock
ndb-connectstring=192.168.124.141

[mysql_cluster]
ndb-connectstring=192.168.124.141

3. 创建系统数据库

在shell中执行下面命令:

cd /usr/local/mysql
mkdir sock
scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

4. 设置数据文件夹

在shell中执行下面命令:

chown -R root .
chown -R mysql.mysql /usr/local/mysql/data
chown -R mysql.mysql /usr/local/mysql/sock
chgrp -R mysql .

5. 配置MySQL服务

在shell中执行下面命令:

cp support-files/mysql.server /etc/rc.d/init.d/
chmod +x /etc/rc.d/init.d/mysql.server
chkconfig --add mysql.server

五、Cluster环境启动

注意启动顺序:首先是管理节点,然后是数据节点,最后是SQL节点。

1. 启动管理结点

在shell中执行下面命令:

ndb_mgmd -f /var/lib/mysql-cluster/config.ini

还能够使用ndb_mgm来监听client,例如以下:

ndb_mgm

2. 启动数据结点

首次启动,则须要加入--initial參数。以便进行NDB节点的初始化工作。在以后的启动过程中。则是不能加入该參数的,否则ndbd程序会清除在之前建立的全部用于恢复的数据文件和日志文件。

/usr/local/mysql/bin/ndbd --initial

假设不是首次启动,则运行以下的命令。

/usr/local/mysql/bin/ndbd

3. 启动SQL结点

若MySQL服务没有执行,则在shell中执行下面命令:

/usr/local/mysql/bin/mysqld_safe --user=mysql &

4. 启动測试

查看管理节点,启动成功:

六、集群測试

1. 測试一

如今我们在当中一个SQL结点上进行相关数据库的创建,然后到另外一个SQL结点上看看数据是否同步。

在SQL结点1(192.168.124.144)上运行:

shell> /usr/local/mysql/bin/mysql -u root -p
mysql>show databases;
mysql>create database aa;
mysql>use aa;
mysql>CREATE TABLE ctest2 (i INT) ENGINE=NDB; //这里必须指定数据库表的引擎为NDB,否则同步失败
mysql> INSERT INTO ctest2 () VALUES (1);
mysql> SELECT * FROM ctest2;

然后在SQL结点2上看数据是否同步过来了

经过測试,在非master上创建数据,能够同步到master上

查看表的引擎是不是NDB。>show create table 表名;

2. 測试二

关闭一个数据节点 ,在另外一个节点写输入。开启关闭的节点。看数据是否同步过来。

首先把数据结点1重新启动,然后在结点2上加入数据

在SQL结点2(192.168.124.145)上操作例如以下:

mysql> create database bb;
mysql> use bb;
mysql> CREATE TABLE ctest3 (i INT) ENGINE=NDB;
mysql> use aa;
mysql> INSERT INTO ctest2 () VALUES (3333);
mysql> SELECT * FROM ctest2;

等数据结点1启动完成,启动数据结点1的服务

#/usr/local/mysql/bin/ndbd --initial#service mysqld start

然后登录进去查看数据

# /usr/local/mysql/bin/mysql -u root –p

能够看到数据已经同步过来了,说明数据能够双向同步了。

七、关闭集群

1. 关闭管理节点和数据节点,仅仅须要在管理节点(ClusterMgm--134)里运行:

shell> /usr/local/mysql/bin/ndb_mgm -e shutdown

显示

Connected to Management Server at: localhost:1186
2 NDB Cluster node(s) have shutdown.
Disconnecting to allow management server to shutdown.

2. 然后关闭Sql节点(135,136),分别在2个节点里执行:

shell> /etc/init.d/mysql.server stop
Shutting down MySQL... SUCCESS!

注意:要再次启动集群,就依照第五部分的启动步骤就可以,只是这次启动数据节点的时候就不要加”-initial”參数了。

posted @ 2017-05-28 08:38 gccbuaa 阅读(...) 评论(...) 编辑 收藏