如何在CentOS 7上安裝和配置MySQL Cluster
翻譯&轉載:https://www.howtoforge.com/tutorial/how-to-install-and-configure-mysql-cluster-on-centos-7/
如何在CentOS 7上安裝和配置MySQL Cluster
MySQL Cluster旨在提供具有高可用性和低延遲的MySQL相容資料庫。MySQL Cluster技術通過NDB(網路資料庫)和NDBCLUSTER儲存引擎實現,併為MySQL資料庫系統提供無共享群集和自動分片。在無共享架構中,每個節點都有自己的記憶體和磁碟,不建議和支援使用NFS,SAN等共享儲存。
要實現MySQL Cluster,我們必須安裝三種類型的節點。每個節點型別將安裝在它自己的伺服器上。元件是:
1. 管理節點 - NDB_MGMD / MGM
群集管理伺服器用於管理群集的其他節點。我們可以從管理節點建立和配置群集上的新節點,重新啟動,刪除或備份節點。
2. 資料節點 - NDBD / NDB
這是在節點之間進行同步和資料複製的過程的層。
3. SQL節點 - MySQLD / API
應用程式用於連線資料庫叢集的介面伺服器。
在本教程中,我將指導您通過centOS 7安裝和配置MySQL Cluster。我們將配置管理節點,兩個資料節點和兩個SQL節點。
先決條件
- 作業系統是CentOS 7 - 64位。
- 5臺CentOS伺服器或虛擬機器。我將使用主機名和IP地址,如下所示:
- 管理節點
db1 = 192.168.1.120 - 資料節點
db2 = 192.168.1.121
db3 = 192.168.1.122 - SQL節點
db4 = 192.168.1.123
db5 = 192.168.1.124
# RedHat/Fedora等配置IP,注意您的網絡卡介面名不一定叫 enp0s3
$ sudo vim /etc/sysconfig/network-script/ifcfg-enp0s3
[email protected]:~
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPADDR=192.168.1.200
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=114.114.114.114
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s3
UUID=1a9d5bc7-e303-4164-b75c-ed9bc0da090b
DEVICE=enp0s3
ONBOOT=yes
ZONE=public
~
# 配置完IP後,需要重啟網路
$ su
# systemctl restart network
第1步 - 設定管理節點
第一步是使用CentOS 7 db1和IP 192.168.1.120建立“管理節點” 。確保以root使用者身份登入db1伺服器。
A.下載MySQL Cluster軟體
我將使用wget從MySQL站點下載它。我在這裡使用的是“Red Hat Enterprise Linux 7 / Oracle Linux 7(x86,64位),RPM Bundle”,它與CentOS 7相容。然後解壓縮tar檔案。
cd ~
wget http://dev.mysql.com/get/Downloads/MySQL-Cluster-7.4/MySQL-Cluster-gpl-7.4.10-1.el7.x86_64.rpm-bundle.tar
tar -xvf MySQL-Cluster-gpl-7.4.10-1.el7.x86_64.rpm-bundle.tar
B.安裝和刪除軟體包
在安裝MySQL Cluster的rpm包之前,需要安裝MySQL-Cluster伺服器所需的perl-Data-Dumper。 在我們安裝MySQL Cluster之前你需要刪除mariadb-libs。
yum -y install perl-Data-Dumper
yum -y remove mariadb-libs
C.安裝MySQL Cluster
使用以下rpm命令安裝MySQL Cluster軟體包:
cd ~
rpm -Uvh MySQL-Cluster-client-gpl-7.4.10-1.el7.x86_64.rpm
rpm -Uvh MySQL-Cluster-server-gpl-7.4.10-1.el7.x86_64.rpm
rpm -Uvh MySQL-Cluster-shared-gpl-7.4.10-1.el7.x86_64.rpm
確保沒有錯誤。
D.配置MySQL群集
為配置檔案建立新目錄。我將使用“/ var / lib / mysql-cluster”目錄。
mkdir -p /var/lib/mysql-cluster
然後在mysql-cluster目錄中為名為“ config.ini ” 的叢集管理建立新的配置檔案。
cd /var/lib/mysql-cluster
vi config.ini
貼上以下配置:
[ndb_mgmd default]
# Directory for MGM node log files
DataDir=/var/lib/mysql-cluster
[ndb_mgmd]
#Management Node db1
HostName=192.168.1.120
[ndbd default]
NoOfReplicas=2 # Number of replicas
DataMemory=256M # Memory allocate for data storage
IndexMemory=128M # Memory allocate for index storage
#Directory for Data Node
DataDir=/var/lib/mysql-cluster
[ndbd]
#Data Node db2
HostName=192.168.1.121
[ndbd]
#Data Node db3
HostName=192.168.1.122
[mysqld]
#SQL Node db4
HostName=192.168.1.123
[mysqld]
#SQL Node db5
HostName=192.168.1.124
儲存檔案並退出。
E.啟動管理節點
接下來使用以下命令啟動管理節點:
ndb_mgmd --reload --config-file=/var/lib/mysql-cluster/config.ini
# 如果啟動失敗,加上引數重啟
ndb_mgmd --reload --ndb-mgmd-host=192.168.1.200 --config-file=/var/lib/mysql-cluster/config.ini
結果應該類似於:
MySQL Cluster Management Server mysql-5.6.28 ndb-7.4.10
2016-03-22 19:26:08 [MgmtSrvr] INFO -- The default config directory '/usr/mysql-cluster' does not exist. Trying to create it...
2016-03-22 19:26:08 [MgmtSrvr] INFO -- Successfully created config directory
管理節點已啟動,現在您可以使用命令“ndb_mgm”來監視節點:
ndb_mgm
show
您可以看到管理節點已啟動:mysql-6.6和ndb-7.4。
第2步 - 設定MySQL群集資料節點
我們將使用2個CentOS伺服器作為資料節點。
- db2 = 192.168.1.121
- db3 = 192.168.1.122
A.以root使用者身份登入並下載MySQL Cluster軟體
使用ssh登入到db2伺服器:
ssh [email protected]
然後下載MySQL Cluster包並解壓縮:
cd ~
wget http://dev.mysql.com/get/Downloads/MySQL-Cluster-7.4/MySQL-Cluster-gpl-7.4.10-1.el7.x86_64.rpm-bundle.tar
tar -xvf MySQL-Cluster-gpl-7.4.10-1.el7.x86_64.rpm-bundle.tar
B.安裝和刪除軟體包
安裝perl-Data-Dumper並刪除mariadb-libs:
yum -y install perl-Data-Dumper
yum -y remove mariadb-libs
C.安裝MySQL Cluster
現在我們可以使用這些rpm命令為資料節點安裝MySQL Cluster包:
cd ~
rpm -Uvh MySQL-Cluster-client-gpl-7.4.10-1.el7.x86_64.rpm
rpm -Uvh MySQL-Cluster-server-gpl-7.4.10-1.el7.x86_64.rpm
rpm -Uvh MySQL-Cluster-shared-gpl-7.4.10-1.el7.x86_64.rpm
確保沒有錯誤。
D.配置資料節點
使用vi編輯器在/ etc目錄中建立一個新配置檔案:
vi /etc/my.cnf
貼上配置如下:
[mysqld]
ndbcluster
ndb-connectstring=192.168.1.120 # IP address of Management Node
[mysql_cluster]
ndb-connectstring=192.168.1.120 # IP address of Management Node
儲存檔案並退出。
然後為我們在管理節點配置檔案“config.ini”中定義的資料庫資料建立新目錄。
mkdir -p /var/lib/mysql-cluster
現在啟動資料節點/ ndbd:
ndbd
結果:
2016-03-22 19:35:56 [ndbd] INFO -- Angel connected to '192.168.1.120:1186'
2016-03-22 19:35:56 [ndbd] INFO -- Angel allocated nodeid: 2
資料節點db2連線到管理節點ip 192.168.1.120。
E.重做步驟2.A - 2.D在db3伺服器上。
由於我們有2個數據節點,請在我們的第二個資料節點上重做步驟2.A - 2.D。
第3步 - 設定SQL節點
此步驟包含SQL節點的設定,該節點提供對資料庫的應用程式訪問。我們為SQL節點使用2個CentOS伺服器:
- db4 = 192.168.1.123
- db5 = 192.168.1.124
A.登入並下載MySQL Cluster
以root使用者身份登入db4伺服器:
ssh [email protected]
並下載MySQL Cluster包:
cd ~
wget http://dev.mysql.com/get/Downloads/MySQL-Cluster-7.4/MySQL-Cluster-gpl-7.4.10-1.el7.x86_64.rpm-bundle.tar
tar -xvf MySQL-Cluster-gpl-7.4.10-1.el7.x86_64.rpm-bundle.tar
B.安裝和刪除軟體包
安裝perl-Data-Dumper並刪除與MySQL Cluster衝突的mariadb-lib。
yum -y install perl-Data-Dumper
yum -y remove mariadb-libs
C.安裝MySQL Cluster
使用以下rpm命令安裝MySQL Cluster伺服器,客戶端和共享軟體包:
cd ~
rpm -Uvh MySQL-Cluster-client-gpl-7.4.10-1.el7.x86_64.rpm
rpm -Uvh MySQL-Cluster-server-gpl-7.4.10-1.el7.x86_64.rpm
rpm -Uvh MySQL-Cluster-shared-gpl-7.4.10-1.el7.x86_64.rpm
D.配置SQL節點
在/ etc目錄中建立一個新的my.cnf檔案:
vi /etc/my.cnf
並在下面貼上配置:
[mysqld]
ndbcluster
ndb-connectstring=192.168.1.120 # IP address for server management node
default_storage_engine=ndbcluster # Define default Storage Engine used by MySQL
[mysql_cluster]
ndb-connectstring=192.168.1.120 # IP address for server management node
儲存檔案並退出編輯器。
通過啟動MySQL伺服器啟動SQL節點:
service mysql start
E.重做步驟3.A - 3.D在db5伺服器上。
請重做第二個SQL伺服器(db5)上的步驟3.A - 3.D。
第4步 - 監控群集
要檢視群集狀態,我們必須登入管理節點db1。
ssh [email protected]
我們可以使用ndb_mgm命令檢視叢集狀態:
ndb_mgm
ndb_mgm> show
另一個有用的命令是:
ndb_mgm -e "all status"
ndb_mgm -e "all report memory"
第5步 - 測試群集
要對我們的新MySQL叢集執行測試,我們必須登入到SQL節點db4或db5伺服器。
登入db4伺服器:
ssh [email protected]
更改儲存在根目錄中“ .mysql_secret ”檔案中的預設MySQL密碼:
cd ~
cat .mysql_secret
這是我的樣本:
# The random password set for the root user at Tue Mar 22 19:44:07 2016 (local time): qna3AwbJMuOnw23T
現在使用以下命令更改密碼:
mysql_secure_installation
鍵入舊的mysql密碼,然後鍵入新密碼,按Enter確認全部。
如果全部完成,您可以使用密碼登入MySQL shell:
mysql -u root -p
登入後,建立一個主機為“ @ ” 的新root使用者,這樣我們就可以從外部訪問MySQL。
CREATE USER 'root'@'%' IDENTIFIED BY 'aqwe123';
用您自己的安全密碼替換aqwe123! 現在,您可以在MySQL使用者列表中看到主機為“@”的新root使用者:
CREATE USER 'root'@'%' IDENTIFIED BY 'aqwe123';
並授予新的root使用者對遠端節點的讀寫訪問許可權:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD '*94CC7BF027327993D738E11...(Encrypted PASSWORD)' WITH GRANT OPTION;
現在嘗試從db4伺服器建立一個新資料庫,您也將在db5上看到該資料庫。
這只是測試群集資料複製的示例結果。
MySQL Cluster已在CentOS 7上成功安裝,具有5個伺服器節點。
測試結果:
- 在管理節點輸入 :
ndb_mgm
show
- 在Server節點192.168.1.203上建立表Test,另外Server節點192.168.1.204上也立即出現Test,在test中新增資料,另外一個節點上也都有相同資料。
結論
MySQL Cluster是一種為MySQL資料庫提供高可用性和冗餘的技術。它使用NDB或NDBCLUSTER作為儲存引擎,併為MySQL資料庫提供無共享群集和自動分片。要實現叢集,我們需要3個元件:管理節點(MGM),資料節點(NDB)和SQL節點(API)。每個節點都必須有自己的記憶體和磁碟。建議不要使用NFS等網路儲存。要在CentOS 7 minimal系統上安裝MySQL Cluster,我們必須刪除mariadb-libs包,mariadb-libs與MySQL-Cluster-server衝突,你必須安裝perl-Data-Dumper包,MySQL-Cluster需要它-伺服器。MySQL Cluster易於在多個CentOS伺服器上安裝和配置。
PS: 如果您的管理節點無法同步,其他節點不能正常連線,請把各個節點的selinux關閉,如果仍然無法連線,請繼續把各個節點的firewalld關閉,或者配置firewalld允許mysql叢集服務,配置好各個埠。