Mysql集群与调优

Mysql集群与调优



实验背景:


1.安装MySQL-Cluster相关软件包。


2.依次配置管理/数据/SQL节点。


3.启动并测试MySQL-Cluster集群架构。


实验方案:


 使用6台RHEL 6.4虚拟机,其中sqlA和sqlB作为SQL节点,ndbA和ndbB作为数据节点,


mgmd作为管理节点,这5个节点构成MySQL Cluster体系;而另一台虚拟机192.168.4.20作为MySQL测试客户机。


 构成MySQL集群体系的5个节点应安装Cluster版的MySQL相关软件包,具体操作见“实现”部分的安排;测试用的Linux客户机只需安装普通版的MySQL-client即可。



实验实现:

1.前期准备工作


1)确认各节点服务器的主机名、IP地址


为5个节点建立统一的hosts文件,提高本地解析速度,相关操作如下:


[root@sqlA ~]# vim /etc/hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

.. ..

192.168.4.10 sqlA.tarena.com sqlA

192.168.4.20 sqlB.tarena.com sqlB

192.168.4.30 ndbA.tarena.com ndbA

192.168.4.40 ndbB.tarena.com ndbB

192.168.4.100 mgmsvr.tarena.com mgmsvr


参考上述hosts文件为各节点设置好主机名、IP地址(具体过程略)。


卸载冲突包【所有节点】


 官方提供的MySQL-Cluster相关软件包已集成数据库服务端/客户端程序,因此可直接用

来替换普通的MySQL服务端/客户端程序。如果已安装有普通版的mysql-server、mysql、

MySQL-server、MySQL-client包,请先将其卸载(若没有则忽略):

[root@sqlA ~]# yum -y remove mysql-server mysql

Setting up Remove Process



 对于RHEL自带的mysql-libs暂时保留(如果直接卸载会因为依赖关系删除许多重要的包

,比如crontab、postfix等),但在安装MySQl-Cluster相关包的时候采用“-U”升级的

方式执行替换。


如果有残留的/etc/my.cnf文件,确保已转移备用或直接删除。


[root@sqlA ~]# mv /etc/my.cnf /etc/my.cnf.old  


3)安装MySQL-Cluster相关软件包【所有节点】

在所有节点上,解压下载的MySQL-Cluster集合包:


[root@sqlA ~]# cd /var/ftp/pub/

[root@sqlA pub]# tar xvf MySQL-Cluster-gpl-7.3.3-1.el6.x86_64.rpm-bundle.tar

MySQL-Cluster-shared-gpl-7.3.3-1.el6.x86_64.rpm

MySQL-Cluster-shared-compat-gpl-7.3.3-1.el6.x86_64.rpm

MySQL-Cluster-server-gpl-7.3.3-1.el6.x86_64.rpm

MySQL-Cluster-client-gpl-7.3.3-1.el6.x86_64.rpm

MySQL-Cluster-test-gpl-7.3.3-1.el6.x86_64.rpm

MySQL-Cluster-devel-gpl-7.3.3-1.el6.x86_64.rpm

MySQL-Cluster-embedded-gpl-7.3.3-1.el6.x86_64.rpm


在所有节点上,安装MySQL-Cluster-server、MySQL-Cluster-client软件包:


[root@sqlA pub]# rpm -Uvh MySQL-Cluster-shared-*.rpm



在SQL节点(sqlA、sqlB)服务器上,修改MySQL数据库的root密码:

[root@sqlA ~]# cat /root/.mysql_secret

# The random password set for the root user at Tue Dec 24 15:24:50 2013 (local time): Z3Qw2OWJ                                 //查看默认的密码

[root@sqlA ~]# service mysql start         //启动MySQL服务程序

Starting MySQL... [确定]

[root@sqlA ~]# mysql –u root –p             //以上述默认密码登录

Enter password:


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



mysql> SET PASSWORD FOR 'root'@'localhost'=PASSWORD('1234567');

Query OK, 0 rows affected (0.10 sec)         //重设root口令


在数据节点(ndbA、ndbB)和管理节点(mgmsvr)上,实际上并不需要启动MySQL服务程序

,因此建议将mysql服务的自启状态设为关闭,root密码可改可不改:


[root@ndbA ~]# chkconfig mysql off

[root@ndbA ~]# chkconfig --list mysql

mysql 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭


4)添加授权数据库用户【SQL节点】


 在SQL节点(sqlA、sqlB)服务器上,添加相应的授权数据库用户,以方便客户端使用数据

库服务。以用户root为例,允许其从192.168.4.0/24网段访问:


mysql> GRANT all ON *.* TO 'root'@'192.168.4.%' IDENTIFIED BY '1234567';

Query OK, 0 rows affected (0.10 sec)             //授权用户及客户机

mysql> exit                                     //退出 mysql> 环境

Bye



2.配置管理节点 mgmd (192.168.4.100)


1)创建工作文件夹


为管理节点提供一个工作目录,方便记录MySQL集群相关的日志消息:


[root@mgmsvr ~]# mkdir -p /var/log/mysql-cluster


2)创建配置文件



针对本节的案例,管理节点的配置操作参考如下:


[root@mgmsvr ~]# vim /etc/my-cluster.ini

[ndbd default]

NoOfReplicas=2                                 //保留2份数据拷贝

DataMemory=80M                                 //数据缓存大小

IndexMemory=18M                             //索引缓存大小

[ndb_mgmd]


nodeid=1                                     //第1个管理节点的ID号


hostname=192.168.4.100                         //此管理节点的地址

datadir=/var/log/mysql-cluster             //此管理节点的工作目录



[mysqld]

nodeid=10                                     //第1个SQL节点的ID号

hostname=192.168.4.10                         //第1个SQL节点的地址

[mysqld]

nodeid=20                                     //第2个SQL节点的ID号

hostname=192.168.4.20                         //第2个SQL节点的地址



[ndbd]

nodeid=30                                     //第1个数据节点的ID号

hostname=192.168.4.30                         //第1个数据节点的地址

datadir=/var/lib/mysql-cluster/data        //第1个数据节点的工作目录

[ndbd]

nodeid=40                                     //第2个数据节点的ID号

hostname=192.168.4.40                         //第2个数据节点的地址

datadir=/var/lib/mysql-cluster/data        //第2个数据节点的工作目录




3.配置数据节点 ndbA(192.168.4.30) 、ndbB (192.168.4.40)


1)创建工作文件夹


为各数据节点提供一个工作目录,用来存放实际的数据库表记录等相关数据:


1.[root@ndbA ~]# mkdir -p /var/lib/mysql-cluster/data


2)创建配置文件


 指定工作目录(数据存储目录)、管理服务器的IP地址、采用ndbcluster存储引擎,以

便支持集群特性;并添加[mysql_cluster]配置段,同样指定管理地址。


针对本节的案例,2个数据节点的配置操作参考如下:


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

[mysqld]

datadir=/var/lib/mysql-cluster/ndbdata     //指定数据存储目录

ndb-connectstring=192.168.4.100             //要连接的管理服务器的IP地址

ndbcluster                                     //指定运行的存储引擎

[mysql_cluster]                             //集群连接配置段

ndb-connectstring=192.168.4.100




4.配置SQL节点sqlA(192.168.4.10) 、sqlB (192.168.4.20)


    主要是调整my.cnf配置,指定运行的存储引擎、默认存储引擎,并通过[mysql_cluster]配置段指定管理地址。在MySQL-Cluster集群环境中,若某个数据库未采用ndbcluster引擎(而是InnoDB、MyISAM等其他引擎),则当更新数据库表时,可能无法同步到其他节点。




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

[mysqld]

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

explicit_defaults_for_timestamp=1

.. ..

ndbcluster                                     //指定运行的存储引擎

default-storage-engine=ndbcluster             //设置默认存储引擎

[mysql_cluster]                             //集群连接配置段

ndb-connectstring=192.168.4.100



5.启动MySQL集群


正确的启动顺序:管理节点 --> 数据节点 --> SQL节点。


关闭顺序:SQL节点 --> 数据节点 --> 管理节点。


数据节点、SQL节点都正常运行后,理论上管理节点可关闭(无监控等任务的话)。


1)启动管理节点mgmd


MySQL Cluster管理节点的对应服务程序为ndb_mgmd,通过选项-f指定建立的集群配置文件。

[root@mgmsvr ~]# ndb_mgmd -f /etc/my-cluster.ini         //启动管理节点,-f 指定配置文件路径


若希望每次开机后自动运行ndb_mgmd,可将上述启动操作写入到/etc/rc.local配置文件内,例如:

[root@mgmsvr ~]# vim /etc/rc.local

.. ..

ndb_mgmd -f /etc/my-cluster.ini


启动完成后可查看监听状态:


[root@mgmsvr ~]# netstat -anpt | grep ndb


tcp 0 0 0.0.0.0:1186 0.0.0.0:* LISTEN 4656/ndb_mgmd

tcp 0 0 127.0.0.1:1186 127.0.0.1:38567 ESTABLISHED 4656/ndb_mgmd

tcp 0 0 127.0.0.1:38567 127.0.0.1:1186 ESTABLISHED 4656/ndb_mgmd


查看日志文件相关数据:


[root@mgmsvr ~]# ls /var/log/mysql-cluster/

ndb_1_cluster.log ndb_1_out.log ndb_1.pid



2)启动数据节点ndbA、ndbB

MySQL Cluster数据节点的对应服务程序为ndbd(单线程的)、ndbmtd(多线程的),首次启动或重新初始化时加 --initial选项,以后不用加。


启动ndbA:


[root@ndbA ~]# ndbd --initial         //启动数据节点

.2013-12-24 17:55:55 [ndbd] INFO -- Angel connected to '192.168.4.100:1186'

2013-12-24 17:55:55 [ndbd] INFO -- Angel allocated nodeid: 30


启动ndbB:


[root@ndbA ~]# ndbd --initial         //启动数据节点

2013-12-24 17:55:55 [ndbd] INFO -- Angel connected to '192.168.4.100:1186'

2013-12-24 17:55:55 [ndbd] INFO -- Angel allocated nodeid: 40


在ndbA和ndbB服务器上,修改/etc/rc.local配置文件,以便每次开机后能自动启动数据节点服务:

[root@ndbA ~]# vim /etc/rc.local

.. ..

ndbd


3)启动SQL节点sqlA、sqlB


对于MySQL Cluster的SQL节点来说,对应的服务程序就是mysqld,正常通过mysql脚本重新启动服务就可以了。


启动sqlA:


[root@sqlA ~]# service mysql restart

.Shutting down MySQL..... [确定]

Starting MySQL.... [确定]


启动sqlB:


[root@sqlB ~]# service mysql restart

Shutting down MySQL..... [确定]

Starting MySQL.... [确定]


在sqlA和sqlB服务器上,建议将mysql服务的自动状态设为“启用”:


[root@sqlA ~]# chkconfig mysql on


[root@sqlA ~]# chkconfig --list mysql


mysql 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭

成功启动后,可在本机登入mysql>环境,检查默认的存储引擎,确保已支持ndbcluster且作为默认存储引擎:


[root@sqlA ~]# mysql -u root -p

Enter password:


.. ..

mysql> SHOW ENGINES\G

*************************** 1. row ***************************

Engine: ndbcluster                     //已支持NDB集群存储

Support: DEFAULT                         //且已作为默认

Comment: Clustered, fault-tolerant tables

Transactions: YES

XA: NO

Savepoints: NO

*************************** 2. row ***************************

... ...



4)在管理节点mgmd上查看群集状态


直接执行ndb_mgm可进入群集管理环境:


[root@mgmsvr ~]# ndb_mgm //进入集群管理环境


-- NDB Cluster -- Management Client --

ndb_mgm>

进入ndb_mgm> 环境后,执行SHOW可查看当前各节点的状态,确保本例中的5个节点都已经成功连接;


ndb_mgm> SHOW //查看管理状态

Connected to Management Server at: localhost:1186

.Cluster Configuration

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

[ndbd(NDB)] 2 node(s)                         //两个数据节点

id=30 @192.168.4.30 (mysql-5.6.14 ndb-7.3.3, Nodegroup: 0, *)

id=40 @192.168.4.40 (mysql-5.6.14 ndb-7.3.3, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)                         //一个数据节点

id=1 @192.168.4.100 (mysql-5.6.14 ndb-7.3.3)

[mysqld(API)] 2 node(s)                         //两个SQL节点

id=10 @192.168.4.10 (mysql-5.6.14 ndb-7.3.3)

id=20 @192.168.4.20 (mysql-5.6.14 ndb-7.3.3)

ndb_mgm>



6.MySQL集群的高可用性测试


1)数据同步测试


从客户机访问sqlA,执行写数据库、表相关操作:



然后从客户机访问sqlB,确认结果(能看到从sqlA上所建的库、表、表记录):


反过来从sqlB上所作的数据库表操作,从sqlA上也能获得相同的结果。


2)高可用性测试(关闭一台数据节点)


关闭数据节点ndbA上的ndbd进程:


[root@ndbA ~]# killall -9 ndbd                     //暴力结束ndbd进程

[root@ndbA ~]# netstat -anpt | grep ndbd             //确认已结束


此时从管理节点上查看集群状态,会发现ndbA已断开连接:

ndb_mgm> show



然后从客户机访问sqlA或sqlB,仍然可读、写数据库。比如可向mydb.mytb表中再添加一条记录:


以上测试成立说明:只要还有一台数据节点可用,MYSQL数据库整体就仍然可用。


实验总结:

1、实验开始之前的环境准备不要忘记卸载冲突包



2、在管理节点的ini配置文件中,应涵盖所有节点的设置,主要包括各节点的ID号、主机


名或IP地址、工作目录等信息。相关配置区段的作用如下:


?[ndbd default]:为所有的数据节点指定默认配置。

?[ndbd]:指定某一个数据节点的配置。

?[ndb_mgmd default]:为所有的管理节点指定默认配置。

?[ndb_mgmd]:指定某一个管理节点的配置。

?[mysqld default]:为所有的SQL节点指定默认配置。

?[mysqld]:指定某一个SQL节点的配置。


3、关于管理节点的启动,有以下几个需要注意的地方:


?ndb_mgmd默认以后台模式运行(--daemon),调试过程中可添加选项--nodaemon来禁用后台模式。


?ndb_mgmd初次启动成功以后,会自动保存集群配置,以后再启动时会忽略-f指定的配置文件,除非添加--inital选项(比如向集群中添加新的节点时,就应该重新初始化)。


4、








      本文转自Jx战壕  51CTO博客,原文链接:http://blog.51cto.com/xujpxm/1386303,如需转载请自行联系原作者

上一篇:MySQL常用集群方案


下一篇:SpringCloud 应用在 Kubernetes 上的最佳实践 —— 高可用(弹性伸缩)