test

MySQL Cluster 是MySQL適合於分佈式計算環境的高實用、高冗餘版本。它採用了NDB Cluster 存儲引擎,允許在1個 Cluster 中運行多個MySQL服務器。 該技術允許在無共享的系統中部署“內存中”數據庫的 Cluster 。

管理節點(mgm):這類節點的作用是管理MySQLCluster內的其他節點,如提供配置數據,並停止節點,運行備份等。由於這類節點負責管理其他節點的配置,應該在啓動其他節點之前啓動這類節點。MGM節點是用命令“ndb_mgmd”啓動的;

數據節點(ndb):這類節點用於保存Cluster的數據,數據節點的數目與副本的數目相關,是片段的倍數。例如,對於兩個副本,每個副本有兩個片段,那麼就有4個數據節點,沒有必要設定過多的副本,在NDB中數據會盡量的保存在內存中。數據節點使用命令“ndb”啓動的;

SQL節點:這是用來訪問Cluster數據的節點,對於MySQL Cluster,客戶端節點是使用NDB Cluster存儲引擎的傳統MySQL服務器。通常,SQL節點使用命令“mysqld-ndbcluster”啓動的;

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

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

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

  3. 管理進程mgmd:管理集羣中的所有的主機
  • 不需要安裝mysql-server軟件了,所以可以關掉mysql服務

avatar

主機名 角色 IP地址
node01 管理、數據節點 192.168.0.201
node02 管理、數據節點 192.168.0.202
node03 數據、sql節點 192.168.0.203
ipsan1 172.16.10.191
ipsan2 172.16.10.192

安裝的是Mysql cluster 7.3,爲了和參考文檔中的版本一致。

https://cdn.mysql.com//Downloads/MySQL-Cluster-7.3/MySQL-Cluster-gpl-7.3.21-1.el7.x86_64.rpm-bundle.tar

關閉防火牆及selinux(all)

wget https://cdn.mysql.com//Downloads/MySQL-Cluster-7.3/MySQL-Cluster-gpl-7.3.21-1.el7.x86_64.rpm-bundle.tar
下載並解壓:
mkdir ./mysql-cluster
tar xvf MySQL-Cluster-gpl-7.3.21-1.el7.x86_64.rpm-bundle.tar -C ./mysql-cluster

檢查並卸載掉之前安裝的Mysql及mariadb版本並安裝集羣版本(all):

cd mysql-cluster
rpm -ivh *.rpm
根據提示補安裝依賴包:
yum -y install net-tools perl-Module-Install

運行mysql-install-db腳本(5.6及以下版本)進行初始化,注意其中用戶爲root的名稱需要跟配置文件my.cnf中的相同(rpm安裝已經自動設置了環境變量,其他方式安裝可以到對應目錄下執行———all)

mysql_install_db -user=mysql 

編輯集羣管理節點配置文件/usr/mysql-cluster/config.ini

[ndb_mgmd default]
datadir = /usr/local/mysql/ndbdata

[ndbd default]
NoOfReplicas = 1            #定義在Cluster環境中相同數據的份數,最大爲4
DataMemory = 80M            #每個數據節點中給數據分配的內存
IndexMemory = 18M           #每個數據節點中給索引分配的內存
datadir = /usr/local/mysql/ndbdata

[ndb_mgmd]          #定義管理節點
NodeId = 1
HostName = node01

#[ndbd]
#NodeId = 11
#HostName = node01

[ndbd]              #定義Ndb節點
NodeId = 11
HostName = node01

[ndbd]
NodeId = 12
HostName = node02

[ndbd]
NodeId = 13
HostName = node03

[mysqld]
NodeId = 14
HostName = node01

[mysqld]
NodeId = 15
HostName = node02

在數據節點上配置/etc/my.cnf

[mysqld]
symbolic-link = 0
ndbcluster              #使用ndb集羣引擎
ndb-connectstring = 192.168.0.201       #指定管理集羣的ip地址,多個以,分隔

[mysqld_safe]
log-error = /var/log/mysql.log
pid-file=/var/run/mysqld/mysql.pid

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

在啓動mysql集羣的時候,注意首先要啓動管理節點,並依次啓動其他等若干個節點,相應的啓動步驟如下:

1. 在管理節點上,切換到/usr/local/mysql/bin目錄下,執行ndb_mgmd -f /var/lib/mysql-cluster/config.ini命令,完成管理節點的啓動;

2. 在各個數據節點上,切換到/usr/local/mysql/bin目錄下,執行ndbd --initial(第一次啓動時,否則執行ndbd即可),完成對數據節點的啓動;

3. 在各個SQL節點上,同樣切換到/usr/local/mysql/bin目錄下,執行mysqld_safe --user=root完成啓動;

4. 在管理節點上運行ndb_mgm命令,進入數據庫管理的客戶端,輸入show命令,查看與之相連接的各個節點的狀態;

初始化集羣管理進程並啓動(監聽客戶端):

[root@node01 mysql-cluster]# ndb_mgmd -f /usr/mysql-cluster/config.ini --initial

MySQL Cluster Management Server mysql-5.6.40 ndb-7.3.21
[root@node01 ~]# ps aux|grep mgm
root      1069  0.4  0.2 637040  8348 ?        Ssl  10:48   0:00 ndb_mgmd -f /usr/mysql-cluster/config.ini
root      1080  0.0  0.0 112704   964 pts/0    S+   10:48   0:00 grep --color=auto mgm

在所有節點上初始化集羣:

[root@node03 mysql-cluster]# ndbd --initial

[root@node03 mysql-cluster]# ndbd --initial
2018-06-11 16:09:23 [ndbd] INFO     -- Angel connected to '192.168.0.201:1186'                
2018-06-11 16:09:23 [ndbd] INFO     -- Angel allocated nodeid: 13

如果只有第一行的信息提示,很有可能是mgmd節點沒有正常啓動。

首次啓動,需要添加--initial參數,進行NDB節點的初始化工作,在以後的啓動過程中,不能添加該參數,否則NDBD程序會清除之前建立的所有用於恢復的數據文件和日誌文件;

集羣正常後的狀態:
[root@node01 mysql-cluster]# ndb_mgm

-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: 192.168.0.201:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 3 node(s)
id=11   @192.168.0.201  (mysql-5.6.40 ndb-7.3.21, Nodegroup: 0, *)
id=12   @192.168.0.202  (mysql-5.6.40 ndb-7.3.21, Nodegroup: 1)
id=13   @192.168.0.203  (mysql-5.6.40 ndb-7.3.21, Nodegroup: 2)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @192.168.0.201  (mysql-5.6.40 ndb-7.3.21)

[mysqld(API)]   2 node(s)
id=14   @192.168.0.201  (mysql-5.6.40 ndb-7.3.21)
id=15   @192.168.0.202  (mysql-5.6.40 ndb-7.3.21)

或者
[root@node01 ~]# ndb_mgm -e show

Connected to Management Server at: 192.168.0.201:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 3 node(s)
id=11   @192.168.0.201  (mysql-5.6.40 ndb-7.3.21, Nodegroup: 0, *)
id=12   @192.168.0.202  (mysql-5.6.40 ndb-7.3.21, Nodegroup: 1)
id=13   @192.168.0.203  (mysql-5.6.40 ndb-7.3.21, Nodegroup: 2)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @192.168.0.201  (mysql-5.6.40 ndb-7.3.21)

[mysqld(API)]   2 node(s)
id=14   @192.168.0.201  (mysql-5.6.40 ndb-7.3.21)
id=15   @192.168.0.202  (mysql-5.6.40 ndb-7.3.21)

在SQL節點上分別進入系統的安全狀態,並完成對root用戶的密碼修改:

mysqld_safe --user=root  &
直接輸入Mysql登錄

驗證集羣是否搭建成功,在SQL節點A上運行命令,在SQL節點B上查詢:

mysql> create database ctest;
Query OK, 1 row affected (0.05 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| ctest              |
| mysql              |
| ndbinfo            |
| performance_schema |
| test               |
+--------------------+
6 rows in set (0.00 sec)

mysql> create table test(
    -> id int PRIMARY KEY
    -> );
Query OK, 0 rows affected (0.03 sec)

注意所建立表的存儲引擎必須是ndbcluster類型,否則無法同步到其他節點;

查看錶的存儲引擎類型:

mysql> show table status from ctest where name='test' \G;
*************************** 1. row ***************************
           Name: test
         Engine: ndbcluster         #存儲引擎類型
        Version: 10
     Row_format: Fixed
           Rows: 1
 Avg_row_length: 28
    Data_length: 32768
Max_data_length: 0
   Index_length: 0
      Data_free: 0
 Auto_increment: NULL
    Create_time: NULL
    Update_time: NULL
     Check_time: NULL
      Collation: latin1_swedish_ci
       Checksum: NULL
 Create_options:
        Comment:
1 row in set (0.01 sec)

如果類型是InnoDB,就使用語句更改:

alter table test engine=ndbcluster;

trouble shooting

  1. 啓動nbd_mgmd失敗,報錯:
    [root@node01 mysql-cluster]# ndb_mgmd -f /usr/mysql-cluster/config.ini --reload
    MySQL Cluster Management Server mysql-5.6.40 ndb-7.3.21
    2018-06-11 15:41:35 [MgmtSrvr] ERROR    -- at line 37: Nodegroup 1 has 1 members, NoOfReplicas=2
    2018-06-11 15:41:35 [MgmtSrvr] ERROR    -- Could not load configuration from '/usr/mysql-cluster/config.ini'
    2018-06-11 15:41:35 [MgmtSrvr] ERROR    -- Could not determine which nodeid to use for this node. Specify it with --ndb-nodeid=<nodeid> on command line

    是指配置文件的參數NoOfReplicas = 2,對應配置文件中定義的ndb_mgmd就應該有2個,改成1就行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章