`

mysql集群技术

 
阅读更多

Management管理节点和DataNote节点都不开启mysql服务,只有MysqlServer节点开启。The default port for Cluster management nodes is 1186; the default port for data nodes is 2202.
mysql集群技术 mysql4.1.13

Submitted by root on 2008, March 14, 3:15 PM. 数据库类

mysql集群技术
1 环境描述
Mysql manager 节点: 192.168.0.1
MysqlServer节点: 192.168.0.100
Mysql 节点:   192.168.0.160
Mysql 节点:   192.168.0.161
说明:至少需要四台服务器才可以做mysql的集群。建议5台,再增加一台MysqlServer。

2 安装mysql二进制包
2.1   安装之前的准备工作
下载mysql-max-4.1.13-pc-linux-gnu-i686.tar.gz包
(注意:可以做集群的mysql都是mysql-max的,下载地点www.mysql.org
#groupadd mysql
#useradd -g mysql mysql
#cd /usr/local
#tar xfz mysql-max-4.1.13-pc-linux-gnu-i686.tar.gz
#ln -s /usr/local/mysql-max-4.1.13-pc-linux-gnu-i686 /opt/mysql4.1.13

2.2   分别在manager,server,node节点上安装二进制的mysql包
#cd mysql4.1.13
#scripts/mysql_install_db --user=mysql (必须带目录执行,否则出错)
#chown -R root /opt/mysql4.1.13
#chgrp -R mysql /opt/mysql4.1.13
#chown -R mysql.mysql /opt/mysql4.1.13/data
#cp support-files/mysql.server /etc/rc.d/init.d/   配置mysql启动设置
#chmod +x /etc/rc.d/init.d/mysql.server
#chkconfig --add mysql.server

3       配置server,note节点
在192.168.0.160和192.168.0.161机器上
# ./mysql –help   该命令可以查看mysql启动时是怎么寻找my.cnf文件的顺序。
Default options are read from the following files in the given order:
/etc/my.cnf   /usr/local/mysql-max-4.1.13/data/my.cnf   ~/.my.cnf
# cp support-files/my-medium.cnf data/my.cnf   将mysql的配置文件考到data下
Vi /usr/local/mysql-max-4.1.13-pc-linux-gnu-i686/data/my.cnf

[MYSQLD]
ndbcluster
ndb-connectstring=192.168.0.1

[MYSQL_CLUSTER]
ndb-connectstring=192.168.0.1

4       配置Management管理节点
在192.168.0.1机器上

#mkdir /var/lib/mysql-cluster

#cd /var/lib/mysql-cluster

#vi config.ini

[NDBD DEFAULT]   
# Options affecting ndbd processes on all data nodes:
NoOfReplicas=2   
# Number of replicas
DataMemory=80M   
# How much memory to allocate for data storage
IndexMemory=52M  
# How much memory to allocate for index storage
# For DataMemory and IndexMemory, we have used the
# default values. Since the "world" database takes up
# only about 500KB, this should be more than enough for
# this example Cluster setup.


[TCP DEFAULT]     # TCP/IP options:
portnumber=2202  
# This the default; however, you can use any
# port that is free for all the hosts in cluster
# Note: It is recommended beginning with MySQL 5.0 that
# you do not specify the portnumber at all and simply allow
# the default value to be used instead
# Management process options(定义管理节点.)

[NDB_MGMD]

hostname=192.168.0.1   
# 管理节点Hostname or IP address of MGM node
datadir=/var/lib/mysql-cluster # Directory for MGM node logfiles
# Options for data node "A"(定义群集数据节点.)
# (one [NDBD] section per data node)

[NDBD]

hostname=192.168.0.160   
# 节点Hostname or IP address
datadir=/usr/local/mysql/data  
# Directory for this data node's datafiles
# Options for data node "B"(定义群集数据节点.)

[NDBD]

hostname=192.168.0.161   
# 节点Hostname or IP address
datadir=/usr/local/mysql/data  
# Directory for this data node's datafiles
# SQL node options(定义Sql server节点.)

[MYSQLD]


hostname=192.168.0.100   
# SQL节点Hostname or IP address
#datadir=/usr/local/mysql/data # Directory for SQL node's datafiles
# (additional mysqld connections can be
# specified for this node for various
# purposes such as running ndb_restore)


[NDB_MGMD]:后面不能有任何注释信息,否则提示:

Error line 17: [TCP] Unknown parameter: [NDB_MGMD]   # Management process options

Error line 17: Could not parse name-value pair in config file.

[SHM]: Defines shared-memory connections between nodes. 在MySQL 4.1.9之前,这个功能必须使用--with-ndb-shm option编译进去, 从MySQL 4.1.9-max版本开始, it is enabled by default


5       启动mysql集群
5.1     初始化启动mysql集群服务

1)启动MysqlManagement管理节点(192.168.0.1)

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

2)启动Data Node节点(192.168.0.160,192.168.0.161)

#ndbd --initial

(注意:这个参数只能在第一次启动DataNode节点时使用,因为—initial参数会删除一些ndbd 实例先前创建的所有文件)


3)启动MysqlServer节点(192.168.0.100)

# ./mysql.server start

5.2     重启mysql集群服务

1)启动MysqlManagement管理节点(192.168.0.1)

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

2)启动Data Node节点(192.168.0.160,192.168.0.161)

#ndbd

3)启动MysqlServer节点(192.168.0.100)

# ./mysql.server start

(注意:Management管理节点和DataNote节点都不开启mysql服务,只有MysqlServer节点开启。The default port for Cluster management nodes is 1186; the default port for data nodes is 2202.)

6       测试集群的效果
6.1     在管理机上查看各节点运行状况

[root@Proxy bin]# ./ndb_mgm

-- NDB Cluster -- Management Client --

ndb_mgm> show

Connected to Management Server at: localhost:1186

Cluster Configuration

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

[ndbd(NDB)]   2 node(s)

id=2   @192.168.0.160 (Version: 4.1.13, Nodegroup: 0, Master)

id=3   @192.168.0.161 (Version: 4.1.12, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)

id=1   @192.168.0.1 (Version: 4.1.13)

[mysqld(API)]   1 node(s)

id=4   @192.168.0.100 (Version: 4.1.12)

6.2     模拟写入一个数据库表,各MysqlServer节点是否能够同步

1) 在一个MysqlServer节点上创建数据库world和表,然后看看另一个MysqlServer节点是否也同样可以看到。

答:数据都相同

2) 拔掉一个DataNote节点网线,看看两台MysqlServer节点是否还能正常工作。

答:可以

3) 拔掉两台DataNote节点网线,查看一下MysqlServer节点是否还能正常工作。

答:所有MysqlServer都不能正常工作

7       附件:
以上文档参考mysql官方资料:http://dev.mysql.com/doc/mysql/en/ndbcluster.html

再补一篇


AS2.1+mysql-max-4.1.11
简单使用模型


配置:
管理服务端:192.168.255.10

需要ndb_mgm(控制台),ndb_mgmd(后台程序)两个文件
在当前目录下配置config.ini文件
[NDBD DEFAULT]
NoOfReplicas=2
[NDB_MGMD] #可以写成[MGM]
HostName=192.168.255.10
[NDBD]
HostName=192.168.255.11
DataDir=/usr/local/mysql/data
[NDBD]
HostName=192.168.255.12
DataDir=/usr/local/mysql/data
[MYSQLD]
[MYSQLD]
启动ndb_mgmd程序

mysql1,mysql1: 192.168.255.11,192.168.255.12
两个mysql服务器配置一样
my.cnf配置:

[mysqld] #配置mysqld
ndbcluster
[mysql_cluster] #配置ndbd
ndb-connectstring=192.168.255.10 #MGM地址

启动ndbd [--initial](--initial参数只能在头次启动ndbd,它会清空数据与日志)

动后使用,否则会引起数据丢失)
启动mysql服务

建表时,需加入ENGINE=NDBCLUSTER参数,如
create table x(a int) engine=ndbcluster;
create table x(a int) engine=ndb;
或修改原表
alter table x engine=ndbcluster;


启动关闭:
启动:
必须先起动ndb_mgmd,其次是ndbd, mysqld最好最后启动,否则当ndbd没有启动时将不能访问ndb数据。

关闭:
MGM端:ndb_mgm -e shutdown
Mysqld端: mysql.server stop

备份恢复:
备份:
在MGM端执行 ndb_mgm –e start backup,系统将会将数据分散备份至NDBD端的data/BACKUP目录下。
恢复:
1. 删除原表或数据
2. 关闭NDBD结点服务器上运行的mysqld(如果有的话)
3. 在每一个NDBD端的数据备份文件目录下执行ndb_restore –bx –nx –r –print(-b指备份号,-指节点号,即备份文件中的两个数字。-r指恢复结构,第一个节点要加-m恢复表结构)
4. 启动被关闭的mysqld

mysql的恢复如果执行两遍的话,不会造成数据冲突或重复.

MysqlCluster高级技术


Cluster原理:
Mysqld分三层,一个MGM用于管理配置,m个mysqld给应用程序提供访问,n个ndbd提供集群存储
mysqld的使用方法和普通版本的mysqld使用相同,不过加入的对ndb数据存储的支持。
数据是分散存储在每组ndb节点的,每组中ndb节点的数据相同,每组至少有一个ndbd保持运行状态才能访问数据。(组的分配参看NoOfReplicas参数)。ndb节点间保证数据的同步
备份时,备份数据分散备份至每一个正在运行的ndb节点,所以恢复时需要在每个ndb节点都进行恢复。如果表不存在的话,使用-m参数创建。如果一个 ndb节点数据丢失,可以先备份正在运行的ndb,然后使用ndbd –initial 重建整个cluster,然后使用备份恢复.此方法也可用来扩容.
ndb会对没有主键的用户创建一个隐性主键。
对双机系统, NoOfReplicas建议设为2.
常用命令:
ndb_mgm控制台命令
ndb_mgm [hostname[port]]
show 显示当前状态
node_id start, node_id stop, node_id restart,node_id status 对接点控制
enter single user mod node_id 只允许一个mysqld连接指定的ndb
shutdown 关闭ndb,mgm
start backup,abort backcup 开始/放弃备份
clusterlog off,clusterlog on,clusterlog toggle,clusterlog info 对集群日志的控制

操作系统命令
ndbd ndb节点后台进程
--initial --initial会清空数据和日志,只有当第一次建立cluster或cluster结构发生改变需要重建时才使用
--ostart等待mgm启动后启动
平时不加参数直接执行即可

ndb_restoret 恢复备份
ndb_resore –bx –ny –r –m –print 在备份文件目录下执行,-m只能在第一次执行,如果数据库不存在的话,恢复可以成功,但通过mysqld无法访问,需要重新创建数据库即可。
-b 备份号,
-n 节点号,
-r 恢复数据,
–m 恢复表结构,
--print 打印至标准输出

ndb_delete_all,ndb_desc,ndb_drop_index ,ndb_drop_table, ndb_select_all,ndb_select_count, ndb_show_tables
基本等同于sql操作,但是他们可以看见隐式主键
例:ndb_desc –d test x 察看test数据库中的x表

ndb_waiter 校验cluster节点状态
ndb_cpcd,ndb_test_platform ???
MGM
config.ini详解
# Options affecting ndbd processes on all data nodes:
[NDBD DEFAULT]   
NoOfReplicas=2    #数据被复制的份数,也指明一个组的乘员数
                         #系统按id从低到高的顺序分组


# TCP/IP options:
[TCP DEFAULT]   
portnumber=2202   #服务端口号

# Management process options:
[NDB_MGMD]     #简写[MGM]
id=    #结点id 1-63,可以不写,自动分配
ExecuteOnComputer=   # [computer]一节指定的计算机
LogDestination=     # 取值为CONSOLE, SYSLOG, FILE,日志输出到控制台,
# 系统日志或文件 例(??)
# console
# facility=syslog
#   filename=cluster.log,maxsize=1000000,maxfiles=6
#
ArbitrationRank=1 #0:不使用仲裁(?)
      #1: 高优先级仲裁
      #2:低优先级仲裁
      #MGM,mysqld节点使用
ArbitrationDelay=0 #毫秒

      
hostname=192.168.0.10            #MGM节点地址, 不能配置为127.0.0.1或localhost,

                                              #必须是本地实际ip
datadir=/var/lib/mysql-cluster      # 日志,pid等文件

# Options for data node "A":
[NDBD]                         #配置NDB节点,除了hostname,id和ExecuteOnComputer,
                                   #其他共性的参数可以在[NDBD default中指定] ,每个NDB节点都要配一段
id=                               #1-63   ,可以不写,自动分配   
ExecuteOnComputer
Serverport=       #连接其它节点使用的端口号,默认动态分配                     
hostname=192.168.0.30             # Hostname or IP address
datadir=/usr/local/mysql/data      #日志,pid等文件
filesystempath=$datadir       #日志,撤销日志,数据所存在的位置,推荐/var/lib/mysql-clustere
BackupDataDir=$FileSystemPath/BACKUP #备份文件位置
DataMemory=80M        #数据使用内存.用来放数据,ordered index(?)和索引,DUNO信息
IndexMemory=18M      #主键,唯一性索引,注意和ordered index区分,最小1M
                                #使用内存数=(DataMemory+IndexMemory)* NoOfReplicas
MaxNoOfConcurrenttranctions=4096 #所有节点必须设想同值,最大事务并发
MaxNoOfConcuttentOperations=32768    #每个事务处理数据大小
MaxNoOfLocalOperations=1.1*$MaxNoOfConcurrentOperations #
待续…

# Options for data node "B":
[NDBD]                        
hostname=192.168.255.12           # Hostname or IP address
datadir=/usr/local/mysql/data   # Directory for this data node's datafiles
      

# SQL node options:
[MYSQLD]     #配置mysqld节点,每个mysql节点都要配一段,可以不写任何内容,由mgm自动分配

id=        #1-63,可以不写,自动分配
ArbitrationRank=0 #0:不使用仲裁
      #1: 高优先级仲裁
      #2:低优先级仲裁
      #MGM,mysqld节点使用
ArbitrationDelay=0 #毫秒
BatchByteSize=32K #转换为全表扫描或根据索引扫描的查询?
BatchSize=64   #最大992
MaxScanBatchSize=256K #16MB
                     
hostname=192.168.0.20           # Hostname or IP address
                                # (additional mysqld connections can be
                                # specified for this node for various
                                # purposes such as running ndb_restore)

对mysqld,ndbd都需要连接字符串用来连接MGM
格式 id,host:port,host,port....
如:nodeid=2,192.168.255.2:1186,192.168.255.3:1186
或192.168.255.2
Mysqld
my.cnf详解
[mysqld]
ndbcluster      #使用ndb引擎
skip-ndbcluster     #不使用ndb引擎(需要编译支持)
ndb-connectstring=192.168.255.10 #MGM地址
从4.1.8版本开始可以将ndb-connectstring写至[mysql_cluster]段
[mysql_cluster]
ndb-connectstring=192.168.255.10 #MGM地址
Ndb
My.cnf
[mysql_cluster]
ndb-connectstring=192.168.255.10 #MGM地址
nbd.cfg??

Tags: 集群, mysql4, mysql数据库, 数据库, 集群技术


http://hi.baidu.com/sing520/blog ... ebf6fcae51331f.html

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics