1 개요
MySQL Cluster는 분산 컴퓨팅 환경에 적합한 실용성, 확장성, 고성능 및 중복성이 뛰어난 MySQL 버전입니다. 연구 및 개발 설계의 원래 의도는 많은 업계에서 가장 엄격한 애플리케이션 요구 사항을 충족하는 것입니다. 이러한 애플리케이션은 종종 99.999%에 도달하는 데이터베이스 작동 안정성을 요구합니다. MySQL 클러스터를 사용하면 비공유 시스템에 "인 메모리" 데이터베이스 클러스터를 배포할 수 있으며, 비공유 아키텍처를 통해 시스템은 저렴한 하드웨어를 사용할 수 있으며 소프트웨어 및 하드웨어에 대한 특별한 요구 사항이 없습니다. 또한 각 구성 요소에는 자체 메모리와 디스크가 있으므로 단일 장애 지점이 없습니다.
실제로 MySQL Cluster는 NDB라는 메모리 클러스터 스토리지 엔진을 표준 MySQL 서버와 통합합니다. 이는 MySQL 서버, 데이터 노드, 관리 서버 및 독점 데이터 액세스 프로그램을 포함할 수 있는 하나 이상의 프로세스를 각각 실행하는 일련의 컴퓨터로 구성됩니다.
MySQL 클러스터에는 다양한 장애 조치 및 로드 밸런싱 옵션으로 NDB 스토리지 엔진을 구성할 수 있는 기능이 있지만 클러스터 수준의 스토리지 엔진에서 이 작업을 수행하는 것이 가장 쉽습니다. 다음은 MySQL 클러스터 구조도이다.
MySQL은 구조적 관점에서 세 가지 유형의 노드(컴퓨터 또는 프로세스)로 구성되어 있다. , 즉 :
관리 노드: 전체 클러스터의 다른 노드에 대한 구성, 관리, 중재 및 기타 기능을 제공하는 데 사용됩니다. 이론적으로는 하나의 서버를 통해 서비스를 제공하는 것으로 충분합니다.
데이터 노드: 데이터와 로그를 저장하고 데이터에 대한 다양한 관리 서비스를 제공하는 MySQL 클러스터의 핵심이다. 노드가 2개 이상일 경우 클러스터의 고가용성을 보장할 수 있습니다. DB 노드 수가 늘어나면 클러스터의 처리 속도가 느려집니다.
SQL 노드(API): MySQL Cluster 데이터에 접근하고 외부 애플리케이션 서비스를 제공하는 데 사용됩니다. API 노드를 추가하면 전체 클러스터의 동시 액세스 속도와 전체 처리량이 향상됩니다. 노드는 웹 애플리케이션 서버, 전용 서버 또는 DB와 동일한 서버에 배포될 수 있습니다.
2 NDB 엔진
MySQL 클러스터는 전용 메모리 기반 스토리지 엔진인 NDB 엔진을 사용하므로 속도가 빠르고 디스크 I/O 병목 현상이 없다는 장점이 있습니다. 그러나 메모리 기반이기 때문에 데이터베이스 크기는 시스템의 총 메모리에 의해 제한됩니다. NDB를 실행하는 MySQL 서버의 경우 4G, 8G 또는 16G와 같은 충분한 메모리가 있어야 합니다. NDB 엔진은 분산되어 있으며 데이터 안정성과 확장성을 달성하기 위해 여러 서버에 구성할 수 있습니다. 이론적으로 두 개의 NDB 스토리지 노드를 구성하면 전체 데이터베이스 클러스터의 중복성과 단일 장애 지점 문제를 해결할 수 있습니다.
2.1 결함
-
메모리 기준으로 데이터베이스의 크기는 클러스터의 전체 메모리 크기에 의해 제한됩니다
메모리 특성상 정전 시 데이터가 손실될 수 있으므로 테스트를 통해 확인해야 합니다.
여러 노드가 통신, 데이터 동기화, 쿼리 등의 작업을 네트워크를 통해 구현하므로 네트워크 속도에 따라 무결성이 영향을 받기 때문에
속도도 상대적으로 느립니다
2.2 장점
-
여러 노드를 서로 다른 지리적 위치에 분산시킬 수 있어 분산 데이터베이스를 구현하는 솔루션이기도 합니다.
확장성이 매우 좋고, 노드를 추가하여 데이터베이스 클러스터를 확장할 수 있습니다.
이중화는 매우 좋습니다. 여러 노드에 완전한 데이터베이스 데이터가 있으므로 노드 중단 시간으로 인해 서비스가 중단되지 않습니다.
고가용성 구현 비용은 상대적으로 낮습니다. 공유 저장 장치와 전용 소프트웨어가 필요한 기존 고가용성 솔루션과 달리 NDB는 메모리가 충분하다면 구현할 수 있습니다.
2. 클러스터 구성
구성 방법의 모든 명령은 루트 계정으로 실행됩니다. 이 MySQL 클러스터에는 관리 노드 1개, 데이터 노드 2개, SQL 노드 2개가 포함되어 있습니다. 이 5개의 노드는 각각 5개의 가상 머신에 설치됩니다. 가상 머신의 이름과 IP는 다음과 같습니다.
관리 노드 | mysql-mgm |
192.168.124.141 |
데이터 노드 1 | mysql-ndbd-1 |
192.168.124.142 |
데이터 노드 2 |
mysql-ndbd-2 |
192.168.124.143 |
SQL 노드 1 |
mysql-sql-1 |
192.168. 124.144 |
SQL 노드2 |
mysql-sql-2 |
192.168.124.145 |
>
여기에서 세 개의 가상 머신에 각각 구성 항목을 구성하세요. 1. 가상 머신 설치
가상 머신 운영체제는 x86_64 버전의 CentOS 6.4를 설치하고 NAT 네트워크를 사용하며 vmware-tools도 설치합니다. 구체적인 설치 방법은 여기에 있습니다. 여기에는 자세히 설명되어 있지 않습니다.
2. mysql 클러스터 복사
다음 버전의 MySQL-Cluster를 다운로드합니다:
http://www.php.cn/ 다운로드한 압축 패키지를 가상 머신의 /root/Downloads 디렉터리에 복사한 후 셸에서 다음 명령을 실행합니다.
cd /root/Downloads
tar -xvzf mysql-cluster-gpl-7.3.4-linux-glibc2.5-x86_64.tar.gz
mv mysql-cluster-gpl-7.3.4-linux-glibc2.5-x86_64 /usr/local/mysql
3. 보안 정책 끄기chkconfig --level 35 iptables off |
iptables 방화벽 끄기 (또는 방화벽의 1186, 3306 포트를 켭니다), 셸에서 다음 명령을 실행합니다:
gedit /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted |
SELinux를 끄고 셸에서 다음 명령을 실행합니다.
mkdir /var/lib/mysql-cluster
cd /var/lib/mysql-cluster
gedit config.ini [ndbd default]
NoOfReplicas=2
DataMemory=80M
IndexMemory=18M
[ndb_mgmd]
NodeId=1
hostname=192.168.124.141
datadir=/var/lib/mysql-cluster
[ndbd]
NodeId=2
hostname=192.168.124.142
datadir=/usr/local/mysql/data
[ndbd]NodeId=3hostname=192.168.124.143datadir=/usr/local/mysql/data
[mysqld]NodeId=4hostname=192.168.124.144
[mysqld]
NodeId=5
hostname=192.168.124.145 |
cp /usr/local/mysql/bin/ndb_mgm* /usr/local/bin
cd /usr/local/bin
chmod +x ndb_mgm* |
config 파일의 SELINUX 항목을 비활성화로 변경합니다. 수정된 config 파일의 내용은 다음과 같습니다.
groupadd mysql
useradd -g mysql mysql 마지막으로 시스템을 다시 시작하세요.
2. 구성 관리 노드(192.168.124.141)
1.config.ini 구성 파일을 구성합니다. 🎜> 셸에서 다음 명령을 실행하세요. [mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/sock/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql_cluster]
ndb-connectstring=192.168.124.141 |
cd /usr/local/mysql
mkdir sock
scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
chown -R root .
chown -R mysql.mysql /usr/local/mysql/data
chown -R mysql.mysql /usr/local/mysql/sock
chgrp -R mysql . | 구성 파일 config.ini의 내용은 다음과 같습니다.
cp support-files/mysql.server /etc/rc.d/init.d/
chmod +x /etc/rc.d/init.d/mysql.server
chkconfig --add mysql.server 2. 관리 노드를 설치합니다 mysqld 바이너리 파일은 필요하지 않으며 MySQL Cluster 서버 프로그램(ndb_mgmd)과 모니터링 클라이언트 프로그램(ndb_mgm)만 있으면 됩니다. 셸에서 다음 명령을 실행합니다.
groupadd mysql
useradd -g mysql mysql
3. 데이터 노드 구성(192.168.124.142, 192.168.124.143)
[client]
socket=/usr/local/mysql/sock/mysql.sock
[mysqld]
ndbcluster
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/sock/mysql.sock
ndb-connectstring=192.168.124.141
[mysql_cluster]
ndb-connectstring=192.168.124.141 |
cd /usr/local/mysql
mkdir sock
scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data | 1. 셸에서 다음 명령을 실행하세요.
chown -R root .
chown -R mysql.mysql /usr/local/mysql/data
chown -R mysql.mysql /usr/local/mysql/sock
chgrp -R mysql .
cp support-files/mysql.server /etc/rc.d/init.d/
chmod +x /etc/rc.d/init.d/mysql.server
chkconfig --add mysql.server |
2. my.cnf 구성 파일을 구성합니다.
셸에서 다음 명령을 실행합니다.
ndb_mgmd -f /var/lib/mysql-cluster/config.ini
설정 파일 my.cnf의 내용은 다음과 같습니다.
|
/usr/local/mysql/bin/ndbd --initial /usr/local/mysql/bin/ndbd |
3. 시스템 데이터베이스 생성셸에서 다음 명령을 실행합니다: /usr/local/mysql/bin/mysqld_safe --user=mysql & 4. 데이터 디렉터리 설정
shell> /usr/local/mysql/bin/mysql -u root -p
mysql>show databases;
mysql>create database aa;
mysql>use aa;
mysql>CREATE TABLE ctest2 (i INT) ENGINE=NDB; //这里必须指定数据库表的引擎为NDB,否则同步失败
mysql> INSERT INTO ctest2 () VALUES (1);
mysql> SELECT * FROM ctest2; | 셸에서 다음 명령을 실행합니다.
mysql> create database bb;
mysql> use bb;
mysql> CREATE TABLE ctest3 (i INT) ENGINE=NDB;
mysql> use aa;
mysql> INSERT INTO ctest2 () VALUES (3333);
mysql> SELECT * FROM ctest2;
#/usr/local/mysql/bin/ndbd --initial#service mysqld start | 5. MySQL 서비스 구성
# /usr/local/mysql/bin/mysql -u root –p | 셸에서 다음 명령을 실행하세요.
shell> /usr/local/mysql/bin/ndb_mgm -e shutdown
Connected to Management Server at: localhost:1186
2 NDB Cluster node(s) have shutdown.
Disconnecting to allow management server to shutdown. | 4. SQL 노드 구성(192.168.124.144, 192.168.124.145) 1. mysql 그룹 및 사용자 추가 셸에서 다음 명령을 실행합니다. shell> /etc/init.d/mysql.server stop
Shutting down MySQL... SUCCESS! 구성 파일 my.cnf 내용은 다음과 같습니다. rrreee3. 시스템 데이터베이스 생성셸에서 다음 명령을 실행합니다. rrreee 4. 设置数据目录
在shell中运行以下命令:
chown -R root .
chown -R mysql.mysql /usr/local/mysql/data
chown -R mysql.mysql /usr/local/mysql/sock
chgrp -R mysql . |
5. 配置MySQL服务
在shell中运行以下命令:
cp support-files/mysql.server /etc/rc.d/init.d/
chmod +x /etc/rc.d/init.d/mysql.server
chkconfig --add mysql.server |
五、Cluster环境启动
注意启动顺序:首先是管理节点,然后是数据节点,最后是SQL节点。
1. 启动管理结点
在shell中运行以下命令:
ndb_mgmd -f /var/lib/mysql-cluster/config.ini |
还可以使用ndb_mgm来监听客户端,如下:
2. 启动数据结点
首次启动,则需要添加--initial参数,以便进行NDB节点的初始化工作。在以后的启动过程中,则是不能添加该参数的,否则ndbd程序会清除在之前建立的所有用于恢复的数据文件和日志文件。
/usr/local/mysql/bin/ndbd --initial |
如果不是首次启动,则执行下面的命令。
/usr/local/mysql/bin/ndbd |
3. 启动SQL结点
若MySQL服务没有运行,则在shell中运行以下命令:
/usr/local/mysql/bin/mysqld_safe --user=mysql & |
4. 启动测试
查看管理节点,启动成功:
六、集群测试
1. 测试一
现在我们在其中一个SQL结点上进行相关数据库的创建,然后到另外一个SQL结点上看看数据是否同步。
在SQL结点1(192.168.124.144)上执行:
shell> /usr/local/mysql/bin/mysql -u root -p
mysql>show databases;
mysql>create database aa;
mysql>use aa;
mysql>CREATE TABLE ctest2 (i INT) ENGINE=NDB; //这里必须指定数据库表的引擎为NDB,否则同步失败
mysql> INSERT INTO ctest2 () VALUES (1);
mysql> SELECT * FROM ctest2; |
然后在SQL结点2上看数据是否同步过来了
经过测试,在非master上创建数据,可以同步到master上
查看表的引擎是不是NDB,>show create table 表名;
2. 测试二
关闭一个数据节点 ,在另外一个节点写输入,开启关闭的节点,看数据是否同步过来。
首先把数据结点1重启,然后在结点2上添加数据
在SQL结点2(192.168.124.145)上操作如下:
mysql> create database bb;
mysql> use bb;
mysql> CREATE TABLE ctest3 (i INT) ENGINE=NDB;
mysql> use aa;
mysql> INSERT INTO ctest2 () VALUES (3333);
mysql> SELECT * FROM ctest2; |
等数据结点1启动完毕,启动数据结点1的服务
#/usr/local/mysql/bin/ndbd --initial#service mysqld start
|
然后登录进去查看数据
# /usr/local/mysql/bin/mysql -u root –p
|
可以看到数据已经同步过来了,说明数据可以双向同步了。
七、关闭集群
1. 关闭管理节点和数据节点,只需要在管理节点(ClusterMgm--134)里执行:
shell> /usr/local/mysql/bin/ndb_mgm -e shutdown |
显示
Connected to Management Server at: localhost:1186
2 NDB Cluster node(s) have shutdown.
Disconnecting to allow management server to shutdown. |
2. 然后关闭Sql节点(135,136),分别在2个节点里运行:
shell> /etc/init.d/mysql.server stop
Shutting down MySQL... SUCCESS! |
注意:要再次启动集群,就按照第五部分的启动步骤即可,不过这次启动数据节点的时候就不要加”-initial”参数了。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
위 내용은 MySQL 최적화 - 클러스터 구축 코드 단계에 대한 자세한 설명(그림)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!