MySQL Cluster7.2.4初步安裝部署新特性效能測試等
1.1 mysql-cluster簡介
簡單的說,MySQLCluster實際上是在無共享儲存裝置的情況下實現的一種完全分散式資料庫系統,其主要透過NDBCluster(簡稱NDB)儲存引擎來實現。
MySQLCluster剛剛誕生的時候可以說是一個可以對資料進行持久化的記憶體資料庫,所有資料和索引都必須裝載在記憶體中才能夠正常執行,但是最新的MySQLCluster版本已經可以做到僅僅將所有索引和索引資料裝載在記憶體中即可,實際的資料可以不用全部裝載到記憶體中,架構如下圖所示:
1.3 Cluster主要結構
這類節點的作用是管理MySQLCluster內的其他節點,如提供配 置資料、啟動並停止節點、執行備份等。由於這類節點負責管理其他節點的配置,應在啟動其他節點之前首先啟 動這類節點。MGM節點是用命令“ndb_mgmd”啟動的。
對硬體沒什麼要求,差一點的機器完全能夠勝任。預設埠1186。
這類節點用於儲存Cluster的資料。資料節點的數目與副本的數目相關,是片段的倍數。例如,對於兩個副本,每個副本有兩個片段,那麼就有4個資料節點。不過沒有必要設定多個副本。資料節點是用命令“ndbd”啟動的。
可以選擇大記憶體,cpu也相對來講不錯的,尤其是以後ndbmtd對多核Cpu的支援。預設埠2202
這是用來訪問Cluster資料的節點。對於MySQLCluster,客戶端節點是使用NDBCluster儲存引擎的傳統MySQL伺服器。通常,SQL節點是使用命令“mysqld–ndbcluster”啟動的,或將“ndbcluster”新增到“my.cnf”後使用“mysqld”啟動。
對cpu要求較高,選擇多核,高頻CPU較好1.4 Cluster特性
支援事務:和Innodb一樣,支援事務
可與mysqld不在一臺主機:可以和mysqld分開存在於獨立的主機上,然後透過網路和mysqld通訊互動。
記憶體需求量巨大:新版本索引以及被索引的資料必須存放在記憶體中,老版本所有資料和索引必須存在與記憶體中
具有非常高的併發需求
對單個請求的響應並不是非常的critical
查詢簡單,過濾條件較為固定,每次請求資料量較少,又不希望自己進行水平Sharding
儘可能讓查詢簡單,避免資料的跨節點傳輸;儘可能滿足SQL節點的計算效能,大一點的叢集SQL節點會明顯多餘Data節點;在各節點之間儘可能使用萬兆網路環境互聯,以減少資料在網路層傳輸過程中的延時
1.5 mysql-cluster的優缺點
1) 99.999 %的高可用性
2) 快速的自動失效切換
3) 靈活的分散式體系結構,沒有單點故障
4) 高吞吐量和低延遲
5) 可擴充套件性強,支援線上擴容
1) 存在很多限制,比如:不支援外來鍵,資料行不能超過8K(不包括BLOB和text中的資料)
2) 部署、管理、配置很複雜
3) 佔用磁碟空間大,記憶體大
4) 備份和恢復不方便
5) 複雜的sql查詢效能一般
2 安裝
2.1 環境介紹
shell> tar -xvfmysql-cluster-gpl-7.2.4-linux2.6-x86_64.tar.gz
shell> mkdir-p /usr/local/mysql/bin
shell> mkdir-p /usr/local/mysql/ndbdata
shell> vi ~/.bash_profile
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin
shell> cdmysql-cluster-gpl-7.2.4-linux2.6-x86_64
shell> cp bin/ndb_mgmd/usr/local/mysql/bin
shell> cp bin/ndb_mgm/usr/local/mysql/bin
shell> mkdir/var/lib/mysql-cluster
shell> mkdir/usr/local/mysql/cluster-conf
shell> vi /usr/local/mysql/cluster-conf/config.ini
2.2 管理節點配置檔案
[NDBDDEFAULT]
#TotalSendBufferMemory= 256M
NoOfReplicas=2
DataMemory=2500M
IndexMemory=256M
DataDir=/var/lib/mysql-cluster
#FileSystemPath=/data/dbdata
#Redolog
FragmentLogFileSize=32M
InitFragmentLogFiles=SPARSE
NoOfFragmentLogFiles=8
RedoBuffer=1024M
StringMemory=25
LockPagesInMainMemory=1
MaxNoOfTables=4096
MaxNoOfOrderedIndexes=2048
MaxNoOfUniqueHashIndexes=1024
MaxNoOfAttributes=24576
MaxNoOfTriggers=14336
ODirect=1
MaxNoOfConcurrentTransactions=10000
MaxNoOfConcurrentOperations=50000
MaxNoOfLocalOperations=55000
TimeBetweenGlobalCheckpoints=1000
TimeBetweenEpochs=100
TimeBetweenWatchdogCheckInitial=60000
TransactionBufferMemory=10M
DiskCheckpointSpeed=10M
DiskCheckpointSpeedInRestart=100M
TimeBetweenLocalCheckpoints=20
SchedulerSpinTimer=400
SchedulerExecutionTimer=100
RealTimeScheduler=1
BackupMaxWriteSize=1M
BackupDataBufferSize=16M
BackupLogBufferSize=4M
BackupMemory=20M
MaxNoOfExecutionThreads=4
TransactionDeadLockDetectionTimeOut=10000
BatchSizePerLocalScan=512
###Increasing the LongMessageBufferb/c of a bug (20090903)
LongMessageBuffer=8M
###Heartbeating
HeartbeatIntervalDbDb=15000
HeartbeatIntervalDbApi=15000
[MGMDEFAULT]
PortNumber:1186
DataDir:/var/lib/mysql-cluster1
[TCPDEFAULT]
SendBufferMemory:64M
#######################################
#Change HOST1 to the name of the NDB_MGMD host
#Change HOST8 to the name of the NDBD host
#Change HOST9 to the name of the NDBD host
#######################################
[NDB_MGMD]
NodeId:1
HostName:10.100.200.36
ArbitrationRank:1
[NDBD]
NodeId:4
HostName:10.100.200.37
[NDBD]
NodeId:5
HostName:10.100.200.38
######################################################
#Note: The following can be MySQLDconnections or #
# NDB API application connecting to thecluster #
######################################################
[API]
NodeId:10
HostName:10.100.200.39
ArbitrationRank:2
[API]
NodeId:11
HostName:10.100.200.39
ArbitrationRank:2
[API]
NodeId:12
HostName:10.100.200.39
ArbitrationRank:2
[API]
NodeId:13
HostName:10.100.200.39
ArbitrationRank:2
[API]
NodeId:14
HostName:10.100.200.39
ArbitrationRank:2
[API]
NodeId:15
HostName:10.100.200.41
ArbitrationRank:2
[API]
NodeId:16
HostName:10.100.200.41
ArbitrationRank:2
[API]
NodeId:17
HostName:10.100.200.41
ArbitrationRank:2
[root@banggocluster-conf]#ndb_mgmd-f /usr/local/mysql/cluster-conf/config.ini
ndbd–initial #(第一次啟動必須新增選項,另外備份/恢復,修改配置檔案也需要執行)
ndbd #不是第一次啟動需要執行的命令
/etc/rc.d/init.d/mysqldstart或servicemysqldstart
啟動後可以用mysql-uroot -p驗證mysql服務狀態
/etc/rc.d/init.d/mysqldstop或servicemysqld stop
ndbdstop
ndb_mgm〉shutdown
驗證配置的正確性
1、在管理節點執行:ndb_mgm-> show
[root@banggo~]# ndb_mgm
--NDB Cluster -- Management Client --
ndb_mgm>show
Connectedto Management Server at: localhost:1186
ClusterConfiguration
---------------------
[ndbd(NDB)] 2 node(s)
id=4 @10.100.200.37 (mysql-5.5.19 ndb-7.2.4, Nodegroup:0, Master)
id=5 @10.100.200.38 (mysql-5.5.19 ndb-7.2.4, Nodegroup:0)
[ndb_mgmd(MGM)]1 node(s)
id=1 @10.100.200.36 (mysql-5.5.19 ndb-7.2.4)
[mysqld(API)] 2 node(s)
id=10 @10.100.200.39 (mysql-5.5.19 ndb-7.2.4)
………
id=14 @10.100.200.41 (mysql-5.5.19 ndb-7.2.4)
………
7 ndbcluster儲存引擎功能測試(與innoDB對比)
8 MySQLClster備份與恢復
備份
採用ndb_mgm管理客戶端來備份,在管理節點執行ndb_mgm即可進入管理命令列,輸入startbackup開始備份所有節點,如果後面還跟著對應資料節點的id就只備份對應的資料節點
恢復(參考:http://xxtianxiaxing.iteye.com/blog/563063)
使用命令ndb_restore進行恢復,具體過程如下:
啟動管理節點
/usr/bin/ndb_mgmd-f /usr/local/mysql/mysql-cluster/config.ini--reload
啟動資料節點:
/usr/bin/ndbd --initial
第一個節點恢復的時候
在第一個節點恢復表結構(恢復的時候如果不涉及到表結構的變更,不用使用引數-m)
/usr/bin/ndb_restore -c 10.100.200.37-n 11 -b 1 -m --backup_path=/data/backup/backup-1/
恢復資料,恢復資料的時候可以幾個ndb節點一起執行,速度會快一點!
/usr/bin/ndb_restore -c 10.100.200.37-n 11 -b 1 -r --backup_path=/data/backup/backup-1/
其他節點恢復的時候(以後的節點不需要加-m引數)
/usr/bin/ndb_restore -c 192.168.100.223 -n 11 -b 1 -r --backup_path=/data/dbdata1/BACKUP/BACKUP-1/
9 MySQLClster線上新增節點1
[NDBD]
id=21
HostName=10.100.200.37
[NDBD]
id=22
HostName=10.100.200.38
10 MySQLClster使用者許可權共享
mysql>CALLmysql.mysql_cluster_move_privileges();
shell>mysqldumpmysql userdbtables_privcolumns_privprocs_priv>backup_file.sql
mysql>show create tablemysql.user;看engine是否為ndbcluster。
mysql>grant all on *.* to test@'10.100.200.%' identified by 'test123';
[root@banggo~]#mysql-h10.100.200.39 -utest-ptest123 -P3307;
OK,能連上,測試成功!
11.1 MySQLClster備份與恢復擴充套件(操作見No8)
備份指的是在給定時間對資料庫的快照。備份包含三個主要部分:
(1)Metadata(後設資料):所有資料庫表的名稱和定義。
(2)Tablerecords(表記錄):執行備份時實際儲存在資料庫表中的資料。
(3)Transactionlog(事務日誌):指明如何以及何時將資料儲存在資料庫中的連續記錄。
每一部分(這三部分)均會儲存在參與備份的所有資料節點上。在備份過程中,每個節點均會將這三個部分儲存在磁碟上的三個檔案中(意思是說,有幾個節點,將會把相同的資料,儲存幾份.例如,2個資料節點,那麼就會分別在2個節點上,儲存2次,儲存目錄預設為
[NDBD]
DateDir=/usr/local/mysql/BACKUP
(4)BACKUP-backup_id.node_id.ctl
包含控制資訊和後設資料的控制檔案。每個節點均會將相同的表定義(對於簇中的所有表)儲存在自己的該檔案中
(5)BACKUP-backup_id-0.node_id.data
包含表記錄的資料檔案,它是按片段儲存的,也就是說,在備份過程中,不同的節點會儲存不同的片段。每個節點儲存的檔案以指明瞭記錄所屬表的標題開始。在記錄清單後面有一個包含關於所有記錄校驗和的腳註。
(6)BACKUP-backup_id.node_id.log
包含已提交事務的記錄的日誌檔案。在日誌中,僅儲存已在備份中儲存的表上的事務。參與備份的節點將儲存不同的記錄,這是因為,不同的節點容納了不同的資料庫片段。
在上面所列的內容中,backup_id指的是備份ID,node_id是建立檔案的節點的唯一ID。
使用管理伺服器建立備份開始備份前,請確保已為備份操作恰當地配置了簇。
本節討論的引數定義了與線上備份執行有關的記憶體緩衝集。
(1)BackupDataBufferSize
在建立備份的過程中,為了將資料傳送到磁碟,將使用兩類緩衝。備份資料緩衝用於填充由掃描節點的表而記錄的資料。一旦將該緩衝填充到了指定的水平BackupWriteSize(請參見下面的介紹),就會將頁傳送至磁碟。在將頁寫入磁碟的同時,備份程式能夠繼續填充該緩衝,直至其空間消耗完為止。出現該情況時,備份程式將暫停掃描,直至一些磁碟寫入操作完成並釋放了記憶體為止,然後掃描繼續。
該引數的預設值為2MB。
(2)BackupLogBufferSize
備份日誌緩衝扮演的角色類似於備份資料緩衝,不同之處在於,它用於生成備份執行期間進行的所有表寫入的日誌。相同的原理也適用於備份資料緩衝情形下的頁寫入,不同之處在於,當備份日誌緩衝中沒有多餘空間時,備份將失敗。出於該原因,備份日誌緩衝的大小應足以處理執行備份時產生的負載。
該引數的預設值對於大多數應用程式均是適當的。事實上,備份失敗的原因更可能是因為磁碟寫入速度不夠,而不是備份日誌緩衝變滿。如果沒有為應用程式產生的寫負載配置磁碟子系統,簇很可能無法執行所需的操作。最好按恰當的方式配置簇,使得處理器成為瓶頸而不是磁碟或網路連線。預設值是2MB。
(3)BackupMemory
該引數是BackupDataBufferSize和BackupLogBufferSize之和。預設值是2MB+ 2MB = 4MB。
(4)BackupWriteSize
該引數指定了由備份日誌緩衝和備份資料緩衝寫入磁碟的訊息大小。預設值是32KB.
(5)BackupDataDir
#可更改預設的備份目錄,BackupDataDir=/mysqlback
#當然前提,mkdir/mysqlback,需要在所有資料節點上執行
也能指定存放備份的目錄。預設情況下,該目錄是FileSystemPath/BACKUP
(6)FileSystemPath
該引數指定了存放為後設資料建立的所有檔案、REDO日誌、UNDO日誌和資料檔案的目錄。預設目錄是由DataDir指定的。注意,啟動ndbd程式之前,該目錄必須已存在。
(7)DataDir
該引數指定了存放跟蹤檔案、日誌檔案、pid檔案以及錯誤日誌的目錄。
12.1 Join的改進1
我們知道在7.2之前的版本都是將jion在mysqld節點執行,這樣就需要從資料節點進行互動傳輸資料,造成join的效能非常差。現在7.2版本將join放到了資料節點執行,並行處理,較少了資料在sql節點的互動,因此效能大幅提升。
點選(此處)摺疊或開啟
-
mysql>set ndb_join_pushdown=0;
-
mysql>show variables like \'%ndb_join_pushdown%\';
-
-
+-------------------+-------+
-
| Variable_name | Value |
-
+-------------------+-------+
-
| ndb_join_pushdown | OFF |
-
+-------------------+-------+
-
mysql>SELECT sql_no_cacheCOUNT(*) FROM residents,postcodesWHERE residents.postcode=postcodes.postcodeAND postcodes.town=\"MAIDENHEAD\";
-
+----------+
-
|COUNT(*) |
-
+----------+
-
| 20000 |
-
+----------+
-
1row in set (17.68 sec)
-
-
-
mysql>set ndb_join_pushdown=1;
-
mysql>show variables like \'%ndb_join_pushdown%\';
-
+-------------------+-------+
-
|Variable_name | Value |
-
+-------------------+-------+
-
|ndb_join_pushdown| ON |
-
+-------------------+-------+
-
-
mysql>SELECT sql_no_cacheCOUNT(*) FROM residents,postcodesWHERE residents.postcode=postcodes.postcodeAND postcodes.town=\"MAIDENHEAD\";
-
+----------+
-
|COUNT(*) |
-
+----------+
-
| 20000 |
-
+----------+
- 1row in set (1.72 sec)
13.1 磁碟儲存表
點選(此處)摺疊或開啟
-
CREATELOGFILE GROUP lg_2
-
ADD UNDOFILE \'undo_2.log\'
-
INITIAL_SIZE 536870912
-
UNDO_BUFFER_SIZE 67108864
- ENGINE NDBCLUSTER;
#建立表空間,並新增資料檔案
點選(此處)摺疊或開啟
-
CREATETABLESPACE ts_2
-
ADDDATAFILE \'data_2.dat\'
-
USE LOGFILE GROUP lg_2
-
INITIAL_SIZE 536870912
-
ENGINE NDBCLUSTER;
-
-
CREATETABLE `bgtdisk`( #建立使用磁碟儲存的表:
-
`Name` varchar(50) NOT NULL,
-
`ProviderName`varchar(200) NOT NULL,
-
PRIMARY KEY (`Name`)
- ) tablespace ts_2 storage disk ENGINE=ndbcluster DEFAULT CHARSET=utf8;
點選(此處)摺疊或開啟
-
mysql>insert intobgtdiskselect * from postcodes;
-
Query OK, 100000 rows affected (9.68 sec)
- Records: 100000 Duplicates: 0 Warnings: 0
Query OK, 1000000 rows affected (1 min 55.28sec) Records: 1000000 Duplicates: 0 Warnings: 0
點選(此處)摺疊或開啟
-
mysql>SELECT TABLESPACE_NAME, FILE_NAME, EXTENT_SIZE*TOTAL_EXTENTS/1024/1024 ASTOTAL_MB, EXTENT_SIZE*FREE_EXTENTS/1024/1024 AS FREE_MB, EXTRA FROMinformation_schema.FILESWHERE FILE_TYPE=\"DATAFILE\";
-
+-----------------+------------+--------------+--------------+----------------+
-
|TABLESPACE_NAME | FILE_NAME |TOTAL_MB | FREE_MB | EXTRA |
-
+-----------------+------------+--------------+--------------+----------------+
-
|ts_1 | data_1.dat |512.00000000 | 301.00000000 | CLUSTER_NODE=4 |
-
|ts_1 | data_1.dat |512.00000000 | 301.00000000 | CLUSTER_NODE=5 |
-
|ts_1 | data_1.dat |512.00000000 | 300.00000000 | CLUSTER_NODE=6 |
-
+-----------------+------------+--------------+--------------+----------------+
- 3rows in set (0.05 sec)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29096438/viewspace-1872469/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 6.linux->MySQL 安裝及效能測試LinuxMySql
- mysql8.0.11新特性測試MySql
- 效能測試 -- docker安裝influxdbDockerUX
- CentOS 下效能測試工具 wrk 安裝CentOS
- 效能測試——壓測工具locust——指令碼初步編寫指令碼
- ActiveMQ初步安裝MQ
- mysql 8.0.17 分割槽特性測試MySql
- 自動化測試之:Jenkins安裝與部署Jenkins
- MySQL 8.0.20 安裝新特性以及一些廢棄引數MySql
- 基於LINUX的MySql二進位制本地安裝和部署實施測試LinuxMySql
- mysql簡單效能測試MySql
- MYSQL 效能測試方法 - 基準測試(benchmarking)MySql
- MySQL所有的安裝部署方式MySql
- MySQL MHA部署與測試-下篇MySql
- mysql5.7GeleraCluster安裝部署(二)MySql
- dbdeployer 快速安裝MySQL8.0各測試環境MySql
- MGR(MySQL Group Replication)部署搭建測試MySql
- PHP7透過yum源安裝及效能測試PHP
- Linux上安裝jdk Tomcat mysql redis等LinuxJDKTomcatMySqlRedis
- sqlserver 安裝測試SQLServer
- 安裝測試kafkaKafka
- 【Windows 64位】MySQL 8.0.21安裝教程+Navicat+MySQL連線測試WindowsMySql
- MySQL 8.0 新特性MySql
- MySQL全面瓦解:安裝部署與準備MySql
- 伺服器安裝部署-01-MySQL伺服器MySql
- MySQL 主從複製安裝部署配置MySql
- Arthas 初探--安裝初步適用
- 初步瞭解軟體測試
- mysql之 sysbench1.0.3 安裝與系統壓力測試MySql
- 效能測試工具JMeter的安裝及環境配置--Windows和LinuxJMeterWindowsLinux
- app的安裝與解除安裝測試點APP
- Mysql MHA部署-03MHA軟體安裝MySql
- jmeter介面效能測試-高併發分散式部署JMeter分散式
- pyflink的安裝和測試
- vue測試安裝和配置Vue
- 裝箱演算法的效能測試演算法
- mysql5.1的新特性MySql
- MySQL8.0-新特性-DescendingIndexMySqlIndex
- MySQL 8 複製(八)——組複製安裝部署MySql