一 概述:
- mysql的群集是个比较另类的东西,它本质上只是标准Mysql服务器的一种存储引擎而已——名称叫 ndb 或者 ndbcluster。该引擎必须显式的编译进mysqld服务器中才可以使用
- ndb支持较为广泛的平台及操作系统,且经过多年的发展,已经可以应用于生产环境
- ndb引擎通过tcp协议交换群集数据
- ndb不需要传统的共享存储设备,而是通过 专门的 ndbd数据存储引擎 来模拟共享存储
- ndbd存储引擎支持 自动配置、多个数据复本、数据分区、自动分组等功能
- ndb提供专门的管理工具集
二 ndb群集构架
- 管理节点:ndb_mgmd 群集的心脏
- 管理界面:ndb_mgm 群集的管理接口
- 数据节点:ndbd 虚拟共享存储引擎
- sql节点:mysqld 支持ndb引擎的mysqld服务器
- 客户端:任何的客户端、如mysql、sqlyog等等, 无特殊要求
三 ndb群集中的逻辑概念和组件
- nodeid:节点id号——唯一标识 群集内各种部件的 唯一 id 。注意:对于数据节点 范围为:1-48;对于管理节点:范围为:1-63。可能的话,管理节点和mysqld节点在:49-63的范围内。控制参数为:[ndbd] [ndbd_mgmd] nodeid
- replicas:复件——数据的冗余度,可以理解为数据的副本个数。从数据安全和群集可用上来说,replicas越大越好,但终归要考虑性能、网络通信量、数据安全性要求等因素,mysql给出的默认值即一般的推荐值为2。控制参数为:[nbdb default] noofreplicas 。说的远一点,mysql群集这点比使用共享存储的 sqlserver群集和orace群集灵活、强大多了。
- nodegroup:数据节点组——服务于replicas的逻辑概念和实现机制1,目的是实现组内的各节点的 复件 功能, 同时实现 组间的 复件功能。通过组 将数据的 复制 简化、明细化、可靠化。一般 组号 是动态计算的,也可以明确指定。控制参数为:[nbdb] nodegroup
- partition:数据的的一个逻辑部分——服务于replicas的逻辑概念和实现机制2,细化逻辑数据片段,应该是复件 功能的最小逻辑单元
- mysqld:使用和支持ndb的容器——当mysqld识别到ndb引擎的表时,就调用ndb存储引擎插件 进而使用 ndb群集访问功能。必须注意:ndb对mysqld来说只是一个插件存储引擎而已,其他mysqld必须的东西 和原来一样!!
四 群集管理节点配置文件和配置参数
mysql在这一点上真的不错。所有的程序——无论是客户端、服务器、还是各组件程序——都遵循同样的规则:识别同样的参数、读取同样的配置文件、依照同样的规则进行扩展!
- 必须注意程序读取配置文件的 次序、路径
- 可以通过命令行选项覆盖默认的行为
- 每种程序都读取特定的节,注意通用节
群集配置文件:--config-file=filename
, -f filename
:默认为 "./config.ini"
群集管理节点读取的节有很多很多,很多参数可以用在不同的节,某些参数只能用在特定的节。注意如果executeoncomputer 和 hostname 参数都不配置,则认为是 localhost
[computer]
- id=n #注意:此处的id仅仅就是id而不是其他节中 nodeid的别名,所以,不能写成nodeid。该值用在 [ndbd] 和 [ndbd_mgmd] 的 executeoncomputer的值中
- hostname=name_or_ip
[mgm] [ndbd_mgmd]
- nodeid={1-63}
- executeoncomputer=id #不能用在 [??? default] 中
- hostname={localhost|hostname or ip}[:port] #不能用在 [??? default] 中
- datadir={.|path} #注意不用使用引号括起来的字符串
- logdestination={FILE:filename=ndb_%nodeid%_cluster.log,maxsize=1000000,maxfile=6|[CONSOLE,{SYSLOG:{[
auth
, authpriv
, cron
, daemon
, ftp
, kern
, lpr
, mail
, news
, syslog
, user
, uucp
, local0
, local1
, local2
, local3
, local4
, local5
, local6
, local7
]}},FILE]...} #日志目标可以用多种和多个;FILE目标可以使用绝对路径;SYSLOG有很多的系统日志目的的!
[ndbd default] [ndbd]
- noofreplicas={2|n} #必须在[ndbd default]中
- nodegroup=n #只是第一次启动节点是会用到,主要用来向现有的群集添加新的数据节点用。通常ndb会自动计算分配该值
- nodeid=n #只能用于[ndbd]
- hostname=string #只能用于[ndbd]
- serverport={动态|1-64K} #通常用于有防火墙的os中
- datadir=path #指示trace files, log files, pid files and error logs 的位置。默认是节点进程的工作目录。
- filesystempath=path # 指示 metadata, REDO logs, UNDO logs (for Disk Data tables), and data files 的位置,默认是
DataDir
。该目录必须是os存在的!在该目录下,节点文件夹会自动建立,形如: ndb_2_fs
.
- backupdatadir=path #指示数据节点备份的目录 ,默认 同
FileSystemPath
- datamemory={80M|1M-1024G}
- -----其他内存、元数据等参数
[mysqld] [api]
[tcp default] [tcp]
[sci]
五 数据节点配置文件和配置参数
使用标准的my.ini或my.cnf文件
bind-address=hostname or specified ip address
ndb-connectstring={ localhost:1186 | [nodeid=id,] { hostname_or_ip [:port]} [,....n]}
ndb-nodeid=n
initial
initial-start
nowait-nodes=node_id_1 [,.....n]
六 mysqld节点配置文件和配置参数
使用标准的my.ini或my.cnf文件
读取节:[mysqd]
ndbcluster | ndbcluster={on | yes | no | off} #默认是关闭的,相当于指定了 skip-ndbcluster参数
skip-ndbcluster #显式的关闭ndb引擎,这是默认的
ndb-nodeid={1-63} #如果设置,必须在ndb-connectstring前面。设置该值 可以 覆盖 ndb-connectstring中的指定的nodeid、可以覆盖群集配置文件中指定的nodeid、可以禁止管理服务自动为该mysqld节点自动分配nodeid。注意:ndb-nodeid 不能和 ndb-connectstring中指定 nodeid=n同时设置;该值 必须和config指定了点nodeid相匹配、或者config中没有指定nodeid而是让管理服务自动分配nodeid;当然该值不能和群集中已经分配的nodeid冲突!!
ndb-connectstring={ localhost:1186 | [nodeid=id,] { hostname_or_ip [:port]} [,....n]}
七 待续............... 还有很多未尽的事宜,不断更新补充中......