实际上,MySQL集群是把一个叫做NDB的内存集群存储引擎集成与标准的MySQL服务器集成。它包含一组计算机,每个都跑一个或者多个进程,这可能包括一个MySQL服务器,一个数据节点,一个管理服务器和一个专有的一个数据访问程序。它们之间的关系如下图所示:
存储引擎 MySQL Cluster 使用了一个专用的基于内存的存储引擎,这样做的好处是速度快, 没有磁盘I/O的瓶颈,但是由于是基于内存的,所以数据库的规模受系统总内存的限制, 如果运行NDB的MySQL服务器一定要内存够大,比如4G, 8G, 甚至16G。NDB引擎是分布式的,它可以配置在多台服务器上来实现数据的可靠性和扩展性,理论上 通过配置2台NDB的存储节点就能实现整个数据库集群的冗余性和解决单点故障问题。 该存储引擎有下列弊端:
当然也有它的优点:
体系结构 MySQL Cluster 由3个不同功能的服务构成,每个服务由一个专用的守护进程提供,一项 服务也叫做一个节点,下面来介绍每个节点的功能。 The management (MGM) node 管理节点,用来实现整个集群的管理,理论上一般只启动一个,而且宕机也不影响 cluster 的服务,这个进程只在cluster 启动以及节点加入集群时起作用, 所以这个节点不是很需要冗余,理论上通过一台服务器提供服务就可以了。 通过 ndb_mgmd 命令启动,使用 config.ini 配置文件 The storage or database (DB) node: 数据库节点,用来存储数据,可以和管理节点(MGM) , 用户端节点(API) 可以处在 不同的机器上,也可以在同一个机器上面,集群中至少要有一个DB节点,2个以上 时就能实现集群的高可用保证,DB节点增加时,集群的处理速度会变慢。 通过 ndbd 命令启动,第一次创建好cluster DB 节点时,需要使用 –init参数初始化。 例如: bin/ndbd –ndb-connectstring=ndb_mgmd.mysqlcluster.net –initial The client (API) node: 客户端节点,通过他实现 cluster DB 的访问,这个节点也就是普通的 mysqld 进程, 需要在配置文件中配置ndbcluster 指令打开 NDB Cluster storage engine 存储引擎,增加 API 节点会提高整个集群的并发访问速度和整体的吞吐量,该节点 可以部署在Web应用服务器上,也可以部署在专用的服务器上,也开以和DB部署在 同一台服务器上。 通过 mysqld_safe 命令启动, 这3类节点可以分布在不同的主机上,比如 DB 可以是多台专用的服务器,也可以 每个DB都有一个API,当然也可以把API分布在Web前端的服务器上去,通常来说, API越多cluster的性能会越好。 ==========================以上理论摘抄自搜索技术博客-淘宝 ========================== MySQL-Cluster具体配置 ---------------------------------------- MGM IP:192.168.100.1SQL1 IP:192.168.100.2 SQL2 IP:192.168.100.3 NDBD1 IP:192.168.100.4 NDBD2 IP:192.168.100.5 ---------------------------------------- MGM配置 ######################################################################## MySQL集群版安装 mysql-cluster-gpl-7.2.5.tar.gz --------------------------------------------------------- # tar xf mysql-cluster-gpl-7.2.5.tar.gz -C /usr/src # cd /usr/src/mysql-cluster-gpl-7.2.5 # cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr/local/mysql -DMYSQL_DATADIR:PATH=/database -DMEMCACHED_HOME:PATH=/usr/local -DWITH_CLASSPATH:STRING=/usr/java -DWITH_EXTRA_CHARSETS:STRING=all -DWITH_INNOBASE_STORAGE_ENGINE:BOOL=ON -DWITH_NDBCLUSTER_STORAGE_ENGINE:BOOL=ON -DWITH_PARTITION_STORAGE_ENGINE:BOOL=ON -DWITH_PERFSCHEMA_STORAGE_ENGINE:BOOL=ON # make && make install -------------------------------------------------------- 具体的MySQL配置文件定义等这里不作进一步描述 # vim /usr/local/mysql/etc/config.ini //配置管理文件 # cat /usr/local/mysql/etc/config.ini [NDBD DEFAULT] NoOfReplicas=2 DataMemory=80M IndexMemory=18M [NDB_MGMD] hostname=192.168.100.1 datadir=/data nodeid=1 [NDBD] hostname=192.168.100.4 datadir=/data nodeid=2 [NDBD] hostname=192.168.100.5 datadir=/data nodeid=3 [MYSQLD] hostname=192.168.100.2 nodeid=4 [MYSQLD] hostname=192.168.100.3 nodeid=5 # /usr/local/mysql/bin/ndb_mgmd --config-file=/usr/local/mysql/etc/config.ini
NBDB配置 ######################################################################## MySQL无需再次编译,把MGM上的MySQL目录打包分发到各个NBDB节点上即可 # cat /usr/local/mysql/etc/my.cnf [mysqld] user=mysql basedir=/usr/local/mysql datadir=/database socket=/var/run/mysqld/mysql5.socket pid-file=/var/run/mysqld/mysql5.pid general-log general-log-file=/var/log/mysqld/mysql5-access.log log-error=/var/log/mysqld/mysql5-error.log port=3306 innodb=On ndbcluster ndb-connectstring=192.168.100.1 [mysql_cluster] ndb-connectstring=192.168.100.1 # /usr/local/mysql/bin/ndbd --ndb-connectstring=192.168.100.1 ######################################################################## SQL节点配置 ######################################################################## MySQL无需再次编译,把MGM上的MySQL目录打包分发到各个SQL节点上即可 # cat /usr/local/mysql/etc/my.cnf [mysqld] user=mysql basedir=/usr/local/mysql datadir=/database socket=/var/run/mysqld/mysql5.socket pid-file=/var/run/mysqld/mysql5.pid general-log general-log-file=/var/log/mysqld/mysql5-access.log log-error=/var/log/mysqld/mysql5-error.log port=3306 innodb=On ndbcluster ndb-connectstring=192.168.100.1 [mysql_cluster] ndb-connectstring=192.168.100.1 # /etc/init.d/mysqld5 restart ######################################################################## MGM连接查看当前状态:
SQL节点测试 SQL1
SQL2
转载请保留固定链接: https://linuxeye.com/database/1617.html |