標籤:
閱讀目錄
- MySQL Cluster簡介
- mysql-cluster構造
- 虛擬機器安裝centos6.6
- mysql-cluster下載
- centos6.6搭建環境配置
- mysql-cluster安裝包匯入cent中
- 叢集配置
- 運行mysql-cluster
- 常見問題
- 測試
真機環境下MySQL-Cluster搭建文檔
摘要:本年伊始階段,由於實驗室對不同資料庫效能測試需求,才出現MySQL叢集搭建。購置主機,交換器,雙絞線等一系列準備工作就緒,也就開始叢集搭建。起初筆者對此不甚瞭解,查閱很多資料,最終都不太完善。故筆者真機環境測試成功後,整理出此搭建文檔,一則防止遺忘知識總結,另則與人共用。前天完成文檔由於文字偏多,給陌生配置者帶來不小壓力。更改文檔版本後,減少文字增加圖片,讓一個大一的對mysql叢集不瞭解者,照此配置。能夠配置成功,故發表。(本文原創/整理,轉載請標註原文出處: 真機環境下MySQL-Cluster搭建文檔 )
白寧超
2015年7月14日17:22:04
回到頂部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 應用。但是它的問題在於:
- NDB(“NDB” 是一種“記憶體中”的儲存引擎,它具有可用性高和資料一致性好的特點。) 儲存引擎必須要求資料全部載入到記憶體之中,限制比較大,但是目前 NDB 新版本對此做了改進,允許只在記憶體中加 載索引資料,資料可以儲存在磁碟上。
- 目前的 MySQL cluster 的效能還不理想,因為資料是按照主鍵 hash 分布到不同的儲存節點上,如果應用不是通過主鍵去擷取資料的話,必須在所有的儲存節點上掃描, 返回結果到處理節點上去處理。而且,寫操作需要同時寫多份資料到不同的儲存節點上, 對 節點間的網路要求很高。
雖然 MySQL cluster 目前效能還不理想,但是 share nothing 的架構一定是未來的趨勢,Oracle 接手 MySQL之後,也在大力發展 MySQL cluster,我對 MySQL cluster 的前景抱有很大的期待。
回到頂部mysql-cluster構造
安裝mysql-cluster首先要瞭解cluster的構造,Cluster大體上是由管理節點(mgmd)、資料節點(ndbd)、sql節點(mysqld)組成的。
回到頂部虛擬機器安裝centos6.6
系統要求:
記憶體:4G(最少4G)
CPU:需要支援VT
如果你是筆記本使用者那麼cpu虛擬化可能是關閉的,請在BIOS下設定virtualization 為enable
建立虛擬機器,選擇典型安裝,點擊下一步
點擊下一步
這裡使用者名稱最好是mysql因為後面要用到。設定成其他使用者也可以。
下一步
位置就是儲存這個虛擬centos系統的位置
下一步
選擇,下一步
選擇自訂硬體,建議最好每個虛擬機器分配1G的記憶體。每個cent最少分配512M記憶體。
點擊完成就可以了。
虛擬機器安裝完成後,用root許可權進入。密碼和mysql賬戶的密碼相同。
回到頂部mysql-cluster下載
www.mysql.com/downloads/cluster 選擇linux-generic下的版本 根據你的cent的系統選擇32or64
回到頂部centos6.6搭建環境配置
首先進入linux終端,右鍵案頭
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這個版本也不同)
回到頂部mysql-cluster安裝包匯入cent中
首先查詢需要匯入的cent的ip地址,終端下輸入
#ifconfig
其中inet addr:192.168.191.129就是這個cent的ip地址。
下載軟體winscp
開啟軟體
建立網站,主機名稱就是cent 的ip ,使用者名稱使用root
點擊登入,輸入密碼,串連成功
左邊是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
當出現這個頁面則mysql-cluster安裝成功
以上步驟是安裝mysql-cluster必須步驟,所有機器都要進行以上的步驟
回到頂部叢集配置首先進行管理節點的配置(終端輸入)
# vi /var/lib/mysql-cluster/config.ini (目錄和檔案沒有請建立,添加以下內容)
+ View Code
以上內容輸入完畢後,按ESC,輸入:wq即可儲存退出
拷貝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/
資料節點配置(終端輸入)
# 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
Sql節點配置(終端輸入)
# 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]
datadir=/var/mysql/data
socket=/var/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
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)
[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
這裡要注意,在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-cluster
mysql叢集的啟動順序為:管理節點->資料節點->SQL節點
mysql叢集的關閉順序為,管理節點->資料節點->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> 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
# ndb_mgm> show 查看各節點情況。
# ndb_mgm> all report memory 查看各資料節點使用方式
# ndb_mgm>create nodegroup 3建立資料節點分組
# mysql> alter online table data_house reorganize partition; 調整分區資料
# ndb_mgm>shutdown關閉節點
# ndb_mgm>exit退出
回到頂部常見問題Mysqld端服務無法啟動
[[email protected] 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> create database tltest ;
mysql> use tltest;
Database changed
mysql> create table test1(id int,name varchar(10)) engine=ndb ;
mysql> insert into test1 values(1,‘tl‘);
mysql> select * from test1 ;
+------+---------+
| id | name |
+------+---------+
| 1 | tl |
+------+---------+
登陸133節點,查看效果,庫,表和資料已經同步。
從133節點插入一條資料,同樣登陸131,也能看到資料已經同步。
章節附註:本系列文檔,筆者真機環境測試無誤得以分享,純屬原創,若有轉載,請注釋出處.:真機環境下MySQL-Cluster搭建文檔
【Data Cluster】真機環境下MySQL資料庫叢集搭建