天天看點

【Data Cluster】真機環境下MySQL資料庫叢集搭建             真機環境下MySQL-Cluster搭建文檔

      mysql cluster 和 oracle rac 完全不同,它采用 無共享架構shared nothing(shared nothing architecture)。整個叢集由管理節點(ndb_mgmd),處理節點(mysqld)和存儲節點(ndbd)組 成,不存在一個共享的儲存設備。mysql cluster 主要利用了 ndb 存儲引擎來實作,ndb 存儲引擎是一個記憶體式存儲引擎,要求資料必須全部加載到記憶體之中。資料被自動分布在叢集中的不同存 儲節點上,每個存儲節點隻儲存完整資料的一個分片(fragment)。同時,使用者可以設定同一份資料儲存在多個不同的存儲節點上,以保證單點故障不會造 成資料丢失。mysql cluster 主要由 3 各部分組成:

sql 伺服器節點

ndb 資料存儲節點

監控和管理節點

這樣的分層也是與 mysql 本身把 sql 處理和存儲分開的架構相關系的。mysql cluster 的優點在于其是一個分布式的資料庫叢集,處理節點和存儲節點都可以線性增加,整個叢集沒有單點故障,可用性和擴充性都可以做到很高,更适合 oltp 應用。但是它的問題在于:

 目前的 mysql cluster 的性能還不理想,因為資料是按照主鍵 hash 分布到不同的存儲節點上,如果應用不是通過主鍵去擷取資料的話,必須在所有的存儲節點上掃描, 傳回結果到處理節點上去處理。而且,寫操作需要同時寫多份資料到不同的存儲節點上, 對 節點間的網絡要求很高。

雖然 mysql cluster 目前性能還不理想,但是 share nothing 的架構一定是未來的趨勢,oracle 接手 mysql之後,也在大力發展 mysql cluster,我對 mysql cluster 的前景抱有很大的期待。

安裝mysql-cluster首先要了解cluster的構造,cluster大體上是由管理節點(mgmd)、資料節點(ndbd)、sql節點(mysqld)組成的。

【Data Cluster】真機環境下MySQL資料庫叢集搭建             真機環境下MySQL-Cluster搭建文檔

系統要求:

記憶體:4g(最少4g)

cpu:需要支援vt

如果你是筆記本使用者那麼cpu虛拟化可能是關閉的,請在bios下設定virtualization 為enable

建立虛拟機,選擇典型安裝,點選下一步

【Data Cluster】真機環境下MySQL資料庫叢集搭建             真機環境下MySQL-Cluster搭建文檔

點選下一步

【Data Cluster】真機環境下MySQL資料庫叢集搭建             真機環境下MySQL-Cluster搭建文檔

這裡使用者名最好是mysql因為後面要用到。設定成其他使用者也可以。

下一步

【Data Cluster】真機環境下MySQL資料庫叢集搭建             真機環境下MySQL-Cluster搭建文檔

位置就是儲存這個虛拟centos系統的位置

【Data Cluster】真機環境下MySQL資料庫叢集搭建             真機環境下MySQL-Cluster搭建文檔

選擇如圖所示,下一步

【Data Cluster】真機環境下MySQL資料庫叢集搭建             真機環境下MySQL-Cluster搭建文檔

選擇自定義硬體,建議最好每個虛拟機配置設定1g的記憶體。每個cent最少配置設定512m記憶體。

點選完成就可以了。

虛拟機安裝完成後,用root權限進入。密碼和mysql賬戶的密碼相同。

首先進入linux終端,右鍵桌面如圖所示

【Data Cluster】真機環境下MySQL資料庫叢集搭建             真機環境下MySQL-Cluster搭建文檔

open in terminal(終端)

安裝mysql-cluster前首先要解除安裝原有系統自帶的mysql

聯網解除安裝(終端下執行指令)

#yum remove mysql

手動清理(終端下執行指令)

#rpm –qa|grep mysql* (這條是查詢系統中存在的mysql)

#rpm –e –nodeps mysql-libs-5.1.71-1.el6.x86_64 (不同版本的centos這個版本也不同)

首先查詢需要導入的cent的ip位址,終端下輸入

#ifconfig

【Data Cluster】真機環境下MySQL資料庫叢集搭建             真機環境下MySQL-Cluster搭建文檔

如圖所示其中inet addr:192.168.191.129就是這個cent的ip位址。

下載下傳軟體winscp

【Data Cluster】真機環境下MySQL資料庫叢集搭建             真機環境下MySQL-Cluster搭建文檔

打開軟體

【Data Cluster】真機環境下MySQL資料庫叢集搭建             真機環境下MySQL-Cluster搭建文檔

建立站點,主機名就是cent 的ip ,使用者名使用root

點選登入,輸入密碼,連接配接成功

【Data Cluster】真機環境下MySQL資料庫叢集搭建             真機環境下MySQL-Cluster搭建文檔

左邊是windows右邊是cent

cent下進入目錄/usr/local/src 把你的mysql-cluster安裝檔案放在這個目錄下

打開cent終端

添加mysql使用者群組(如果前面安裝虛拟機的時候使用的使用者是mysql則跳過此步驟

添加mysql使用者

1.      # groupadd mysql 

2.      # useradd mysql -g mysql

安裝mysql-cluster 7.4.4-linux

1.      # cd /usr/local/src/(已下載下傳好叢集版) 

2.      # tar -xvf mysql-cluster-gpl-7.4.4-linux-glibc2.5-x86_64.tar.gz  

3.      # mv mysql-cluster-gpl-7.4.4-linux-glibc2.5-x86_64 ../mysql 

4.      # cd .. 

5.      # chown -r mysql:mysql mysql/ 

6.      # cd mysql 

7.      # scripts/mysql_install_db --user=mysql  

【Data Cluster】真機環境下MySQL資料庫叢集搭建             真機環境下MySQL-Cluster搭建文檔

當出現這個頁面則mysql-cluster安裝成功

以上步驟是安裝mysql-cluster必須步驟,所有機器都要進行以上的步驟

# vi  /var/lib/mysql-cluster/config.ini (目錄和檔案沒有請建立,添加以下内容)

<code>1.      [ndbd default]</code>

<code>2.      noofreplicas=2</code>

<code>3.      [tcp default]</code>

<code>4.      portnumber=3306</code>

<code>5.      </code>

<code>6.      [ndb_mgmd]</code>

<code>7.      #設定管理節點伺服器 </code>

<code>8.      nodeid=1</code>

<code>9.      hostname=192.168.191.132 (管理節點伺服器ip位址)</code>

<code>10.   datadir=/</code><code>var</code><code>/mysql/data</code>

<code>11.   </code>

<code>12.   [ndbd]</code>

<code>13.   nodeid=2</code>

<code>14.   hostname=192.168.191.130 (ndbd點ip位址)</code>

<code>15.   datadir=/</code><code>var</code><code>/mysql/data</code>

<code>16.   </code>

<code>17.   [mysqld]</code>

<code>18.   nodeid=3</code>

<code>19.   hostname=192.168.191.131  (mysqld節點ip位址)</code>

<code>20.   [mysqld]</code>

<code>21.   nodeid=4</code>

<code>22.   hostname=192.168.191.133  (mysqld節點ip位址)</code>

<code>23.   </code>

<code>24.   #必須有空的mysqld節點,不然資料節點斷開後啟動有報錯</code>

<code>25.   [mysqld]</code>

<code>26.   nodeid=5</code>

<code>27.   [mysqld]</code>

<code>28.   nodeid=6</code>

以上内容輸入完畢後,按esc,輸入:wq即可儲存退出

【Data Cluster】真機環境下MySQL資料庫叢集搭建             真機環境下MySQL-Cluster搭建文檔

拷貝ndb_mgm、ndb_mgmd、config.ini到bin目錄。

# cd /usr/local/mysql/bin 

# cp ./ndb_mgm /usr/local/bin/ 

# cp ./ndb_mgmd /usr/local/bin/

# cp /var/lib/mysql-cluster/config.ini /usr/local/bin/

【Data Cluster】真機環境下MySQL資料庫叢集搭建             真機環境下MySQL-Cluster搭建文檔

# vi /etc/my.cnf (添加以下内容)

[mysqld] 

datadir=/var/mysql/data 

socket=/var/mysql/mysql.sock 

user=mysql 

# disabling symbolic-links is recommended to prevent assorted security risks 

symbolic-links=0 

#運作ndb存儲引擎 

ndbcluster  

#指定管理節點 

ndb-connectstring=192.168.191.132  (管理節點ip)

[mysql_cluster] 

ndb-connectstring=192.168.191.132   (管理節點ip)

[ndb_mgm] 

connect-string=192.168.191.132   (管理節點ip)

[mysqld_safe] 

log-error=/var/mysql/log/mysqld.log 

pid-file=/var/run/mysqld/mysqld.pid

# cd /usr/local/mysql/

設定mysql服務為開機自啟動

# cp support-files/mysql.server /etc/rc.d/init.d/mysqld 

# chmod +x /etc/rc.d/init.d/mysqld 

# chkconfig --add mysqld

# vi /etc/my.cnf (添加以下内容)

[mysqld]    

log-bin = /var/mysql/log/mysql-bin.log 

max_connections=1000 

#以下為mysql 主主模式的配置檔案 

# 忽略mysql資料庫複制 

binlog-ignore-db=mysql 

# 每次增長2 

auto-increment-increment=2 

# 設定自動增長的字段的偏移量,即初始值為2 

auto-increment-offset=1 

ndbcluster 

ndb-connectstring=192.168.191.132 (管理節點ip)

ndb-connectstring=192.168.191.132  (管理節點ip)

connect-string=192.168.191.132  (管理節點ip)

pid-file=/var/run/mysqld/mysqld.pid 

這裡要注意,在var目錄下建立mysql目錄,在建立的mysql目錄下建立log和data目錄

另外要給這兩個目錄授權代碼如下

# cd /var

# chown –r mysql:mysql mysql/

下面兩個指令是對mysql指令的一個link,否則無法使用mysql指令

# ln –s /usr/local/mysql/bin/mysql /usr/bin

# ln –s /var/mysql/mysql.sock /tmp/mysql.sock

mysql叢集的啟動順序為:管理節點-&gt;資料節點-&gt;sql節點

mysql叢集的關閉順序為,管理節點-&gt;資料節點-&gt;sql節點

打開服務的時候注意防火牆問題

注意把管理節點的防火牆關閉 指令如下:

# /etc/init.d/iptables stop

首先打開管理節點服務

# ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial(注意第一次或者對config檔案進行修改後,打開服務一定要加上initial否則新增加的内容不會被使用)

然後打開ndbd節點服務

# /usr/local/mysql/bin/ndbd --initial(此處同上)

出現一下資訊表示ndbd節點啟動成功.

2012-03-28 02:01:38 [ndbd] info -- angel connected to '10.32.33.120:1186'

2012-03-28 02:01:38 [ndbd] info -- angel allocated nodeid: 36

最後打開兩個sql節點131和133

#service mysqld start

出現mysql success表示服務啟動成功

打開管理節點,終端輸入

# ndb_mgm

#ndb_mgm&gt; show

顯示以下資訊,則mysql-cluster安裝部署成功

cluster configuration

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

[ndbd(ndb)] 2 node(s)

id=2 @192.168.191.130 (mysql-5.5.20 ndb-7.4.4, nodegroup: 0)

[ndb_mgmd(mgm)] 1 node(s)

id=1 @192.168.191.132 (mysql-5.5.20 ndb-7.4.4)

[mysqld(api)] 4 node(s)

id=3 @192.168.191.131 (mysql-5.5.20 ndb-7.4.4)

id=4 @192.168.191.133 (mysql-5.5.20 ndb-7.4.4)

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

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

可以看到各個節點已經連接配接上了。

以下是關于mgm相關的指令

# ndb_mgm&gt; show 檢視各節點情況。  

# ndb_mgm&gt; all report memory 檢視各資料節點使用情況  

# ndb_mgm&gt;create nodegroup 3建立資料節點分組   

# mysql&gt; alter online table data_house reorganize partition; 調整分區資料

# ndb_mgm&gt;shutdown關閉節點

# ndb_mgm&gt;exit退出

[root@localhost desktop]#service mysqld start

starting mysql.the service quit without updating pid file (/[failed]/var/mysql/log/localhost.localdomain.pid).

先去檢視日志

#cd /var/mysql/data

#less localhost.localdomain.err

如果錯誤是

fatal error:can’t open and lock privilege tables:table’mysql.user’ doesn’t exist

解決方法:

終端輸入

到mysql目錄下/usr/local/mysql

輸入

scripts/mysql_install_db –user=mysql(初始化資料庫即可)

其他問題請注意檢視問題所在的檔案夾權限問題

1、從sql節點131登入,建立資料庫和表,進行簡單測試。

mysql&gt; create database tltest ;

mysql&gt; use tltest;

database changed

mysql&gt; create table test1(id int,name varchar(10)) engine=ndb ;

mysql&gt; insert into test1 values(1,'tl');

mysql&gt; select * from test1 ;

+------+---------+

| id   | name  |

|  1 |    tl   |

登陸133節點,檢視效果,庫,表和資料已經同步。

從133節點插入一條資料,同樣登陸131,也能看到資料已經同步。