mysql-cluster集群(親測)


 

重要說明:mysql-cluste與非集群時用的mysql-server與mysql-client沒有任何關系,mysql-cluste安裝包中已自帶了集群用的server與client,啟動mysql也是啟動mysql-cluste中的mysql,與原先的mysql-server沒有任何關系。

 

一:基本概念

“NDB” 是一種“內存中”的存儲引擎,也是事務型存儲引擎,具備ACID屬性。

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

數據節點:用於保存 Cluster的數據。數據節點的數目與副本的數目相關,是片段的倍數。數據節點是用命令“ndbd”啟動的。

SQL節點:用來訪問 Cluster數據的節點。也就是Mysql服務,可以使用service mysqld start啟動。

 

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

090506799.jpg

 

二:mysql-cluste安裝包下載

mysql-cluste官方下載地址:http://dev.mysql.com/downloads/cluster/

本文測試下載的版本是linux 64位的tar包

 

三:集群配置概述

安裝版本:mysql cluster 7.4.13

操作系統 :centos6.5(X64)

軟件名稱 :mysql-cluster-gpl-7.4.13-linux-glibc2.5-x86_64.tar.gz (通用版)

管理節點IP:192.168.1.240

數據節點-SQL節點IP:192.168.1.238

數據節點-SQL節點IP:192.168.1.248

 

四:安裝

不需要安裝mysql-server軟件了,所以可以關掉mysql服務

在集群中的所有主機上安裝mysql-cluster集群軟件

mysql-cluster軟件提供3種進程:

1,mysqld進程:供用戶訪問和執行sql語句

2,數據進程ndbd:存儲數據

3,管理進程mgmd:管理集群中的所有的主機

 

安裝mysql-cluster,集群中的每台服務都要安裝

groupadd mysql
useradd mysql -g mysql
tar xvf mysql-cluster-gpl-7.4.13-linux-glibc2.5-x86_64.tar.gz
mv mysql-cluster-gpl-7.4.13-linux-glibc2.5-x86_64 /usr/local/mysql
cd /usr/local/mysql
./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql
chown -R mysql:mysql mysql cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf

 

為便於以后啟動mysql服務,我們接着做如下步驟:

 

 復制配置文件

[root@localhost mysql] cp support-files/my-default.cnf /etc/my.cnf

h.  將mysqld服務加入開機自啟動項。

*首先需要將scripts/mysql.server服務腳本復制到/etc/init.d/,並重命名為mysqld。

[root@localhostmysql]  cp support-files/mysql.server /etc/init.d/mysqld

會有提示是否覆蓋,輸入yes

這樣就可以用 service mysqld start  service mysqld restart service mysqld stop

 

*通過chkconfig命令將mysqld服務加入到自啟動服務項中,這一步就不做了,因為mysql集群啟動是有順序的,sql節點要最后啟動

[root@localhost mysql]#chkconfig --add mysqld

*注意服務名稱mysqld就是我們將mysql.server復制到/etc/init.d/時重命名的名稱。

*查看是否添加成功

[root@localhost mysql]#chkconfig --list mysqld

mysqld   0:off 1:off        2:on        3:on        4:on        5:on        6:off

 

mysql客戶端啟動:

為了避免每次都輸入mysql的全路徑/usr/local/mysql/bin/mysql,可將其加入環境變量中,在vi /etc/profile最后加入兩行命令:

MYSQL_HOME=/usr/local/mysql

export PATH=$PATH:$MYSQL_HOME/bin

修改好后再執行source /etc/profile

這樣就可以在shell中直接輸入mysql命令來啟動客戶端程序了

 

 

 

五:管理節點配置

vi /etc/mysql-cluster.ini (該文件不存在,需要創建,文件名可隨便命名)

文件內容如下:

[NDBD DEFAULT]
NoOfReplicas=2 #定義在Cluster環境中相同數據的份數,最大為4
DataMemory=200M #每個數據節點中給數據分配的內存
IndexMemory=20M #每個數據節點中給索引分配的內存
MaxNoOfAttributes=20480 #該參數用於設置簇中觸發程序對象的最大數目。該參數的默認值為768,不修改建表時可能會報708錯誤
[NDB_MGMD]
NodeId=1
#設置管理節點服務器
HostName=192.168.1.240
DataDir=/usr/local/mysql/data
[NDBD]
NodeId=2
#設置存儲節點服務器(NDB節點)
HostName=192.168.1.238
DataDir=/usr/local/mysql/data
[NDBD]
NodeId=3
#第二個NDB節點
HostName=192.168.1.248
DataDir=/usr/local/mysql/data
[MYSQLD]
NodeId=4
HostName=192.168.1.238
[MYSQLD]
NodeId=5
HostName=192.168.1.248

 

啟動(必須用參數“-f”告訴 ndb_mgm 配置文件所在位置,默認是在ndb_mgmd相同目錄下

cd  /usr/local/mysql/bin

./ndb_mgmd -f /etc/mysql-cluster.ini

./ndb_mgmd -f /etc/mysql-cluster.ini --initial  (#--initial:第一次啟動時加上,其它時候不要加,不然會數據清空,除非是在備份、恢復或配置變化后重啟時)

 

啟動成功后會顯示當前mysql-cluster的信息

 

通過netstat -lntpu或者ps -aux |grep ndb_mgmd查看是否啟動成功

 

讓管理節點開機自動啟動:以下路徑根據自己實際的來。
 vi /etc/rc.d/rc.local
加入下面的內容:
/usr/local/mysql/bin/ndb_mgmd -f /etc/mysql-cluster.ini

六:數據節點與sql節點的配置

在238與248服務上做。

vi /etc/my.cnf

增加如下內容:

[mysqld]
ndbcluster  #使用ndb集群引擎
ndb-connectstring=192.168.1.240 #指定管理集群的ip地址,多個以,分隔
default-storage-engine=ndbcluster  #設置默認引擎
#user=mysql
#log-error=/usr/local/mysql/mysqld.err

#指定管理集群的ip地址,多個以,分隔
[mysql_cluster]
ndb-connectstring=192.168.1.240

 

 在每台存儲節點(ndbd)服務器上,如果是第一次啟動ndbd進程的話,必須先執行以下命令: 
cd /usr/local/mysql/bin

./ndbd --initial  #注意,僅應在首次啟動ndbd時,或在備份/恢復數據或配置文件發生變化后重啟ndbd時使用“--initial”參數。因為該參數會使節點刪除由早期ndbd實例創建的、用於恢復的任何文件,包括用於恢復的日志文件。 

如果不是第一次啟動,直接運行如下命令即可: 

cd /usr/local/mysql/bin
./ndb

啟動后的效果:

 

 

查看是否啟動成功:

netstat -lntpu或者ps -aux |grep ndbd

 關閉數據節點:

 

 
        

 啟動sql節點:

service mysqld start

 

 啟動sql節點成功后,修改下mysql的連接為任意ip,然后再設置連接的用戶名為root,密碼為test,這樣客戶端工具SQLyog等就可以連接到mysql服務上了。

新安裝的mysql密碼是空的。

./mysql -u root -p
use mysql
SELECT `Host`,`User` FROM user;
UPDATE user SET `Host` = '%' WHERE `User` = 'root' LIMIT 1;
FLUSH PRIVILEGES;

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'test' WITH GRANT OPTION;

SELECT `Host`,`User` FROM user;

 

 

七:查看集群狀態

 

啟動順序:

管理節點 -> 數據節點 -> SQL節點

關閉順序:

SQL節點 -> 數據節點 -> 管理節點

 


數據節點與sql節點都啟動成功后在管理節點上查看集群狀態。

cd /usr/local/mysql/bin
./ndb_mgm -e show

示例如下:已全部連接成功的

 

或者

 

 

 如果節點已確認啟動並且配置無誤,還是not connected那就試下關閉防火牆與selinux

可能原因:防火牆開啟,阻止集群數據通信;關閉防火牆:service iptables stop;

關閉 selinux:setenforce 0;

 

管理和維護命令:

cd /usr/local/mysql/bin

關閉mysql集群: pkill -9 ndbd_mgmd

啟動mysql集群:./ndb_mgmd -f /var/lib/mysql-cluster/config.ini

啟動SQL節點:./mysqld_safe --user=mysql & 或 service mysqld restart

查看mysql狀態:./ndb_mgm -e show

 

八:測試集群

創建數據庫表,簡單查看配置效果:

由於為分布式集群,所以,在Mysql中創建的表的存儲引擎必須修改為:NDB Cluster,否則數據不會同步到其他節點服務器上。

 

以下建表與插入數據在一台服務上操作,操作后直接查看其他節點中的mysql,可以看到數據庫、表、數據都會同步的。

先創建個數據庫mytest

CREATE TABLE tb_city(
id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
NAME VARCHAR(20) NOT NULL DEFAULT '')
ENGINE = NDBCLUSTER DEFAULT CHARSET utf8mb4;

 

INSERT INTO tb_city VALUES(1, 'city1');
INSERT INTO tb_city VALUES(2, 'city2');
INSERT INTO tb_city VALUES(3, 'city3');

 

 

示例如下

 

九:更改表的ENGINE

ALTER TABLE tablename ENGINE=NDBCLUSTER

 示例:

ALTER TABLE tb_bank ENGINE=NDBCLUSTER
集群的每一張表必須修改ENGINE = NDBCLUSTER

 

十:jdbc連接


原先配置:jdbc:mysql://192.168.1.238:3306/palm_2_0_16
集群后配置:jdbc:mysql:loadbalance://192.168.1.238:3306,192.168.1.248:3306/palm_2_0_16?roundRobinLoadBalance=true

 


免責聲明!

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



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