【Data Cluster】真机环境下MySQL数据库集群搭建
? ? ? ? ? ?? 真機環境下MySQL-Cluster搭建文檔
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?(目錄和文件沒有請新建,添加以下內容)
| 1.????? [NDBD DEFAULT] 2.????? NoOfReplicas=2 3.????? [TCP DEFAULT] 4.????? portnumber=3306 5.?????? 6.????? [NDB_MGMD] 7.????? #設置管理節點服務器? 8.????? nodeid=1 9.????? HostName=192.168.191.132 (管理節點服務器ip地址) 10.?? DataDir=/var/mysql/data 11.??? 12.?? [NDBD] 13.?? nodeid=2 14.?? HostName=192.168.191.130 (ndbd點ip地址) 15.?? DataDir=/var/mysql/data 16.??? 17.?? [MYSQLD] 18.?? nodeid=3 19.?? HostName=192.168.191.131? (mysqld節點ip地址) 20.?? [MYSQLD] 21.?? nodeid=4 22.?? HostName=192.168.191.133? (mysqld節點ip地址) 23.??? 24.?? #必須有空的mysqld節點,不然數據節點斷開后啟動有報錯 25.?? [MYSQLD] 26.?? nodeid=5 27.?? [mysqld] 28.?? nodeid=6 |
?
以上內容輸入完畢后,按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端服務無法啟動
[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> 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,也能看到數據已經同步。
總結
以上是生活随笔為你收集整理的【Data Cluster】真机环境下MySQL数据库集群搭建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到长白发好不好
- 下一篇: Universal-Image-Load