MySQL_Cluster集群配置方案

合集下载

MySQL CLUSTER 集群方案

MySQL CLUSTER 集群方案
五、检查工作状态
在任意一台机子上启动管理终端:
# ndb_mgm
键入show命令查看当前工作状态:(下面是一个状态输出示例)
– NDB Cluster — Management Client –
ndb_mgm> show
Connected to Management Server at: 192.168.1.111:1186
MySQL CLUSTER 集群方案
来源:网络
(1.双机实现高可用)
一、介绍
这篇文档旨在介绍如何安装配置基于2台服务器的MySQL集群。并且实现任意一台服务器出现问题或宕机时MySql集群依然能够继续运行。加下后续的(keepalived+lvs+mysql cluster文档),可以实现Mysql双机的高可用及负载均衡。
启动管理节点Server2为:
# ndb_mgmd –ndb_nodeid=2
注:在启动时有一个警告提示
Cluster configuration warning:
arbitrator with id 1 and db node with id 3 on same host 192.168.1.111
Id=1
HostName= 192.168.1.111
[ndb_mgmd]
Id=2
HostName= 192.168.1.110
[ndbd]
Id= 3
HostName= 192.168.1.111
[ndbd]
Id= 4
HostName= 192.168.1.110
[mysqld]
TimeBetweenWatchDogCheck= 30000

MySQL集群之五大常见的MySQL高可用方案(转)

MySQL集群之五大常见的MySQL高可用方案(转)

MySQL集群之五⼤常见的MySQL⾼可⽤⽅案(转)1. 概述我们在考虑MySQL数据库的⾼可⽤的架构时,主要要考虑如下⼏⽅⾯:如果数据库发⽣了宕机或者意外中断等故障,能尽快恢复数据库的可⽤性,尽可能的减少停机时间,保证业务不会因为数据库的故障⽽中断。

⽤作备份、只读副本等功能的⾮主节点的数据应该和主节点的数据实时或者最终保持⼀致。

当业务发⽣数据库切换时,切换前后的数据库内容应当⼀致,不会因为数据缺失或者数据不⼀致⽽影响业务。

关于对⾼可⽤的分级在这⾥我们不做详细的讨论,这⾥只讨论常⽤⾼可⽤⽅案的优缺点以及⾼可⽤⽅案的选型。

2. ⾼可⽤⽅案2.1. 主从或主主半同步复制使⽤双节点数据库,搭建单向或者双向的半同步复制。

在5.7以后的版本中,由于lossless replication、logical多线程复制等⼀些列新特性的引⼊,使得MySQL原⽣半同步复制更加可靠。

常见架构如下:通常会和proxy、keepalived等第三⽅软件同时使⽤,即可以⽤来监控数据库的健康,⼜可以执⾏⼀系列管理命令。

如果主库发⽣故障,切换到备库后仍然可以继续使⽤数据库。

优点:1. 架构⽐较简单,使⽤原⽣半同步复制作为数据同步的依据;2. 双节点,没有主机宕机后的选主问题,直接切换即可;3. 双节点,需求资源少,部署简单;缺点:1. 完全依赖于半同步复制,如果半同步复制退化为异步复制,数据⼀致性⽆法得到保证;2. 需要额外考虑haproxy、keepalived的⾼可⽤机制。

2.2. 半同步复制优化半同步复制机制是可靠的。

如果半同步复制⼀直是⽣效的,那么便可以认为数据是⼀致的。

但是由于⽹络波动等⼀些客观原因,导致半同步复制发⽣超时⽽切换为异步复制,那么这时便不能保证数据的⼀致性。

所以尽可能的保证半同步复制,便可提⾼数据的⼀致性。

该⽅案同样使⽤双节点架构,但是在原有半同复制的基础上做了功能上的优化,使半同步复制的机制变得更加可靠。

mysql cluster常用参数配置

mysql cluster常用参数配置
MaxNoOfLocalOperations=110000
Байду номын сангаас
#该参数定义了全局检查点操作之间的时间间隔。默认值为2000毫秒。
TimeBetweenGlobalCheckpoints=1000
#这个参数定义mysql cluster复制同步的间隔时间,默认是100毫秒。
TimeBetweenEpochs=200
BackupMemory=20M
#线程的数量,和ndb节点是否采用超线程ndbmtd有关。
MaxNoOfExecutionThreads=4
#该超时参数指明了放弃事务之前,事务协调器等候另一节点执行查询的时间长短
TransactionDeadLockDetectionTimeOut=10000
#设置redo日志缓存
RedoBuffer=32M
#定义线程在进入睡眠状态之前多少毫秒被执行
SchedulerSpinTimer=400
#定义线程在被发送前多少毫秒被执行
SchedulerExecutionTimer=100
#设置ndbcluster线程启用真实时间的时序安排
RealTimeScheduler=1
[MYSQLD]
id=13
HostName=192.168.100.221
[MYSQLD]
id=14
HostName=192.168.100.222
[MYSQLD]
#mysqld多设置几个空连接用于恢复和线程池
[MYSQLD]
[MYSQLD]
[MYSQLD]
[MYSQLD]
#设置事务的buffer缓存

Mysql-cluster安装配置

Mysql-cluster安装配置

Mysql-cluster 7.2.5的安装配置OS:UbuntuData1 10.0.0.102 数据节点,SQL节点Data2 10.0.0.103 数据节点,SQL节点Ndb 10.0.0.104 管理节点1、下载解压到/usr/local/mysqltar -zxvf mysql-cluster-gpl-7.2.5-linux2.6-x86_64.tar.gzmv mysql-cluster-gpl-7.2.5-linux2.6-x86_64 /usr/local/mysql2、创建mysql用户useradd mysqlchown -R mysql:mysql /usr/local/mysql/3、安装支持库sudo apt-get install libaio14、修改/etc/profile以方便使用PATH=$PATH:/usr/local/mysql/binexport PATH5、安装mysqlcd /usr/local/mysql/scripts./mysql_install_db–basedir=/usr/local/mysql/–datadir=/usr/local/mysql/data/ --user=mysql6、配置管理节点ndb拷贝/usr/local/mysql/bin/ndb_mgm,ndb_mgmd两个文件到/usr/local/bincp /usr/local/mysql/bin/ndb_mgm* /usr/local/binmkdir /var/lib/mysql-clustervim /var/lib/mysql-cluster/config.ini[ndbd default]NoOfReplicas=1 #每个数据节点的镜像数量DataMemory=100M #每个数据节点中给数据分配的内存IndexMemory=10M #每个数据节点中给索引分配的内存[ndb_mgmd] #配置管理节点NodeId=1hostname=10.0.0.104datadir=/var/lib/mysql-cluster/ #管理节点数据(日志)目录[ndbd] #配置数据节点NodeId=2hostname=10.0.0.102datadir=/usr/local/mysql/data #数据节点目录(数据存储位置)[ndbd]NodeId=3hostname=10.0.0.103datadir=/usr/local/mysql/data[mysqld]#配置SQL节点hostname=10.0.0.102[mysqld]hostname=10.0.0.103[mysqld] #一定要留一个空的,以备扩展使用,否则会出现Failed to allocate nodeid No free node id found for ndbd(NDB)错误7、配置数据节点和SQL节点mysql服务启动时会默认加载/etc/f作为其配置文件,因此vim /etc/f[mysqld]ndbclusterdatadir=/usr/local/mysql/databasedir=/usr/local/mysqlport=3306[mysql_cluster]ndb-connectstring=10.0.0.104#声明管理节点8、启动服务节点的启动顺序为管理节点->数据节点->SQL节点启动管理节点:ndb_mgmd是mysqlcluster的管理服务器,后面的-f表示后面的参数是启动的参数配置文件。

MySQLCluster方案概述

MySQLCluster方案概述

MySQLCluster方案概述分两点:一. MySQL NDB Cluster的概述MySQL NDB Cluster是一个适用于分布式计算环境的高可用性、高冗余版本的MySQL。

NDB集群由一组计算机组成,称为主机,每个计算机运行一个或多个进程。

这些进程称为节点,可能包括MySQL服务器(用于访问NDB数据)、数据节点(用于存储数据)、一个或多个管理服务器,以及可能的其他专门的数据访问程序。

在NDB集群中这些组件的关系如下所示:NDB集群所有这些程序一起工作来形成一个NDB集群。

当数据被NDB存储引擎存储时,表(和表数据)存储在数据节点中。

这样的表可以直接从集群中的所有MySQL服务器(SQL节点)访问。

因此,在一个将数据存储在集群中的工资单应用程序中,如果一个应用程序更新了雇员的工资,那么查询这些数据的所有其他MySQL服务器都可以立即看到这个变化。

NDB集群核心概念NDB CLUSTER(也称为NDB)是一个内存存储引擎,提供高可用的数据持久化功能。

NDB CLUSTER存储引擎可以配置一系列故障转移和负载平衡。

集群节点集群节点有三种类型,在最小的NDB集群配置中,至少会有三个节点。

1. Management node这种类型节点的作用是管理NDB集群中的其他节点,执行诸如提供配置数据、启动和停止节点以及运行备份等功能。

因为这个节点类型管理其他节点的配置,所以应该首先启动这种类型的节点,在任何其他节点之前。

执行ndb_mgmd命令启动该节点。

2. Data node这种类型节点的作用是存储集群数据。

一个副本足以用于数据存储,但不提供冗余;因此,建议使用2(或更多)副本来提供冗余,从而获得高可用性。

执行ndbd或ndbmtd(多线程)命令启动该节点。

NDB集群表通常存储在内存中,而不是在磁盘上(这就是为什么我们将NDB集群称为内存中的数据库)。

然而,一些NDB集群数据可以存储在磁盘上。

3. SQL node在NDB Cluster中SQL节点是一个使用NDBCLUSTER存储引擎的传统MySQL服务器。

mysql数据库集群配置详解

mysql数据库集群配置详解

mysql数据库集群配置详解环境:Vmware workstation6.5操作系统:Centos 5.2 (2台)第一台:主机名:mysql1 IP:192.168.1.30第二台主机名:mysql2 IP:192.168.1.32软件下载安装下载软件地址:/downloads/select.php?id=14选择操作系统是RedHat Enterprise 版本如下:MySQL-Cluster-gpl-client-7.0.8a-0.rhel5.i386.rpmMySQL-Cluster-gpl-debuginfo-7.0.8a-0.rhel5.i386.rpmMySQL-Cluster-gpl-devel-7.0.8a-0.rhel5.i386.rpmMySQL-Cluster-gpl-embedded-7.0.8a-0.rhel5.i386.rpmMySQL-Cluster-gpl-extra-7.0.8a-0.rhel5.i386.rpmMySQL-Cluster-gpl-management-7.0.8a-0.rhel5.i386.rpmMySQL-Cluster-gpl-server-7.0.8a-0.rhel5.i386.rpmMySQL-Cluster-gpl-shared-7.0.8a-0.rhel5.i386.rpmMySQL-Cluster-gpl-storage-7.0.8a-0.rhel5.i386.rpmMySQL-Cluster-gpl-test-7.0.8a-0.rhel5.i386.rpmMySQL-Cluster-gpl-tools-7.0.8a-0.rhel5.i386.rpm将软件包上传到服务器Rpm –ivh *.rpm具体配置在两台机器上做(同样的配置文件)1、创建配置文件目录:(mysql1 mysql2)#mkdir /var/lib/mysql-cluster –p在/var/lib/mysql-cluster 下创建集群配置文件config.ini编辑,添加如下内容:[NDBD DEFAULT]NoOfReplicas=2DataMemory=128MIndexMemory=64MMaxNoOfConcurrentOperations=2000000[MYSQLD DEFAULT][NDB_MGMD DEFAULT]DataDir= /var/lib/mysql-cluster[TCP DEFAULT]# Section for the cluster management node[NDB_MGMD]# IP address of the management node (this system) ID=1HostName= 192.168.1.30[NDB_MGMD]# IP address of the management node (this system) ID=2HostName= 192.168.1.32# Section for the storage nodes[NDBD]ID=3# IP address of the first storage nodeHostName=192.168.1.30[NDBD]ID=4# IP address of the second storage node HostName=192.168.1.32# one [MYSQLD] per storage node[MYSQLD][MYSQLD][MYSQLD][MYSQLD][MYSQLD][MYSQLD][MYSQLD]2、创建API文件(mysql1 mysql2)编辑/etc/f 添加如下内容:[mysqld]default-storage-engine=ndbclusterlog=queryLoglog-slow-queries=slowquerylogmax_connections = 1000#NDBCLUSTERndbclusterndb-connectstring = 192.168.1.30,192.168.1.32[ndb_mgm]connect-string = 192.168.1.30,192.168.1.32[ndbd]connect-string = 192.168.1.30,192.168.1.32[mysql_cluster]ndb-connectstring= 192.168.1.30,192.168.1.32[ndb_mgmd]config-file=/var/lib/mysql-cluster/config.ini集群的启动:启动管理节点在mysql1 上启动管理节点# ndb_mgmd –ndb_nodeid=1在mysql2上启动管理节点# ndb_mgmd –ndb_nodeid=2第一次会有警告:Cluster configuration warning:arbitrator with id 1 and db node with id 3 on same host 192.168.1.30 arbitrator with id 2 and db node with id 4 on same host 192.168.1.32 Running arbitrator on the same host as a database node maycause complete cluster shutdown in case of host failure.是说:节点1和3,2和4的arbitrator一样,可能引起整个集群失败这个无所谓,继续启动NDB在mysql1 上运行:# ndbd –nodeid=3 –initial在mysql2上运行:# ndbd –nodeid=4 –iniitial注意:在第一次启动ndb或者修改了config.ini 文件才加上-initiail 参数查看状态:在任意一台机器上查看:[root@mysql1 ~]# ndb_mgm-- NDB Cluster -- Management Client --ndb_mgm> showConnected to Management Server at: 192.168.1.30:1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=5 @192.168.1.30 (mysql-5.1.37 ndb-7.0.8, Nodegroup: 0, Master)id=6 @192.168.1.32 (mysql-5.1.37 ndb-7.0.8, Nodegroup: 0)[ndb_mgmd(MGM)] 2 node(s)id=1 @192.168.1.30 (mysql-5.1.37 ndb-7.0.8)id=2 @192.168.1.32 (mysql-5.1.37 ndb-7.0.8)[mysqld(API)] 9 node(s)id=7 (not connected, accepting connect from any host)id=8 (not connected, accepting connect from any host)id=9 (not connected, accepting connect from any host)id=10 (not connected, accepting connect from any host)id=11 (not connected, accepting connect from any host)id=12 (not connected, accepting connect from any host)id=13 (not connected, accepting connect from any host)id=14 (not connected, accepting connect from any host)id=15 (not connected, accepting connect from any host)看到上面的信息就正常了启动API在mysql1中:#mysqld_safe –ndb_nodeid=5 –user=mysql &在mysql2 中:#mysqld_safe –ndb_nodeid=6 –user=mysql &再次查看:[root@mysql1 ~]# ndb_mgm-- NDB Cluster -- Management Client --ndb_mgm> showConnected to Management Server at: 192.168.1.30:1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=5 @192.168.1.30 (mysql-5.1.37 ndb-7.0.8, Nodegroup: 0, Master) id=6 @192.168.1.32 (mysql-5.1.37 ndb-7.0.8, Nodegroup: 0)[ndb_mgmd(MGM)] 2 node(s)id=1 @192.168.1.30 (mysql-5.1.37 ndb-7.0.8)id=2 @192.168.1.32 (mysql-5.1.37 ndb-7.0.8)[mysqld(API)] 9 node(s)id=7 @192.168.1.30 (mysql-5.1.37 ndb-7.0.8)id=8 @192.168.1.32 (mysql-5.1.37 ndb-7.0.8)id=9 (not connected, accepting connect from any host)id=10 (not connected, accepting connect from any host)id=11 (not connected, accepting connect from any host)id=12 (not connected, accepting connect from any host)id=13 (not connected, accepting connect from any host)id=14 (not connected, accepting connect from any host)id=15 (not connected, accepting connect from any host)显示两个API节点正常集群测试在mysql1中创建库# /usr/local/mysql/bin/mysql -u root -pmysql >create database love;mysql > use love;mysql > create table love (i INT)mysql > insert into love () VALUES (1);在mysql2上查询:mysql > select * from love;mysql> show tables;+----------------+| Tables_in_love |+----------------+| love |+----------------+1 row in set (0.03 sec)mysql> select * from love;+------+| i |+------+| 1 |+------+1 row in set (0.08 sec)已经同步:下面我将mysql1 停掉网卡:看一下状态:[root@mysql2 ~]# ndb_mgm-- NDB Cluster -- Management Client --ndb_mgm> showConnected to Management Server at: 192.168.1.32:1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=5 (not connected, accepting connect from 192.168.1.30)id=6 @192.168.1.32 (mysql-5.1.37 ndb-7.0.8, Nodegroup: 0, Master)[ndb_mgmd(MGM)] 2 node(s)id=1 (not connected, accepting connect from 192.168.1.30)id=2 @192.168.1.32 (mysql-5.1.37 ndb-7.0.8)[mysqld(API)] 9 node(s)id=7 (not connected, accepting connect from any host)id=8 (not connected, accepting connect from any host)id=9 (not connected, accepting connect from any host)id=10 (not connected, accepting connect from any host)id=11 (not connected, accepting connect from any host)id=12 (not connected, accepting connect from any host)id=13 (not connected, accepting connect from any host)id=14 (not connected, accepting connect from any host)id=15 (not connected, accepting connect from any host)mysql2 对外提供服务成为主服务器看能否查询:mysql> select * from love;ERROR 1296 (HY000): Got error 157 'Unknown error code' from NDBCLUSTER mysql> select * from love;ERROR 1296 (HY000): Got error 157 'Unknown error code' from NDBCLUSTER 暂时不能查询,出现错误:稍等片刻再次查询,没有错误,这段时间是故障转移,时间不是很长具体时间没计算在mysql2 上创建表:mysql > create table love1 (i INT)mysql > insert into love1 () VALUES (1);接下来将mysql1的网卡启动在mysql1上查询数据:[root@mysql1 ~]# mysql -u root -pEnter password:Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 4Server version: 5.1.37-ndb-7.0.8a-cluster-gpl-log MySQL Cluster Server (GPL) Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> use love;Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> show tables ;+----------------+| Tables_in_love |+----------------+| love || love1 |+----------------+2 rows in set (0.01 sec)mysql> select * from love1;+------+| i |+------+| 1 |+------+1 row in set (0.00 sec)可以看到在mysql2上创建的表love2正常运行但是mysql1成为主服务器,这个怎么改变过来,还不清楚The end !。

如何在一台计算机上安装配置mysql-cluster

如何在一台计算机上安装配置mysql-cluster

1.据说从mysql 5.1 以后mysql安装包里就不包含mysql cluster ,而是单独作为一个产品发布,目前mysql网站上最新的版本是mysql cluster 7.2.7。

下载地址:/downloads/cluster/#downloads2.建立有5个节点的MySQL CLuster体系( OS : REDHAT 6.1 )管理节点(MGM) 192.168.251.141SQL节点1(SQL1) 192.168.251.141SQL节点2(SQL2) 192.168.251.141数据节点1(NDBD1) 192.168.251.141数据节点2(NDBD2) 192.168.251.1413.首先去下载文件mysql-cluster-gpl-7.2.7-linux2.6-x86_64.tar.gz4.解压文件到/mysqlData/ 并重命名为mysql-cluster[root@dbcp-db01 mysqlData]# pwd/mysqlData[root@dbcp-db01 mysqlData]# lsmysql-cluster-gpl-7.2.7-linux2.6-x86_64.tar.gz mysql-cluster5.建立软连ln -s /mysqlData/mysql-cluster/ /usr/local/mysql6.在/etc/profile 加入export PATH=$PATH:/usr/local/mysql/binecho “export PATH=$PATH:/usr/local/mysql/bin” >> /etc/profilesource /etc/profile7.配置管理节点[root@dbcp-db01 config]# vi /data/config/mysqlcluster.ini[NDBD DEFAULT]NoOfReplicas=1[TCP DEFAULT]portnumber=3388#[NDB_MGMD]NodeId = 1hostname=192.168.251.141#datadir=/mysqlData/clustermgmd-data/#[NDBD]NodeId = 2hostname=192.168.251.141datadir=/mysqlData/clusterndb1-data/#[NDBD]NodeId = 3hostname=192.168.251.141datadir=/mysqlData/clustern db2-data/#[MYSQLD]NodeId = 4hostname=192.168.251.141#[MYSQLD]NodeId = 5hostname=192.168.251.141[MYSQLD]8.配置存储节点和SQL节点(配置两个cnf 配置不同的参数路径)[root@dbcp-db01 config]# vi /data/config/f[mysqld]ndbclusterbasedir=/mysqlData/mysql-clusterdatadir=/mysqlData/clusterndb1-data/socket=/data/socket/my-n1.sockpid-file=/data/socket/n1.pidlog-error = /mysqlLog/n1_err.logslow_query_log_file = /mysqlLog/n1_slow.logport = 3399ndb-connectstring=192.168.251.141[mysql_cluster]ndb-connectstring=192.168.251.141[root@dbcp-db01 config]# vi /data/config/f[mysqld]ndbclusterbasedir=/mysqlData/mysql-clusterdatadir=/mysqlData/clusterndb2-data/socket=/data/socket/my-n2.sockpid-file=/data/socket/n2.pidlog-error = /mysqlLog/n2_err.logslow_query_log_file = /mysqlLog/n2_slow.logport = 3398ndb-connectstring=192.168.251.141[mysql_cluster]ndb-connectstring=192.168.251.1419.建立mysql用户组和mysql用户groupadd mysqluseradd -g mysql mysql10.创建配置文件中所用到的目录mkdir -p /mysqlData/clusterndb2-data/mkdir -p /mysqlData/clusterndb1-data/mkdir -p /data/socket/mkdir -p /mysqlLog/mkdir -p /mysqlData/clustermgmd-data/11.更改相关目录的权限chown -R mysql.mysql /mysqlData/chown -R mysql.mysql /mysqlLog/12.初始化SQL节点[root@dbcp-db01 ~]# cd /usr/local/mysql/scripts/[root@dbcp-db01 scripts]# ./mysql_install_db --defaults-file=/data/config/f --datadir=/mysqlData/clusterndb1-data/ --user=mysql --basedir=/mysqlData/mysql-cluster/ &[1] 24447[root@dbcp-db01 scripts]# Installing MySQL system tables...OKFilling help tables...OKTo start mysqld at boot time you have to copysupport-files/mysql.server to the right place for your systemPLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !To do so, start the server, then issue the following commands:/mysqlData/mysql-cluster//bin/mysqladmin -u root password 'new-password'/mysqlData/mysql-cluster//bin/mysqladmin -u root -h dbcp-db01 password 'new-password'Alternatively you can run:/mysqlData/mysql-cluster//bin/mysql_secure_installationwhich will also give you the option of removing the testdatabases and anonymous user created by default. This isstrongly recommended for production servers.See the manual for more instructions.You can start the MySQL daemon with:cd /mysqlData/mysql-cluster/ ; /mysqlData/mysql-cluster//bin/mysqld_safe &You can test the MySQL daemon with mysql-test-run.plcd /mysqlData/mysql-cluster//mysql-test ; perl mysql-test-run.plPlease report any problems with the /mysqlData/mysql-cluster//scripts/mysqlbug script![root@dbcp-db01 ~]# cd /usr/local/mysql/scripts/[root@dbcp-db01 scripts]# ./mysql_install_db --defaults-file=/data/config/f --datadir=/mysqlData/clusterndb1-data/ --user=mysql --basedir=/mysqlData/mysql-cluster/ &[1] 24508[root@dbcp-db01 scripts]# Installing MySQL system tables...OKFilling help tables...OK.......13.启动mysql-cluster,启动顺序为管理节点->存储节点->SQL节点A. 启动管理节点[root@dbcp-db01 ~]# ndb_mgmd -f /data/config/mysqlcluster.iniMySQL Cluster Management Server mysql-5.5.25 ndb-7.2.7[root@dbcp-db01 ~]#B. 启动存储节点[root@dbcp-db01 scripts]# /usr/local/mysql/bin/ndbd --defaults-file=/data/config/f --initial2012-08-10 11:25:13 [ndbd] INFO -- Angel connected to '192.168.251.141:1186'2012-08-10 11:25:13 [ndbd] INFO -- Angel allocated nodeid: 2[root@dbcp-db01 scripts]# /usr/local/mysql/bin/ndbd --defaults-file=/data/config/f --initial2012-08-10 11:25:25 [ndbd] INFO -- Angel connected to '192.168.251.141:1186'2012-08-10 11:25:25 [ndbd] INFO -- Angel allocated nodeid: 3[root@dbcp-db01 scripts]#C. 启动SQL节点[root@dbcp-db01 scripts]# mysqld_safe --defaults-file=/data/config/f --user=mysql &[1] 24649[root@dbcp-db01 scripts]# 120810 11:26:41 mysqld_safe Logging to '/mysqlLog/n1_err.log'.120810 11:26:41 mysqld_safe Starting mysqld daemon with databases from /mysqlData/clusterndb1-data/[root@dbcp-db01 scripts]# ps aux | grep mysqldroot 24649 0.1 0.0 106012 1316 pts/1 S 11:26 0:00 /bin/sh /usr/bin/mysqld_safe --defaults-file=/data/config/f --user=mysqlmysql 24732 1.2 2.2 953944 46772 pts/1 Sl 11:26 0:00 /usr/libexec/mysqld --defaults-file=/data/config/f --basedir=/mysqlData/mysql-cluster--datadir=/mysqlData/clusterndb1-data/ --user=mysql --log-error=/mysqlLog/n1_err.log --pid-file=/data/socket/n1.pid --socket=/data/socket/my-n1.sock --port=3399root 24760 0.0 0.0 103152 796 pts/1 S+ 11:27 0:00 grep mysqld[root@dbcp-db01 scripts]# mysqld_safe --defaults-file=/data/config/f --user=mysql &[2] 24761[root@dbcp-db01 scripts]# 120810 11:27:18 mysqld_safe Logging to '/mysqlLog/n2_err.log'.120810 11:27:18 mysqld_safe Starting mysqld daemon with databases from /mysqlData/clusterndb2-data/[root@dbcp-db01 scripts]# ps aux | grep mysqldroot 24649 0.0 0.0 106012 1316 pts/1 S 11:26 0:00 /bin/sh /usr/bin/mysqld_safe --defaults-file=/data/config/f --user=mysqlmysql 24732 0.8 2.2 953944 47184 pts/1 Sl 11:26 0:00 /usr/libexec/mysqld --defaults-file=/data/config/f --basedir=/mysqlData/mysql-cluster--datadir=/mysqlData/clusterndb1-data/ --user=mysql --log-error=/mysqlLog/n1_err.log --pid-file=/data/socket/n1.pid --socket=/data/socket/my-n1.sock --port=3399root 24761 0.2 0.0 106012 1320 pts/1 S 11:27 0:00 /bin/sh /usr/bin/mysqld_safe --defaults-file=/data/config/f --user=mysqlmysql 24844 2.6 2.2 953944 46932 pts/1 Sl 11:27 0:00 /usr/libexec/mysqld --defaults-file=/data/config/f --basedir=/mysqlData/mysql-cluster--datadir=/mysqlData/clusterndb2-data/ --user=mysql --log-error=/mysqlLog/n2_err.log --pid-file=/data/socket/n2.pid --socket=/data/socket/my-n2.sock --port=3398root 24873 0.0 0.0 103152 796 pts/1 S+ 11:27 0:00 grep mysqld[root@dbcp-db01 scripts]#14.所有节点都启动了用ndb_mgm 查看[root@dbcp-db01 ~]# ndb_mgm-- NDB Cluster -- Management Client --ndb_mgm> showConnected to Management Server at: localhost:1186Cluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 @192.168.251.141 (mysql-5.5.25 ndb-7.2.7, Nodegroup: 0, Master)id=3 @192.168.251.141 (mysql-5.5.25 ndb-7.2.7, Nodegroup: 1)[ndb_mgmd(MGM)] 1 node(s)id=1 @192.168.251.141 (mysql-5.5.25 ndb-7.2.7)[mysqld(API)] 2 node(s)id=4 @192.168.251.141 (mysql-5.5.25 ndb-7.2.7)id=5 @192.168.251.141 (mysql-5.5.25 ndb-7.2.7)ndb_mgm>15.在SQL节点端口3399上创建数据库,表,插入数据[root@dbcp-db01 config]# mysql -uroot -p -S /data/socket/my-n1.sockEnter password:Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 2Server version: 5.5.25a-ndb-7.2.7-gpl MySQL Cluster Community Server (GPL)Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.This software comes with ABSOLUTELY NO WARRANTY. This is free software,and you are welcome to modify and redistribute it under the GPL v2 licenseType 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> create database cluster_one;Query OK, 1 row affected (0.12 sec)mysql> use cluster_oneDatabase changedmysql> create table c_tb_a (id int ,tname varchar(10)) engine = ndbcluster default charset utf8;Query OK, 0 rows affected (0.25 sec)mysql> insert into c_tb_a values (1,'qqqqqq');Query OK, 1 row affected (0.01 sec)mysql> insert into c_tb_a values (2,'dddddd');Query OK, 1 row affected (0.00 sec)mysql>16.在SQL节点端口3398 上查询数据[root@dbcp-db01 config]# mysql -uroot -p -S /data/socket/my-n2.sockEnter password:Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 2Server version: 5.5.25a-ndb-7.2.7-gpl MySQL Cluster Community Server (GPL)Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.This software comes with ABSOLUTELY NO WARRANTY. This is free software,and you are welcome to modify and redistribute it under the GPL v2 licenseType 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || cluster_one || mysql || ndb_3_fs || ndbinfo || performance_schema || test |+--------------------+7 rows in set (0.04 sec)mysql> use cluster_oneReading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> show tables;+-----------------------+| Tables_in_cluster_one |+-----------------------+| c_tb_a |+-----------------------+1 row in set (0.00 sec)mysql> select * from c_tb_a;+------+--------+| id | tname |+------+--------+| 1 | qqqqqq || 2 | dddddd |+------+--------+2 rows in set (0.00 sec)mysql>以上就是在一台计算机上安装配置mysql cluster 的过程,其实跟在多台机器上配置差不多,只是在配置cnf的时候要用不同的路径,要注意的是在初始化的时候把--defaults-file --datadir --basedir 几个参数加上。

mysql集群之MYSQLCLUSTER

mysql集群之MYSQLCLUSTER

mysql集群之MYSQLCLUSTER1. 参考⽂档2. 简介MySQL-Cluster是⼀种技术,该技术允许在⽆共享的系统中部署“内存中”数据库的簇。

通过⽆共享体系结构,系统能够使⽤廉价的硬件,⽽且对软硬件⽆特殊要求。

此外,由于每个组件都有⾃⼰的内存和磁盘,所以不存在单点故障。

MySQL簇将标准的MySQL服务器与名为NDB的“内存中”的簇式存储引擎集成了起来。

术语NDB指的是与存储引擎相关的设置部分,⽽术语“MySQL簇”指的是MySQL和NDB存储引擎的组合。

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

关于簇中组件的关系,如下图:所有这些程序⼀起构成了MySQL簇。

将数据保存到NBD簇引擎中时,表将保存在数据节点内。

能够从簇中所有其他MySQL服务器直接访问这些表。

因此,假如在将数据保存在簇内的⼯资应⽤程序中,如果某⼀应⽤程序更新了⼀位雇员的⼯资,所有查询该数据的其他MySQL 服务器能⽴刻发现这种变化。

对于MySQL簇,保存在数据节点的数据可被映射,簇能够处理单独数据节点的故障,除了少数事物将因事物状态丢失⽽被放弃外,不会产⽣其他影响。

由于事物性应⽤程序能够处理失败事宜,因⽽它不是问题源。

3. MySQL簇的基本概念NDB 是⼀种“内存中”存储引擎,它具有可⽤性⾼和数据⼀致性好的特点。

能够使⽤多种故障切换和负载平衡选项配置NDB 存储引擎,但以簇层⾯上的存储引擎开始最简单。

MySQL簇的NDB存储引擎包含完整的数据集,仅取决于簇本⾝内的其他数据。

下⾯名,我们将介绍设置由NDB存储引擎和⼀些MySQL服务器构成的MySQL簇的设置⽅法。

⽬前,MySQL簇的部分可以独⽴于MySQL服务器进⾏配置。

在MySQL簇中,簇的每个部分被视为⼀个节点。

注释:在很多情况下,术语“节点”⽤于指计算机,但在讨论MySQL簇时,它表⽰的是进程。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在为某证券公司设计其OA架构时,初期客户是30万用户在线;然而在项目实施中,客户又提出50万用户同时在线的需求,而且都有写的需求;这样初始的设计master-master-slave,读写分离满足不了客户的要求,所以我们打算采用Mysql Cluster方案;MySQL Cluster 是MySQL适合于分布式计算环境的高实用、高冗余版本。

它采用了NDB Cluster 存储引擎,允许在1个Cluster中运行多个MySQL服务器。

在MyQL 5.0及以上的二进制版本中、以及与最新的Linux版本兼容的RPM中提供了该存储引擎。

一、MySQL Cluster概述MySQL Cluster 是一种技术,该技术允许在无共享的系统中部署“内存中”数据库的 Cluster 。

通过无共享体系结构,系统能够使用廉价的硬件,而且对软硬件无特殊要求。

此外,由于每个组件有自己的内存和磁盘,不存在单点故障。

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

所有的这些节点构成一个完成的MySQL集群体系。

数据保存在“NDB存储服务器”的存储引擎中,表(结构)则保存在“MySQL服务器”中。

应用程序通过“MySQL服务器”访问这些数据表,集群管理服务器通过管理工具(ndb_mgmd)来管理“NDB存储服务器”。

通过将MySQL Cluster 引入开放源码世界,MySQL为所有需要它的人员提供了具有高可用性、高性能和可缩放性的 Cluster 数据管理。

二、MySQL Cluster 基本概念“NDB” 是一种“内存中”的存储引擎,它具有可用性高和数据一致性好的特点。

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

MySQL Cluster的NDB存储引擎包含完整的数据集,仅取决于 Cluster本身内的其他数据。

目前,MySQL Cluster的 Cluster部分可独立于MySQL服务器进行配置。

在MySQL Cluster中, Cluster的每个部分被视为1个节点。

管理(MGM)节点:这类节点的作用是管理MySQL Cluster内的其他节点,如提供配置数据、启动并停止节点、运行备份等。

由于这类节点负责管理其他节点的配置,应在启动其他节点之前首先启动这类节点。

MGM节点是用命令“ndb_mgmd”启动的。

数据节点:这类节点用于保存 Cluster的数据。

数据节点的数目与副本的数目相关,是片段的倍数。

例如,对于两个副本,每个副本有两个片段,那么就有4个数据节点。

不过没有必要设置多个副本。

数据节点是用命令“ndbd”启动的。

SQL节点:这是用来访问 Cluster数据的节点。

对于MySQL Cluster,客户端节点是使用NDB Cluster存储引擎的传统MySQL服务器。

通常,SQL节点是使用命令“mysql d –ndbcluster”启动的,或将“ndbcluster”添加到“f”后使用“mysqld”启动。

注释:在很多情况下,术语“节点”用于指计算机,但在讨论MySQL Cluster 时,它表示的是进程。

在单台计算机上可以有任意数目的节点,为此,我们采用术语“ Cluster主机”。

管理服务器(MGM节点)负责管理 Cluster配置文件和 Cluster日志。

Cluster中的每个节点从管理服务器检索配置数据,并请求确定管理服务器所在位置的方式。

当数据节点内出现新的事件时,节点将关于这类事件的信息传输到管理服务器,然后,将这类信息写入 Cluster日志。

此外,可以有任意数目的 Cluster客户端进程或应用程序。

它们分为两种类型:标准MySQL客户端:对于MySQL Cluster,它们与标准的(非 Cluster类)MySQL没有区别。

换句话讲,能够从用PHP、Perl、C、C++、Java、Python、Ruby 等编写的现有MySQL应用程序访问MySQL Cluster。

管理客户端:这类客户端与管理服务器相连,并提供了启动和停止节点、启动和停止消息跟踪(仅调试版本)、显示节点版本和状态、启动和停止备份等的命令。

三、开始准备1、准备服务器现在,我们计划建立有5个节点的MySQL CLuster体系,因此需要用到5台机器,分别做如下用途:2、注意事项及其他每个节点的操作系统都是Linux,下面的描述中将使用主机名,不再使用IP 地址来表示。

由于MySQL Cluster采用TCP/IP方式连接,并且节点之间的数据传输没有加密,因此这个体系最好只在单独的子网中运行,并且考虑到传输的速率,强烈建议不要跨越公网使用这个体系。

为了测试环境的准备性,我这里所有hostname相关我全部写成ip,所需软件我推荐用mysql-max-5.0.24,下载地址为(已测)/_/?q=mysql-max-5.0.24-linux-i686.tar.gz四、开始安装1、假定条件在每个节点计算机上都采用mysql 用户来运行Cluster,因此执行如下命令添加相关用户(如果已经存在则略过,且用root用户执行):root# /usr/sbin/groupadd mysqlroot# /usr/sbin/useradd -g mysql mysql假设已经下载了mysql可直接使用的二进制安装包,且放在 /root 下了。

2、SQL节点和存储节点(NDB节点)安装(即4个机器重复执行以下步骤)root# cd /root/root# tar zxf mysql-max-5.0.24-linux-i686.tar.gzroot# mv mysql-max-5.0.24-linux-i686 /usr/local/mysql/root# cd /usr/local/mysql/root# ./configure --prefix=/usr/local/mysqlroot# ./scripts/mysql_install_dbroot# chown -R mysql:mysql /usr/local/mysql/3、配置SQL节点root# vim /etc/f然后输入如下内容:[mysqld]basedir = /usr/local/mysql/ datadir = /usr/local/mysql/data/ user = mysqlport = 3306socket = /tmp/mysql.sock ndbclusterndb-connectstring=192.168.5.101[mysql_cluster]ndb-connectstring=192.168.5.1014、配置存储节点(NDB节点)root# vi /etc/f然后输入如下内容:[mysqld]ndbclusterndb-connectstring=192.168.5.101[mysql_cluster]ndb-connectstring=192.168.51015、安装管理节点root# cd /root/root# tar zxf mysql-max-5.0.24-linux-i686.tar.gzroot# mkdir /usr/local/mysql/root# mkdir /usr/local/mysql/data/root# cd mysql-max-5.0.24-linux-i686/bin/ root# cp ndb_mgm* /usr/local/mysqlroot# chown -R mysql:mysql /usr/local/mysql 6、配置管理节点root# vi /usr/local/mysql/config.ini然后输入如下内容:[ndbd default]NoOfReplicas=1[tcp default]portnumber=3306#设置管理节点服务器[ndb_mgmd]hostname=192.168.5.101#MGM上保存日志的目录datadir=/usr/local/mysql/data/#设置存储节点服务器(NDB节点)[ndbd]hostname=192.168.5.102datadir=/usr/local/mysql/data/#第二个NDB节点[ndbd]hostname=192.168.5.103datadir=/usr/local/mysql/data/#设置SQL节点服务器[mysqld]hostname=192.168.5.104#第二个SQL节点[mysqld]hostname=192.168.5.105注释: [tcp default] 这项写成portnumber=3306,简朝阳大哥的书上这点有误。

五、启动MySQL Cluster较为合理的启动顺序是,首先启动管理节点服务器,然后启动存储节点服务器,最后才启动SQL节点服务器:在管理节点服务器上,执行以下命令启动MGM节点进程:root# /usr/local/mysql/ndb_mgmd -f /usr/local/mysql/config.ini必须用参数“-f”或“--config-file”告诉 ndb_mgm 配置文件所在位置,默认是在ndb_mgmd相同目录下。

在每台存储节点服务器上,如果是第一次启动ndbd进程的话,必须先执行以下命令:root# /usr/local/mysql/bin/ndbd --initial注意,仅应在首次启动ndbd时,或在备份/恢复数据或配置文件发生变化后重启ndbd时使用“--initial”参数。

因为该参数会使节点删除由早期ndbd实例创建的、用于恢复的任何文件,包括用于恢复的日志文件。

如果不是第一次启动,直接运行如下命令即可:root# /usr/local/mysql/bin/ndbd最后,运行以下命令启动SQL节点服务器:root# /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/f &如果一切顺利,也就是启动过程中没有任何错误信息出现,那么就在管理节点服务器上运行如下命令:root# /usr/local/mysql/ndb_mgm-- NDB Cluster -- Management Client --ndb_mgm> showCluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=*********.5.102(Version:5.0.24,Nodegroup:0,Master)id=*********.5.103(Version:5.0.24,Nodegroup:1)[ndb_mgmd(MGM)] 1 node(s)id=*********.5.101(Version:5.0.24)[mysqld(API)] 2 node(s)id=*********.5.104(Version:5.0.24)44id=*********.5.105(Version:5.0.24)六、环境测试与没有使用 Cluster的MySQL相比,在MySQL Cluster内操作数据的方式没有太大的区别。

相关文档
最新文档