溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql cluster的用法

發(fā)布時間:2021-08-19 13:35:53 來源:億速云 閱讀:179 作者:chen 欄目:數(shù)據庫

本篇內容主要講解“mysql cluster的用法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“mysql cluster的用法”吧!

我們大家都知道MySQL Cluster 是一種技術,其主要功能是在無共享的相關系統(tǒng)中部署內存中數(shù)據庫 的 Cluster 。在通過無共享體系結構,系統(tǒng)能夠使用廉價的硬件,而且對軟硬件無特殊要求。
此外,由于每個組件有自己的內存和磁盤,不存在單點故障。 MySQL Cluster 由一組計算機構成,每臺計算機上均運行著多種進程,包括MySQL服務器,NDB Cluster 的數(shù)據節(jié)點,管理服務器,以及(可能)專門的數(shù)據訪問程序。關于 Cluster 中這些組件的 關系,請參見下圖:

所有的這些節(jié)點構成一個完成的MySQL集群體系。數(shù)據保存在“NDB存儲服務器”的存儲引擎中,表 (結構)則保存在“MySQL服務器”中。應用程序通過“MySQL服務器”訪問這些數(shù)據表,集群管理服務 器通過管理工具(ndb_mgmd)來管理“NDB存儲服務器”。
通過將MySQL Cluster 引入開放源碼世界,MySQL為所有需要它的人員提供了具有高可用性、高性 能和可縮放性的 Cluster 數(shù)據管理。
MySQL Cluster 基本概念 “NDB” 是一種“內存中”的存儲引擎,它具有可用性高和數(shù)據一致性好的 特點。
MySQL Cluster 能夠使用多種故障切換和負載平衡選項配置NDB存儲引擎,但在 Cluster 級別上的 存儲引擎上做這個最簡單。MySQL Cluster的NDB存儲引擎包含完整的數(shù)據集,僅取決Cluster本 身內的其他數(shù)據。

目前,MySQL Cluster的 Cluster部分可獨立于MySQL服務器進行配置。在MySQL Cluster中,
Cluster的每個部分被視為1個節(jié)點。
管理(MGM)節(jié)點:這類節(jié)點的作用是管理MySQL Cluster內的其他節(jié)點,如提供配置數(shù)據、啟動并停 止節(jié)點、運行備份等。由于這類節(jié)點負責管理其他節(jié)點的配置,應在啟動其他節(jié)點之前首先啟動這類節(jié) 點。MGM節(jié)點是用命令“ndb_mgmd”啟動的。
數(shù)據節(jié)點:這類節(jié)點用于保存 Cluster的數(shù)據。數(shù)據節(jié)點的數(shù)目與副本的數(shù)目相關,是片段的倍數(shù)。例 如,對于兩個副本,每個副本有兩個片段,那么就有4個數(shù)據節(jié)點。不過沒有必要設置多個副本。數(shù)據 節(jié)點是用命令“ndbd”啟動的。
SQL節(jié)點:這是用來訪問 Cluster數(shù)據的節(jié)點。對于MySQL Cluster,客戶端節(jié)點是使用NDB
Cluster存儲引擎的傳統(tǒng)MySQL服務器。通常,SQL節(jié)點是使用命令“mysqld –ndbcluster”啟動的,
或將“ndbcluster”添加到“my.cnf”后使用“mysqld”啟動。注釋:在很多情況下,術語“節(jié)點”用 于指
計算機,但在討論MySQL Cluster時,它表示的是進程。在單臺計算機上可以有任意數(shù)目的節(jié)點,為
此,我們采用術語“ Cluster主機”。
管理服務器(MGM節(jié)點)負責管理 Cluster配置文件和 Cluster日志。 Cluster中的每個節(jié)點從管理服務 器檢索配置數(shù)據,并請求確定管理服務器所在位置的方式。當數(shù)據節(jié)點內出現(xiàn)新的事件時,節(jié)點將關于 這類事件的信息傳輸 到管理服務器,然后,將這類信息寫入 Cluster日志。
此外,可以有任意數(shù)目的 Cluster客戶端進程或應用程序。它們分為兩種類型:
標準MySQL客戶端:對于MySQL Cluster,它們與標準的(非 Cluster類)MySQL沒有區(qū)別。換句
話講,能夠從用PHP、Perl、C、C++、Java、Python、Ruby等編寫的現(xiàn)有MySQL應用程序訪問 MySQL Cluster。
管理客戶端:這類客戶端與管理服務器相連,并提供了啟動和停止節(jié)點、啟動和停止消息跟蹤(僅調試 版本)、顯示節(jié)點版本和狀態(tài)、啟動和停止備份等的命令。

在www.mysql.com下載所需軟件
MySQL-Cluster-gpl-client-7.1.18-1.el6.x86_64.rpm     
MySQL-Cluster-gpl-server-7.1.18-1.el6.x86_64.rpm
MySQL-Cluster-gpl-clusterj-7.1.18-1.el6.x86_64.rpm  
MySQL-Cluster-gpl-storage-7.1.18-1.el6.x86_64.rpm
MySQL-Cluster-gpl-management-7.1.18-1.el6.x86_64.rpm
MySQL-Cluster-gpl-tools-7.1.18-1.el6.x86_64.rpm

系統(tǒng)環(huán)境:rhel6.0 x86-64 iptables and selinux off
管理節(jié)點 :192.168.0.1
數(shù)據節(jié)點 :192.168.0.3
sql節(jié)點 : 192.168.0.4

---->管理節(jié)點配置
rpm -ivh MySQL-Cluster-gpl-management-7.1.18-1.el6.x86_64.rpm
rpm -ivh MySQL-Cluster-gpl-tools-7.1.18-1.el6.x86_64.rpm
[root@server1~]# mkdir /usr/mysql-cluster
[root@server1~]# cd /usr/mysql-cluster
[root@server1 mysql-cluster]# vim config.ini
[ndbd default]
noofreplicas=1               #該全局參數(shù)僅能在[NDBD DEFAULT]中設置,它定義了cluster中每個表保 存的副本數(shù)。該參數(shù)還指定了節(jié)點組的大小。節(jié)點組指的是保存相同信息的節(jié)點集合
datamemory=64M         #該參數(shù)定義了數(shù)據節(jié)點用于保存數(shù)據庫記錄的空間大小,全部空間均是分配 在內存中的,確保你的數(shù)據節(jié)點具有足夠的物理內存來容納該值,由于我這是使用虛擬機測試,所以設 置的偏小,你可以依照實際環(huán)境來定義此值
indexmemory=10M       ##該參數(shù)用于控制cluster中哈希(混編)索引所使用的存儲量

[ndb_mgmd]
nodeid=1                                     #cluster中的每個節(jié)點都有唯一的標識,由從1到63的整數(shù)表示
hostname=192.168.0.1             #指定管理節(jié)點
datadir=/usr/mysql-cluster       #指定存放管理服務器輸出文件的位置,包括cluster日志文件,進程輸出文件,及監(jiān)督程序的PID

[ndbd]
nodeid=2
hostname=192.168.0.3                        #指定數(shù)據節(jié)點
datadir=/usr/mysql-cluster                  #指定存放跟蹤文件,日志文件,pid文件,以及錯誤日志的目錄

[mysqld]
nodeid=3
hostname=192.168.0.4                         #指定sql節(jié)點

---->數(shù)據節(jié)點配置
rpm -ivh MySQL-Cluster-gpl-storage-7.1.18-1.el6.x86_64.rpm
[root@server3~]# mkdir /usr/mysql-cluster
[root@server3~]# vim /etc/my.cnf
[mysqld]
ndbcluster                                      #運行ndb集群引擎
ndb-connectstring=192.168.0.1    #指定管理節(jié)點

[mysql_cluster]
ndb-connectstring=192.168.0.1    #指定管理節(jié)點

---->sql節(jié)點配置
rpm -ivh MySQL-Cluster-gpl-client-7.1.18-1.el6.x86_64.rpm     
rpm -ivh MySQL-Cluster-gpl-server-7.1.18-1.el6.x86_64.rpm
如果你的內存≤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

[root@server4 ~]# cd /usr/share/mysql
[root@server4 mysql]# cp my-medium.cnf /etc/my.cnf
[root@server4 mysql]# vim /etc/my.cnf
....
#innodb_lock_wait_timeout = 50               #以下數(shù)據添加在[mysqld]區(qū)域下方
ndbcluster
ndb-connectstring=192.168.0.1

[mysql-cluster]
ndb-connectstring=192.168.0.1
....

---->首先啟動管理節(jié)點,再啟動數(shù)據節(jié)點,最后啟動sql節(jié)點
####管理節(jié)點
[root@server1 mysql-cluster]# ndb_mgmd -f /usr/mysql-cluster/config.ini
MySQL Cluster Management Server mysql-5.1.56 ndb-7.1.18
[root@server1 mysql-cluster]# ls
config.ini  ndb_1_cluster.log  ndb_1_config.bin.1 ndb_1_out.log  ndb_1.pid #服務啟動后生成的文件
[root@server1 mysql-cluster]# ps ax
....
 1326 ?        S      0:00 [flush-253:0]
 1331 ?        Ssl    0:00 ndb_mgmd -f /usr/mysql-cluster/config.ini
 1347 pts/0    R+     0:00 ps ax

####數(shù)據節(jié)點
[root@server3 ~]# ndbd --initial               #在數(shù)據節(jié)點操作
2012-04-09 07:43:47 [ndbd] INFO     -- Angel connected to '192.168.0.1:1186'
2012-04-09 07:43:47 [ndbd] INFO     -- Angel allocated nodeid: 2
[root@server3 ~]# ls /usr/mysql-cluster/   #目錄需要手動創(chuàng)建,服務啟動后在里面生成文件,目錄
ndb_2_fs  ndb_2_out.log  ndb_2.pid      #藍色字體為目錄

注: 僅在首次啟動ndbd時,或在備份/恢復或配置變化后重啟ndbd時使用“--initial”參數(shù),這很重
要。原因在于,該參數(shù)會使節(jié)點刪除由早期ndbd實例
實例創(chuàng)建的、用于恢復的任何文件,包括恢復用日志 文件

####SQL節(jié)點
[root@server4 ~]# /etc/init.d/mysql start         #在sql節(jié)點操作
Starting MySQL.. SUCCESS!

[root@server1 ~]# netstat -antlp
....
tcp        0      0 0.0.0.0:1186                0.0.0.0:*                   LISTEN      1331/ndb_mgmd      
tcp        0      0 127.0.0.1:47757             127.0.0.1:1186              ESTABLISHED 1331/ndb_mgmd        
tcp        0      0 192.168.0.1:1186            192.168.0.3:60259           ESTABLISHED 1331/ndb_mgmd     
tcp        0      0 192.168.0.1:1186            192.168.0.4:57693           ESTABLISHED 1331/ndb_mgmd 
tcp        0      0 192.168.0.1:1186            192.168.0.3:60260           ESTABLISHED 1331/ndb_mgmd
tcp        0      0 127.0.0.1:1186              127.0.0.1:47757             ESTABLISHED 1331/ndb_mgmd 
....

---->管理節(jié)點測試
[root@server1 mysql-cluster]# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)]    1 node(s)
id=2    @192.168.0.3  (mysql-5.1.56 ndb-7.1.18, Nodegroup: 0, Master)
[ndb_mgmd(MGM)]    1 node(s)
id=1    @192.168.0.1  (mysql-5.1.56 ndb-7.1.18)
[mysqld(API)]    1 node(s)
id=3    @192.168.0.4  (mysql-5.1.56 ndb-7.1.18)

---->安全關閉和重啟mysql cluster
在MGM節(jié)點所在的機器上,在Shell中簡單地輸入下述命令:
ndb_mgm -e shutdown
該命令將恰當?shù)刂兄筺db_mgm、ndb_mgmd以及任何ndbd進程。使用mysqladmin shutdown或
其他方法,可中止SQL節(jié)點
重啟時,可簡單地運行下述命令:
####在管理節(jié)點上:
ndb_mgmd -f /var/lib/mysql-cluster/config.ini
####在每臺數(shù)據節(jié)點上:
ndbd
注:正常重啟NDBD節(jié)點時,不要用“--initial”選項調用該命令。
####在SQL節(jié)點上:
service mysql restart

---->實現(xiàn)在線添加節(jié)點(192.168.0.5配置與數(shù)據節(jié)點192.168.0.3相同) and( 192.168.0.6配置與sql節(jié)點192.168.0.4相同)
管理節(jié)點:
[root@server1 ~]# ndb_mgm -e shutdown                #中止ndb_mgm、ndb_mgmd以及任何ndb進程
[root@server1 ~]# vim /usr/mysql-cluster/config.ini   #添加如下內容
[ndbd default]
noofreplicas=2    #定義兩個節(jié)點為一個節(jié)點組,同組存儲 的數(shù)據是相同,數(shù)據節(jié)點分布在不同的主        機,避免了單點故障
....
[ndbd]                                   #新增節(jié)點同節(jié)點192.168.0.3數(shù)據節(jié)點
nodeid=4
hostname=192.168.0.5         #指定新增數(shù)據節(jié)點
datadir=/usr/mysql-cluster

[mysqld]                               #新增節(jié)點同節(jié)點192.168.0.4 sql節(jié)點
nodeid=5
hostname=192.168.0.6         #指定新增sql節(jié)點

[mysqld]                  #加空閑連接,為以后數(shù)據恢復準備,或需要時再添加

[root@server5 ~]# rpm -ivh MySQL-Cluster-gpl-storage-7.1.18-1.el6.x86_64.rpm
[root@server5 ~]# mkdir /usr/mysql-cluster
[root@server3 ~]# scp /etc/my.cnf 192.168.0.5:/etc/           ####
[root@server5 ~]# vim /etc/my.cnf
[mysqld]
ndbcluster
ndb-connectstring=192.168.0.1

[mysql_cluster]
ndb-connectstring=192.168.0.1

[root@server6 ~]# rpm -ivh MySQL-Cluster-gpl-client-7.1.18-1.el6.x86_64.rpm     
[root@server6 ~]# rpm -ivh MySQL-Cluster-gpl-server-7.1.18-1.el6.x86_64.rpm
[root@server4 ~]# scp /etc/my.cnf 192.168.0.6:/etc/          ####
[root@server6 ~]# vim /etc/my.cnf
....
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50

ndbcluster
ndb-connectstring=192.168.0.1

[mysql-cluster]
ndb-connectstring=192.168.0.1

[mysqldump]
....

---->管理節(jié)點檢測
[root@server1 ~]# ndb_mgm
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)]    2 node(s)
id=2    @192.168.0.3  (mysql-5.1.56 ndb-7.1.18, Nodegroup: 0, Master)
id=4    @192.168.0.5  (mysql-5.1.56 ndb-7.1.18, Nodegroup: 1)

[ndb_mgmd(MGM)]    1 node(s)
id=1    @192.168.0.1  (mysql-5.1.56 ndb-7.1.18)

[mysqld(API)]    2 node(s)
id=3    @192.168.0.4  (mysql-5.1.56 ndb-7.1.18)
id=5    @192.168.0.6  (mysql-5.1.56 ndb-7.1.18)

在sql節(jié)點執(zhí)行:
[root@server6 ~]# mysqladmin create world
[root@server6 ~]#  vi city.sql
CREATE 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存儲引擎,數(shù)據存儲于各數(shù)據節(jié)點,             #不然mysql使用默認的MyISAM存儲引擎,所有的數(shù)據將會存儲于本機,和單機一樣
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);
[root@server6 ~]# mysql world < city.sql

####在各sql節(jié)點查看導入的數(shù)據
mysql> use world;
Database changed
mysql> show tables;
+-----------------+
| Tables_in_world |
+-----------------+
| City                 |
+-----------------+
1 row in set (0.00 sec)
mysql> select * from City;
+----+----------+-------------+----------+------------+
| ID | Name     | CountryCode | District | Population |
+----+----------+-------------+----------+------------+
|  3 | Herat    | AFG         | Herat    |     186800 |
|  1 | Kabul    | AFG         | Kabol    |    1780000 |
|  2 | Qandahar | AFG         | Qandahar |     237500 |
+----+----------+-------------+----------+------------+
3 rows in set (0.06 sec)

---->mysql cluster 備份和恢復
####在管理節(jié)點操作
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)]    2 node(s)
id=2    @192.168.0.3  (mysql-5.1.56 ndb-7.1.18, Nodegroup: 0, Master)
id=4    @192.168.0.5  (mysql-5.1.56 ndb-7.1.18, Nodegroup: 1)

[ndb_mgmd(MGM)]    1 node(s)
id=1    @192.168.0.1  (mysql-5.1.56 ndb-7.1.18)

[mysqld(API)]    2 node(s)
id=3    @192.168.0.4  (mysql-5.1.56 ndb-7.1.18)
id=5    @192.168.0.6  (mysql-5.1.56 ndb-7.1.18)
ndb_mgm> start backup                         #mysql cluster備份數(shù)據
Waiting for completed, this may take several minutes
Node 2: Backup 1 started from node 1
Node 2: Backup 1 started from node 1 completed
 StartGCP: 20 StopGCP: 23
 #Records: 2053 #LogRecords: 0
 Data: 50312 bytes Log: 0 bytes
ndb_mgm> quit

注:默認備份的數(shù)據在各數(shù)據節(jié)點的/usr/local/mysql/ndbdata/BACKUP目錄下保存
[root@server1 ~]# scp /usr/bin/ndb_restoer root@server3:/use/bin/
[root@server1 ~]# scp /usr/bin/ndb_restore root@server5:/usr/bin/

####在sql節(jié)點操作
mysql> delete from City;                  #刪除world庫中的City表,在數(shù)據節(jié)點執(zhí)行恢復操作
Query OK, 3 rows affected (0.04 sec)

mysql> select * from City;
Empty set (0.00 sec)

####在數(shù)據節(jié)點(由于數(shù)據分散在兩個節(jié)點,因此分別在兩個數(shù)據節(jié)點執(zhí)行恢復操作) 
[root@server3 ~]# cd /usr/mysql-cluster/
[root@server3 mysql-cluster]# ls
BACKUP  ndb_2_error.log  ndb_2_fs  ndb_2_out.log  ndb_2.pid  ndb_2_trace.log.1  ndb_2_trace.log.next
[root@server3 mysql-cluster]# cd BACKUP/
[root@server3 BACKUP]# ls
BACKUP-1
[root@server3 BACKUP]# cd BACKUP-1/
[root@server3 BACKUP-1]# ls
BACKUP-1-0.2.Data  BACKUP-1.2.ctl  BACKUP-1.2.log
[root@server3 ~]# ndb_restore -n 2 -b 1 -r /usr/mysql-cluster/BACKUP/BACKUP-1/   #數(shù)據節(jié)點2
Nodeid = 2
Backup Id = 1
backup path = /usr/mysql-cluster/BACKUP/BACKUP-1/
Opening file '/usr/mysql-cluster/BACKUP/BACKUP-1/BACKUP-1.2.ctl'
File size 10420 bytes
Backup version in files: ndb-6.3.11 ndb version: mysql-5.1.56 ndb-7.1.18
Stop GCP of Backup: 84
Connected to ndb!!
Opening file '/usr/mysql-cluster/BACKUP/BACKUP-1/BACKUP-1-0.2.Data'
File size 26304 bytes
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 0
Opening file '/usr/mysql-cluster/BACKUP/BACKUP-1/BACKUP-1.2.log'
File size 52 bytes
Restored 1 tuples and 0 log entries
NDBT_ProgramExit: 0 &ndash; OK

[root@server5 ~]# cd /usr/mysql-cluster/
[root@server5 mysql-cluster]# ls
BACKUP  ndb_4_error.log  ndb_4_fs  ndb_4_out.log  ndb_4.pid  ndb_4_trace.log.1  ndb_4_trace.log.2  ndb_4_trace.log.next
[root@server5 mysql-cluster]# cd BACKUP/
[root@server5 BACKUP]# ls
BACKUP-1
[root@server5 BACKUP]# cd BACKUP-1/
[root@server5 BACKUP-1]# ls
BACKUP-1-0.4.Data  BACKUP-1.4.ctl  BACKUP-1.4.log
[root@server5 ~]# ndb_restore -n 4 -b 1 -r /usr/mysql-cluster/BACKUP/BACKUP-1/     #數(shù)據節(jié)點4
Nodeid = 4
Backup Id = 1
backup path = /usr/mysql-cluster/BACKUP/BACKUP-1/
Opening file '/usr/mysql-cluster/BACKUP/BACKUP-1/BACKUP-1.4.ctl'
File size 10420 bytes
Backup version in files: ndb-6.3.11 ndb version: mysql-5.1.56 ndb-7.1.18
Stop GCP of Backup: 84
Connected to ndb!!
Opening file '/usr/mysql-cluster/BACKUP/BACKUP-1/BACKUP-1-0.4.Data'
File size 25392 bytes
_____________________________________________________
Processing data in table: sys/def/NDB$EVENTS_0(3) fragment 1
_____________________________________________________
Processing data in table: mysql/def/ndb_apply_status(6) fragment 1
_____________________________________________________
Processing data in table: world/def/City(7) fragment 1
_____________________________________________________
Processing data in table: mysql/def/NDB$BLOB_4_3(5) fragment 1
_____________________________________________________
Processing data in table: sys/def/SYSTAB_0(2) fragment 1
_____________________________________________________
Processing data in table: mysql/def/ndb_schema(4) fragment 1
Opening file '/usr/mysql-cluster/BACKUP/BACKUP-1/BACKUP-1.4.log'
File size 52 bytes
Restored 2 tuples and 0 log entries
NDBT_ProgramExit: 0 &ndash; OK
注:-n指節(jié)點id -b指備份id -r指備份目錄

GOOD LUCK!

到此,相信大家對“mysql cluster的用法”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI