CentOS 6.3 安装 mysql-cluster-gpl-7.4.7

[b]什么是MySQL集群[/b]

MySQL集群是一个无共享的(shared-nothing)、分布式节点架构的存储方案,其目的是提供容错性和高性能。

数据更新使用读已提交隔离级别(read-committed isolation)来保证所有节点数据的一致性,使用两阶段提交机制(two-phased commit)保证所有节点都有相同的数据(如果任何一个写操作失败,则更新失败)。

无共享的对等节点使得某台服务器上的更新操作在其他服务器上立即可见。传播更新使用一种复杂的通信机制,这一机制专用来提供跨网络的高吞吐量。

通过多个MySQL服务器分配负载,从而最大程序地达到高性能,通过在不同位置存储数据保证高可用性和冗余。

1.查询(Sql)结点(SQL node—下图对应为 mysqld):分布式数据库。包括自身数据和查询中心结点数据
2.数据结点(Data node – ndbd):集群共享数据(内存中)
3.管理服务器(Management Server – ndb_mgmd):集群管理 SQL node,Data node


[img]http://dl2.iteye.com/upload/attachment/0112/3747/16415e60-812c-35d8-99c0-de421b872a60.png[/img]


[img]http://dl2.iteye.com/upload/attachment/0112/4322/3a08e4d9-8176-3a7d-9e62-480b1c029a79.png[/img]

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

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

MySQL Cluster 由一组计算机构成,每台计算机上均运行着多种进程,包括MySQL服务器,NDB Cluster 的数据节点,管理服务器,以及(可能)专门的数据访问程序。

所有的这些节点构成一个完成的MySQL集群体系。数据保存在“NDB存储服务器”的存储引擎中,表(结构)则保存在“MySQL服务器”中。应用程序通过“MySQL服务器”访问这些数据表,集群管理服务器通过管理工具(ndb_mgmd)来管理“NDB存储服务器”。

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

管理(MGM)节点:这类节点的作用是管理MySQL Cluster内的其他节点,如提供配置数据、启动并停止节点、运行备份等。由于这类节点负责管理其他节点的配置,应在启动其他节点之前首先启动这类节点。MGM节点是用命令“ndb_mgmd”启动的。

数据节点:这类节点用于保存 Cluster的数据。数据节点的数目与副本的数目相关,是片段的倍数。例如,对于两个副本,每个副本有两个片段,那么就有4个数据节点。不过没有必要设置多个副本。数据节点是用命令“ndbd”启动的。

SQL节点:这是用来访问 Cluster数据的节点。对于MySQL Cluster,客户端节点是使用NDB Cluster存储引擎的传统MySQL服务器。通常,SQL节点是使用命令“mysqld –ndbcluster”启动的,或将“ndbcluster”添加到“my.cnf”后使用“mysqld”启动。

管理服务器(MGM节点)负责管理 Cluster配置文件和 Cluster日志。 Cluster中的每个节点从管理服务器检索配置数据,并请求确定管理服务器所在位置的方式。当数据节点内出现新的事件时,节点将关于这类事件的信息传输 到管理服务器,然后,将这类信息写入 Cluster日志。


[b]一、环境清理以及安装:[/b]

[b]1. mysql旧版本清除:[/b]

首先使用如下命令来清理之前操作系统自带的mysql安装:
# yum -y remove mysql
然后使用如下命令:
# rpm -qa | grep mysql*
对于找到的2个剩余mysql包,请按照如下的命令格式予以删除:
# rpm -e --nodeps mysql-libs-5.1.61-4.el6.x86_64
# rpm -e --nodeps mysql-connector-odbc-5.1.5r1144-7.el6.x86_64

[b]2. mysql cluster版本安装:[/b]

从http://mysql.mirror.kangaroot.net/Downloads/MySQL-Cluster-7.4/ 下载对应的安装软件
将mysql-cluster-gpl-7.4.7-linux-glibc2.5-x86_64.tar.gz放到某个目录下下面,并且执行如下命令解压:
# tar -zxvf mysql-cluster-gpl-7.4.7-linux-glibc2.5-x86_64.tar.gz

拷贝到安装目录
# cp -r ./mysql-cluster-gpl-7.4.7-linux-glibc2.5-x86_64 /usr/local/mysql
# cd /usr/local/mysql

创建文件夹(分如下3个类来创建对应的文件夹)

数据节点:
# mkdir -p /var/lib/mysql/data

管理节点:
# mkdir /var/lib/mysql-cluster ## SQL节点:可不用 文件夹授权

查询节点进程DIR:
# mkdir /var/run/mysqld

使用如下的命令来变更权限保证可写入:
# chmod -R 1777 /var/lib/mysql
# chmod -R 1777 /var/run/mysqld
# chmod -R 1777 /var/lib/mysql-cluster


[b]3. 添加mysql用户组及用户,修改相关目录权限:[/b]

# groupadd mysql

# useradd mysql -g mysql

# cd /usr/local

# chown -R mysql:mysql mysql


[b]4. 配置管理节点:[/b]

管理节点(MGMD)上配置

# cd /var/lib/mysql-cluster
# vi config.ini

[computer]
Id=mgr-server-01
HostName=172.16.10.70
[mgm default]
datadir=/var/lib/mysql-cluster
[mgm]
HostName=172.16.10.70
NodeId=60
ExecuteOnComputer=mgr-server-01
PortNumber=1186
ArbitrationRank=2
[ndbd default]
NoOfReplicas=2
DataMemory=8G
IndexMemory=2G
MaxNoOfTables = 1024
MaxNoOfAttributes = 5000000
MaxNoOfOrderedIndexes = 10000
[ndbd]
HostName=172.16.10.70
DataDir=/var/lib/mysql
NodeId=1
[ndbd]
HostName=172.16.10.71
DataDir=/var/lib/mysql
NodeId=2
[mysqld]
HostName=172.16.10.70
NodeId=81
[mysqld]
HostName=172.16.10.71
NodeId=82

[b]5. 配置数据节点和查询节点:[/b]

数据节点(NDBD)和查询节点(MYSQLD)上配置

# vi /etc/my.cnf

[client]
socket=/var/lib/mysql/mysql.sock
[mysqld]
max_connections=100
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
ndbcluster
ndb-connectstring=172.16.10.70
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql_cluster]
ndb-connectstring=172.16.10.70


[b]6. 安装数据库脚本:[/b]

# scripts/mysql_install_db --user=mysql

注意:如果执行以上命令报如下错误:

Installing MySQL system tables..../bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

执行如下命令安装libaio

# yum install -y libaio


[b]二、SQL Cluster初次启动命令以及用户密码更改调整:(请严格按照次序启动)[/b]

切换用户:
# su - mysql

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

初次启动管理节点命令:【管理节点(MGMD)上执行如下命令】
# bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini

启动数据节点命令:【数据节点(NDBD) 上执行如下命令】
# bin/ndbd --initial

[b]注意:[/b]这个参数(--initial)只能在第一次启动DataNode节点时使用,因为--initial参数会删除一些ndbd 实例先前创建的所有文件,再次启动只需 /usr/local/mysql/bin/ndbd 即可,不要带--initial参数。

启动查询节点命令:【查询节点(MYSQLD)上执行如下命令】
# bin/mysqld_safe --defaults-file=/etc/my.cnf --explicit_defaults_for_timestamp --skip-grant-tables &

如果一切正常,使用如下命令将Management console开启:【管理节点(MGMD)上执行如下命令】
# bin/ndb_mgm

输入: show
ndb_mgm> show


[img]http://dl2.iteye.com/upload/attachment/0112/3699/db2f9756-35da-362f-8e60-43e0a4d326b3.png[/img]


# bin/mysqladmin -uroot password agdis

[b]注意:几台装有MySQL查询节点(MYSQLD)的服务器皆需要执行一遍上述命令[/b]


[b]三、Cluster效果测试:[/b]

# bin/mysql -u root -p

输入对应的密码后登陆到系统

mysql> show databases;

+--------------------+
| Database |
+--------------------+
| information_schema |
| clustertest |
| data |
| mysql |
| ndb_1_fs |
| ndbinfo |
| performance_schema |
| test |
+--------------------+
8 rows in set (0.00 sec)


按照如下命令开始新建database;

mysql>create database clustertest;
mysql>use clustertest;
mysql>CREATE TABLE testtable(Count INT) ENGINE=NDBCLUSTER;

[b] 特别注意:[/b]
只有使用了NDBCluster引擎的表才会执行同步操作,因此特别需要在上述表加入这个后缀。
每个NDB表必须有一个主键。如果在创建表时用户未定义主键,NDB Cluster存储引擎将自动生成隐含的主键。


[img]http://dl2.iteye.com/upload/attachment/0112/3727/c181b613-c1e1-3266-84d6-21f0087b117f.png[/img]


[b]四、关闭Cluster:(需要严格按照次序执行)[/b]

切换用户:
# su - mysql

关闭查询节点:【查询节点(MYSQLD)上执行如下命令】
# bin/mysqld stop (SQL节点可以用mysqladmin -uroot shutdown或别的方式关闭。)

在管理节点上执行:【管理节点(MGMD)上执行如下命令】
# bin/ndb_mgm -e shutdown

将安全的关闭管理节点和查询节点。

关闭后使用如下的进程检测命令查看一下是否退出来了:
# pgrep mysqld
# ps aux | grep ndbd


如果没有,找到对应的pid进行kill 操作即可。

[b]五、再次启动Cluster方案:[/b]

切换用户:
# su - mysql

启动整个cluster的次序:

启动管理节点命令:【管理节点(MGMD)上执行如下命令】
# bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini

启动数据节点命令:【数据节点(NDBD) 上执行如下命令】
# bin/ndbd

启动查询节点命令:【查询节点(MYSQLD)上执行如下命令】
# bin/mysqld_safe --defaults-file=/etc/my.cnf --explicit_defaults_for_timestamp --skip-grant-tables &

[b]六、杂记:[/b]

防火墙策略调整:
# iptables -A INPUT -s 192.168.100.0/24 -i eth2 -p tcp -m tcp -j ACCEPT

修改密码方法一:

# mysqladmin -u root password root (更改密码) (没有新密码前执行)
# mysqladmin -u root -p 'xxxxxx' password 'NewPassword'; (安装完毕后启动mysqld执行)

修改密码方法二:

# UPDATE mysql.user SET Password=PASSWORD('Password01!') WHERE User='root';
# FLUSH PRIVILEGES;

修改密码方法三:

让mysql以不带安全控制的方式启动:
# bin/mysqld_safe --user=mysql --skip-grant-tables --skip-networking;
然后再用前面2种方法修改密码


解决MySQL客户端工具连接SQL Node出现1130的异常,在MySQL控制台下执行:

 如果你想myuser使用mypassword从任何主机连接到mysql服务器的话。

mysql>GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;

mysql>FLUSH PRIVILEGES;

 如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器,并使用mypassword作为密码的话。

mysql>GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;

mysql>FLUSH PRIVILEGES;

 如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器的dk数据库,并使用mypassword作为密码的话。

mysql>GRANT ALL PRIVILEGES ON dk.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;

mysql>FLUSH PRIVILEGES;

你可能感兴趣的:(CentOS)