데이터 베이스 MySQL 튜토리얼 MySQL_Cluster配置_MySQL

MySQL_Cluster配置_MySQL

Jun 01, 2016 pm 01:11 PM

MySQL_Cluster介绍:

我们大家都知道MySQL Cluster 是一种技术,其主要功能是在无共享的相关系统中部署内存中数据库的Cluster 。在通过共享体系结构,系统能够使用廉价的硬件,而且对软硬件无特殊要求。此外,由于每个组件有自己的内存和磁盘,不存在单点故障。

MySQL Cluster 由一组计算机构成,每台计算机上均运行着多种进程,包括MySQL服务器,NDBCluster 的数据节点,管理服务器,以及(可能)专门的数据访问程序所有的这些节点构成一个完成的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节点是使用命令“mysqld –ndbcluster”启动的,

或将“ndbcluster”添加到“my.cnf”后使用“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。

管理客户端:这类客户端与管理服务器相连,并提供了启动和停止节点、启动和停止消息跟踪(仅调试

版本)、显示节点版本和状态、启动和停止备份等的命令。

mysql cluster构建

从www.mysql.com上下载所需软件

MySQL-Cluster-gpl-client

MySQL-Cluster-gpl-management

MySQL-Cluster-gpl-server

MySQL-Cluster-gpl-storage

MySQL-Cluster-gpl-tools

环境:

系统:RHEL6.3 selinux and iptables disabled

管理节点:192.168.0.1

数据节点:192.168.0.2

sql节点:192.168.0.3


管理节点配置:

rpm -ivh MySQL-Cluster-gpl-managementrpm -ivh MySQL-Cluster-gpl-toolsmkdir -p /usr/local/mysql-cluster/vi /usr/mysql-cluster/config.ini[ndbd default]NoOfReplicas=1 #该全局参数仅能在[NDBD DEFAULT]中设置,它定义了cluster中每个表保存的副本数。该参数还指了节点组的大小。节点组指的是保存相同信息的节点集合DataMemory=30M #该参数定义了数据节点用于保存数据库记录的空间大小,全部空间均是分配在内存中的,确保你的数据节点具有足够的物理内存来容纳该值,由于我这是使用虚拟机测试,所以设置的偏小,你可以依照实际环境来定义此值IndexMemory=10M #该参数用于控制cluster中哈希(混编)索引所使用的存储量[ndb_mgmd]nodeid=1 #cluster中的每个节点都有唯一的标识,由从1到63的整数表示 新版本中使用nodeid代替hostname=192.168.0.254 #定义管理节点ipdatadir=/usr/local/mysql-cluster #它用于设置保存管理服务器输出文件的位置。这些文件包括cluster日志文件、进程输出文件、以及端口监督程序的pid文件[ndbd]nodeid=2hostname=192.168.0.2 #定义数据节点ipdatadir=/usr/local/mysql/ndbdata #该参数指定了存放跟踪文件、日志文件、pid文件以及错误日志的目录[mysqld]id=3hostname=192.168.0.3 #定义sql节点ip
로그인 후 복사

数据节点配置:

rpm -ivh MySQL-Cluster-gpl-storagemkdir -p /usr/local/mysql/ndbdatavi /etc/my.cnf[mysqld]ndbcluster #运行ndb集群引擎ndb-connectstring=192.168.0.1 #指定管理节点[mysql_cluster]ndb-connectstring=192.168.0.1 #指定管理节点
로그인 후 복사

sql节点配置:

rpm -ivh MySQL-Cluster-gpl-serverrpm -ivh MySQL-Cluster-gpl-client如果你的内存≤64M,则复制/usr/share/mysql/my-small.cnf为/etc/my.cnf如果内存是128M,则复制/usr/share/mysql/my-medium.cnf为/etc/my.cnf如果内存是512M,则复制/usr/share/mysql/my-large.cnf为/etc/my.cnf如果内存是1-2G,则复制/usr/share/mysql/my-huge.cnf为/etc/my.cnf如果内存是4G,则复制/usr/share/mysql/my-innodb-heavy-4G.cnf为/etc/my.cnf修改/etc/my.cnf[mysqld]....ndbcluster (以下数据添加在[mysqld]区域的最下方)ndb-connectstring=192.168.0.1[mysql_cluster]ndb-connectstring=192.168.0.1
로그인 후 복사

首先启动管理节点,然后启动存储节点,最后启动SQL节点

管理节点:

ndb_mgmd -f /usr/local/mysql-cluster/config.ini
로그인 후 복사

数据节点:

ndbd --initial
로그인 후 복사
로그인 후 복사

注: 仅在首次启动ndbd时,或在备份/恢复或配置变化后重启ndbd时使用“--initial”参数,这很重

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

文件

sql节点:

/etc/init.d/mysql start
로그인 후 복사

管理节点测试:

ndb_mgm-- NDB Cluster -- Management Client --ndb_mgm> showConnected to Management Server at: localhost:1186Cluster Configuration---------------------[ndbd(NDB)] 1 node(s)id=2 @192.168.0.2 (mysql-5.1.44 ndb-7.1.4, Nodegroup: 0, Master)[ndb_mgmd(MGM)] 1 node(s)id=1 @192.168.0.1 (mysql-5.1.44 ndb-7.1.4)[mysqld(API)] 1 node(s)id=3 @192.168.0.3 (mysql-5.1.44 ndb-7.1.4)ndb_mgm>
로그인 후 복사

安全关闭和重启mysql cluster

在MGM节点所在的机器上,在Shell中简单地输入下述命令:

ndb_mgm -e shutdown
로그인 후 복사

该命令将恰当地中止ndb_mgm、ndb_mgmd以及任何ndbd进程。使用mysqladmin shutdown或

其他方法,可中止SQL节点

重启时,可简单地运行下述命令:

在管理节点上:

ndb_mgmd -f /var/lib/mysql-cluster/config.ini
로그인 후 복사

在每台数据节点上:

ndbd
로그인 후 복사

注:正常重启NDBD节点时,不要用“--initial”选项调用该命令。

在SQL节点上:

/etc/init.d/mysql restart
로그인 후 복사
로그인 후 복사


管理节点重新加载配置:

ndb_mgmd -f /usr/local/mysql-cluster/config.ini --initial
로그인 후 복사

各数据节点重新初始化:

ndbd --initial
로그인 후 복사
로그인 후 복사

各sql节点重启mysql:

/etc/init.d/mysql restart
로그인 후 복사
로그인 후 복사

建立集群数据:

在sql节点执行:

mysqladmin create worldvi city.sqlCREATE TABLE City (ID int(11) NOT NULL auto_increment,Name char(35) NOT NULL default '',CountryCode char(3) NOT NULL default '',District char(20) NOT NULL default '',Population int(11) NOT NULL default '0',PRIMARY KEY (ID)) ENGINE=NDBCLUSTER; #指定MySQL为该表使用了NDB存储引擎,数据存储于各数据节点,不然mysql使用默认的MyISAM存储引擎,所有的数据将会存储于本机,和单机一样INSERT INTO City VALUES (1,'Kabul','AFG','Kabol',1780000);INSERT INTO City VALUES (2,'Qandahar','AFG','Qandahar',237500);INSERT INTO City VALUES (3,'Herat','AFG','Herat',186800);mysql world < city.sql
로그인 후 복사

现在你可以在各sql节点查看数据

mysql cluster 备份恢复

在管理节点执行备份:

ndb_mgm> start backupWaiting for completed, this may take several minutesNode 2: Backup 1 started from node 1Node 2: Backup 1 started from node 1 completedStartGCP: 149 StopGCP: 152#Records: 2059 #LogRecords: 0Data: 51272 bytes Log: 0 bytes
로그인 후 복사

注:默认备份的数据在各数据节点的/usr/local/mysql/ndbdata/BACKUP目录下保存

删除City表中的所有数据,执行恢复

数据节点:

ndb_restore -n 2 -b 1 -r /usr/local/mysql/ndbdata/BACKUP/BACKUP-1/-n指节点id -b指备份id -r指备份目录Nodeid = 2Backup Id = 1backup path = /usr/local/mysql/ndbdata/BACKUP/BACKUP-1/Opening file '/usr/local/mysql/ndbdata/BACKUP/BACKUP-1/BACKUP-1.2.ctl'Backup version in files: ndb-6.3.11 ndb version: mysql-5.1.44 ndb-7.1.4Stop GCP of Backup: 0Connected to ndb!!Opening file '/usr/local/mysql/ndbdata/BACKUP/BACKUP-1/BACKUP-1-0.2.Data'_____________________________________________________Processing data in table: sys/def/NDB$EVENTS_0(3) fragment 0_____________________________________________________Processing data in table: mysql/def/ndb_apply_status(6) fragment 0_____________________________________________________Processing data in table: world/def/City(7) fragment 0_____________________________________________________Processing data in table: mysql/def/NDB$BLOB_4_3(5) fragment 0_____________________________________________________Processing data in table: sys/def/SYSTAB_0(2) fragment 0_____________________________________________________Processing data in table: mysql/def/ndb_schema(4) fragment 0Opening file '/usr/local/mysql/ndbdata/BACKUP/BACKUP-1/BACKUP-1.2.log'Restored 1 tuples and 0 log entriesNDBT_ProgramExit: 0 - OK数据节点4:
로그인 후 복사

注:由于我使用的是rpm包方式安装,各数据节点没有ndb_restore命令,可以直接从管理节点scp)

官方强烈建议在single user mode下进行恢复操作,以保证数据库的一致性,但问题是这种模式要

求断开其他sql节点,线上业务的sql节点不是轻易可以断的。

参考:西部开源技术中心 yakexi007@westos.org 根据其总结


본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
2 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
2 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Alter Table 문을 사용하여 MySQL에서 테이블을 어떻게 변경합니까? Alter Table 문을 사용하여 MySQL에서 테이블을 어떻게 변경합니까? Mar 19, 2025 pm 03:51 PM

이 기사는 MySQL의 Alter Table 문을 사용하여 열 추가/드롭 테이블/열 변경 및 열 데이터 유형 변경을 포함하여 테이블을 수정하는 것에 대해 설명합니다.

MySQL 연결에 대한 SSL/TLS 암호화를 어떻게 구성합니까? MySQL 연결에 대한 SSL/TLS 암호화를 어떻게 구성합니까? Mar 18, 2025 pm 12:01 PM

기사는 인증서 생성 및 확인을 포함하여 MySQL에 대한 SSL/TLS 암호화 구성에 대해 설명합니다. 주요 문제는 자체 서명 인증서의 보안 영향을 사용하는 것입니다. [문자 수 : 159]

MySQL에서 큰 데이터 세트를 어떻게 처리합니까? MySQL에서 큰 데이터 세트를 어떻게 처리합니까? Mar 21, 2025 pm 12:15 PM

기사는 MySQL에서 파티셔닝, 샤딩, 인덱싱 및 쿼리 최적화를 포함하여 대규모 데이터 세트를 처리하기위한 전략에 대해 설명합니다.

인기있는 MySQL GUI 도구는 무엇입니까 (예 : MySQL Workbench, Phpmyadmin)? 인기있는 MySQL GUI 도구는 무엇입니까 (예 : MySQL Workbench, Phpmyadmin)? Mar 21, 2025 pm 06:28 PM

기사는 MySQL Workbench 및 Phpmyadmin과 같은 인기있는 MySQL GUI 도구에 대해 논의하여 초보자 및 고급 사용자를위한 기능과 적합성을 비교합니다. [159 자].

드롭 테이블 문을 사용하여 MySQL에서 테이블을 어떻게 드롭합니까? 드롭 테이블 문을 사용하여 MySQL에서 테이블을 어떻게 드롭합니까? Mar 19, 2025 pm 03:52 PM

이 기사에서는 Drop Table 문을 사용하여 MySQL에서 테이블을 떨어 뜨리는 것에 대해 설명하여 예방 조치와 위험을 강조합니다. 백업 없이는 행동이 돌이킬 수 없으며 복구 방법 및 잠재적 생산 환경 위험을 상세하게합니다.

외국 키를 사용하여 관계를 어떻게 표현합니까? 외국 키를 사용하여 관계를 어떻게 표현합니까? Mar 19, 2025 pm 03:48 PM

기사는 외국 열쇠를 사용하여 데이터베이스의 관계를 나타내고 모범 사례, 데이터 무결성 및 피할 수있는 일반적인 함정에 중점을 둡니다.

JSON 열에서 인덱스를 어떻게 생성합니까? JSON 열에서 인덱스를 어떻게 생성합니까? Mar 21, 2025 pm 12:13 PM

이 기사에서는 PostgreSQL, MySQL 및 MongoDB와 같은 다양한 데이터베이스에서 JSON 열에서 인덱스를 작성하여 쿼리 성능을 향상시킵니다. 특정 JSON 경로를 인덱싱하는 구문 및 이점을 설명하고 지원되는 데이터베이스 시스템을 나열합니다.

일반적인 취약점 (SQL 주입, 무차별 적 공격)에 대해 MySQL을 어떻게 보호합니까? 일반적인 취약점 (SQL 주입, 무차별 적 공격)에 대해 MySQL을 어떻게 보호합니까? Mar 18, 2025 pm 12:00 PM

기사는 준비된 명령문, 입력 검증 및 강력한 암호 정책을 사용하여 SQL 주입 및 무차별 적 공격에 대한 MySQL 보안에 대해 논의합니다 (159 자)

See all articles