mysql-cluster集群原理介紹和搭建步驟(四個data/sql節點) (轉)


MySQL簇概述


MySQL簇是一種技術,該技術允許在無共享的系統中部署“內存中”數據庫的簇。通過無共享體系結構,系統能夠使用廉價的硬件,而且對軟硬件無特殊要求。此外,由於每個組件有自己的內存和磁盤,不存在單點故障。


MySQL簇將標准的MySQL服務器與名為NDB的“內存中”簇式存儲引擎集成了起來。在我們的文檔中,術語NDB指的是與存儲引擎相關的設置部分,而術語“MySQL簇”指的是MySQL和NDB存儲引擎的組合。


MySQL簇由一組計算機構成,每台計算機上均運行着多種進程,包括MySQL服務器,NDB簇的數據節點,管理服務器,以及(可能)專門的數據訪問程序。關於簇中這些組件的關系,請參見下圖:

所有這些程序一起構成了MySQL簇。將數據保存到NDB簇存儲引擎中時,表將保存在數據節點內。能夠從簇中所有其他MySQL服務器直接訪問這些表。因此,在將數據保存在簇內的工資表應用程序中,如果某一應用程序更新了1位雇員的工資,所有查詢該數據的其他MySQL服務器能立刻發現這種變化。


對於MySQL簇,保存在數據節點內的數據可被映射,簇能夠處理單獨數據節點的故障,除了少數事務將因事務狀態丟失而被放棄外,不會產生其他影響。由於事務性應用程序能夠處理事務失敗事宜,因而它不是問題源。


通過將MySQL簇引入開放源碼世界,MySQL為所有需要它的人員提供了具有高可用性、高性能和可縮放性的簇數據管理。


MySQL簇的基本概念


NDB是一種“內存中”存儲引擎,它具有可用性高和數據一致性好的特點。


能夠使用多種故障切換和負載平衡選項配置NDB存儲引擎,但以簇層面上的存儲引擎開始最簡單。MySQL簇的NDB存儲引擎包含完整的數據集,僅取決於簇本身內的其他數據。


下面,我們介紹了設置由NDB存儲引擎和一些MySQL服務器構成的MySQL簇的設置方法。


目前,MySQL簇的簇部分可獨立於MySQL服務器進行配置。在MySQL簇中,簇的每個部分被視為1個節點。


注釋:在很多情況下,術語“節點”用於指計算機,但在討論MySQL簇時,它表示的是進程。在單台計算機上可以有任意數目的節點,為此,我們采用術語簇主機。


有三類簇節點,在最低的MySQL簇配置中,至少有三個節點,這三類節點分別是:


管理(MGM)節點:這類節點的作用是管理MySQL簇內的其他節點,如提供配置數據、啟動並停止節點、運行備份等。由於這類節點負責管理其他節點的配置,應在啟動其他節點之前首先啟動這類節點。MGM節點是用命令ndb_mgmd啟動的。


數據節點:這類節點用於保存簇的數據。數據節點的數目與副本的數目相關,是片段的倍數。例如,對於兩個副本,每個副本有兩個片段,那么就有4個數據節點。沒有必要有一個以上的副本。數據節點是用命令ndbd啟動的。


SQL節點:這是用來訪問簇數據的節點。對於MySQL簇,客戶端節點是使用NDB簇存儲引擎的傳統MySQL服務器。典型情況下,SQL節點是使用命令mysqld –ndbcluster啟動的,或將ndbcluster添加到my.cnf后使用mysqld啟動。


簇配置包括對簇中單獨節點的配置,以及設置節點之間的單獨通信鏈路。對於目前設計的MySQL簇,其意圖在於,從處理器的能力、內存空間和帶寬來講,存儲節點是同質的,此外,為了提供單一的配置點,作為整體,簇的所有配置數據均位於1個配置文件中。


管理服務器(MGM節點)負責管理簇配置文件和簇日志。簇中的每個節點從管理服務器檢索配置數據,並請求確定管理服務器所在位置的方式。當數據節點內出現有趣的事件時,節點將關於這類事件的信息傳輸到管理服務器,然后,將這類信息寫入簇日志。


此外,可以有任意數目的簇客戶端進程或應用程序。它們分為兩種類型:


標准MySQL客戶端:對於MySQL簇,它們與標准的(非簇類)MySQL沒有區別。換句話講,能夠從用PHP、Perl、C、C++、Java、Python、Ruby等編寫的現有MySQL應用程序訪問MySQL簇。


管理客戶端:這類客戶端與管理服務器相連,並提供了優雅地啟動和停止節點、啟動和停止消息跟蹤(僅對調試版本)、顯示節點版本和狀態、啟動和停止備份等的命令。

 

-----------------------------------------------------------------------------------以上部分是摘自官方文檔

 

搭建sql節點(4個),data節點(4個),manage節點(1個)步驟


//環境介紹

1、manage節點:10.10.54.154
2、sql/data節點:10.10.54.154/155/156/157


//編譯安裝cmake2.8

[154/155/156/157]
 
1.下載mysql-cluster cmake
shell> wget http://dev.mysql.com/get/Downloads/MySQL-Cluster-7.2/mysql-cluster-gpl-7.2.15-linux2.6-x86_64.tar.gz
shell> wget http://www.cmake.org/files/v2.8/cmake-2.8.12.2.tar.gz
 
2.編譯安裝cmake2.8---(154/155/156/157)
shell> tar xvf cmake-2.8.12.2.tar.gz
shell> cd cmake-2.8.12.2
shell> ./configure
shell> make
shell> make install

3.編譯安裝mysql-cluster---(154/155/156/157)
shell> tar xvf mysql-cluster-gpl-7.2.15.tar.gz
shell> cd mysql-cluster-gpl-7.2.15
shell> cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/tmp/mysql-cluster.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DWITH_EMBEDDED_SERVER=0 \
-DWITH_NDB_JAVA=OFF \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_NDBCLUSTER_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_USER=mysql \
-DWITH_DEBUG=0 \
-DWITH_SSL=yes
 
4.shell> make && make install

 

//mysql-cluster配置---(154/155/156/157)


shell> mkdir /data/ndb


shell> cd /home/mysql-cluster-gpl-7.2.15


shell> cp support-files/mysql.server /etc/init.d/mysqld


shell> cp support-files/my-large.cnf /etc/my.cnf


shell> chown mysql.mysql /usr/local/mysql -R


shell> chmod 755 /usr/local/mysql/scripts/*


shell> chmod 755 /etc/init.d/mysqld


shell> sed -i "/

mysqld

/a datadir=/data/ndb" /etc/my.cnf


shell> /usr/local/mysql/scripts/mysql_install_db --user=root --basedir=/usr/local/mysql --datadir=/data/ndb


shell> chown mysql:mysql -R /data/ndb






//data/sql節點配置---(154/155/156/157)


shell> cd /usr/local/mysql/bin/


shell> cp ndb_mgm* /usr/local/bin/






shell> vim /etc/my.cnf


-------------------------


[mysql_cluster]


ndb-connectstring=10.10.54.154


[mysqld]


datadir=/data/ndb


ndbcluster


ndb-connectstring=10.10.54.154


-------------------------






//管理節點154配置


shell> mkdir -p /etc/ndb/config.ini


shell> vim /etc/ndb/config.ini


--------------------------------------


[NDBD DEFAULT]


NoOfReplicas=2


DataMemory=128M


IndexMemory=64M






[TCP DEFAULT]


portnumber=2202






[NDB_MGMD]


NodeId=1


hostname=10.10.54.154


datadir=/var/lib/mysql-cluster






[NDBD]


NodeId=2


hostname=10.10.54.154


datadir=/data/ndb


BackupDataDir=/data/backup






[NDBD]


NodeId=3


hostname=10.10.54.155


datadir=/data/ndb


BackupDataDir=/data/backup






[NDBD]


NodeId=4


hostname=10.10.54.156


datadir=/data/ndb


BackupDataDir=/data/backup






[NDBD]


NodeId=5


hostname=10.10.54.157


datadir=/data/ndb


BackupDataDir=/data/backup






[MYSQLD]


NodeId=7


hostname=10.10.54.154






[MYSQLD]


NodeId=8


hostname=10.10.54.155






[MYSQLD]


NodeId=9


hostname=10.10.54.156






[MYSQLD]


NodeId=10


hostname=10.10.54.157






[MYSQLD]


NodeId=11






[MYSQLD]


NodeId=12






[MYSQLD]


NodeId=13






[MYSQLD]


NodeId=14


------------------------------------

 

 

//啟動mysql-cluster


---啟動順序management node--data node---sql node





#啟動管理節點


shell> ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial


 ##--initial參數第一次啟動時加上


#啟動數據節點


shell> ndbd       #--initial ##初始化數據庫,用在備份,恢復時


2014-02-27 18:14:23 [ndbd] INFO     -- Angel connected to '10.10.54.154:1186'


2014-02-27 18:14:23 [ndbd] INFO     -- Angel allocated nodeid: 2





#啟動sql節點


shell> /etc/init.d/mysqld start









//查看mysql集群狀態


shell> ndb_mgm


ndb_mgm> show


Cluster Configuration


---------------------


[ndbd(NDB)] 4 node(s)


id=2 @10.10.54.154  (mysql-5.5.35 ndb-7.2.15, Nodegroup: 0, *)


id=3 @10.10.54.155  (mysql-5.5.35 ndb-7.2.15, Nodegroup: 0)


id=4 @10.10.54.156  (mysql-5.5.35 ndb-7.2.15, Nodegroup: 1)


id=5 @10.10.54.157  (mysql-5.5.35 ndb-7.2.15, Nodegroup: 1)





[ndb_mgmd(MGM)] 1 node(s)


id=1 @10.10.54.154  (mysql-5.5.35 ndb-7.2.15)






[mysqld(API)] 8 node(s)


id=7 @10.10.54.154  (mysql-5.5.35 ndb-7.2.15)


id=9 @10.10.54.155  (mysql-5.5.35 ndb-7.2.15)


id=10 @10.10.54.156  (mysql-5.5.35 ndb-7.2.15)


id=11 @10.10.54.157  (mysql-5.5.35 ndb-7.2.15)


id=12 (not connected, accepting connect from any host)


id=13 (not connected, accepting connect from any host)


id=14 (not connected, accepting connect from any host)


id=15 (not connected, accepting connect from any host)





//測試mysql-cluster


1.管理機上創建表


mysql> create database d1;


mysql> use d1;


mysql> CREATE TABLE `t_e` (


  `emp_no` int(11) NOT NULL,


  `birth_date` date NOT NULL,


  `first_name` varchar(14) NOT NULL,


  `last_name` varchar(16) NOT NULL,


  `gender` enum('M','F') NOT NULL,


  `hire_date` date NOT NULL,


  PRIMARY KEY (`emp_no`)


) ENGINE=ndbcluster DEFAULT CHARSET=utf8





2.mysql> insert into t_e select * from employees.employees;


##插入出錯


ERROR 1297 (HY000): Got temporary error 233 'Out of operation records in transaction coordinator (increase MaxNoOfConcurrentOperations)' from NDBCLUSTER


#原因時插入數據量太大




mysql> insert into t_e select * from employees.employees limit 10000;


#插入成功



3.data節點上查看,數據已同步





//關閉mysql-cluster


1.先關閉sql節點


/etc/init.d/mysqld stop


2.在管理機上


shell> ndb_mgm


ndb_mgm> shutdown #關閉所有cluster進程


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM