溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么配置MySQL Cluster

發(fā)布時間:2021-11-11 16:08:21 來源:億速云 閱讀:211 作者:iii 欄目:MySQL數(shù)據(jù)庫

這篇文章主要講解了“怎么配置MySQL Cluster”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么配置MySQL Cluster”吧!

##MySQL Cluster 的配置說明
管理節(jié)點(1 個) 10.10.10.9
SQL 節(jié)點(2 個) 10.10.10.10
                 10.10.10.11
Data節(jié)點(2 個) 10.10.10.10
                 10.10.10.11

##配置主機IP
[root@mysql9 ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=mysql9              ##因為是克隆的虛擬機,所以需要修改主機名
[root@mysql9 ~]# cat /etc/hosts
127.0.0.1 localhost mysql9   ##因為是克隆的虛擬機,所以需要修改主機名,后面的主機名每臺機器不一樣。
10.10.10.9 mysql9
10.10.10.10 mysql10
10.10.10.11 mysql11
##上面所做的操作,在所有服務器上面都要執(zhí)行!

##禁用selinux
修改/etc/selinux/config文件
將SELINUX=enforcing改為SELINUX=disabled
重啟機器即可。
查看selinux狀態(tài):
[root@CentOS ~]# getenforce
##關(guān)閉iptables  ##這個不知道是什么東西,浪費我大量的時間,不關(guān)閉的話,啟動Data節(jié)點會報錯:
-bash-4.1$ ndbd --initial
Unable to connect with connect string: nodeid=0,10.10.10.9:1186
Retrying every 5 seconds. Attempts left: 12 11 10 9 8 7 6 5 4 3 2 1, failed.
2015-12-18 23:11:55 [ndbd] ERROR    -- Could not connect to management server, error: ''
##下面關(guān)閉它:
[root@mysql9 ~]# service iptables stop
iptables:將鏈設(shè)置為政策 ACCEPT:filter                    [確定]
iptables:清除防火墻規(guī)則:                                 [確定]
iptables:正在卸載模塊:                                   [確定]
[root@mysql9 ~]# chkconfig iptables off
##上面所做的操作,在所有服務器上面都要執(zhí)行!

##添加用戶和組
[root@db ~]# groupadd mysql
[root@db ~]# useradd -r -g mysql mysql
[root@localhost data]# passwd mysql
更改用戶 mysql 的密碼 。
新的 密碼:
無效的密碼: 過短
無效的密碼: 過于簡單
重新輸入新的 密碼:
passwd: 所有的身份驗證令牌已經(jīng)成功更新。
##上面所做的操作,在所有服務器上面都要執(zhí)行!

##MySQL Cluster 的安裝配置
[root@CentOS tmp]# cd /tmp/
[root@CentOS tmp]# ll mysql-cluster-gpl-7.4.8-linux-glibc2.5-i686.tar.gz 
-rw-r--r--. 1 root root 472807612 12月 18 01:11 mysql-cluster-gpl-7.4.8-linux-glibc2.5-i686.tar.gz
[root@CentOS tmp]# tar zxf mysql-cluster-gpl-7.4.8-linux-glibc2.5-i686.tar.gz -C /usr/local/
[root@CentOS tmp]# cd /usr/local/
[root@CentOS local]# mv mysql-cluster-gpl-7.4.8-linux-glibc2.5-i686/ mysql
[root@CentOS local]# chown -R mysql:mysql /usr/local/mysql
[root@CentOS local]# vi /etc/profile
export PATH=/usr/local/mysql/bin:$PATH
[root@localhost bin]# source /etc/profile
##上面所做的操作,在所有服務器上面都要執(zhí)行!

##初始化數(shù)據(jù)庫
[root@CentOS local]# mkdir -p /data/3306
[root@CentOS local]# chown -R mysql:mysql /data
[root@CentOS local]# su - mysql
su: 警告:無法切換到目錄/home/mysql: 沒有那個文件或目錄
-bash-4.1$ mkdir -p /home/mysql
mkdir: 無法創(chuàng)建目錄"/home/mysql": 權(quán)限不夠
-bash-4.1$ exit
logout
[root@CentOS local]# mkdir -p /home/mysql
[root@CentOS local]# su - mysql
-bash-4.1$ cd /usr/local/mysql
-bash-4.1$ ./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306
-bash-4.1$ cp /usr/local/mysql/support-files/my-default.cnf  /etc/my.cnf
-bash-4.1$ vi /etc/my.cnf
[client]
port = 3306
socket = /data/3306/mysql.sock
default-character-set = utf8

[mysqld]
port = 3306
user = mysql
socket = /data/3306/mysql.sock
pid-file = /data/3306/mysql.pid
basedir = /usr/local/mysql
datadir = /data/3306
log-bin = /data/3306/mysql-bin
lower_case_table_names=1
max_connections=1000
character_set_server=utf8
character_set_client=utf8

[mysql]
default-character-set=utf8
[root@localhost mysql]# cd /usr/local/mysql
[root@localhost mysql]# cp support-files/mysql.server  /etc/rc.d/init.d/mysqld
[root@localhost mysql]# chmod 777 /etc/rc.d/init.d/mysqld
[root@CentOS mysql]# service mysqld start
Starting MySQL.....                                        [確定]
[root@CentOS mysql]# netstat -tulnp | grep mysql
tcp        0      0 :::3306                     :::*                        LISTEN      2057/mysqld         
[root@CentOS mysql]# service mysqld status
MySQL running (2057)                                       [確定]
[root@CentOS mysql]# service mysqld stop
Shutting down MySQL..                                      [確定]
##上面所做的操作,在所有服務器上面都要執(zhí)行!由于我是虛擬機,就是做一遍,其它的復制。
#管理節(jié)點,其實不需要mysqld二進制文件,只需要MySQL Cluster服務端程序(ndb_mgmd)和監(jiān)聽客戶端程度(ndb_mgm)。
##這里因為是克隆的虛擬機,就一起在管理節(jié)點上面也安裝了mysqld服務,但后面配置就不會再提到要配置它的地方了。

##管理節(jié)點配置步驟
##在mysql用戶下面執(zhí)行!
(1)在服務器10.10.10.9 的/data下創(chuàng)建目錄mysql-cluster,并在目錄中創(chuàng)建配置文件config.ini。
-bash-4.1$ cd /data/
-bash-4.1$ mkdir mysql-cluster
-bash-4.1$ cd mysql-cluster/
-bash-4.1$ touch config.ini
(2)根據(jù)這里的測試集群環(huán)境,config.ini 文件配置如下:
-bash-4.1$ vi config.ini
##配置文件里面的配置,在等號兩邊最好加上空格,本人在這里是吃了大虧,耽誤了大量的時間、精力。
##一度以為沒有是哪里沒有配對,結(jié)果后來最終發(fā)現(xiàn)還是配置文件的問題導致后面啟不來!
[ndbd default]
noofreplicas = 1   #每個數(shù)據(jù)節(jié)點的鏡像數(shù)量
datamemory = 50M   #每個數(shù)據(jù)節(jié)點中給數(shù)據(jù)分配的內(nèi)存(這個M一定要大寫)
indexmemory = 20M  #每個數(shù)據(jù)節(jié)點中給索引分配的內(nèi)存

[ndb_mgmd]
#配置管理節(jié)點
hostname = 10.10.10.9   #管理節(jié)點IP
datadir = /data/mysql-cluster  #管理節(jié)點數(shù)據(jù)目錄,管理節(jié)點啟動成功后在該目錄下面會存在很多日志信息等。

[ndbd]
hostname = 10.10.10.10  ##指定data節(jié)點選項
datadir = /data/mysql-cluster/data

[ndbd]
hostname = 10.10.10.11  ##指定data節(jié)點選項
datadir = /data/mysql-cluster/data

[mysqld]
hostname = 10.10.10.10  ##指定sql節(jié)點選項

[mysqld]
hostname = 10.10.10.11  ##指定sql節(jié)點選項

上面的配置文件中,包括很多的組,組名用“[]”括起來,這里我們最關(guān)心的是3 類節(jié)點組的配置,分別定義如下。
? [NDB_MGMD]:表示管理節(jié)點的配置,只能有一個。
? [NDBD DEFAULT]:表示每個數(shù)據(jù)節(jié)點的默認配置,在每個節(jié)點的[NDBD]中不用再寫這些選項。只能有一個。
? [NDBD]:表示每個數(shù)據(jù)節(jié)點的配置,可以有多個。
? [MYSQLD]:表示SQL 節(jié)點的配置,可以有多個,分別寫上不同SQL 節(jié)點的IP 地址;也可以不用寫IP 地址,只保留一個空節(jié)點,表示任意一個IP 地址都可以進行訪問。此節(jié)點的個數(shù)表明了可以用來連接數(shù)據(jù)節(jié)點的SQL 節(jié)點總數(shù)。
每個節(jié)點都要有一個獨立的id 號,可以手工填寫,比如“id=2”,也可以不寫,系統(tǒng)會按照配置文件的填寫順序自動分配。

##SQL 節(jié)點和Data 節(jié)點的配置
#SQL節(jié)點,可以將之視為傳統(tǒng)的MySQL Server。Data節(jié)點,也是一個MySQL Server,并在my.cnf中指定少數(shù)幾個參數(shù)即可。
##這里由于環(huán)境限制,SQL 節(jié)點和Data 節(jié)點的是放在同一臺虛擬機上面的,環(huán)境中其實也僅僅安裝了一個mysqld服務。后面提到的修改my.cnf配置,就是這個。
##網(wǎng)上很多地方都提到SQL 節(jié)點和Data 節(jié)點跟普通的mysqld服務沒上面區(qū)別,要把普通的mysqld變?yōu)镾QL 節(jié)點和Data 節(jié)點只需要在my.cnf配置里面添加少數(shù)幾個參數(shù)即可。
##但我還是不太明白,后面啟動Data 節(jié)點并沒有用到任何mysqld相關(guān)的大小,所以我理解,其實Data 節(jié)點也是不需要安裝mysqld服務的。需要bin里面的命令。
##在mysql用戶下面執(zhí)行!在10.10.10.10和10.10.10.11上面都要做!
SQL 節(jié)點和數(shù)據(jù)節(jié)點的配置非常簡單,只需要在對MySQL 的配置文件(my.cnf)中增加如下內(nèi)容即可(參數(shù)含義見后面注釋):
[root@CentOS ~]# chown mysql:mysql /etc/my.cnf 
[root@CentOS ~]# su - mysql
-bash-4.1$ vi /etc/my.cnf 
[mysqld]
ndbcluster                   #運行NDB 存儲引擎
ndb-connectstring=10.10.10.9 #定位管理節(jié)點

[mysql_cluster]
ndb-connectstring=10.10.10.9 #定位管理節(jié)點

[mysqld_safe]
log-error = /data/mysql-cluster/data/mysqld.log
pid-file = /data/mysql-cluster/data/mysqld.pid
##創(chuàng)建目錄
-bash-4.1$ mkdir -p /data/mysql-cluster/data

##Cluster 的啟動
Cluster 需要各個節(jié)點都進行啟動后才可以運行,節(jié)點的啟動順序為管理節(jié)點 -> 數(shù)據(jù)節(jié)點 -> SQL 節(jié)點。
(1)在管理節(jié)點上,從系統(tǒng)shell 發(fā)出下述命令以啟動管理節(jié)點進程:(10.10.10.9)
-bash-4.1$ pwd
/data/mysql-cluster
-bash-4.1$ ndb_mgmd -f ./config.ini
MySQL Cluster Management Server mysql-5.6.27 ndb-7.4.8
-bash-4.1$ ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 (not connected, accepting connect from 10.10.10.10)  ##可以看見未連接(not connected),這是因為還沒有啟動
id=3 (not connected, accepting connect from 10.10.10.11)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @10.10.10.9  (mysql-5.6.27 ndb-7.4.8)

[mysqld(API)] 2 node(s)
id=4 (not connected, accepting connect from 10.10.10.10)  ##可以看見未連接(not connected),這是因為還沒有啟動
id=5 (not connected, accepting connect from 10.10.10.11)

ndb_mgm> exit
-bash-4.1$ ps -ef | grep ndb
mysql     2312  1785  0 18:58 pts/1    00:00:00 ndb_mgm
mysql     2457     1  0 19:24 ?        00:00:03 ndb_mgmd -f ./config.ini
mysql     2495  1595  0 19:31 pts/0    00:00:00 grep ndb

(2)在每臺數(shù)據(jù)節(jié)點服務器上(本例為10.10.10.10 和10.10.10.11),運行下述命令啟動ndbd 進程:
ndbd 進程是使用NDB 存儲引擎處理表中數(shù)據(jù)的進程。通過該進程,存儲節(jié)點能夠?qū)崿F(xiàn)分布式事務管理、節(jié)點恢復、在線備份等相關(guān)的任務。
注意:僅應在首次啟動ndbd 時,或在備份/恢復或配置變化后重啟ndbd 時使用“--initial”參數(shù),這很重要。原因在于,該參數(shù)會使節(jié)點刪除由早期ndbd 實例創(chuàng)建的、用于恢復的任何文件,包括恢復用日志文件。
-bash-4.1$ ndbd --initial   ##10.10.10.10
2015-12-19 01:29:05 [ndbd] INFO     -- Angel connected to '10.10.10.9:1186'
2015-12-19 01:29:05 [ndbd] INFO     -- Angel allocated nodeid: 2
-bash-4.1$ ndbd --initial   ##10.10.10.11
2015-12-19 01:37:36 [ndbd] INFO     -- Angel connected to '10.10.10.9:1186'
2015-12-19 01:37:36 [ndbd] INFO     -- Angel allocated nodeid: 3

(3)依次啟動SQL 節(jié)點上的MySQL 服務(本例為10.10.10.10 和10.10.10.11)。
-bash-4.1$ service mysqld start
也可以用:-bash-4.1$ mysqld_safe  --defaults-file=/etc/my.cnf 2>&1 > /dev/null &

(4)節(jié)點全部成功啟動后,用ndb_mgm 工具的show 命令查看集群狀態(tài):
##ndb_mgm 工具是ndb_mgmd(MySQL Cluster Server)的客戶端管理工具,通過它可以方便地檢查Cluster 的狀態(tài)、啟動備份、關(guān)閉Cluster 等功能。
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @10.10.10.10  (mysql-5.6.27 ndb-7.4.8, Nodegroup: 0, *)
id=3 @10.10.10.11  (mysql-5.6.27 ndb-7.4.8, Nodegroup: 1)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @10.10.10.9  (mysql-5.6.27 ndb-7.4.8)

[mysqld(API)] 2 node(s)
id=4 @10.10.10.10  (mysql-5.6.27 ndb-7.4.8)
id=5 @10.10.10.11  (mysql-5.6.27 ndb-7.4.8)

##測試 MySQL Cluster 
##上文提到過,如果要使用Cluster,則表的存儲引擎必須為NDB,其他類型存儲引擎的數(shù)據(jù)將不會保存到數(shù)據(jù)節(jié)點中。
1.NDB 存儲引擎測試
(1)在任意一個SQL 節(jié)點(這里用10.10.10.10)的test 庫中創(chuàng)建測試表t1,設(shè)置存儲引擎為NDB,并插入兩條測試數(shù)據(jù):
mysql> create table t1(id int) engine=ndb;
mysql> insert into t1 values(1);
mysql> insert into t1 values(2);
(2)在另外一個SQL 節(jié)點(10.10.10.11),查詢test 庫中的t1 表,結(jié)果如下:
mysql> select * from t1;    ##顯然,兩個SQL 節(jié)點查詢到的數(shù)據(jù)是一致的。
(3)在SQL 節(jié)點10.10.10.10 上將測試表t1 的存儲引擎改為MyISAM,再次插入測試記錄:
mysql> alter table t1 engine=myisam;
mysql> insert into t1 values(3);
(4)在SQL 節(jié)點10.10.10.11 上再次查詢表t1,結(jié)果如下:
mysql> select * from t1;  ##可以發(fā)現(xiàn),表t1 已經(jīng)無法查詢。
ERROR 1146 (42S02): Table 'test.t1' doesn't exist
(5)在SQL 節(jié)點10.10.10.10 上再次將t1 的存儲引擎改為NDB:
mysql> alter table t1 engine=ndb;
(6)在SQL 節(jié)點10.10.10.11 上再次查詢,結(jié)果如下:
mysql> select * from t1;
+------+
| id   |
+------+
|    2 |
|    3 |
|    1 |
+------+
3 rows in set (0.01 sec)
##顯然,表t1 的數(shù)據(jù)被再次同步到了數(shù)據(jù)節(jié)點。所有SQL 節(jié)點又都可以正常查詢數(shù)據(jù)。
##其實可以發(fā)現(xiàn),數(shù)據(jù)文件還是存放在mysqld的datadir目錄里面;而前面指定的“/data/mysql-cluster/data”這些目錄放的是集群相關(guān)的東西。

2.單點故障測試——SQL 節(jié)點發(fā)生單點故障。
(1)將SQL 節(jié)點10.10.10.10 上的MySQL 服務停止。
-bash-4.1$ mysqladmin -uroot -p shutdown
(2)查看一下Cluster 的狀態(tài)。
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @10.10.10.10  (mysql-5.6.27 ndb-7.4.8, Nodegroup: 0, *)
id=3 @10.10.10.11  (mysql-5.6.27 ndb-7.4.8, Nodegroup: 1)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @10.10.10.9  (mysql-5.6.27 ndb-7.4.8)

[mysqld(API)] 2 node(s)
id=4 (not connected, accepting connect from 10.10.10.10)
id=5 @10.10.10.11  (mysql-5.6.27 ndb-7.4.8)
(3)從節(jié)點10.10.10.11 上查看表t1,結(jié)果如下。
mysql> select * from t1;
+------+
| id   |
+------+
|    2 |
|    3 |
|    1 |
+------+
3 rows in set (0.01 sec)

##關(guān)閉MySQL Cluster 
Cluster 的關(guān)閉命令很簡單,只需要在shell 下執(zhí)行如下命令即可:-bash-4.1$ ndb_mgm -e shutdown
也可以用ndb_mgm 工具進入管理界面后,使用shutdown 命令關(guān)閉:ndb_mgm> shutdown
然后再其它節(jié)點上關(guān)閉mysqld:-bash-4.1$ service mysqld stop
或者:mysqladmin -uroot -p shutdown

##日志管理
MySQL Cluster 提供了兩種日志,分別是集群日志(clusterlog)和節(jié)點日志(node log)。前者記錄了所有Cluster 節(jié)點生成的日志,后者僅僅記錄了數(shù)據(jù)節(jié)點的本地事件。在大多數(shù)情況下,我們都推薦使用集群日志,因為它在一個地方記錄了所有節(jié)點的數(shù)據(jù),更便于進行管理。
clusterlog 一般記錄在和配置文件( config.ini ) 同一個目錄下, 文件名格式為ndb__cluster.log,其中nodeid 為管理節(jié)點號。
可以使用ndb_mgm 客戶端管理工具打開或者關(guān)閉日志,具體操作如下。
(1)在shell 中執(zhí)行ndb_mgm 命令。
-bash-4.1$ ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> 
(2)執(zhí)行clusterlog info 命令查看當前日志狀態(tài)。
ndb_mgm> clusterlog info
Connected to Management Server at: localhost:1186
Severities enabled: INFO WARNING ERROR CRITICAL ALERT 
(3)當前日志是打開的,用clusterlog off 命令關(guān)閉日志。
ndb_mgm> clusterlog off
Cluster logging is disabled
(4)再次查看日志狀態(tài),發(fā)現(xiàn)已經(jīng)關(guān)閉。
ndb_mgm> clusterlog info
Cluster logging is disabled.
(5)執(zhí)行clusterlog on 命令將再次打開日志。
ndb_mgm> clusterlog on
Cluster logging is enabled.
ndb_mgm> clusterlog info
Severities enabled: INFO WARNING ERROR CRITICAL ALERT 

感謝各位的閱讀,以上就是“怎么配置MySQL Cluster”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對怎么配置MySQL Cluster這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI